Docker 镜像构建入门实战指南

Docker 镜像构建入门实战指南

一、概述

Dockerfile 是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明。
官方文档:https://docs.docker.com/engine/reference/builder/ Dockerfile
示例:https://github.com/dockerfile/

二、Dockerfile 结构

Dockerfile 结构主要分为四部分:

  • 基础镜像信息
  • 维护者信息
  • 镜像操作指令
  • 容器启动时执行指令 (CMD/ENTRYPOINT)

【温馨提示】Dockerfile 每行支持一条指令,每条指令可携带多个参数(支持&&),支持使用以“#“号开头的注释(jason 文件不支持#注释),但是也非必须满足上面的四点。

三、常用 Dockerfile 操作指令

  • ARG—— 定义创建镜像过程中使用的变量 ,唯一一个可以在 FROM 之前定义 。
  • FROM——基于某个镜像, FROM前面只能有一个或多个ARG指令 。
  • MAINTAINER(已弃用) —— 镜像维护者姓名或邮箱地址 。
  • VOLUME—— 指定容器挂载点到宿主机自动生成的目录或其他容器
  • RUN——执行镜像里的命令,跟在 liunx 执行命令一样,只需要在前面加上 RUN 关键词就行。
  • COPY——复制本地(宿主机)上的文件到镜像。
  • ADD——复制并解压(宿主机)上的压缩文件到镜像。
  • ENV——设置环境变量。
  • WORKDIR—— 为 RUN、CMD、ENTRYPOINT、COPY 和 ADD 设置工作目录,就是切换目录 。
  • USER—— 为 RUN、CMD、和 ENTRYPOINT 执行命令指定运行用户。
  • EXPOSE—— 声明容器的服务端口(仅仅是声明) 。
  • CMD—— 容器启动后执行的命令 ,多个 CMD 只会执行最后一个,跟 ENTRYPOINT 的区别是,CMD 可以作为 ENTRYPOINT 的参数,且会被 yaml 文件里的 command 覆盖。
  • ENTRYPOINT—— 容器启动后执行的命令 ,多个只会执行最后一个。
  • HEALTHCHECH—— 健康检查 。
  • ONBUILD——它后面跟的是其它指令,比如 RUN, COPY 等,而这些指令,在当前镜像构建时并不会被执行。只有当以当前镜像为基础镜像,去构建下一级镜像的时候才会被执行。
  • LABEL——LABEL 指令用来给镜像添加一些元数据(metadata),以键值对的形式 ,替换 MAINTAINER。

1)镜像构建(docker build)

docker build -t text:v1 . --no-cache
# 要在构建后将映像标记到多个存储库中,请在运行命令-t时添加多个参数
docker build -t shykes/myapp:1.0.2 -t shykes/myapp:latest .
### 参数解释
# -t:指定镜像名称
# . :当前目录Dockerfile
# -f:指定Dockerfile路径
#  --no-cache:不缓存

2)运行容器测试(docker run)

# 非交互式运行
docker run centos:7.4.1708 /bin/echo "Hello world"

### 交互式执行
# -t: 在新容器内指定一个伪终端或终端。
#-i: 允许你对容器内的标准输入 (STDIN) 进行交互。
# 会登录到docker环境中,交互式
docker run -it centos:7.4.1708 /bin/bash
# -d:后台执行,加了 -d 参数默认不会进入容器
docker run -itd centos:7.4.1708 /bin/bash

### 进入容器
# 在使用 -d 参数时,容器启动后会进入后台。此时想要进入容器,可以通过以下指令进入:
#docker exec -it :推荐大家使用 docker exec -it 命令,因为此命令会退出容器终端,但不会导致容器的停止。
#docker attach:容器退出,会导致容器的停止。
docker exec -it  b2c0235dc53 /bin/bash
docker attach  b2c0235dc53

3)ARG

构建参数,与 ENV 作用一致。不过作用域不一样。ARG 设置的环境变量仅对 Dockerfile 内有效,也就是说只有 docker build 的过程中有效,构建好的镜像内不存在此环境变量。唯一一个可以在 FROM 之前定义 。构建命令 docker build 中可以用 --build-arg <参数名>=<值> 来覆盖。

语法格式:

ARG <参数名>[=<默认值>]

示例:

# 在FROM之前定义ARG,只在 FROM 中生效
ARG VERSION=laster
FROM centos:${
   VERSION}
# 在FROM之后使用,得重新定义,不需要赋值
ARG VERSION
RUN echo $VERSION >/tmp/image_version

4)FROM

定制的镜像都是基于 FROM 的镜像 ,【必选项】

语法格式:

FROM [--platform=<platform>] <image> [AS <name>]
FROM [--platform=<platform>] <image>[:<tag>] [AS <name>]
FROM [--platform=<platform>] <image>[@<digest>] [AS <name>]

如果引用多平台图像,可选–platform标志可用于指定图像的平台。FROM例如,linux/amd64、 linux/arm64或windows/amd64。默认情况下,使用构建请求的目标平台。全局构建参数可用于此标志的值,例如允许将阶段强制为原生构建平台 ( --platform=$BUILDPLATFORM),并使用它交叉编译到阶段内的目标平台。

示例:

ARG VERSION=latest
FROM busybox:$VERSION
# FROM --platform="linux/amd64" busybox:$VERSION
ARG VERSION
RUN echo $VERSION > image_version

5)MAINTAINER(已弃用)

镜像维护者信息

语法格式:

MAINTAINER <name>

示例:

LABEL org.opencontainers.image.authors="SvenDowideit@home.org.au"

6)VOLUME

定义匿名数据卷。在启动容器时忘记挂载数据卷,会自动挂载到匿名卷。

作用:

  • 避免重要的数据,因容器重启而丢失,这是非常致命的。
  • 避免容器不断变大。
  • 在启动容器 docker run 的时候,可以通过 -v 参数修改挂载点。
    语法格式:
# 后面路径是容器内的路径,对应宿
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值