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

本教程将专注于如何基于安装了Apache服务的Ubuntu构建定制的Docker镜像。整个过程将被自动化

本教程将集中安装Apache服务如何构建基于Ubuntu的自定义图像Docker窗。 整个过程中会使用Dockerfile自动化。

使用Dockerfile构建Docker镜像

使用Dockerfile构建Docker镜像 - 第3部分

Docker窗图像可以自动生成表格文本文件,命名为Dockerfiles。 Docker文件包含用于创建和配置Docker镜像的分步指令或命令。

要求

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

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

  1. FROM =强制作为一个Docker文件第一条指令。 指示Docker拉出正在构建新图像的基础映像。 使用标记指定要建立的确切图片:
Ex: FROM ubuntu:14.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
创建Dockerfile存储库

创建Dockerfile存储库

2.接下来,开始编辑与下面的说明文件:

# vi /var/docker/ubuntu/apache/Dockerfile

Dokerfile摘录:

FROM ubuntu
MAINTAINER  your_name  <user@domain.tld>
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
Dockerfile存储库

Dockerfile存储库

现在,让我们通过文件说明:

第一行告诉我们,我们是从一个Ubuntu形象建设。 如果没有标签被提交,说14点10分为例,从Docker窗中心的最新形象时使用。

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

EXPOSE线将指示Docker窗容器上监听80端口,但端口将不提供给外界。 最后一行指示容器在容器启动后在前台运行Apache服务。

3.我们需要做的最后一件事是发出以下命令,该命令将在本地创建一个新的形象Docker命名,开始创建映像ubuntu-apache基础上,Dockerfile之前创建的,如下面的例子:

# docker build -t ubuntu-apache /var/docker/ubuntu/apache/
创建Docker镜像

创建Docker镜像

图像已经被创建Docker 4.之后,您可以列出所有可用的图像,并发出以下命令找出你的形象:

# docker images
列出所有Docker镜像

列出所有Docker镜像

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

5.为了不断(背景)运行容器,并在你的局域网主机或其它远程计算机访问容器公开服务(端口),您的主机终端提示符下运行下面的命令:

# docker run -d -p 81:80 ubuntu-apache
运行Docker容器图像

运行Docker容器图像

在这里, -d选项运行ubuntu-apache背景容器(作为守护程序)和-p选项容器港口80映射到本地主机端口81。 外LAN访问Apache服务只能通过端口81到达。

netstat命令会给你什么端口的主机监听的想法。

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

6.网页可以使用curl工具对你的机器的IP地址,本地主机或搬运工网接口上的端口81使用命令行您的主机上显示ip命令行来显示网络接口的IP地址。

# ip addr               [List nework interfaces]
# curl ip-address:81    [System Docker IP Address]
# curl localhost:81     [Localhost]
检查Docker网络接口和IP地址

检查Docker网络接口和IP地址

检查Docker Apache页面

检查Docker Apache页面

7.从您的网络访问该网页的容器,在远程位置打开一个浏览器,并使用HTTP协议,其中容器正在运行的机器的IP地址,然后是81端口下面的图片上所示。

http://ip-address:81
检查Docker容器Apache页面

检查Docker容器Apache页面

8.要得到什么进程容器发出以下命令中运行的内部:

# docker ps
# docker top <name or ID of the container>
检查运行Docker进程

检查运行Docker进程

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容器名称

给Docker容器名称

现在,您只能通过使用分配的名称来引用容器进行操作(start,stop,top,stats等)。

# docker stats my-www
监控Docker容器利用率

监控Docker容器利用率

第3步:为Docker容器创建一个系统级配置文件

11.CentOS / RHEL 7,您可以创建一个systemd配置文件和管理,你通常对任何其他本地服务做的容器。

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

# 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做一个简单的例子,但你可以预先建立一些你能火起来,在短短的以最少的资源和精力秒钟内相当复杂的应用程序。