考虑到未来可能有多种项目资产需要管理,这里选用Nexus搭建私有仓库,开源版有UI和足够的功能可以管理maven,nuget,docker等包。

项目构建

项目目录

  • nexus

    • data

      • secret.json

    • docker-compose.yml

Docker Compose

version: '3.8'

services:
  nexus:
    image: sonatype/nexus3:latest
    container_name: nexus
    ports:
      - "18081:8081"
    volumes:
      - ./data:/nexus-data
    environment:
      - INSTALL4J_ADD_VM_PARAMS=-Xms256m -Xmx2g -XX:MaxDirectMemorySize=2g
      - NEXUS_SECRETS_KEY_FILE=/nexus-data/secret.json
    restart: unless-stopped

secret.json

{
  "active": "active-secret-id",
  "keys": [
    {
      "id": "active-secret-id",
      "key": "active-secret-key"
    }
  ]
}

初始账户

用户名:admin

密码:通过以下命令获取

sudo docker exec nexus cat /nexus-data/admin.password

Docker仓库配置

新建Docker仓库

Blob Stores > Create Blob Store > File,来配置docker的存放区。

Repositories > Create repository > docker (hosted),这里要注意勾选Http,并填写端口号,后面docker命令行login, push, pull等操作都基于此端口号。Blob Store选择刚刚配置的。

如果要配置允许不经身份验证的pull操作,就勾选Allow anonymous docker pull。

如果要允许某个版本重新deploy,就配置Deployment policy。

配置自动回收

System > Tasks > Create task > Docker - Delete unused manifests and images,根据表单选择清理的Blob和频率。这样删除了某个镜像后,这个task可以在指定时间回收相关的空间。

Docker基础操作

打包测试镜像

目录

  • test-image

    • Dockerfile

    • index.html

index.html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Test Page</title>
</head>
<body>
    <h1>Welcome to the Test Page</h1>
    <p>This is a simple web page for testing purposes.</p>
</body>
</html>
Dockerfile
FROM busybox:glibc
COPY ./ /www
CMD ["httpd", "-f", "-p", "80", "-h", "/www"]
EXPOSE 80

打包命令

docker build -t test-image:latest -t test-image:v1.0.0 .

登录远程仓库

docker login registry.mydocker.com:2023 -u user -p password

本地镜像打标签

docker tag test-image:latest registry.mydocker.com:2023/test/test-image:latest

推送镜像到远程仓库

docker push registry.mydocker.com:2023/test/test-image:latest

列出远程仓库所有镜像

curl -u user:password \\n  "http://registry.mydocker.com:2023/service/rest/v1/components?repository=docker"

拉取远程镜像

docker pull registry.mydocker.com:2023/test/test-image:latest

删除本地镜像

docker rmi test-image:latest

删除远程镜像

可以通过Nexus UI操作

常见问题解决

http访问提示不安全

For Mac

Mac系统中,打开docker客户端,在配置中找到如下位置,添加insecure-registries相关配置

For Linux

#新建docker目录
mkdir -p /etc/docker

#新建daemon.json文件
vim /etc/docker/daemon.json

#在insecure-registries中增加你的仓库地址
{ "insecure-registries":["registry.mydocker.com:2023"] }

#保存修改后,重启docker
systemctl restart docker