Docker容器运行并对图像进行了更改。通常,我们使用现有的图像,这就像一个模板来创建一个新的容器。许多Linux发行版和软件都提供服务Docker映像。但在某些情况下,我们可能需要创建或增强现有的图像。Dockerfile可以通过提供有关新图像的说明来创建新图像。
Dockerfile文件
Dockerfile是一个简单的文本文件,包含将要创建的Docker映像的配置。Dockerfile包含用于更改图像属性的Dockerfile命令。我们也可以将Dockerfile称为图像的配方。
这是一个简单而精巧的Dockerfile。这个文件简单地从当前和最新的ubuntudocker映像派生基本映像,然后更新现有的包。更新完成后 apache2
软件包正在安装。一般来说,Dockerfile比这个例子更复杂,我们将在下面看到。
#This is a sample Image FROM ubuntu MAINTAINER [email protected] RUN apt-get update RUN apt-get install –y apache2

构建Dockerfile并创建新映像
我们将从简单的步骤开始,在这里我们将构建前面给出的Dockerfile示例。此生成将使用 -t
选择 docker build
命令 poftut1
.
$ mkdir poftut1$ cd poftut1/$ vim Dockerfile
使用示例内容创建DockerFile后,我们可以使用 docker build
命令。我们将需要sudo,因为当前用户没有足够的权限创建Docker映像,因此我们得到 root
特权。
$ sudo docker build -t poftut1 .

我们可以从给定的Dockerfile图像中看到,指令是逐行执行的。
- 第一步是打基础
ubuntu
形象 - 第二步是设置维护人员信息
- 步骤3正在运行
apt-get update
命令 - 第4步是安装
apache2
具有apt
包管理器。
运行并使用Docker映像
我们可以使用这个名为 poftut1
比如一个普通的图像 ubuntu
. 我们将从中创建一个新容器 poftut1
图像 docker run
命令。
$ sudo docker run -t -i poftut1 bash

Dockerfile命令
到目前为止,我们已经学会了用 Dockerfile
. 有很多不同的Dockerfile命令可以用来运行命令、创建文件、创建元数据、复制文件等。
添加–将文件从本地系统复制到映像中
Add是一个非常有用的命令,用于从docker运行到图像文件的本地系统复制文件和文件夹。这可用于复制特殊配置、复制应用程序或数据。 我们也可以使用URL作为[SOURCE DIRECTORY],比如 https://www.poftut.com/data
相关文章: 如何在Ubuntu上安装Kubernetes 1.4
语法
ADD [SOURCE DIRECTORY] [DESTINATION DIRECTORY]
在本例中,我们将复制 httpd.conf
文件到图像中 /etc/httpd/httpd.conf
.
ADD httpd.conf /etc/httpd/httpd.conf
ARG–提供构建时参数
如果我们想在构建时以键值格式提供一些参数,我们可以使用 ARG
指令。这个论点提供了 build
命令。如果我们想使用默认值,我们可以用 ARG
指令。
语法
ARG [NAME] [=DEFAULT VALUE]
在本例中,我们将设置构建时参数 VERSION
使用默认值 18.10
ARG VERSION="18.01"
CMD–在容器开始时运行命令
CMD
是另一个有用的命令,用于在容器开头运行命令。 CMD
不会在映像生成期间运行。创建新容器时,将运行此命令。
语法
CMD [COMMAND] [ARGUMENT1] [ARGUMENT2]
在本例中,我们希望在从该图像创建新容器时将Hello Poftut打印到终端。命令将是 echo
而争论1将是 "Hello Poftut"
CMD "echo" "Hello Poftut"
入口点–在前台运行单个命令
ENTRYPOINT
用于设置在容器启动时在前台运行的单个命令。例如,如果我们想将web服务器作为容器运行,我们可以将web服务器守护进程设置为入口点。
语法
ENTRYPOINT [COMMAND]
在这个例子中,我们将开始 httpd
容器启动时的命令。
ENTRYPOINT /bin/httpd
ENV–在键值中设置环境变量
ENV
命令可以在Dockerfile中使用,以便设置相关的图像环境变量,如键值对。这可以像数据库或与图像的通信通道一样使用。
相关文章: 什么是Docker注册表?如何使用它?
语法
ENV [KEY] [VALUE]
在本例中,我们将设置线程计数,该计数将由守护程序服务用作环境变量。
ENV THREADS 20
EXPOSE–将主机端口重定向到容器端口
EXPOSE
用于将容器端口重定向到它运行的本地系统端口。例如,如果在容器TCP端口80中运行web服务器,并且希望使用本地系统端口80,则可以使用EXPOSE。
语法
EXPOSE [PORT]
在本例中,我们将把端口8080重定向到本地系统端口。
EXPOSE 8080
FROM–使用给定的基本图像
FROM
用于为创建的图像设置基础图像。这是一个非常重要的命令,因为它将从现有图像创建基本图像,如 ubuntu
, centos
等。将在本地系统中搜索基本图像并 码头中心 .
语法
FROM [IMAGE NAME]
在本例中,我们将使用Docker Hub中的CentOS图像。
FROM centos
如果需要,还可以指定图像的版本,如 ubuntu18.10
等。
FROM ubuntu18.10
MAINTAINER–设置作者信息或图像元数据
MAINTAINER
用于设置诸如作者姓名、电子邮件等信息。我们可以简单地为容器设置一些信息性数据。这些信息就像编程语言中的注释。
语法
MAINTAINER [NAME]
在本例中,我们将设置作者电子邮件 [email protected]
MAINTAINER [email protected]
RUN–生成映像期间的RUN命令
在建立形象的过程中,我们需要采取一些行动。这些行动可以通过 RUN
命令。例如,我们可以安装一个带有 apt
命令 ubuntu
形象。
相关文章: 如何在Linux下创建、启动、停止、管理Docker容器?
语法
RUN [COMMAND]
在本例中,我们将安装 apache2
打包然后删除缓存文件。
RUN apt updateRUN apt install apache2RUN apt autoremove
用户–设置用户名
这个 USER
指令可用于设置运行映像的UID或username。
语法
USER [UID or USERNAME]
在本例中,我们将用户名设置为 ismail
USER ismail
卷–将本地系统目录装载到容器中
在某些情况下,我们可能需要将本地系统路径或目录装载到正在运行的容器中。我们可以用 VOLUME
指令以装入本地系统路径 /home/ismail
进入运行容器给定的路径,如 /myhome
等。
语法
VOLUME [LOCAL SYSTEM PATH] [CONTAINER PATH]
在本例中,我们将挂载本地路径 /home/ismail
进入容器路径 /myhome
将自动创建。
VOLUME /home/ismail /myhome
WORKDIR–更改或设置当前工作目录
由于我们可以在构建映像的过程中运行命令,我们可能还需要更改工作目录,这可能会影响命令的执行。我们将使用 WORKDIR
更改当前工作目录。
语法
WORKDIR [PATH]
在这个例子中,我们将设置 /tmp
作为当前工作目录
WORKDIR /tmp