Docker镜像是由⽂件系统叠加⽽成的,系统的最底层是 bootfs,相当于就是Linux内核的引导⽂件系统;接下来第⼆层是rootfs,这⼀层可以是⼀种或多种操 作系统(如Debian或Ubuntu⽂件系统),Docker中的rootfs是只读状态的;Docker利⽤联合挂载技 术将各层⽂件系统叠加到⼀起,最终的⽂件系统会包含有底层的⽂件和⽬录,这样的⽂件系统就是⼀ 个镜像。
Dockerfile构建镜像
Dockerfifile 是⼀种专⻔为了构建镜像⽽定义的⽂本⽂件,⾥⾯详细记录了创建镜像必须要 执⾏的所有操作。
Dockerfifile使⽤DSL(Domain Specifific Language)来构建⼀个Docker镜像,只要编辑好了 Dockerfifile⽂件,就可以使⽤ docker build 命令来构建⼀个新的镜像。
1.创建文件
touch Dockerfile
2.编辑文件内容
FROM ubuntu:latest
RUN apt-get update -y \
&& apt-get upgrade -y \
&& apt-get install -y python3 \
&& apt-get install -y python3-pip \
&& apt-get autoclean \
&& apt-get autoremove
3.构建
docker build -t pydev:latest ./
Dockerfile指令详解
- COPY
- 格式:
COPY 原路径1 原路径2 目标路径
- 功能:用来将宿主机的文件复制到镜像中,常用来拷贝一些文件,或者一些数据文件
- 格式:
- FROM
- 格式:
FROM 镜像名:Tag
- 功能: ⽤来指明基于哪个镜像作为基础来进⾏构建,⼀般基础镜像使⽤ Docker 官⽅ 的镜像来进⾏构建
- 格式:
- ADD
- 格式:
ADD 源路径1 源路径2 ... ⽬标路径
- 功能: ⽐ COPY 更强⼤的复制命令,COPY 只能复制⽂件,⽽ ADD 可以从⼀个 URL 去下载 ⽂件,然后添加到镜像中。 甚⾄可以是⼀个压缩包,ADD 可以将压缩包中的内容解压到⽬标路径,⽀持 tar、 gzip、bz2、xz 等格式。
- 格式:
- RUN
- 格式:
RUN 命令 参数1 参数2 ...
- 功能: 构建时需要执⾏的操作,它可以像 Shell 脚本⼀样执⾏ Linux 中的命令。 不要写太多 RUN 命令,因为每执⾏⼀次,镜像便会多⼀层,Docker 最多允许 127 层,同时过多的层也会造成镜像体积增⼤
- RUN 中的命令最好⽤ && 连接起来:
- 格式:
- CMD
- 格式:
CMD 命令 参数1 参数2 ...
- 功能: ⽤于指定容器主进程的默认启动命令。 如果运⾏容器时指定了别的命令,则 CMD 会被替换。
- 注意:容器不是虚拟机,仅仅是⼀个进程,所以容器中必须要有开在前台的主进 程,如果将容器中的进程开在后台,会造成容器退出
- 格式:
- ENTRYPOINT
- 格式:
ENTRYPOINT 命令 参数1 参数2 ...
- 功能:
- 程序的⼊⼝点,与 CMD 类似⽤来指定容器启动程序及参数。
- 如果运⾏容器时,同时指定了 ENTRYPOINT 和 CMD,则 CMD 会变为 ENTRYPOINT 的⼀个参数, 容器运⾏时实际执⾏的命令为: ENTRYPOINT CMD
- 这样的优点是运⾏容器时可以指定额外的参数, 以 Django 为例,这样设置: ENTRYPOINT python manage.py runserver, 这样容器运⾏时会开在 127.0.0.1:8000 地址,但是运⾏时我们想让他运⾏在 0.0.0.0:80 上, 就可以这样运⾏容器: docker run -p 80:80 django 0.0.0.0:80, 这样结尾的 0.0.0.0:80 便作为参数传给了 ENTRYPOINT
- 格式:
- ENV
- 格式:
ENV 变量名 变量值
ENV 变量名1=变量值1 变量名2=变量值2 变量名3=变量值3
- 功能: 需要设置容器的环境变量,如 PATH、PYTHONPATH、DJANGO_SETTINGS_MODULE 等
- 格式:
- ARG
- 格式:
ARG 参数名[=<默认值>]
- 功能: 设置构建过程中的环境变量
- 格式:
- VOLUME
- 格式
: VOLUME 路径
- 功能:
- 设置运⾏时需要挂载的匿名数据卷。
- 因为容器运⾏时应该防⽌容器存储层发⽣写操作,所有数据⽅⾯的改动需要保存 到数据卷。 指定了匿名卷能让程序的数据输出直接写到数据卷中。⽐如程序⽇志、数据库的 数据⽂件、Redis 的数据镜像等
- 格式
- EXPOSE
- 格式:
EXPOSE 端⼝1 端⼝2 ...
- 功能: 声明当前镜像需要开放那些端⼝。仅仅是声明⼀下,运⾏容器时需要⼿动指明 要开放的端⼝
- 格式:
- WORKDIR
- 格式:
WORKDIR ⼯作⽬录路径
- 功能: ⽤来指定容器的⼯作⽬录
- 格式: