Docker 构建镜像

构建 Docker 镜像的指令是 docker build,另外还需要制作一个包含构建指令的 Dockerfile 脚本文件。

1. 什么是 Dockerfile?

Dockerfile 是一个用来构建镜像的脚本文件,里面包含了构建镜像所需的指令。

Dockerfile 是纯文本文件,可以使用任何文件编辑器来编辑脚本内容。

2. 使用 Dockerfile 构建镜像

我们使用 Dockerfile 文件来构建一个定制的 nginx 镜像。这个镜像中,除了包含标准的 nginx 最新版本外,还会自动产生一个定制的 web 页面 index.html。

1)创建 Dockerfile 文件

在任意一个目录下,新建一个名为 Dockerfile 的文本文件,并在文件中添加以下内容:

FROM nginx
RUN echo 'This is a test page for building a Docker image' > /usr/share/nginx/html/index.html

查看新创建的 Dockerfile 文件

$ ls

执行结果:
Dockerfile

$ cat Dockerfile

执行结果:
FROM nginx
RUN echo 'This is a test page for building a Docker image' > /usr/share/nginx/html/index.html

2)FROM 和 RUN 指令

我们的 Dockerfile 文件中包含两条指令内容:FROM 和 RUN。其中:

FROM:用来指定基础镜像的名称。后面的参数 nginx 是我们要定制镜像的基础镜像。

RUN:用于在构建的镜像中执行一段命令。我们这里执行 Shell 命令 echo,并创建一个index.html文件,文件的内容是 “This is a test page for building a Docker image”。

3)构建镜像

使用 docker build 命令构建镜像。

$ docker build -t nginx:test .

执行结果:
docker build -t nginx:test .
Sending build context to Docker daemon  2.506MB
Step 1/2 : FROM nginx
 ---> 62d49f9bab67
Step 2/2 : RUN echo 'This is a test page for building a Docker image' > /usr/share/nginx/html/index.html
 ---> Running in 0060abb2fd65
 ---> 8d5bab740ff3
Removing intermediate container 0060abb2fd65
Successfully built 8d5bab740ff3
Successfully tagged nginx:test

上述指令是通过当前目录下的 Dockerfile 构建一个 nginx:test(镜像名称:镜像标签)镜像。

:最后的 . 代表本次执行的上下文路径。

4)查看构建的镜像

$ docker images

执行结果:
EPOSITORY  TAG     IMAGE ID...
nginx      test    8d5bab740ff3

我们构建的镜像已经生成。

3. 运行构建的镜像

$ docker run -p 80:80 -nginx:test 

执行结果:
/docker-entrypoint.sh: /docker-entrypoint.d/ is not empty, will attempt to perform configuration
/docker-entrypoint.sh: Looking for shell scripts in /docker-entrypoint.d/
...

我们打开浏览器访问 http://localhost,浏览器页面会输出:This is a test page for building a Docker image。这正是我们构建的新镜像的 web 首页内容。

下一章:Docker Compose

Docker Compose Compose 简介 Compose 是用于定义和运行多容器 Docker 应用程序的工具。通过 Compose,您可以使用 YML 文件来配置应用程序需要的所有服务。然后,使用一个命令,就可以从 YML 文件配置中创建并启动所有服务。 如果你还不了解 YML 文件配置,可以先阅读 YAML 入门教程。 Compose 使用的三个步骤: 使用 Dockerfile 定义应用程序的环境。 ..