Docker笔记7 | 如何使用 Docker Compose 搭建一个拥有权限 认证、TLS 的私有仓库?

简介: Docker笔记7 | 如何使用 Docker Compose 搭建一个拥有权限 认证、TLS 的私有仓库?

1 准备工作

  • 创建一个文件夹registry,后续专门在该文件下操作;
  • 拥有一个私有仓库地址,比如demo.testdocker.com

2 准备站点证书

注意:以下是使用 openssl 自行签发 demo.testdocker.com 的站点 SSL 证书。

2.1 创建CA私钥

$ sudo openssl genrsa -out "root-ca.key" 4096

在这里插入图片描述

2.2 创建CA根证书请求文件

sudo openssl req -new -key "root-ca.key" -out "root-ca.csr" -sha256 -subj '/C=CN/ST=Shanxi/L=Xian/O=Company/CN=Company Docker Registry CA'

在这里插入图片描述

2.3 配置CA根证书

  • 新建root-ca.cnf

在这里插入图片描述

  • 并写入如下内容:

在这里插入图片描述

[root_ca]
basicConstraints = critical,CA:TRUE,pathlen:1
keyUsage = critical, nonRepudiation, cRLSign, keyCertSign
subjectKeyIdentifier=hash

2.4 签发根证书

sudo openssl x509 -req -days 3650 -in "root-ca.csr" -signkey "root-ca.key" -sha256 -out "root-ca.crt" -extfile "root-ca.cnf" -extensions root_ca

在这里插入图片描述

2.5 生成站点SSL私钥

sudo openssl genrsa -out "demo.testdocker.com.key" 4096

在这里插入图片描述

2.6 私钥生成证书请求文件

sudo openssl req -new -key "demo.testdocker.com.key" -out "site.csr" -sha256 -subj '/C=CN/ST=Shanxi/L=Xian/O=Company/CN=demo.testdocker.com'

在这里插入图片描述

2.7 配置证书

  • 新建 site.cnf 文件:

在这里插入图片描述

  • 写入如下内容:

[server]
authorityKeyIdentifier=keyid,issuer
basicConstraints = critical,CA:FALSE
extendedKeyUsage=serverAuth
keyUsage = critical, digitalSignature, keyEncipherment
subjectAltName = DNS:demo.testdocker.com, IP:127.0.0.1
subjectKeyIdentifier=hash

在这里插入图片描述

2.8 签署站点SSL证书

sudo openssl x509 -req -days 750 -in "site.csr" -sha256 -CA "root-ca.crt" -CAkey "root-ca.key" -CAcreateserial -out "demo.testdocker.com.crt" -extfile "site.cnf" -extensions server

在这里插入图片描述

此时拥有了 demo.testdocker.com 的网站 SSL 私钥 demo.testdocker.com.key 和 SSL 证书
demo.testdocker.crt 及 CA 根证书 root-ca.crt

ssl 文件夹并将 docker.domain.com.key docker.domain.com.crt root-ca.crt 这
三个文件移入,删除其他文件
在这里插入图片描述

3 配置私有仓库

  • 私有仓库默认的配置文件位于 /etc/docker/registry/config.yml:
version: 0.1
log:
  accesslog:
    disabled: true
  level: debug
  formatter: text
  fields:
    service: registry
    environment: staging
storage:
  delete:
    enabled: true
  cache:
    blobdescriptor: inmemory
  filesystem:
    rootdirectory: /var/lib/registry
auth:
  htpasswd:
    realm: basic-realm
    path: /etc/docker/registry/auth/nginx.htpasswd
http:
  addr: :443
  host: https://demo.testdocker.com
  headers:
    X-Content-Type-Options: [nosniff]
  http2:
    disabled: false
  tls:
    certificate: /etc/docker/registry/ssl/demo.testdocker.com.crt
    key: /etc/docker/registry/ssl/demo.testdocker.com.key
health:
  storagedriver:
    enabled: true
    interval: 10s
threshold: 3

4 生成 http 认证文件

  • 创建auth文件夹:

在这里插入图片描述

  • 执行如下命令:
sudo docker run --rm --entrypoint htpasswd httpd:alpine -Bbn noamanelson 123456 > auth/nginx.htpasswd
noamanelson@noamanelson-Virtual-Machine:/etc/docker/registry$ sudo docker run --rm --entrypoint htpasswd httpd:alpine -Bbn noamanelson 123456 > auth/nginx.htpasswd
Unable to find image 'httpd:alpine' locally
alpine: Pulling from library/httpd
8a49fdb3b6a5: Already exists
beb66a906b34: Pulling fs layer
01924573e8db: Pulling fs layer
255f194b76b3: Pulling fs layer
0f48f8ea2bc9: Pulling fs layer
390cbd08c8ae: Pulling fs layer
0f48f8ea2bc9: Waiting
390cbd08c8ae: Waiting
beb66a906b34: Verifying Checksum
beb66a906b34: Download complete
beb66a906b34: Pull complete
01924573e8db: Verifying Checksum
01924573e8db: Download complete
01924573e8db: Pull complete
255f194b76b3: Verifying Checksum
255f194b76b3: Download complete
390cbd08c8ae: Verifying Checksum
390cbd08c8ae: Download complete
255f194b76b3: Pull complete
0f48f8ea2bc9: Verifying Checksum
0f48f8ea2bc9: Download complete
0f48f8ea2bc9: Pull complete
390cbd08c8ae: Pull complete
Digest: sha256:3e25d419bf180122f5f9af5cf2180709d8234320ff25514a61f5d1bc3cf46394
Status: Downloaded newer image for httpd:alpine
noamanelson@noamanelson-Virtual-Machine:/etc/docker/registry$ 
  • 编辑编辑 docker-compose.yml

在这里插入图片描述

version: '3'

ervices:
  registry:
    image: registry
    ports:
      - "443:443"
    volumes:
      - ./:/etc/docker/registry
      - registry-data:/var/lib/registry
volumes:
  registry-data:

5 修改hosts文件

  • sudo vim /etc/hosts

在这里插入图片描述

6 启动

  • 使用命令提示找不到,需要安装:
noamanelson@noamanelson-Virtual-Machine:/etc/docker/registry$ sudo docker-compose up -d
sudo: docker-compose:找不到命令
  • 安装docker-compose
sudo apt-get install docker-compose

在这里插入图片描述

  • 再次启动,又报错了:

在这里插入图片描述

  • 应为docker-compose的版本不对,重新卸载docker-compose
sudo apt-get remove docker-compose
  • 再次安装:
sudo apt-get update
sudo apt-get install docker-compose-plugin
  • 启动:
sudo docker compose up -d

在这里插入图片描述

7 测试私有仓库

7.1 移动证书

  • 由于自行签发的 CA 根证书不被系统信任,所以我们需要将 CA 根证书 ssl/root-ca.crt 移入 /etc/docker/certs.d/docker.test.com 文件夹中:
sudo mkdir -p /etc/docker/certs.d/demo.testdocker.com
sudo cp ssl/root-ca.crt /etc/docker/certs.d/demo.testdocker.com/ca.crt

在这里插入图片描述

7.2 登陆仓库

  • sudo docker login demo.testdocker.com

在这里插入图片描述

7.3 拉取推送镜像

# noamanelson是我的用户名,改为自己的即可
sudo docker pull ubuntu:18.04
sudo docker tag ubuntu:18.04 docker.domain.com/noamanelson/ubuntu:18.04
sudo docker push docker.domain.com/noamanelson/ubuntu:18.04
sudo docker image rm docker.domain.com/noamanelson/ubuntu:18.04
sudo docker pull docker.domain.com/noamanelson/ubuntu:18.04

在这里插入图片描述

7.4 退出登陆,并推送镜像

docker logout docker.domain.com
docker push docker.domain.com/noamanelson/ubuntu:18.04

在这里插入图片描述

目录
相关文章
|
1月前
|
关系型数据库 MySQL API
|
13天前
|
监控 NoSQL 时序数据库
《docker高级篇(大厂进阶):7.Docker容器监控之CAdvisor+InfluxDB+Granfana》包括:原生命令、是什么、compose容器编排,一套带走
《docker高级篇(大厂进阶):7.Docker容器监控之CAdvisor+InfluxDB+Granfana》包括:原生命令、是什么、compose容器编排,一套带走
142 77
|
10天前
|
关系型数据库 MySQL Docker
《docker高级篇(大厂进阶):5.Docker-compose容器编排》包括是什么能干嘛去哪下、Compose核心概念、Compose使用三个步骤、Compose常用命令、Compose编排微服务
《docker高级篇(大厂进阶):5.Docker-compose容器编排》包括是什么能干嘛去哪下、Compose核心概念、Compose使用三个步骤、Compose常用命令、Compose编排微服务
62 24
|
12天前
|
关系型数据库 MySQL Docker
《docker高级篇(大厂进阶):5.Docker-compose容器编排》包括是什么能干嘛去哪下、Compose核心概念、Compose使用三个步骤、Compose常用命令、Compose编排微服务
《docker高级篇(大厂进阶):5.Docker-compose容器编排》包括是什么能干嘛去哪下、Compose核心概念、Compose使用三个步骤、Compose常用命令、Compose编排微服务
77 6
|
28天前
|
存储 安全 数据安全/隐私保护
Docker中配置TLS加密的步骤
我们可以在 Docker 中成功配置 TLS 加密,增强 Docker 环境的安全性,保护容器之间以及与外界的通信安全。需要注意的是,在实际应用中,应根据具体情况进行更细致的配置和调整,确保符合安全要求。同时,定期更新证书和私钥,以保障安全性。
51 1
|
2月前
|
缓存 监控 持续交付
|
1月前
|
运维 开发者 Docker
Docker Compose:简化容器化应用的部署与管理
Docker Compose:简化容器化应用的部署与管理
|
1月前
|
Docker 微服务 容器
使用Docker Compose实现微服务架构的快速部署
使用Docker Compose实现微服务架构的快速部署
58 1
|
1月前
|
关系型数据库 MySQL Docker
docker环境下mysql镜像启动后权限更改问题的解决
在Docker环境下运行MySQL容器时,权限问题是一个常见的困扰。通过正确设置目录和文件的权限,可以确保MySQL容器顺利启动并正常运行。本文提供了多种解决方案,包括在主机上设置正确的权限、使用Dockerfile和Docker Compose进行配置、在容器启动后手动更改权限以及使用 `init`脚本自动更改权限。根据实际情况选择合适的方法,可以有效解决MySQL容器启动后的权限问题。希望本文对您在Docker环境下运行MySQL容器有所帮助。
158 1
|
1月前
|
负载均衡 监控 开发者
深入浅出:掌握 Docker Compose 的高级用法
【10月更文挑战第22天】本文深入探讨了 Docker Compose 的高级用法,包括环境变量、服务扩展、网络配置和数据卷管理。通过实例详细介绍了如何利用这些功能提升开发效率和应用部署的灵活性。适合希望深入了解 Docker Compose 的开发者阅读。
下一篇
DataWorks