分类:docker| 发布时间:2024-12-30 19:04:00
以下操作需要先成功安装 docker
以 Ubuntu 22.04 为例子,安装命令为:
# Add Docker's official GPG key:
sudo apt-get update
sudo apt-get install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc
# Add the repository to Apt sources:
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
可以通过以下命令创建一个 Docker 镜像服务器:
docker run -d -p 5000:5000 --restart=always --name registry registry:2
可以通过如下命令查看 registry 容器的日志
$ docker logs -f registry
默认情况下,您的 Registry 数据作为 Docker 卷持久化存储在主机文件系统上。 如果您希望将 Registry 内容存储在主机文件系统的特定位置(例如,您有一个 SSD 或 SAN 挂载到特定目录),您可以选择使用绑定挂载(bind mount)。 绑定挂载更依赖于 Docker 主机的文件系统布局,但在许多情况下性能更好。 以下示例将主机目录 /mnt/registry 绑定挂载到 Registry 容器中的 /var/lib/registry/ 目录。
$ docker run -d \
-p 5000:5000 \
--restart=always \
--name registry \
-v /mnt/registry:/var/lib/registry \
registry:2
默认情况下,无论您使用绑定挂载点还是逻辑卷,Registry 都会将其数据存储在本地文件系统上。 您可以通过使用存储驱动将 Registry 数据存储在 Amazon S3 存储桶、Google Cloud Platform 或其他存储后端中。
有关更多信息,请参见存储配置选项。
仅在本地主机上可访问的 Registry 功能有限。为了使您的 Registry 对外部主机可访问,您必须首先使用 TLS 对其进行安全保护。
以下示例假设以下情况:
1、创建证书目录
$ mkdir -p certs
将 .crt 和 .key 文件从证书颁发机构复制到 certs 目录中。以下步骤假设文件命名为 domain.crt 和 domain.key。
2、停止正在运行的 Registry
$ docker container stop registry
3、重启 Registry,并指示它使用 TLS 证书
此命令将 certs/ 目录绑定挂载到容器中的 /certs/,并设置环境变量,告诉容器在哪里找到 domain.crt 和 domain.key 文件。Registry 将在 443 端口(默认的 HTTPS 端口)上运行。
$ docker run -d \
--restart=always \
--name registry \
-v "$(pwd)"/certs:/certs \
-e REGISTRY_HTTP_ADDR=0.0.0.0:443 \
-e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/domain.crt \
-e REGISTRY_HTTP_TLS_KEY=/certs/domain.key \
-p 443:443 \
registry:2
4、现在,Docker 客户端可以使用外部地址从您的 Registry 拉取和推送镜像
以下命令演示了这一点:
$ docker pull ubuntu:16.04
$ docker tag ubuntu:16.04 myregistry.domain.com/my-ubuntu
$ docker push myregistry.domain.com/my-ubuntu
$ docker pull myregistry.domain.com/my-ubuntu
使用中间证书
证书颁发机构可能会向您提供中间证书。在这种情况下,您必须将您的证书与中间证书连接在一起,形成一个证书包。 您可以使用 cat 命令来完成此操作:
cat domain.crt intermediate-certificates.pem > certs/domain.crt
您可以像在之前的示例中使用 domain.crt 文件一样使用证书包。
支持 Let’s Encrypt
Registry 支持使用 Let’s Encrypt 自动获取浏览器信任的证书。
有关 Let’s Encrypt 的更多信息,请参见 Let’s Encrypt 官方网站 和 Registry 配置 的相关部分。
使用不安全的 Registry(仅限测试)
可以使用自签名证书,或在不安全的环境中使用 Registry。 除非您为自签名证书设置了验证,否则这仅限于测试。 请参见 运行不安全的 Registry。
下面演示下如何将 Docker 镜像上传到我们部署的 Docker 镜像服务器,为了方便演示,我们直接从官方拉取一个公共镜像并发布到我们部署的镜像服务器
$ docker pull ubuntu
$ docker tag ubuntu localhost:5000/ubuntu
$ docker push localhost:5000/ubuntu
现在我们可以使用以下命令本地已有的镜像:
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu latest b1d9df8ab815 5 weeks ago 78.1MB
localhost:5000/ubuntu latest b1d9df8ab815 5 weeks ago 78.1MB
registry 2.7 b8604a3fe854 3 years ago 26.2MB
现在通过以下命令删除本地镜像: localhost:5000/ubuntu:latest
$ docker rmi localhost:5000/ubuntu
Untagged: localhost:5000/ubuntu:latest
Untagged: localhost:5000/ubuntu@sha256:b0c08a4b639b5fca9aa4943ecec614fe241a0cebd1a7b460093ccaeae70df698
再次验证镜像是否已经删除
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu latest b1d9df8ab815 5 weeks ago 78.1MB
registry 2.7 b8604a3fe854 3 years ago 26.2MB
最后从本地服务器拉取镜像,并验证是否成功
$ docker pull localhost:5000/ubuntu
Using default tag: latest
latest: Pulling from ubuntu
Digest: sha256:b0c08a4b639b5fca9aa4943ecec614fe241a0cebd1a7b460093ccaeae70df698
Status: Downloaded newer image for localhost:5000/ubuntu:latest
localhost:5000/ubuntu:latest
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu latest b1d9df8ab815 5 weeks ago 78.1MB
localhost:5000/ubuntu latest b1d9df8ab815 5 weeks ago 78.1MB
registry 2.7 b8604a3fe854 3 years ago 26.2MB