一个完整的Dockerfile文件如下:
FROM centos MAINTAINER xin_yang_zhang@hotmail.com RUN yum -y update RUN yum -y install httpd EXPOSE 80 ADD index.html /var/www/html/index.html CMD ["httpd","-DFOREGROUND"]
由上可知,Dockerfile文件分为以下几个部分:
(1)基础镜像信息。
(2)维护者信息。
(3)镜像操作指令。
(4)容器启动时执行的指令。
上一张网络摘抄来的图片简要说明以上四个部分的功能和特点:
FROM
指明构建的新镜像是来自于哪个基础镜像,例如本例为centos:latest。
FROM centos:latest
MAINTAINER
指明镜像维护者的信息。
RUN
创建镜像时运行的shell命令,例如本例的:
RUN yum -y install httpd
CMD
启动容器时执行的shell命令,例如本例的:
CMD ["httpd","-DFOREGROUND"]
EXPOSE
声明容器运行的服务端口,例如本例:
EXPOSE 80
ADD
拷贝文件到镜像中,例如本例添加了apache首页。
ADD index.html /var/www/html/index.html
创建步骤:
Step1:创建目录和网页文件
[root@RHEL docker]# mkdir httpd
[root@RHEL httpd]# vi index.html
[root@RHEL httpd]# tree
.
├── Dockerfile
└── index.html
Step2:编写Dockerfile文件
FROM centos
MAINTAINER xin_yang_zhang@hotmail.com
RUN yum -y update
RUN yum -y install httpd
EXPOSE 80
ADD index.html /var/www/html/index.html
CMD ["httpd","-DFOREGROUND"]
Step3:打包镜像
[root@RHEL httpd]# docker build -t httpd:v1 .
Step4:查看打包的镜像
[root@RHEL httpd]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
httpd v1 2addebe7b7c7 25 seconds ago 412 MB
php 7.2.27 b689f74d5938 2 hours ago 678 MB
docker.io/centos latest 470671670cac 4 weeks ago 237 MB
docker.io/busybox latest 6d5fcfe5ff17 7 weeks ago 1.22 MB
docker.io/mysql 8.0.12 ee1e8adfcefb 16 months ago 484 MB
Step5:运行一个容器,验证
[root@RHEL httpd]# docker run -d -p 80:80 --name web httpd:v1
[root@RHEL httpd]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
eca3ba6b6082 httpd:v1 "httpd -DFOREGROUND" 4 seconds ago Up 3 seconds 0.0.0.0:80->80/tcp web
浏览器访问
其他指令说明:
ENV 环境变量
例如:ENV JAVA_HOME /usr/local/jdk1.8.0_45
COPY 拷贝文件和目录到镜像中,但不支持自动下载和解压。
ENTRYPOINT 启动容器时执行的指令,不会被docker run覆盖。
VOLUME 指定容器到宿主机自动生成的目录。
USER
USER <user>[:<usergroup>]
WORKDIR
WORKDIR /usr/local
原文:https://www.cnblogs.com/networking/p/12333422.html