一、常用Dockerfile指令
FROM # 基础镜像
MAINTAINER # 镜像作者信息 姓名+邮箱
RUN # 镜像构建的时候运行的命令
ADD # copy内容到容器(压缩包,自动解压)
COPY # 类似ADD 将文件copy到容器中
WORKDIR # 指定镜像工作目录
VOLUME # 设置容器卷
EXPOSE # 指定暴露端口
ONBUILD # 当构一个被继承的容器 dockerfile这个时候会运行ONBUILD 的指令 ,触发指定。
ENV # 构建时设置环境变量
ENTRYPOINT # 指定这个容器启动的时候要运行的命令(可以追加命令)
CMD # 指定这个容器启动的时候要运行的命令(只有最后一个会生效,可被代替)
LABEL # 指令用来给镜像添加一些元数据
HEALTHCHECK # 用于指定某个程序或者指令来监控 docker 容器服务的运行状态
ARG # ARG设置环境变量仅对 Dockerfile 内有效
构建镜像:
docker build -t 镜像名称:版本 -f Dockefile文件 .
# -t 指定镜像名字:版本
# -f 指定Dockerfile文件
# . 代表在当前目录下
二、常用指令详解
FROM指令:
- 基础镜像必须是可以下载下来的
MAINTAINER指令:
- 指定作者信息+联系方式
RUN指令:
-
RUN指令相当于你在镜像中操作的命令,包含两种模式:
-
Shell模式:
RUN yum install -y vim
-
Exec模式:只要涉及到空格都需要使用 “,” 逗号代替
RUN ["yum","install","-y","vim","wget"]
-
EXPOSE指令:
-
仅仅只是声明端口,在docker run -P 时,会自动随机映射EXPOSE指定的端口到宿主机端口。
EXPOSE 80 81
CMD指令:
-
运行容器时执行的命令,如果存在多个CMD指令只有最后一个生效。
-
CMD指令指定的程序可被docker run 命令行参数中指定要运行的程序所覆盖。
-
列如:下面部署nginx例子,启动容器时运行CMD指令,从而启动nginx服务。
FROM centos:7 RUN yum install wget proc-devel net-tools gcc zlib zlib-devel make openssl-devel -y RUN wget http://nginx.org/download/nginx-1.14.2.tar.gz RUN tar zxf nginx-1.14.2.tar.gz -C /usr/local/src/ RUN cd /usr/local/src/nginx-1.14.2/ && ./configure --prefix=/usr/local/nginx && make && make install WORKDIR /usr/local/nginx/ EXPOSE 80 443 RUN ln -s /usr/local/nginx/sbin/nginx /usr/sbin/ ENTRYPOINT ["/usr/sbin/nginx","-g","daemon off;","-c"] CMD ["/usr/local/nginx/conf/nginx.conf"]
ENTRYPOINT指令:
-
类似于CMD指令,但其实不会被 docker run 的命令行参数指令所覆盖,而且这些命令行参数会被当做参数送给ENTRYPOINT指令指定的程序。
-
如果运行 docker run 时使用了 --entrypoint 选项,将覆盖 entrypoint指令指定的程序。
-
如果 Dockerfile 中如果存在多个 ENTRYPOINT 指令,仅最后一个生效。
-
一般常用来搭配CMD指令一起使用 CMD指定作为变参,ENTRYPOINT指定作为定参。
ENTRYPOINT ["/usr/sbin/nginx","-c"] # 定参,参数不变 CMD ["/usr/local/nginx/conf/nginx.conf"] # 变参,docker run时,可在命令行指定
-
如下例子:
FROM centos:7 RUN yum install wget proc-devel net-tools gcc zlib zlib-devel make openssl-devel -y RUN wget http://nginx.org/download/nginx-1.14.2.tar.gz RUN tar zxf nginx-1.14.2.tar.gz -C /usr/local/src/ RUN cd /usr/local/src/nginx-1.14.2/ && ./configure --prefix=/usr/local/nginx && make && make install WORKDIR /usr/local/nginx/ EXPOSE 80 443 RUN ln -s /usr/local/nginx/sbin/nginx /usr/sbin/ ENTRYPOINT ["/usr/sbin/nginx","-c"] CMD ["/usr/local/nginx/conf/nginx.conf"]
构建镜像:
docker build -t test:v1 -f Dockerfile .
运行容器时可指定nginx配置文件:“/root/qinzt/dockerfile/test/new.conf” 文件会替换CMD指令后文件。
docker run -itd --name nginx test:v1 /root/qinzt/dockerfile/test/new.conf
COPY指令:
-
复制指令,从上下文目录中复制文件或者目录到容器里指定路径。
-
格式:文章来源地址https://www.toymoban.com/news/detail-585744.html
COPY [--chown=<user>:<group>] <源路径1>... <目标路径> COPY [--chown=<user>:<group>] ["<源路径1>",... "<目标路径>"]
-
[–chown=:]:可选参数,用户改变复制到容器内文件的拥有者和属组
-
源文件或者源目录,这里可以是通配符表达式,其通配符规则要满足 Go 的 filepath.Match 规则。例如:
COPY hom* /mydir/ COPY hom?.txt /mydir/
-
目标路径:容器内的指定路径,该路径不用事先建好,路径不存在的话,会自动创建
ADD指令:
-
ADD 指令和 COPY 的使用格式一致。ADD如果负责源文件是压缩包等格式会自动解压缩。
ADD dockerInstall.tar.gz /usr/local/src
VOLUME指令:
-
定义匿名数据卷,在启动容器是自动挂载匿名卷。
-
容器目录和宿主机目录,是实时同步的。
-
格式:
VOLUME ["<路径1>", "<路径2>"...] VOLUME <路径>
-
如下例子:
FROM centos:7 VOLUME ["/data1","/data2"] CMD ["/bin/bash"]
docker build -t volume:v1 . docker run -itd --name test1 volume:v1
可以使用docker inspect 命令查看到和宿主机目录同步位置
docker inspect test1
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0TbPXqDQ-1681981251613)(D:\MD归档文档\IMG\image-20230415175903214.png)]
WORKDIR指令:
- 指定工作目录,目录必须是存在的。
ENV指令:
-
用来为构建镜像设置环境变量,这个值将出现在构建阶段中所有后续指令环境中。
-
格式:
ENV <key> <value> ENV <key>=<value>...
-
例子:
FROM centos:7 ENV workDir=/usr/local WORKDIR $workDir CMD ["/bin/bash"]
ARG指令:
-
与 ENV 作用一至。不过作用域不一样。ARG 设置的环境变量仅对 Dockerfile 内有效,也就是说只有 docker build 的过程中有效,构建好的镜像内不存在此环境变量。
-
构建命令 docker build 中可以用 --build-arg <参数名>=<值> 来覆盖。
-
格式:
ARG <参数名>[=<默认值>]
USER指令:
-
用于指定执行后续命令的用户和用户组,这边只是切换后续命令执行的用户(用户和用户组必须提前已经存在)
-
格式:
USER <用户名>[:<用户组>]
ONBUILD指令:
-
用于延迟构建命令的执行。简单的说,就是 Dockerfile 里用 ONBUILD 指定的命令,在本次构建镜像的过程中不会执行(假设镜像为 test-build)。当有新的 Dockerfile 使用了之前构建的镜像 FROM test-build ,这时执行新镜像的 Dockerfile 构建时候,会执行 test-build 的 Dockerfile 里的ONBUILD 指定的命令。
-
格式:
ONBUILD <其它指令>
LABEL指令:
-
LABEL指令用来给镜像添加一些元数据以键值对的形式。
-
格式
LABEL <key>=<value> <key>=<value> <key>=<value> ...
-
列如执行一下作者信息
LABEL org.opencontainers.image.authors="qinzt"
在我们使用 docker run运行容器后 使用 inspect 命令查看是可以查看到LABEL信息如下:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Noc1op9H-1681981251614)(D:\MD归档文档\IMG\image-20230415191303650.png)]
HEALTHCHECK 指令:
-
用于指定某个程序或者指令来监控 docker 容器服务的运行状态文章来源:https://www.toymoban.com/news/detail-585744.html
-
格式:
HEALTHCHECK [选项] CMD <命令>:设置检查容器健康状况的命令 HEALTHCHECK NONE:如果基础镜像有健康检查指令,使用这行可以屏蔽掉其健康检查指令 HEALTHCHECK [选项] CMD <命令> : 这边 CMD 后面跟随的命令使用,可以参考 CMD 的用法。
三、Dockerfile案例
1、Dockerfile部署Nginx案例
FROM centos:7
RUN yum install wget proc-devel net-tools gcc zlib zlib-devel make openssl-devel -y
RUN wget http://nginx.org/download/nginx-1.14.2.tar.gz
RUN tar zxf nginx-1.14.2.tar.gz -C /usr/local/src/
RUN cd /usr/local/src/nginx-1.14.2/ && ./configure --prefix=/usr/local/nginx && make && make install
WORKDIR /usr/local/nginx/
ADD dockerInstall.tar.gz /usr/local/src
EXPOSE 80 443
RUN ln -s /usr/local/nginx/sbin/nginx /usr/sbin/
ENTRYPOINT ["/usr/sbin/nginx","-g","daemon off;","-c"]
CMD ["/usr/local/nginx/conf/nginx.conf"]
2、Dockerfile部署Tomcat案例
FROM qinziteng/jdk:8
WORKDIR /opt
ADD apache-tomcat-9.0.58.tar.gz /opt
EXPOSE 8080
CMD /opt/apache-tomcat-9.0.58/bin/catalina.sh run
到了这里,关于Dockerfile使用及案例详解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!