Dockerfile

docker images

# 查找镜像,Docker Hub: https://hub.docker.com/
docker search ubuntu
# NAME: 镜像仓库源的名称
# DESCRIPTION: 镜像的描述
# OFFICIAL: 是否 docker 官方发布
# STARS: 类似 Github 里面的 star,表示点赞、喜欢的意思。
# AUTOMATED: 自动构建。

docker images # 查看本地已有的镜像
docker pull ubuntu:22.04 # 下载镜像
docker rmi ununtu:22.04 # 删除本地已有的镜像

docker commit

docker build

通过Dockerfile文件构建指令,用docker build创建一个新的镜像。

Dockerfile每一个指令都会在镜像上创建一个新的层,要尽可能减少、合并指令(如:用&&连接多个操作)。

build过程中,若出现apt update、install错误,但在容器中执行又是正常的,可能是两个原因:

  1. docker默认DNS为8.8.8.8,8.8.4.4,在国内访问这两个DNS不稳定,改成国内DNS。
  2. 访问国内源不稳定,改成国内镜像源(我改成mirrors.aliyun.com也不稳定,默认源、ustc的都成功build)。

Dockerfile技巧

Docker 镜像由很多镜像层(Layers)组成(最多 127 层),镜像层依赖于一系列的底层技术,比如文件系统(filesystems)、写时复制(copy-on-write)、联合挂载(union mounts、AUFS、OverlayFS)等技术。

- 减少构建时间:分层缓存,可大大提高复用率。
- 更小的Docker镜像大小,更少的镜像层,充分利用镜像缓存。
- 存储更少:因为共同的层只需存储一份即可!
- 拉取更快:因为分层了,只需拉取本地不存在的层即可!
- 运行时存储更少:容器运行时可以共享相同的层!
- 提高安全性:因为包含文件少,攻击面减小