一份全面详尽的 Docker 入门指南,您可以直接复制粘贴——Dockerfile 和 Docker 构建版本

大家好,
我是Mandai,Wild团队负责开发工作的成员。
作为“用复制粘贴就能完成的 Docker 操作”系列的第二部分,我们将尝试运行 `docker build` 命令。
一旦你能够运行 `docker build`,
- 您可以通过修改现有的 Docker 镜像来创建新的 Docker 镜像。
- 创建类似的 Docker 镜像时,如果存在一个基础 Docker 镜像,则过程会更加容易。
- 如果是虚拟机镜像,打包好的镜像将使用 Vagrant 进行分发;但如果是 Docker 镜像,则只会分发 Dockerfile 和要放入 Docker 容器中的文件。
其优势包括:
第一部分在这里 → PHP 版本升级问题已解决!您可以通过复制粘贴学习 Docker 基础知识
那么,我们开始吧。
使用 docker build 命令来构建 Docker 镜像。
首先,在主机操作系统上创建一个目录,用于存储构建过程中使用的文件。
vagrant@vagrant:~$ mkdir docker_php7 vagrant@vagrant:~$ cd docker_php7
这一点非常重要:使用 Dockerfile 创建新的 Docker 镜像时,您无法访问 Dockerfile 所在目录之上的目录。
因此,COPY 或 ADD 命令所需的任何文件都必须放置在 Dockerfile 所在的目录或子目录中。
接下来,在主机操作系统上创建 PHP 文件,该文件将被放置在 Docker 容器中。
vagrant@vagrant:~/docker_php7$ echo "<?php phpinfo();" > info.php
接下来,创建 Dockerfile。
vagrant@vagrant:~/docker_php7$ vi Dockerfile # Dockerfile 的内容 FROM php:7.0.2-apache # 执行 docker build 时指定基础 Docker 镜像(必需) MAINTAINER Y.Mandai Beyond Inc. # Dockerfile 维护者信息(可选) COPY info.php /var/www/html/ # 将 info.php 复制到容器的 /var/www/html/ 目录 EXPOSE 80 # 将容器的 80 端口对外开放(以便主机操作系统可以访问)
php:7.0-apache 的 Dockerfile查看
,其中构建容器的命令包含了如何在容器内编译 PHP 的步骤,这非常有用。
以此为参考,您可以创建一个包含多字节相关扩展模块的 Docker 镜像。
现在,让我们使用 Docker build 创建一个 Docker 镜像。
vagrant@vagrant:~/docker_php7$ docker build -t addinfo .向 Docker 守护进程发送构建上下文 3.072 kB 步骤 1:FROM php:7.0.2-apache ---> 797e8c22cdde 步骤 2:MAINTAINER Y.Mandai Beyond Inc. ---> 运行于 49c22633979a ---> 8550f12577fd 移除中间容器 49c22633979a 步骤 3:COPY info.php /var/www/html/ ---> 9e143b3f9df5 移除中间容器 b70897d9000e 步骤 4:EXPOSE 80 ---> 运行于 31b54ea14f9f ---> 38445ad62923 移除中间容器 31b54ea14f9f
-t 选项设置 Docker 镜像的名称,最后的“.”指定 Dockerfile 的路径。
docker build -t addinfo:hogehoge .
你也可以使用标签 hogehoge 创建它。
让我们用 docker images 命令来检查一下。
vagrant@vagrant:~/docker_php7$ docker images REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE addinfo latest 31b54ea14f9f 大约一小时前 521 MB php 7.0.2-apache 797e8c22cdde 5周前 521 MB
现在我们已经创建了一个新的 Docker 镜像,接下来我们将从中创建一个 Docker 容器。
vagrant@vagrant:~/docker_php7$ docker run -d -p 8080:80 addinfo 862db6201b865a12415d4602219b03714605e0a89f2fa3076ae2161cf271d666
现在我们已经将容器上的 80 端口映射到主机操作系统上的 8080 端口,让我们检查一下是否可以从主机端使用 curl 执行 info.php。
vagrant@vagrant:~/docker_php7$ curl http://localhost:8080/info.php
如果显示了 phpinfo() 的内容,则说明实验成功了!
就这样。
1
