[root@hou ~]# mkdir dockerfile [root@hou~]# cd dockerfile/
[root@hou dockerfile]# vim dockerfile FROM centos MAINTAINER hou RUN rm -rf /etc/yum.repos.d/* COPY Centos-vault-8.5.2111.repo /etc/yum.repos.d/ RUN yum install wget -y RUN yum install nginx -y COPY index.html /usr/share/nginx/html/ EXPOSE 80 ENTRYPOINT ["/usr/sbin/nginx","-g","daemon off;"]
[root@hou dockerfile]# cat index.htmlpage added to dockerfile welcome to Kuaike, I am Hou
[root@hou dockerfile]# docker build -t="kuaile/nginx:v1" .
[root@hou dockerfile]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE kuaile/nginx v1 bd76f47376d2 About a minute ago 370MB
[root@hou dockerfile]# docker run -d -p 80 --name html2 kuaile/nginx:v1 f10570f13042c3d5c62114b2c4b609009f4a3341b9257bb47522d3ad2fbf19bd
注:--name html2 给容器起个名字,-p 80 容器端口,物理机端口会随机
[root@hou dockerfile]# docker ps | grep html f10570f13042 kuaile/nginx:v1 "/usr/sbin/nginx -g …" 2 minutes ago Up 2 minutes 0.0.0.0:49153->80/tcp, :::49153->80/tcp html2 [root@hou dockerfile]# curl 10.0.8.120:49153page added to dockerfile welcome to Kuaike, I am Hou
FROM centos MAINTAINER hou RUN rm -rf /etc/yum.repos.d/* COPY Centos-vault-8.5.2111.repo /etc/yum.repos.d/ RUN yum install wget -y RUN yum install nginx -y COPY index.html /usr/share/nginx/html/ EXPOSE 80 ENTRYPOINT ["/usr/sbin/nginx","-g","daemon off;"]
FROM:基础镜像,必须是可以下载下来的
MAINTAINER: 指定镜像的作者信息 # maintainer [meɪnˈteɪnə] 维护者
RUN: 指定在当前镜像构建过程中运行的命令,包含两种模式
#shell 模式
RUN
RUN yum install wget -y
#exec 模式
RUN ["executable","param1","param2"]
RUN ["/bin/bash","-c","echo hello"]
EXPOSE:用来声明端口的
帮助镜像使用者理解这个镜像服务的守护端口,以方便配置映射。
在运行时使用随机端口映射时,也就是 docker run -P ,会自动随机映射 EXPOSE 的端口。
格式:
EXPOSE <端口 1> [<端口 2>...]
CMD:为启动的容器指定默认要运行的程序,程序运行结束,容器也就结束。CMD 指令指定的程序可被 docker run 命令行参数中指定要运行的程序所覆盖。如果 Dockerfile 中如果存在多个CMD 指令,仅最后一个生效。
CMD["executable","param1","param2"] #exec 模式
CMD command param1 param2 #shell 模式
CMD["param1","param2"]
ENTRYPOINT: 类似于 CMD 指令,但其不会被 docker run 的命令行参数指定的指令所覆盖,而且这些命令行参数会被当作参数送给 ENTRYPOINT 指令指定的程序。如果 Dockerfile 中存在多个 ENTRYPOINT 指令,仅最后一个生效。如果运行 docker run 时使用了 --entrypoint 选项,将覆盖 CMD 指令指定的程序。如果 Dockerfile 中如果存在多个 ENTRYPOINT 指令,仅最后一个生效。 ENTRYPOINT ["
示例: 假设已通过 Dockerfile 构建了 nginx:test 镜像: FROM nginx
ENTRYPOINT ["nginx", "-c"] # 定参
CMD ["/etc/nginx/nginx.conf"] # 变参
构建的镜像是 nginx:test
1、不传参运行
docker run nginx:test
容器内会默认运行以下命令,启动主进程。
nginx -c /etc/nginx/nginx.conf
2、传参运行
docker run nginx:test -c /etc/nginx/new.conf
容器内会默认运行以下命令,启动主进程(/etc/nginx/new.conf:假设容器内已有此文件)
nginx -c /etc/nginx/new.conf
COPY: 复制指令,从目录中复制文件或者目录到容器里指定路径。
格式: COPY [--chown=
ADD:指令和 COPY 的使用格式一致(同样需求下,官方推荐使用 COPY)。
功能也类似,不同之处如下:
ADD 的优点:在执行 <源文件> 为 tar 压缩文件的话,压缩格式为 gzip, bzip2 以及 xz 的情况下,会自动复制并解压到 <目标路径>。
ADD 的缺点:在不解压的前提下,无法复制 tar 压缩文件。会令镜像构建缓存失效,从而可能会令镜像构建变得比较缓慢。具体是否使用,可以根据是否需要自动解压来决定。
ENV:设置环境变量,定义了环境变量,那么在后续的指令中,就可以使用这个环境变量。
格式:
ENV
ENV
以下示例设置 NODE_VERSION = 7.2.0 , 在后续的指令中可以通过 $NODE_VERSION 引用:
ENV NODE_VERSION 7.2.0
RUN curl -SLO "https://nodejs.org/dist/v$NODE_VERSION/node-v$NODE_VERSIONlinux-x64.tar.xz" && curl -SLO "https://nodejs.org/dist/v$NODE_VERSION/SHASUMS256.txt.asc"
ARG :构建参数,与 ENV 作用一至。不过作用域不一样。ARG 设置的环境变量仅对Dockerfile 内有效,也就是说只有 docker build 的过程中有效,构建好的镜像内不存在此环境变量。
构建命令 docker build 中可以用 --build-arg <参数名>=<值> 来覆盖。
格式:
ARG <参数名>[=<默认值>]
VOLUME:定义匿名数据卷。在启动容器时忘记挂载数据卷,会自动挂载到匿名卷。
避免重要的数据,因容器重启而丢失,这是非常致命的。避免容器不断变大。
格式:
VOLUME ["<路径 1>", "<路径 2>"...]
VOLUME <路径>
在启动容器 docker run 的时候,我们可以通过 -v 参数修改挂载点。
HEALTHCHECK:用于指定某个程序或者指令来监控 docker 容器服务的运行状态。
格式:
HEALTHCHECK [选项] CMD <命令>:设置检查容器健康状况的命令。
HEALTHCHECK NONE:如果基础镜像有健康检查指令,使用这行可以屏蔽掉其健康检查指令。
HEALTHCHECK [选项] CMD <命令> : 这边 CMD 后面跟随的命令使用,可以参考 CMD 的用法。
链接:度娘网盘,自行取哈
提取码:oopp