Docker File Dockerfile 是一个文本文件,里面包含了一条条的指令,每一条指令都对应构建一个镜像层。按顺序执行这些指令,就可以收动构建出一个Docker镜像。这些镜像层是堆叠的,每⼀层都是基于前一层构建的增量 1.docker file常用命令帮助 常用指令 FROM 指定现有的容器名称 COPY 拷贝当前Dockerfile目录里的文件 COPY <src> <sest> COPY ["<src>" "<src>" "<dest>"] <src> 要复制的源文件或目录,支持使用通配符 <dest> 目标路径,既正在创建的image的文件系统路径,建议<dest>使用绝对路径,否则COPY指定则以WORKDIR为起始路径 文件复制准则 如果<src>是目录,则其内部文件或子目录会被递归复制,但<stc>目录自身不会被复制·如果指定了多个<src>, 或在<src>中使用了通配符,则<dest>必须是一个目录,且必须以结尾 如果<dest>事先不存在,它将会被自动创建,这包括其父目录路径 例子: COPY index.html /www/html/ 解释" 把当前Dockerfile目录下的index.html复制容器的/www/html/下 ADD ADD指令类似于COPY命令,ADD支持使用TAR文件和URL路径 Syntax ADD <src> ...<dest>或·ADD ["<src>".... "<dest>"]·操作准则 同COPY指令 如果<src>为URL且<dest>不以/结尾,则<src>指定的文件将被下载并直接被创建为<dest>;如果<dest>以/结尾, 则文件名URL指定的文件将被直接下载并保存为<dest>/<filename>·如果<sc>是一个本地系统上的压缩格式的tar文件, 它将被展开为一个目录,其行为类似于“tar -x"命令;然而,通过URL获取到的tar文件将不会自动展开 如果<src>有多个,或其间接或直接使用了通配符,则<dest>必须是一个以/结尾的目录路径﹔如果<dest>不以/结尾则其被视作一个普通文件, <src>的内容将被直接写入到<dest> 如果ADD 后面根的是URL,而且是tar文件,则不会展开 例子: ADD http://nginx.org/download/nginx-1.26.0.tar.gz /usr/loca/src/ 如果ADD后面跟着是一个tar文件,它会自动解压到你所指定的目录 例子: ADD nginx-1.26.0.tar.gz /usr/local/src/ WORKDIR 指定容器的默认工作目录 指定一个环境变量 例子: WORKDIR /usr/local/src/ LABEL 制作镜像者,名字和邮箱 MAINTAINER 管理者的信息和LABEL功能一样新版本建议用LABEL ENTRYPOINT 容器启动的时候执行的初始命令,不能被替换,如果同时使用CMD和ENTRYPOINT,CMD命令将作为ENTRYPOINT命令的参数 EXPOST 要暴露的端口 VOLUME 持久化卷 ENV 环境变量,(ssh的密码,数据库的密码)给容器里面指定一个环境变量 HEALTHCHECK HEALTHCHECK指令是用来检测容器内执行的应程程序是否处于健康状态; HEALTHCHECK语法示例: HEALTHCHECK [OPTIONS] CMD command例如,每30s左右检查每次网站服务是否能够在三秒内提供访问(默认 --retries 尝试3次,如果都不成功则失败) 2.从头构建属于自己的镜像包 2.1自己单独构建一个alpine镜像 2.1.1原始镜像下载地址 https://mirrors.tuna.tsinghua.edu.cn/lxc-images/images/ 2.1.2这里以alpine为例 https://mirrors.tuna.tsinghua.edu.cn/lxc-images/images/alpine/3.20/amd64/default/20240717_13%3A00/rootfs.tar.xz 2.1.3创建容器存放的目录 mkdir -pv /data/dockerfile/{web/{nginx,tomcat,jdk,apache},system/{centos,ubuntu,alpine,debian}} 2.1.4在centos里把这个镜像下载到你存放dockerfile 先进入到目录里面 cd /data/dockerfile/system/alpine/ 2.1.5下载 wget https://mirrors.tuna.tsinghua.edu.cn/lxc-images/images/alpine/3.20/amd64/default/20240717_13%3A00/rootfs.tar.xz 2.1.6查看下载的文件 # ls rootfs.tar.xz 2.1.7创建一个Dockerfile vim Dockerfile 写入以下内容 FROM scratch ADD rootfs.tar.xz / CMD ["/bin/sh"] 解释: FROM scratch 重新开始,创建一个初始镜像 scratch=起跑线,从头开始 ADD rootfs.tar.xz / 把下载好的rootfs.tar.xz的文件解压到/根下 CMD ["/bin/sh"] 系统启动命令,这里是启动是[/bin/sh] 2.1.8开始构建 docker build -t alpine:v1 . 把新创建的alpine名称改成V1 2.2自己单独构建一个rocky镜像 2.2.1原始镜像下载地址 https://mirrors.tuna.tsinghua.edu.cn/lxc-images/images/ 2.2.2这里以rocky为例 https://mirrors.tuna.tsinghua.edu.cn/lxc-images/images/rockylinux/9/amd64/default/20240718_02%3A06/ 2.2.3下载rocky的镜像,这里不一定能下载成功 wget https://mirrors.tuna.tsinghua.edu.cn/lxc-images/images/rockylinux/9/amd64/default/20240718_02%3A06/rootfs.tar.xz 2.2.4查看下载的文件 # ls rootfs.tar.xz 2.2.5创建一个Dockerfile vim Dockerfile 写入以下内容 FROM scratch ADD rootfs.tar.xz / CMD ["/bin/bash"] 解释: FROM scratch 重新开始,创建一个初始镜像 scratch=起跑线,从头开始 ADD rootfs.tar.xz / 把下载好的rootfs.tar.xz的文件解压到/根下 CMD ["/bin/sh"] 系统启动命令,这里是启动是[/bin/bash] 2.2.6开始构建 docker build -t rocky9.4:v1 . 2.3自己单独构建一个ubuntu2404镜像 2.3.1原始镜像下载地址 https://mirrors.tuna.tsinghua.edu.cn/lxc-images/images/ 2.3.2这里以rocky为例 https://mirrors.tuna.tsinghua.edu.cn/lxc-images/images/ubuntu/xenial/amd64/default/20240718_07%3A42/ 2.3.3下载rocky的镜像,这里不一定能下载成功 wget https://mirrors.tuna.tsinghua.edu.cn/lxc-images/images/ubuntu/xenial/amd64/default/20240718_07%3A42/rootfs.tar.xz 2.3.4查看下载的文件 # ls rootfs.tar.xz 2.3.5创建一个Dockerfile vim Dockerfile 写入以下内容 FROM scratch ADD rootfs.tar.xz / CMD ["/bin/bash"] 解释: FROM scratch 重新开始,创建一个初始镜像 scratch=起跑线,从头开始 ADD rootfs.tar.xz / 把下载好的rootfs.tar.xz的文件解压到/根下 CMD ["/bin/sh"] 系统启动命令,这里是启动是[/bin/bash] 2.3.6开始构建 docker build -t ubuntu2404:v1 . 3.Dockerfile实践 3.1构建一个基于RockyLinux环境的Nginx镜像