一、安装 Docker
-
解压docker.tar文件:
shroot@iZbp1h35mcqj4eppj2bo1rZ:/data/dw# tar xf docker.tar
解压后检查当前目录,发现解压出一个名为
docker_install
的目录。 -
进入解压出的目录并查看内容:
shroot@iZbp1h35mcqj4eppj2bo1rZ:/data/dw# cd docker_install/ root@iZbp1h35mcqj4eppj2bo1rZ:/data/dw/docker_install# ls docker-20.10.24-aarch64.tgz docker-20.10.24-nvidia-x86_64.tgz install.sh README.md uninstall.sh upgrade.sh VERSION
解压出的目录包含多个文件,其中
install.sh
脚本用于安装 Docker。 -
执行安装脚本并指定安装路径和注册表地址:
shroot@iZbp1h35mcqj4eppj2bo1rZ:/data/dw/docker_install# bash install.sh /data/docker 127.0.0.1:5000
安装完成后,Docker 服务处于
inactive (dead)
状态。 -
创建目录并检查 Docker 镜像:
shroot@iZbp1h35mcqj4eppj2bo1rZ:/data# mkdir images root@iZbp1h35mcqj4eppj2bo1rZ:/data# docker images
初始状态下没有任何镜像。
-
加载registry.tar镜像文件:
shroot@iZbp1h35mcqj4eppj2bo1rZ:/data/dw# docker load < registry.tar
加载成功后,镜像 ID 为
2d4f4b5309b1
。 -
给镜像打标签并成功:
shroot@iZbp1h35mcqj4eppj2bo1rZ:/data/images# docker tag 2d4f4b5309b1 registry:latest
-
检查镜像是否打标签成功:
shroot@iZbp1h35mcqj4eppj2bo1rZ:/data/images# docker images REPOSITORY TAG IMAGE ID CREATED SIZE registry latest 2d4f4b5309b1 4 years ago 26.2MB
总结:
- 成功解压并安装了 Docker。
- 加载了
registry.tar
镜像。 - 成功为镜像打上了
registry:latest
标签。 - 需要注意的是,安装完成后 Docker 服务未启动,可能需要手动启动 Docker 服务。
二、准备 Docker Registry 配置文件
-
创建并编辑 config.yml 文件:
shroot@iZbp1h35mcqj4eppj2bo1rZ:/data/images# vim config.yml
在
config.yml
文件中添加以下内容:ymlversion: 0.1 log: fields: service: registry storage: delete: enabled: true cache: blobdescriptor: inmemory filesystem: rootdirectory: /var/lib/registry http: addr: :5000 headers: X-Content-Type-Options: [nosniff] health: storagedriver: enabled: true interval: 10s threshold: 3
配置文件说明:
version
:配置文件版本。log.fields.service
:日志服务名称。storage.delete.enabled
:启用删除镜像功能。storage.cache.blobdescriptor
:缓存策略。storage.filesystem.rootdirectory
:镜像存储目录。http.addr
:注册表服务监听地址。http.headers.X-Content-Type-Options
:HTTP 头配置。health.storagedriver
:存储驱动健康检查配置。
三、运行 Docker Registry 容器
-
运行 Docker Registry 容器:
shdocker run -d -e REGISTRY_STORAGE_DELETE_ENABLED="true" --name docker-registry --restart=always -p 5000:5000 -v $PWD/registry:/var/lib/registry -v $PWD/config.yml:/etc/docker/registry/config.yml registry
该命令执行后输出一个容器 ID
bb88dec8a383eb0155bd7485f4fbbb031354658a8a3d1a7761795e123259c4d9
,表示容器启动成功。具体参数解释:
-d
:后台运行容器。-e REGISTRY_STORAGE_DELETE_ENABLED="true"
:设置环境变量,启用删除镜像功能。--name docker-registry
:为容器指定名称docker-registry
。--restart=always
:设置容器自动重启策略。-p 5000:5000
:将主机的 5000 端口映射到容器的 5000 端口。-v $PWD/registry:/var/lib/registry
:将当前目录下的registry
目录挂载到容器内的/var/lib/registry
目录。-v $PWD/config.yml:/etc/docker/registry/config.yml
:将当前目录下的config.yml
文件挂载到容器内的/etc/docker/registry/config.yml
文件。registry
:使用的镜像名称。
-
查看运行中的 Docker 容器:
shroot@iZbp1h35mcqj4eppj2bo1rZ:/data/images# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES bb88dec8a383 registry "/entrypoint.sh /etc..." 6 seconds ago Up 5 seconds 0.0.0.0:5000->5000/tcp, :::5000->5000/tcp docker-registry
可以看到容器
docker-registry
正在运行,且端口映射正确,状态正常。 -
检查当前目录内容:
shroot@iZbp1h35mcqj4eppj2bo1rZ:/data/images# ls config.yml registry
当前目录下有两个文件/目录:
config.yml
:Docker Registry 的配置文件。registry
:挂载到容器内/var/lib/registry
的目录,用于存储镜像数据。
总结:
- 成功运行了一个 Docker Registry 容器,并通过环境变量启用了删除镜像功能。
- 通过端口映射和卷挂载,确保主机和容器之间的配置和数据共享。
- 容器运行状态正常,可以通过
docker ps
命令确认。
四、配置 Docker Daemon 以支持私有注册表
-
编辑 Docker Daemon 配置文件:
shroot@iZbp1h35mcqj4eppj2bo1rZ:/data/dw# cat /etc/docker/daemon.json { "exec-opts": ["native.cgroupdriver=systemd"], "max-concurrent-downloads": 10, "log-driver": "json-file", "log-level": "warn", "log-opts": { "max-size": "10m", "max-file": "3" }, "bip":"172.16.0.1/16", "insecure-registries":["127.0.0.1:5000","47.251.16.255:5000"], "data-root":"/data/docker" }
配置文件说明:
exec-opts
:Docker 容器的执行选项。max-concurrent-downloads
:最大并发下载数。log-driver
:日志驱动类型。log-level
:日志级别。log-opts
:日志选项。bip
:Docker 网桥 IP 地址。insecure-registries
:不安全的注册表地址列表。data-root
:Docker 数据目录。
-
重启 Docker 服务:
shroot@iZbp1h35mcqj4eppj2bo1rZ:/data/images# systemctl restart docker
五、从私有注册表拉取镜像
-
拉取镜像:
shroot@iZbp1h35mcqj4eppj2bo1rZ:/data/images# docker pull 47.251.16.255:5000/openmmlab/lmdeploy:latest
拉取成功后,输出如下信息:
shlatest: Pulling from openmmlab/lmdeploy 846c0b181fff: Pulling fs layer 846c0b181fff: Pull complete 61b1f751e984: Pull complete ... Digest: sha256:5fd5c031bf1cf2aa23153cfd5dd2bb8c9d9ce7062454c8f81d9b09ac5677fee2 Status: Downloaded newer image for 47.251.16.255:5000/openmmlab/lmdeploy:latest 47.251.16.255:5000/openmmlab/lmdeploy:latest
-
检查镜像是否拉取成功:
shroot@iZbp1h35mcqj4eppj2bo1rZ:/data/dw# docker images REPOSITORY TAG IMAGE ID CREATED SIZE 47.251.16.255:5000/openmmlab/lmdeploy latest 177c26fffb4d 3 weeks ago 20.1GB registry latest 2d4f4b5309b1 4 years ago 26.2MB
六、推送镜像到私有注册表
-
标记镜像:
shroot@iZbp1h35mcqj4eppj2bo1rZ:/data/dw# docker tag 47.251.16.255:5000/openmmlab/lmdeploy 127.0.0.1:5000/openmmlab/lmdeploy
-
推送镜像:
shroot@iZbp1h35mcqj4eppj2bo1rZ:/data/dw# docker push 127.0.0.1:5000/openmmlab/lmdeploy
推送成功后,输出如下信息:
shUsing default tag: latest The push refers to repository [127.0.0.1:5000/openmmlab/lmdeploy] 54444fae79ec: Pushed 5f70bf18a086: Pushed ee3dcf62fd47: Pushed ... latest: digest: sha256:5fd5c031bf1cf2aa23153cfd5dd2bb8c9d9ce7062454c8f81d9b09ac5677fee2 size: 6421
-
检查推送结果:
shroot@iZbp1h35mcqj4eppj2bo1rZ:/data/dw# docker images REPOSITORY TAG IMAGE ID CREATED SIZE 127.0.0.1:5000/openmmlab/lmdeploy latest 177c26fffb4d 3 weeks ago 20.1GB 47.251.16.255:5000/openmmlab/lmdeploy latest 177c26fffb4d 3 weeks ago 20.1GB registry latest 2d4f4b5309b1 4 years ago 26.2MB
总结:
- 成功标记并推送镜像到本地私有注册表。
- 确保镜像在私有注册表中可用。