网站搜索

如何使用 Dockerfile 自动构建和配置自定义 Docker 映像 - 第 3 部分


本教程将重点介绍如何基于安装了 Apache 服务的 Ubuntu 构建自定义 Docker 镜像。整个过程将使用Dockerfile自动化。

Docker 镜像可以从名为 Dockerfiles 的文本文件自动构建。 Docker 文件包含用于创建和配置 Docker 映像的分步有序指令或命令。

要求

  • 安装 Docker 并学习 Docker 容器操作 - 第 1 部分
  • 在 Docker 容器下部署和运行应用程序 - 第 2 部分

基本上,Docker 文件包含各种指令,以便根据您的要求构建和配置特定容器。以下说明是最常用的,其中一些是强制性的:

  1. FROM=强制作为 Docker 文件中的第一条指令。指示 Docker 提取要从中构建新映像的基础映像。使用标签来指定您要构建的确切图像:
Ex: FROM ubuntu:20.04
  1. MAINTAINER=构建映像的作者
  2. RUN=该指令可以在多行上使用,并在创建 Docker 映像后运行任何命令。
  3. CMD=当 Docker 镜像启动时运行任何命令。在 Dockerfile 中仅使用一条 CMD 指令。
  4. ENTRYPOINT=与 CMD 相同,但用作图像的主命令。
  5. EXPOSE=指示容器在运行时侦听网络端口。默认情况下,主机无法访问容器端口。
  6. ENV=设置容器环境变量。
  7. ADD=复制资源(文件、目录或来自 URL 的文件)。

第 1 步:创建或编写 Dockerfile 存储库

1. 首先,让我们创建某种 Dockerfile 存储库,以便将来重用文件来创建其他映像。在 /var 分区中的某个位置创建一个空目录,我们将在其中创建包含用于构建新 Docker 映像的指令的文件。

mkdir -p /var/docker/ubuntu/apache
touch /var/docker/ubuntu/apache/Dockerfile

2. 接下来,按照以下说明开始编辑文件:

vi /var/docker/ubuntu/apache/Dockerfile

Doker 文件摘录:

FROM ubuntu
MAINTAINER  your_name  <[email >
RUN apt-get -y install apache2
RUN echo “Hello Apache server on Ubuntu Docker” > /var/www/html/index.html
EXPOSE 80
CMD /usr/sbin/apache2ctl -D FOREGROUND

现在,让我们看一下文件说明:

第一行告诉我们,我们正在从 Ubuntu 映像构建。如果没有提交标签,例如14:10,则使用Docker Hub中的最新镜像。

在第二行,我们添加了图像创建者的姓名电子邮件。接下来的两行 RUN 行将在构建映像时在容器中执行,并将安装 Apache 守护进程并 echo 一些文本到默认的 apache 网页中。

EXPOSE 行将指示 Docker 容器侦听端口 80,但该端口将不可供外部使用。最后一行指示容器启动后在前台运行 Apache 服务。

3. 我们需要做的最后一件事是通过发出以下命令开始创建映像,该命令将基于以下命令在本地创建一个名为 ubuntu-apache 的新 Docker 映像:之前创建的 Dockerfile,如本例所示:

docker build -t ubuntu-apache /var/docker/ubuntu/apache/

4.Docker创建镜像后,您可以通过发出以下命令列出所有可用镜像并识别您的镜像:

docker images

步骤 2:运行容器并从 LAN 访问 Apache

5. 为了连续运行容器(在后台)并从 LAN 中的主机或其他远程计算机访问容器公开的服务(端口),请在主机终端提示符下运行以下命令:

docker run -d -p 81:80 ubuntu-apache

这里,-d选项在后台运行ubuntu-apache容器(作为守护进程),-p选项映射容器端口80 到您的本地主机端口 81。外部 LAN 对 Apache 服务的访问只能通过端口 81 进行。

Netstat 命令可以让您了解主机正在侦听哪些端口。

容器启动后,还可以运行docker ps命令来查看正在运行的容器的状态。

6. 网页可以通过命令行使用 curl 实用程序针对您的计算机 IP 地址、本地主机或端口 81 上的 docker net 接口显示在您的主机上。使用 IP 命令行显示网络接口 IP 地址。

ip addr               [List nework interfaces]
curl ip-address:81    [System Docker IP Address]
curl localhost:81     [Localhost]

7. 要从网络访问容器网页,请在远程位置打开浏览器并使用 HTTP 协议、运行容器的计算机的 IP 地址,后跟端口 81,如上图所示下图。

http://ip-address:81

8. 要了解容器内运行的进程的内部情况,请发出以下命令:

docker ps
docker top <name or ID of the container>

9. 要停止容器,请发出 docker stop 命令,后跟容器 ID 或名称。

docker stop <name or ID of the container>
docker ps

10. 如果您想为容器分配一个描述性名称,请使用 --name 选项,如下例所示:

docker run --name my-www -d -p 81:80 ubuntu-apache
docker ps

现在,您只需使用分配的名称即可引用容器进行操作(启动、停止、顶部、统计等)。

docker stats my-www

步骤3:为Docker容器创建系统范围的配置文件

11.CentOS/RHEL 上,您可以创建 systemd 配置文件并管理容器,就像通常管理任何其他本地服务一样。

例如,使用以下命令创建一个名为 apache-docker.service 的新 systemd 文件:

vi /etc/systemd/system/apache-docker.service

apache-docker.service 文件摘录:

[Unit]
Description=apache container
Requires=docker.service
After=docker.service

[Service]
Restart=always
ExecStart=/usr/bin/docker start -a my-www
ExecStop=/usr/bin/docker stop -t 2 my-www

[Install]
WantedBy=local.target

12. 编辑完文件后,关闭它,重新加载 systemd 守护进程以反映更改,并通过发出以下命令启动容器:

systemctl daemon-reload
systemctl start apache-docker.service
systemctl status apache-docker.service

这只是一个简单的示例,说明您可以使用简单的 Dockerfile 执行哪些操作,但您可以预先构建一些非常复杂的应用程序,只需花费最少的资源和精力即可在几秒钟内启动这些应用程序。

进一步阅读: