3.《Docker 从入门到实践》容器与仓库

1 容器操作

容器是独立运行的一个或一组应用,以及它们的运行态环境

容器的正常启动:docker run

  • 基于镜像新建一个容器并启动,容器执行完命令后会自动终止(exited
  • 常用参数1:-t 选项让Docker分配一个伪终端(pseudo-tty)并绑定到容器的标准输入上
  • 常用参数2:-i 则让容器的标准输入保持打开
  • 常用参数3:-d 则让容器以守护态运行,返回信息为容器id

进入启动中的容器:

  • docker attach:进入容器,从这个 stdin 中 exit 会导致容器的停止
  • docker exec -it:进入容器,exit 不会导致容器的停止(更推荐)

容器的停止、启动与删除

  • docker container stop:终止一个运行中的容器
  • docker container start:将一个已经终止(exited)的容器启动运行
  • docker container restart:将一个运行态的容器终止,然后再重新启动
  • docker container rm:删除一个处于终止状态的容器(-f 参数,删除运行中的容器)
  • docker container prune:清理掉所有处于终止状态的容器

容器信息的查看:

  • docker container ls:查看容器信息
  • docker container ls -a:查看容器信息(包含已终止的容器)
  • docker container logs:获取容器的日志/输出信息

其他容器常见操作:

  • docker export :导出容器快照到本地文件
  • docker import: 从容器快照文件中再导入为镜像

相比于 docker save导出的镜像文件,docker import导出的容器快照文件会丢失所有的历史记录和元数据信息(即仅保存容器当时的快照状态),因此体积更小

2 仓库访问

仓库(Repository)是集中存放镜像的地方,注册服务器(Registry)是管理仓库的具体服务器

每个服务器上可以有多个仓库,而每个仓库下面有多个镜像

对于仓库地址 docker.io/ubuntu 来说,docker.io 是注册服务器地址,ubuntu 是仓库名

2.1 Docker Hub

Docker Hub 是 Docker 官方维护的一个公共仓库

常见的相关命令:

docker login # 命令交互式的输入来完成登录Docker Hub
docker logout # 退出登录

docker search # 查找官方仓库中的镜像
docker pull # 下载仓库中的镜像到本地
docker push # 推送本地的镜像到远程仓库

付费功能:自动构建(Automated Builds)镜像

  • 在 Docker Hub 点击右上角头像,在账号设置中关联目标网站
  • 新建或选择已有的仓库,在 Builds 选项卡中选择 `Configure Automated Builds
  • 选取一个目标网站中的项目(需要含 Dockerfile)和分支
  • 指定 Dockerfile 的位置,并保存(至此,就完成了自动构建的过程)
  • 在 Docker Hub 的仓库页面的 Timeline 选项卡中查看每次构建的状态

2.2 私有仓库

<code>docker-registry</code> 是官方提供的工具,可以用于构建私有的镜像仓库

使用官方的 registry 镜像来启动私有仓库:

docker run -d -p 5000:5000 --restart=always --name registry registry

假设私有仓库地址为 127.0.0.1:5000,常见的相关命令:

docker tag ubuntu:latest 127.0.0.1:5000/ubuntu:latest # 打标签
docker push 127.0.0.1:5000/ubuntu:latest # 上传标记的镜像

curl 127.0.0.1:5000/v2/_catalog # 查看仓库中的镜像

配置非 https 仓库地址:

{
  "registry-mirrors": [
    "https://hub-mirror.c.163.com",
    "https://mirror.baidubce.com"
  ],
  "insecure-registries": [
    "192.168.199.100:5000"
  ]
}
  • 对于使用 systemd 的系统,请在 /etc/docker/daemon.json 中配置
  • 对于 Windows 或 Mac,请在桌面版软件的设置中的 Docker Engine 中进行编辑

Docker 默认不允许非 HTTPS 方式推送镜像,可以通过 Docker 的配置来取消这个限制

进阶拓展:私有仓库的高级配置 - 站点证书与http认证

进阶拓展:Nexus 仓库管理器 - 简化本地内部仓库的维护和外部仓库的访问

往年同期文章