在docker镜像的帮助下,你只能部署一个容器。然而,如果你需要从同一个镜像部署多个容器(每个容器用于不同的任务),那么会发生什么?你可以借助dockerfile来解决这个问题。
Dockerfile是一个简单的文本文件,它包含了用户可以在命令行上调用的所有命令来组装或构建一个镜像。在docker build的帮助下,你可以很容易地自动构建,连续运行dockerfile中定义的多个命令。
例如,你想从docker hub下载docker镜像,以满足你的特定开发需求。然后,你想更新镜像,为你的开发过程安装一些包。在这种情况下,你可以创建一个dockerfile,包含所有的参数,以满足你的特定需求,并构建你的自定义镜像。在创建dockerfile后,你可以反复使用它来构建相同的镜像,而不需要手动安装你的开发过程所需的所有包。
Dockerfile基本功能
在使用dockerfile之前,如果知道如何制作dockerfile是很重要的。Dockerfile包括特定的关键字,可以用来构建特定的镜像。下面列出了dockerfile中使用的所有关键字的简要解释。
FROM:用于定义基础镜像,我们将在此基础上构建镜像。
ADD:它用于向正在构建的容器中添加文件。简单来说,RUN用于运行命令并提交结果。
RUN:它用于通过安装组件向基础镜像添加镜像。
CMD:用于在容器开始时运行命令。这些命令只有在运行容器时没有指定参数时才会运行。
ENTRYPOINT:它用于在容器初始化过程中运行命令。如果要在构建镜像后自动启动容器,必须在 dockefile 中使用 ENTRYPOINT。
ENV:它用于在容器运行时定义环境变量。
EXPOSE:它用于指定监听端口,以便在运行时启用网络。
MAINTAINER:它用于指定镜像创建者的名称和电子邮件 ID。
USER:它用于指定用于运行容器的用户名。
VOLUME:它用于允许从容器访问 Docker 主机上的目录。
WORKDIR:它用于指定运行时要执行的命令的路径。
LABEL:用来给docker镜像添加标签。
创建Dockerfile
在本节中,我们将创建一个dockerfile,以从Ubuntu基本镜像构建LAMP服务器镜像。
首先,您将需要创建一个目录来存储dockerfile。您可以使用以下命令创建它:
mkdir LAMP
接下来,在目录内创建一个名为Dockerfile的目录:
nano LAMP/Dockerfile
添加以下行:

FROM ubuntu:latest
MAINTAINER Hitesh Jethva
ENV DEBIAN_FRONTEND=noninteractive
RUN apt-get update -y && apt-get install apache2 mariadb-server
libapache2-mod-php php php-cli php-common php-mysql php-json php-curl -y
CMD ["apachectl","-D","FOREGROUND"]
EXPOSE 8080


完成后,保存并关闭文件。
使用Dockerfile构建镜像
创建Dockerfile之后,您可以在Dockerfile的帮助下轻松创建自定义LAMP镜像。
首先,将目录更改为LAMP并运行以下命令以从该文件构建镜像:
cd LAMP
docker build -t "lamp:Dockerfile".
上面的命令将开始从Docker Hub下载Ubuntu最新镜像,并安装Dockerfile中指定的必要软件包。成功构建镜像后,您应该看到以下输出:

docker如何创建多个myqsl容器 多个dockerfile_docker如何创建多个myqsl容器


现在,您可以通过运行以下命令列出新生成的镜像:

docker images

现在,您已拥有一个自定义的LAMP服务器镜像。您还可以使用以下命令查看每个命令的历史记录:

docker history lamp:Dockerfile

从LAMP镜像创建容器

现在,您可以使用以下命令从镜像运行容器:

docker run -dit lamp:Dockerfile

您可以使用以下命令来验证正在运行的容器:

docker ps

在本文中,你了解了什么是Dockerfile,以及如何使用Dockerfile构建docker镜像。这对于创建你的自定义镜像非常有用,而不是将更改提交给一个改动的镜像