如何使用 Dockerfile 创建自定义 Docker 镜像

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

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

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

什么是 Dockerfile ?

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

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

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

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

Nginx Docker Image In Dockerhub

Nginx Docker Image In Dockerhub

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

    # docker pull nginx

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

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

就这样,十分简单!

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

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

理解 Dockerfile 格式

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

典型的 Dockerfile 包含如下指令:

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

例如:

    FROM ubuntu:22.04

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

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

例如:

    LABEL ENV=“DEVELOPMENT”

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

例如:

    RUN apt-get update
RUN apt-get install tomcat

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

例如:

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

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

例如:

    EXPOSE 8080

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

例如:

    MAINTAINER info@ostechnix.com

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

例如:

    ENV DB_NAME=”MySQL”
ENV DB_VERSION=”8.0”

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

例如:

    COPY /target/devops.jar devops.jar

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

例如:

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

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

例如:

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

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

例如:

    VOLUME /app/devops

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

例如:

    USER dhruv
USER admin

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

例如:

    WORKDIR /var/lib/

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

    FROM ubuntu:latest
MAINTAINER Senthilkumar Palani "info@ostechnix.com"
RUN apt-get install -y software-properties-common python
RUN add-apt-repository ppa:chris-lea/node.js
RUN echo "deb http://us.archive.ubuntu.com/ubuntu/ jammy universe" >>
/etc/apt/sources.list
RUN apt-get update
RUN apt-get install -y nodejs
RUN mkdir /var/www
ADD app.js /var/www/app.js
CMD ["/usr/bin/node", "/var/www/app.js"]

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

创建一个 Dockerfile

创建一个名为dockerfile的文件:

    # nano dockerfile

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

    FROM alpine
RUN apk update
RUN apk add vim
RUN apk add curl

Dockerfile For Alpine Linux

Dockerfile For Alpine Linux

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

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

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

使用 Dockerfile 创建 Docker 镜像

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

    # docker build -t alpine .

请注意最后有一个点(.)。

输出示例:

    [+] Building 51.2s (8/8) FINISHED                                               
=> [internal] load build definition from Dockerfile 0.1s
=> => transferring dockerfile: 104B 0.0s
=> [internal] load .dockerignore 0.1s
=> => transferring context: 2B 0.0s
=> [internal] load metadata for docker.io/library/alpine:latest 38.8s
=> [1/4] FROM docker.io/library/alpine@sha256:7580ece7963bfa863801466c0a 2.7s
=> => resolve docker.io/library/alpine@sha256:7580ece7963bfa863801466c0a 0.0s
=> => sha256:d7d3d98c851ff3a95dbcb70ce09d186c9aaf7e25d48 1.47kB / 1.47kB 0.0s
=> => sha256:530afca65e2ea04227630ae746e0c85b2bd1a179379 2.80MB / 2.80MB 2.4s
=> => sha256:7580ece7963bfa863801466c0a488f11c86f85d9988 1.64kB / 1.64kB 0.0s
=> => sha256:9b2a28eb47540823042a2ba401386845089bb7b62a9637d 528B / 528B 0.0s
=> => extracting sha256:530afca65e2ea04227630ae746e0c85b2bd1a179379cbf2b 0.2s
=> [2/4] RUN apk update 4.3s
=> [3/4] RUN apk add vim 3.5s
=> [4/4] RUN apk add curl 1.3s
=> exporting to image 0.4s
=> => exporting layers 0.4s
=> => writing image sha256:14231deceb6e8e6105d2e551799ff174c184e8d9be8af 0.0s
=> => naming to docker.io/library/alpine 0.0s

Use 'docker scan' to run Snyk tests against images to find vulnerabilities and learn how to fix them

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

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

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

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

    # docker run -it alpine

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

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

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

View Containers In Docker Desktop

View Containers In Docker Desktop

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

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

©本文为清一色官方代发,观点仅代表作者本人,与清一色无关。清一色对文中陈述、观点判断保持中立,不对所包含内容的准确性、可靠性或完整性提供任何明示或暗示的保证。本文不作为投资理财建议,请读者仅作参考,并请自行承担全部责任。文中部分文字/图片/视频/音频等来源于网络,如侵犯到著作权人的权利,请与我们联系(微信/QQ:1074760229)。转载请注明出处:清一色财经

(0)
打赏 微信扫码打赏 微信扫码打赏 支付宝扫码打赏 支付宝扫码打赏
清一色的头像清一色管理团队
上一篇 2023年5月6日 09:59
下一篇 2023年5月6日 09:59

相关推荐

发表评论

登录后才能评论

联系我们

在线咨询:1643011589-QQbutton

手机:13798586780

QQ/微信:1074760229

QQ群:551893940

工作时间:工作日9:00-18:00,节假日休息

关注微信