docker镜像、Dockerfile
- 一、docker镜像
 - 1、镜像介绍
 - 2、镜像核心技术
 
- 二、Dockerfile定制镜像
 - 1、Dockerfile使用流程
 - 1.1 编写Dockerfile
 - 1.2、构建镜像
 - 1.3 创建容器测试镜像定制操作
 
- 2、Dockerfile常用指令
 
一、docker镜像
1、镜像介绍
-  
分层的文件系统
优势:节省空间、速度快、重用 -  
只读
创建容器时,会在镜像上面添加一个可写层 

2、镜像核心技术
- COW copy on write 写时复制
 - Union fs 联合文件系统
overlay2
device mapper 
[root@martin-host ~]# docker info  
Client: Docker Engine - Community
 Version:    26.1.4
 Context:    default
 Debug Mode: false
 Plugins:
  buildx: Docker Buildx (Docker Inc.)
    Version:  v0.14.1
    Path:     /usr/libexec/docker/cli-plugins/docker-buildx
  compose: Docker Compose (Docker Inc.)
    Version:  v2.27.1
    Path:     /usr/libexec/docker/cli-plugins/docker-compose
Server:
 Containers: 1
  Running: 0
  Paused: 0
  Stopped: 1
 Images: 4
 Server Version: 26.1.4
 Storage Driver: overlay2
 
二、Dockerfile定制镜像
1、Dockerfile使用流程
1.1 编写Dockerfile
[root@martin-host testDockerfile]# ls
CentOS-Base.repo  Dockerfile
[root@martin-host testDockerfile]# cat Dockerfile 
FROM centos:7
COPY  CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo
RUN yum install -y net-tools
 
1.2、构建镜像
[root@martin-host testDockerfile]# docker build -t centos:v1 ./ 
 
1.3 创建容器测试镜像定制操作
[root@martin-host testDockerfile]# docker image ls
REPOSITORY   TAG       IMAGE ID       CREATED          SIZE
centos       v1        3e88e2fdb6df   56 seconds ago   461MB
redis        latest    7614ae9453d1   2 years ago      113MB
centos       7         eeb6ee3f44bd   2 years ago      204MB
nginx        1.18      c2c45d506085   3 years ago      133MB
[root@martin-host testDockerfile]# docker run -tid --name=test1 centos:v1 
949b757d2b35b4d115a88f69cc8f1d704b6e6fcd34a64d4ecbfc28422e7530aa
[root@martin-host testDockerfile]# docker exec -ti test1 bash
[root@949b757d2b35 /]# ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1472
        inet 10.88.7.2  netmask 255.255.255.0  broadcast 10.88.7.255
        ether 02:42:0a:58:07:02  txqueuelen 0  (Ethernet)
        RX packets 8  bytes 656 (656.0 B)
 
2、Dockerfile常用指令
- FROM
指定基础镜像;
镜像不存在,构建镜像时自动下载镜像
建议尽量选择小容量的镜像 / debian/ ubuntu 
FROM 镜像名称 
 
- RUN
指定定制命令 
RUN 命令 && 命令 && 命令
 
- CMD
定义容器创建时,自动执行的命令
注意事项:
1、前台启动服务的指令
2、创建容器时,不要自己指定命令,会覆盖CMD
3、一个Dockerfile中只能有一条CMD指令 
CMD httpd -D FOREGROUND
CMD ["httpd", "-D", "FOREGROUND"]	// 推荐
 
- ENTRYPOINT
定义容器创建时,自动执行的命令
不会被覆盖 
ENTRYPOINT ["httpd", "-D", "FOREGROUND"]
 
- COPY
复制文件
注意:只能复制本地文件 
COPY 源文件 目的文件 
 
- ADD
复制文件
注意:
1、支持本地文件、URL、压缩包会自动解压 
ADD 源文件 目的文件 
 
ADD file01 /tmp/file01
ADD http://nginx.org/download/nginx-1.27.0.tar.gz /tmp
ADD jdk-8u91-linux-x64.tar.gz /tmp
 
- EXPOSE
说明容器服务端口
注意:
1、-P随机发布端口时,Dockerfile中必须有EXPOSE指令 
EXPOSE 端口 端口
 
- VOLUME
定义持久化存储的目录
创建容器时不使用-v明确指定目录,会自动生成匿名卷 
VOLUME 目录
 
- ENV
定义环境变量 
ENV 变量名称 值 
 
- WORKDIR
定义当前目录 
WORKDIR 目录
 
- USER
指定容器运行的用户 
USER 用户名
                

















