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 用户名