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镜像