Dockerfile简介
DockerFile是一个可以被Docker程序解释的文本文件,其中由指定的命令组成,在构建镜像的过程中,Docker程序会读取DockerFile文件内容并生成一个临时容器、然后在临时容器中执行DockerFile的指令,当执行完所有的指令后再把临时容器提交为一个Docker镜像,这样就完成的一个镜像的构建,基于DockerFile构建镜像便于后期对镜像的内容进行调整,因此在企业中有了提前编写好的各种各样DockerFile文件就可以快速构建出不同的业务镜像,而当后期某个镜像有额外的需求时,只要在之前的DockerFile添加或者修改相应的内容、即可重新生成新的Docke镜像然后部署在业务容器环境中(docker、docker-compsoe、swarm、kubernetes、openshift等)。
Dockerfile 指令
FROM centos:7.9.2009
#在整个dockfile文件中除了注释之外的第一行,就是FROM 。FROM 指令指定当前镜像作为父镜像(base image)
ARG 申明创建过程中使用的变量
ARG <name>[=<default value>]
ARG指令用于定义一个变量,用户可以在构建Docker镜像的时候,使用 --build-arg 定义变量的值。
我们也可以使用 ARG username=默认姓名 赋予变量默认值。
我们还可以利用ARG指令,声明基础镜像的版本,使其在构建的时候可以通过--build-arg选项对镜像版本进行修改
https://blog.csdn.net/qq_38220908/article/details/126667781
ADD [--chown=<user>:<group>] <src>... <dest>
#用于添加宿主机本地的文件、目录、压缩等资源到镜像里面去,会自动解压tar.gz格式的压缩包,但不会自动解压zip包
例:ADD nginx-1.22.1.tar.gz /usr/local/src/ 将nginx-1.22.1.tar.gz 加入到 /usr/local/src/
LABEL “key”=“value” #设置镜像的属性标签
COPY COPY [--chown=<user>:<group>] <src>... <dest>
#用于添加宿主机本地的文件、目录、压缩等资源到镜像里面去,不会解压任何压缩包
ENV MY_NAME="John Doe" #设置容器环境变量
例:ENV mysql_user=user1
USER <user>[:<group>] or USER <UID>[:<GID>] #指定运行操作的用户
例:USER user
RUN yum install vim unzip -y && cd /etc/nginx
#执行shell命令,但是一定要以非交互式的方式执行
VOLUME ["/data/data1","/data/data2"]
#定义容器里volume卷目录
WORKDIR /data/data1
#用于定义当前工作目录
EXPOSE <port> [<port>/<protocol>...]
#声明要把容器的某些端口映射到宿主机

CMD
CMD有以上三种方式定义容器启动时所默认执行的命令或脚本:
CMD ["executable","param1","param2"] (exec form, this is the preferred form) #推荐的可执行程序方式
CMD ["param1","param2"] (as default parameters to ENTRYPOINT) #作为ENTRYPOINT默认参数
CMD command param1 param2 (shell form) #基于shell命令的
容器启动时默认执行的命令
如果docker run 指定了其它命令,CMD命令被忽略
如果定义了多个CMD,只有最后一个会执行
ENTRYPOINT
#也可以用于定义容器在启动时候默认执行的命令或者脚本,如果是和CMD命令混合使用的时候,会将CMD的命令当做参数传递给ENTRYPOINT后面的脚本,可以在脚本中对参数做判断并相应的容器初始化操作。

案例1:
ENTRYPOINT ["top", "-b"]
CMD ["-c"]
等于如下一行:
ENTRYPOINT ["top", "-b", "-c"]
案例2:
ENTRYPOINT ["docker-entrypoint.sh"] #定义一个入口点脚本,并传递mysqld 参数
CMD ["mysqld"]
等于如下一行:
ENTRYPOINT ["docker-entrypoint.sh","mysqld"]
使用总结:
ENTRYPOINT(脚本) + CMD(当做参数传递给ENTRYPOINT)
Dockerfile 构建nginx镜像:
vim dockerfile
FROM ubuntu:22.04
MAINTAINER "nuo 942933128@qq.com"
#ADD sources.list /etc/apt/sources.list
RUN apt update && apt install -y iproute2 ntpdate tcpdump telnet traceroute nfs-kernel-server nfs-common lrzsz tree openssl libssl-dev libpcre3 libpcre3-dev zlib1g-dev ntpdate tcpdump telnet traceroute gcc openssh-server lrzsz tree openssl libssl-dev libpcre3 libpcre3-dev zlib1g-dev ntpdate tcpdump telnet traceroute iotop unzip zip make
ADD nginx-1.22.1.tar.gz /usr/local/src/
RUN cd /usr/local/src/nginx-1.22.1 && ./configure --prefix=/apps/nginx && make && make install && ln -sv /apps/nginx/sbin/nginx /usr/bin
RUN groupadd -g 2088 nginx && useradd -g nginx -s /usr/sbin/nologin -u 2088 nginx && chown -R nginx.nginx /apps/nginx
ADD nginx.conf /apps/nginx/conf/
ADD frontend.tar.gz /apps/nginx/html/
EXPOSE 80 443
#ENTRYPOINT ["nginx"]
#CMD ["/apps/nginx/sbin/nginx","-g","daemon off;"]
#ENTRYPOINT ["/apps/nginx/sbin/nginx","-g","daemon off;"]
#ENTRYPOINT ["/apps/nginx/sbin/nginx"]
#CMD ["-g","daemon off;"]
COPY docker-entrypoint.sh /docker-entrypoint.sh
RUN chmod a+x /docker-entrypoint.sh
ENTRYPOINT ["/docker-entrypoint.sh"]
构建:docker build -t mynginx:v1 .
镜像的分层构建
1.系统基础镜像构建
docker build -t ubuntu.22.04.base:v1 .

2.Nginx基础镜像构建

docker build -t mynginx:v1 .

3. Nginx业务镜像构建

docker build -t myNginx_server:v1 .

【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库
· 上周热点回顾(2.17-2.23)