Docker镜像制作和管理

制作镜像方式
1.docker commit  修改现有容器,手动构建为镜像
以容器为模板制作镜像
注:制作镜像时清理yum缓存    /var/cache/yum/*
2.docker build  通过Dockerfile文件,批量构建为镜像

利用docker file文件执行docker build自动构建镜像

dockerfile相关指令

FROM

用来指定基础镜像,此指令通常必须放在Dockerfile文件第一个非注释行
--platform 指定镜像平台
scratch镜像
该镜像是一个空的镜像,在构建基础镜像或超最小经像的上下文中最有用

LABEL

指定镜像元数据
LABEL  <key>=<value>....
一个镜像可以有多个label,有两种格式
一行格式
多行格式   即在每一行末尾加 \

MAINTAINER

指定维护者信息
可以使用LABEL代替

RUN

执行shell命令
指令用来在构建镜像阶段需要执行FROM指定镜像所支持的shell命令
注:RUN可以写多个,每个RUN指令都会建立一个镜像层,所以使用逻辑与&& 将多个命令连接在一起
shell格式:相当于/bin/sh -c <命令>  此种形式支持环境变量
此进程在容器中PID不为1,不能接收Unix信号
exec格式:此种i形式不支持环境变量,注意:是双引号,不能是单引号    可以指定其他shell

ENV

设置环境变量  会被后续指令进行引用,并在容器运行时保持
变量赋值格式1  ENV <key> <value>  key之后的所有内容均会被视为其value的组成部分
变量赋值格式2  ENV <key>=<value>

COPY

复制文本  复制本地宿主机的文件到容器中
COPY  <src>... <dest>
COPY ["<src>",...."<dest>"]   路径中有空白字符时,建议使用此格式
说明:
可以使用通配符
如果是目录,其内部文件或子目录会递归复制,但目录自身不会被复制
如果指定多个或使用了通配符,则必须是一个目录,且必须以/结尾
使用COPY指令,源文件的各种元数据都会保留
如果事先不存在,它会被自动创建,递归创建目录

ADD

复制和解包文件
不仅支持COPY,还支持自动解压缩。可以将复制指定的到容器中
说明:
可以是Dockerfile所在目录的一个相对路径;也可是一个URL;还可是一个tar文件(自动解压)
如果是目录也同样复制目录中的内容
如果是一个URL,下载后文件权限自动设置为600

CMD

容器启动命令 指定启动容器时默认执行的一个命令,且运行结束后,容器也会停止
说明:
如果没有指定任何执行命令或者dockerfile里面没有ENTRYPOINT命令,那么开启容器时就会使用执行CMD默认的命令
三种设定方式
提供给ENTRYPOINT命令的默认参数  CMD ["param1","param2"]
在/bin/sh中执行,提供给需要交互的应用;CMD command param1 param2
使用exec执行,第一个参数必须时命令的全路径   CMD ["executable","param1","param2"]

ENTRYPOINT

配置容器启动后执行的命令及参数
两种使用方式
使用exec执行  ENTRYPOINT ["executable","param1","param2"..]
使用shell执行  ENTRYPOINT command param1 param2
说明:
ENTRYPOINT不能被docker run提供的参数覆盖,而是追加,如果docker run有参数,那么参数全部作为ENTRYPOINT的参数
CMD的全部内容会作为ENTRYPOINT的参数
通常会利用ENTRYPOINT指令配合脚本,可以为CMD指令提供环境配置

ARG

指令在build阶段指定变量,和ENV不同的是,容器运行时不会存在这些环境变量
说明:
如果和ENV同名,ENV覆盖ARG变量
可以用docker build --build-arg <参数名>=<值>来覆盖
FROM指令支持ARG指令放在第一个FROM之前声明变量  FROM之前声明的ARG在构建之外,所以它不能在FROM之后的任何指令中使用。要使用在第一个FROM之前声明的ARG的默认值,请在构建阶段内使用没有值的ARG指令

VOLUME:匿名卷

在容器中创建一个可以从本地主机或其他容器挂载的挂载点,一般用来存放数据库和需要保持的数据。即使容器后期被删除,此宿主机的目录仍会保留,从而实现容器数据持久保存
宿主机目录  /var/lib/docker/volumes/<volume_id>/_data
用法   VOLUME <容器内路径>

EXPOSE:暴露端口

指定服务端的容器需要对外暴露的端口号,以实现容器与外部通信
EXPOSE仅仅是声明,并不会自动在宿主机进行端口映射
启动容器时需要通过-P或-p,Docker主机才会真正分配一个端口转发到指定暴露端口才可使用
用法 EXPOSE <prot> [/ <protocol>]
protocol用于指定传输层协议,可为tcp或udp二者之一,默认TCP

WORKDIR

指定工作目录,以后各层的当前目录就被改为指定的目录,如果目录不存在,WORKDIR会自行创建
用法   WORKDIR  目录地址

ONBUILD:子镜像引用父镜像的指令

子镜像构建时才执行
ONUBUILD [INSTRUCTION]
说明:
尽管任何指令都可注册成为触发器指令,但ONBUILD不会触发FROM和MAINTAINER指令

USER:指定当前用户

指定运行容器的用户名或UID,在后续指令中使用此用户
当服务不需要管理员权限时,可以通过该命令指定运行用户
用法   USER <user>:[:<group>]  USER <UID>[:<GID>]

HEALTHCHECK:健康检查

检查容器是否健康
HEALTHCHECK NONE 如果基础镜像有健康检查指令,使用这行可以屏蔽掉其健康检查指令
HEALTHCHECK [选项]  CMD <命令> 设置检查容器健康状况的命令
检查结果返回值
0  success
1 unhealthy
2 reserved

构建镜像docker build命令

使用Dockerfile文件创建镜像
docker build [OPTIONS] PATH | URL | -
查看镜像的构建历史: docker history 镜像ID

  • 18
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值