Redian新闻
>
如何使用 Dockerfile 创建自定义 Docker 镜像 | Linux 中国

如何使用 Dockerfile 创建自定义 Docker 镜像 | Linux 中国

科技
 
导读:在这份指南中,我们将看到 Dockerfile 的简要介绍以及如何在 Linux 中使用 Dockerfile 来自动的 创建自定义 Docker 镜像 。
本文字数:5816,阅读时长大约:6分钟

在这份指南中,我们将看到 Dockerfile 的简要介绍以及如何在 Linux 中使用 Dockerfile 来自动的 创建自定义 Docker 镜像 。

什么是 Dockerfile ?

Dockerfile 是附有构建 Docker 镜像说明的易于理解的文本文件。它囊括了用户在创建镜像时可以调用的所有命令。

我们可以使用 Dockerfile 创建自定义的镜像。可以通过 Docker Hub 分享的自定义 Docker 镜像。

如果你还不知道,Docker Hub 是 Docker 提供的托管存储库服务,用于团队查找和共享容器镜像,当然世界上任何人也都可以访问。

想象一下,早期如果我们想用 Nginx,我们要通过很多步骤,才能安装和配置好 Nginx 。得益于 Docker Hub ,现在我们可以在几分钟内,下载并运行 Nginx 的预置容器镜像。

Nginx Docker Image In Dockerhub

运行如下命令从 Docker Hub 上拉取 Nginx 镜像:

  1. # docker pull nginx

一旦我们拉取了 Docker 镜像,可以运行如下命令使用它:

  1. # docker run -it -d -p 8080:8080 nginx

就这样,十分简单!

参考下方链接,了解更多使用 Docker 的方式:

◈ 开始使用 Docker🔗 ostechnix.com

Docker Hub 上有超过十万个来自软件供应商、开源项目以及社区的容器镜像。

你可以从 Docker Hub 上下载你选择的镜像,并且使用上面的命令开始使用它。

理解 Dockerfile 格式

Docker 可以读取 Dockerfile 中的 指令 来自动的创建镜像。

典型的 Dockerfile 包含如下指令:

1、FROM —— 这会设置容器的基础镜像。

例如:

  1. FROM ubuntu:22.04

这会将容器的基础镜像设置为 Ubuntu 。如果 ‘22.04’ 这个标志没有特别指明,则会设为最新版本(latest)。

2、LABEL —— 这是用来明确镜像的元数据信息的键值对。

例如:

  1. LABEL ENV=“DEVELOPMENT

3、RUN —— 这会在基础镜像中执行指令并创建一个新层。

例如:

  1. RUN apt-get update
  2. RUN apt-get install tomcat

4、CMD —— 这用来设置容器启动后先执行的命令。

例如:

  1. CMD ["java", "-jar", "app.jar"]

5、EXPOSE —— 设置用于访问容器的端口。容器将会监听该端口。我们可以用来获得输出。

例如:

  1. EXPOSE 8080

6、``MAINTAINER` —— 显示创建镜像作者的信息。

例如:

  1. MAINTAINER info@ostechnix.com

7、ENV —— 用来设置环境变量的键值对。这些变量在镜像创建的时候设置,并在容器创建好后可以使用。

例如:

  1. ENV DB_NAME=”MySQL
  2. ENV DB_VERSION=”8.0

8、COPY —— 用来拷贝本地文件至容器中。

例如:

  1. COPY /target/devops.jar devops.jar

9、ADD —— 具有与拷贝相同的功能,不过更进一步还可以提取本地的 tar 文件或者从 URL 拷贝文件。

例如:

  1. ADD devops.tar.xz / .
  2. ADD http://example.com/abc.git /usr/local/devops/

10、ENTRYPOINT —— 用来设置镜像的主要命令。与 CMD 指令功能相同。不同的是 ENTRYPOINT 中的指令不会被重写。

例如:

  1. ENTRYPOINT ["java", "-jar", "app.jar"]

11、VOLUME —— 该指令用来创建指定位置的挂载点。

例如:

  1. VOLUME /app/devops

12、USER —— 将设置运行镜像并使用的用户名称以及用户组。

例如:

  1. USER dhruv
  2. USER admin

13、WORKDIR —— 这会设置工作目录。如果目录不存在,则会创建。

例如:

  1. WORKDIR /var/lib/

这是一个 Dockerfile 的样本,可以参考一下:

  1. FROM ubuntu:latest
  2. MAINTAINER Senthilkumar Palani "[email protected]"
  3. RUN apt-get install -y software-properties-common python
  4. RUN add-apt-repository ppa:chris-lea/node.js
  5. RUN echo "deb http://us.archive.ubuntu.com/ubuntu/ jammy universe" >>
  6. /etc/apt/sources.list
  7. RUN apt-get update
  8. RUN apt-get install -y nodejs
  9. RUN mkdir /var/www
  10. ADD app.js /var/www/app.js
  11. CMD ["/usr/bin/node", "/var/www/app.js"]

我将向你展示创建一个 Dockerfile 、创建并使用镜像的简单例子。

创建一个 Dockerfile

创建一个名为 dockerfile 的文件:

  1. # nano dockerfile

添加下面几行命令。我们将更新并安装 vim 和 curl 包:

  1. FROM alpine
  2. RUN apk update
  3. RUN apk add vim
  4. RUN apk add curl

Dockerfile For Alpine Linux

按下 CTRL+O 和 CTRL+X 键保存文件并关闭。

现在 Dockerfile 已经就位。让我们继续,用该 Dockerfile 创建一个镜像。

注意: 如果你在使用 Docker 桌面版🔗 ostechnix.com,你可以以一个普通用户运行 docker 命令。

使用 Dockerfile 创建 Docker 镜像

只需运行以下命令,便可以使用 Dockerfile 创建 Docker 镜像:

  1. # docker build -t alpine .

请注意最后有一个 .)。

输出示例:

  1. [+] Building 51.2s (8/8) FINISHED
  2. => [internal] load build definition from Dockerfile 0.1s
  3. => => transferring dockerfile: 104B 0.0s
  4. => [internal] load .dockerignore 0.1s
  5. => => transferring context: 2B 0.0s
  6. => [internal] load metadata for docker.io/library/alpine:latest 38.8s
  7. => [1/4] FROM docker.io/library/alpine@sha256:7580ece7963bfa863801466c0a 2.7s
  8. => => resolve docker.io/library/alpine@sha256:7580ece7963bfa863801466c0a 0.0s
  9. => => sha256:d7d3d98c851ff3a95dbcb70ce09d186c9aaf7e25d48 1.47kB / 1.47kB 0.0s
  10. => => sha256:530afca65e2ea04227630ae746e0c85b2bd1a179379 2.80MB / 2.80MB 2.4s
  11. => => sha256:7580ece7963bfa863801466c0a488f11c86f85d9988 1.64kB / 1.64kB 0.0s
  12. => => sha256:9b2a28eb47540823042a2ba401386845089bb7b62a9637d 528B / 528B 0.0s
  13. => => extracting sha256:530afca65e2ea04227630ae746e0c85b2bd1a179379cbf2b 0.2s
  14. => [2/4] RUN apk update 4.3s
  15. => [3/4] RUN apk add vim 3.5s
  16. => [4/4] RUN apk add curl 1.3s
  17. => exporting to image 0.4s
  18. => => exporting layers 0.4s
  19. => => writing image sha256:14231deceb6e8e6105d2e551799ff174c184e8d9be8af 0.0s
  20. => => naming to docker.io/library/alpine 0.0s
  21. Use 'docker scan' to run Snyk tests against images to find vulnerabilities and learn how to fix them

按照上面的命令, Docker 会通过保存在当前工作目录中的 Dockerfile 中的命令开始自动的创建镜像。还记得我们在 Dockerfile 中保存的 apk updateapk add vim 和 apk add curl 命令吗?这些命令也将会自动的执行。

如果 Dockerfile 保存在其他目录,你可以使用 -f 标志来指定路径,例如:

  1. # docker build -f /path/to/a/Dockerfile .

创建好镜像后,我们可以使用如下命令运行它:

  1. # docker run -it alpine

该命令会启动这个 Alpine 容器并连接到它。

  1. / # uname -a
  2. Linux 8890fec82de8 5.10.104-linuxkit #1 SMP Thu Mar 17 17:08:06 UTC 2022 x86_64 Linux
  3. / # cat /etc/alpine-release
  4. 3.16.1
  5. / #

如果你使用 Docker 桌面版,你可以通过容器(Containers)标签页界面来查看运行中的容器。

View Containers In Docker Desktop

这就是使用 Dockerfile 构建自定义容器映像的方式。

我们仅仅讲了基础内容。你可以用 Dockerfile 做到很多东西。建议你参考一下官方 Dockerfile 参考🔗 docs.docker.com ,以了解更多内容。


via: https://ostechnix.com/a-brief-introduction-to-dockerfile/

作者:sk 选题:lkxed 译者:Donkey 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出


LCTT 译者 :Donkey
🌟🌟🌟
翻译: 13.0 篇
|
贡献: 56 天
2022-06-09
2022-08-04
https://linux.cn/lctt/Donkey-Hao
欢迎遵照 CC-BY-SA 协议规定转载,
如需转载,请在文章下留言 “转载:公众号名称”,
我们将为您添加白名单,授权“转载文章时可以修改”。

微信扫码关注该文公众号作者

戳这里提交新闻线索和高质量文章给我们。
相关阅读
我如何从 Docker Desktop 切换到 Colima | Linux 中国微档-美国入境档案-立信会计潘序伦使用 Linux 上的开源财务工具 Skrooge 管理你的预算 | Linux 中国如何编写 C 程序在 Linux 上创建音乐播放列表 | Linux 中国使用 LaTeX 创建优美的 PDF 文件 | Linux 中国我如何使用 Groovy 分析我的音乐目录 | Linux 中国六四对中美的共同启示Linux——如何使用 evilscan 扫描网络使用 Podman Desktop 在 Fedora Linux 上管理容器 | Linux 中国李佳琦也被封,薇娅/李子柒/王思聪 一桌国粹检查 Linux 磁盘使用情况 | Linux 中国在 GNOME 中创建你自定义的浅色和深色壁纸 | Linux 中国如何在 Ubuntu/Linux 和 Windows 之间共享文件夹 | Linux 中国又有 Linux 开发者加入微软,这次是 systemd 的创建者 | Linux 中国企业为何使用开源软件,又为何推动开源软件的发展 | Linux 中国我如何使用现场 USB 设备恢复我的 Linux 系统 | Linux 中国我如何使用开源玩 RPG 游戏 | Linux 中国关于 Linux 和 Git 的创造者 Linus Torvalds 的 20 件趣事 | Linux 中国神秘的 GeckoLinux 创建者推出了一个新的 Debian 合成发行版 | Linux 中国活在当下的人Linux 下的 Docker 入门教程 | Linux 中国在 Linux 中使用 Etcher 创建可启动 USB – 下载和使用指南 | Linux 中国如何使用 Linux sed 命令自动进行文件编辑 | Linux 中国如何使用 FreeDOS Edit | Linux 中国我是如何使用 Linux fmt 命令来格式化文本 | Linux 中国哇!Torvalds 为自己的 Apple M2 Macbook 专门修改了 Fedora Linux | Linux 中国开源朗读者:我是如何帮助妈妈从 Windows 切换至 Linux 的 | Linux 中国图解 Rocky Linux 9 安装步骤 | Linux 中国如何使用原生 NTFS 驱动替代旧版 FUSE NTFS 驱动 | Linux 中国在 Linux 上使用 Bash 创建一个临时文件 | Linux 中国如何在 Linux 中使用 Pandoc 转换文件格式 | Linux 中国如何在 Linux 中使用媒体传输协议访问安卓设备的内部存储和 SD 卡 | Linux 中国如何在 Ubuntu 22.04 LTS 中安装 Docker 和 Docker Compose | Linux 中国观剧偶感(四)如何从 Windows 上用 SSH 连接到 Linux | Linux 中国
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。