nexus3搭建私有Docker仓库

Nexus3:

version: "3"
services:
  nexus:
    image: sonatype/nexus3:3.33.0
    volumes:
      - /home/nexus-data:/nexus-data
    restart: always
    ports:
      - "8081:8081"
      # 这两个个端口给docker私有仓库使用,在创建仓库时指定,并且在Dockers中需要添加配置 "insecure-registries": ["172.18.0.1:8082"]
      - "5000:5000"
      - "8082:8082"

启动Nexus3

docker-compose -f nexus3_dockerfile up -d

image-20220615185100339

配置docker仓库

新建docker仓库存储

image-20220615184320755

新建仓库

image-20220615184747399

添加权限

image-20220615184855769

配置docker

在daemon.json中添加如下配置

{
  "insecure-registries": [
    "local.docker.repo:8082","local.docker.repo:5000"
  ],
  "registry-mirrors": [
    "http://local.docker.repo:8082"
  ]
}

在本地host中添加IP映射

# 192.168.142.128 这个是Nexus3安装机器的IP
192.168.142.128   local.docker.repo

测试使用

登录本地docker仓库

docker login local.docker.repo:8082
Login Succeeded

查看本地镜像

docker images
REPOSITORY        TAG       IMAGE ID       CREATED         SIZE
redis             latest    604d80444252   39 hours ago    117MB


将redis镜像打Tag

docker tag redis  local.docker.repo:8082/reids:myreids
#查看
docker images
REPOSITORY                     TAG       IMAGE ID       CREATED         SIZE
redis                          latest    604d80444252   39 hours ago    117MB
local.docker.repo:8082/reids   myreids   604d80444252   39 hours ago    117MB

仔细查看会发现,上面的两个镜像的IMAGE ID是一模一样的,这表示这两个实际上是一个镜像,打Tag只是将这个Image添加了一个远程仓库地址。

## docker inspect 604d80444252
[
  {
    "Id": "sha256:604d80444252dd46a4b4d35bb0226fc16e1022efcd18bf5980650f72d1cf29e5",
    "RepoTags": [
      "redis:latest",
      "local.docker.repo:8082/reids:myreids"
    ],
    "RepoDigests": [
      "redis@sha256:cfda0458239615720cc16d6edf6bae7905c31265f218d2033c43cdb40cd59792",
      "local.docker.repo:8082/reids@sha256:724ea5177e7d07426eea81233896eee4ff37f594097fcb317fac0b67508036ed"
    ],
    "Created": "2022-06-13T20:08:18.293162564Z",
    "Container": "6d8faf114f3b7db70e1440ac6969c969cbcdbf46ab2d51c718d34539cd7ce1a3",
    "Config": {
      "Image": "sha256:67bda0239af475f3fd8fd6d9d7d51dcb47a116600f4be2c47897280800ae1cc2",
      "Volumes": {
        "/data": {}
      },
      "WorkingDir": "/data",
      "Entrypoint": [
        "docker-entrypoint.sh"
      ],
      "OnBuild": null,
      "Labels": null
    },
    "Metadata": {
      "LastTagTime": "2022-06-15T10:58:51.3346662Z"
    }
  }
]

通过命令docker inspect imageId查看到镜像中的RepoTags多了一行数据"local.docker.repo:8082/reids:myreids",这个就是本地的docker仓库,而"redis:latest"则是默认的官方远程仓库。

将打过Tag的镜像推送到Nexus的Docker仓库

docker push local.docker.repo:8082/reids:myreids
The push refers to repository [local.docker.repo:8082/reids]
2e30f92c5d54: Pushed
6f263637b351: Pushed
6278b061fc42: Pushed
309498e524b3: Pushed
49cba0f0997b: Pushed
ad6562704f37: Pushed
myreids: digest: sha256:724ea5177e7d07426eea81233896eee4ff37f594097fcb317fac0b67508036ed size: 1573

image-20220615191220012

创建自己的镜像

FROM redis:latest
# 构建一个自定义的tomcat镜像,需要的jdk和tomcat自行下载

WORKDIR /home

ENV CATALINA_HOME /home/tomcat/apache-tomcat-8.5.40

ENV JAVA_HOME /home/jdk/jdk1.8.0_144
ENV JRE_HOME ${JAVA_HOME}/jre
ENV CLASSPATH .:${JAVA_HOME}/lib:${JRE_HOME}/lib
ENV PATH $PATH:${JAVA_HOME}/bin:${CATALINA_HOME}/bin

CMD [ "catalina.sh", "run" ]

使用上面的Dockerfile创建两个镜像

docker build -t cus:my -f Dockerfile .
[+] Building 0.1s (6/6) FINISHED
 => [internal] load build definition from Dockerfile                                                                         
 => => writing image sha256:75518b6aca2c4e1cd22bec2e9815a8d851b4a7686f5c17066bd1f273077dd4a8         0.0s
 => => naming to docker.io/library/cus:my     
 
 
docker build -t local.docker.repo:8082/cus:my -f Dockerfile .
[+] Building 0.1s (6/6) FINISHED
 => [internal] load build definition from Dockerfile                                                                         
 => => writing image sha256:75518b6aca2c4e1cd22bec2e9815a8d851b4a7686f5c17066bd1f273077dd4a8                                 
 => => naming to local.docker.repo:8082/cus:my                                              
 
  docker images
REPOSITORY                     TAG       IMAGE ID       CREATED         SIZE
cus                            my        75518b6aca2c   21 hours ago    117MB
local.docker.repo:8082/cus     my        75518b6aca2c   21 hours ago    117MB
redis                          latest    604d80444252   39 hours ago    117MB
local.docker.repo:8082/reids   myreids   604d80444252   39 hours ago    117MB
 
 docker inspect 75518b6aca2c

从上面结果可以看到,两个镜像实际还是同一个,只是有两个不同的远程仓库地址

推送镜像

docker push local.docker.repo:8082/cus:my
The push refers to repository [local.docker.repo:8082/cus]
5f70bf18a086: Pushed
2e30f92c5d54: Layer already exists
6f263637b351: Layer already exists
6278b061fc42: Layer already exists
309498e524b3: Layer already exists
49cba0f0997b: Layer already exists
ad6562704f37: Layer already exists
my: digest: sha256:eaef54ee0c7eebc47c2bdb8cab81c33909f7c110c9e93ec94f1c1de8054eca36 size: 1779



docker push cus:my
The push refers to repository [docker.io/library/cus]
5f70bf18a086: Preparing
2e30f92c5d54: Preparing
6f263637b351: Preparing
6278b061fc42: Preparing
309498e524b3: Preparing
49cba0f0997b: Waiting
ad6562704f37: Waiting
denied: requested access to the resource is denied
官方的仓库地址推送失败了,这个是正常的,因为我没有登录且也没有权限

image-20220615192331750

posted @ 2022-06-15 19:26  菜阿  阅读(921)  评论(0编辑  收藏  举报