文章目录

  • 1 DockerHub公共镜像市场
    • 1.1 登录
    • 1.2 基本操作
    • 1.3 自动创建
  • 2 第三方镜像市场
    • 2.1 查看镜像
    • 2.2 下载镜像
  • 3 搭建本地私有仓库
    • 3.1 使用registry镜像创建私高仓库
    • 3.2 管理私有仓库
      • 3.2.1 上传镜像到本地仓库
      • 3.2.2 搜索本地仓库镜像
      • 3.2.3 下载本地仓库镜像
      • 3.2.4 配置非https仓库地址
    • 3.3 私有仓库高级配置
      • 3.3.1 准备站点证书
      • 3.3.2 配置私有仓库
      • 3.3.3 测试私有仓库功能
    • 3.4 Nexus3
      • 3.4.1 启动Nexus容器
      • 3.4.2 创建仓库
      • 3.4.3 添加访问权限
      • 3.4.4 重启nexus服务,开放5000端口
      • 3.4.5 测试
      • 3.4.6 docker登录仓库
      • 3.4.7 操作镜像
      • 3.4.8 服务端启动方式改进,将Nexus3注册成系统服务
      • 3.4.9 改nexus仓库的http为https

仓库(Repository)是集中存放镜像的地方,又分公共仓库和私有仓库。

有时候容易把仓库与注册服务器(Registry)混淆 。 实际上注册服务器是存放仓库的具体服务器,一个注册服务器上可以有多个仓库,而每个仓库下面可以有多个镜像。

从这方面来说,仓库可以被认为是一个具体的项目或目录。 例如对于仓库地址private-docker.com/ubuntu来说,private-docker.com是注册服务器地址,ubuntu是仓库名。

1 DockerHub公共镜像市场

Docker Hub是Docker官方提供的最大的公共镜像仓库,目前包括了超过100000的镜像,地址为https://hub.docker.com。 大部分对镜像的需求,都可以通过在Docker Hub中直接下载镜像来实现。

1.1 登录

可以通过命令行执行docker login命令来输入用户名、密码和邮箱来完成注册和登录。

注册成功后,本地用户目录下会自动创建.docker/config.jon文件,保存用户的认证信息。登录成功的用户可以上传个人制作的镜像到Docker Hub。

1.2 基本操作

用户无须登录即可通过docker search命令来查找官方仓库中的镜像,并利用docker [image] pull命令来将它下载到本地。

(base) pang@pang-HP:~$ sudo docker search centos
NAME                                         DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
centos                                       The official build of CentOS.                   7191      [OK]
centos/systemd                               systemd enabled base container.                 108                  [OK]
centos/mysql-57-centos7                      MySQL 5.7 SQL database server                   95
kasmweb/centos-7-desktop                     CentOS 7 desktop for Kasm Workspaces            21
centos/mongodb-36-centos7                    MongoDB NoSQL database server                   8
kasmweb/core-centos-7                        CentOS 7 base image for Kasm Workspaces         3
continuumio/centos5_gcc5_base                                                                3
couchbase/centos7-systemd                    centos7-systemd images with additional debug…   1                    [OK]
spack/centos7                                CentOS 7 with Spack preinstalled                1
spack/centos-stream                                                                          0
couchbase/centos-72-jenkins-core                                                             0
fnndsc/centos-python3                        Source for a slim Centos-based Python3 image…   0                    [OK]
couchbase/centos-72-java-sdk                                                                 0
couchbase/centos-69-sdk-nodevtoolset-build                                                   0
couchbase/centos-70-sdk-build                                                                0
datadog/centos-i386                                                                          0
spack/centos6                                CentOS 6 with Spack preinstalled                0
starlingx/stx-centos                         StarlingX centos                                0
ibmcom/fhe-toolkit-centos-amd64              The IBM Fully Homomorphic Encryption (FHE) T…   0
ibmcom/fhe-toolkit-centos                    The IBM Fully Homomorphic Encryption (FHE) T…   0
apache/couchdbci-centos                      Apache CouchDB CI CentOS                        0
silintl/openldap                             OpenLDAP base image on Centos 6                 0                    [OK]
bitnami/centos-extras-base                                                                   0
bitnami/centos-base-buildpack                Centos base compilation image                   0                    [OK]
couchbase/centos-69-sdk-build                                                                0
(base) pang@pang-HP:~$

根据是否为官方提供,可将这些镜像资源分为两类:

  • 一种是类似于centos这样的基础镜像,也称为根镜像。这些镜像是由Docker公司创建、验证、支持、提供 ,这样的镜像往往使用单个单词作为名字;
  • 另一种类型的镜像,比如ansible/centos7-ansible镜像,是由Docker用户ansible创建并维护的,带有用户名称为前缀,表明是某用户下的某仓库。 可以通过用户名称前缀"user_name/镜像名"来指定使用某个用户提供的镜像。

用户也可以在登录后通过docker push命令来将本地镜像推送到Docker Hub。

1.3 自动创建

2021年7月26日之后,该项功能仅限付费用户使用。

自动创建( Automated Builds)是Docker Hub提供的自动化服务,这一功能可以自动跟随项目代码的变更而重新构建镜像 。
例如,用户构建了某应用镜像,如果应用发布新版本,用户需要手动更新镜像。 而自动创建则允许用户通过Docker Hub指定跟踪一个目标网站(目前支持GitHub或BitBucket)上的项目,一旦项目发生新的提交,则自动执行创建。

要配置自动创建,包括如下的步骤:

  1. 创建并登录Docker Hub,并且在Docker Hub点击右上角头像,在账号设置(Account Settings)中关联(Linked Accounts)目标网站(如Github);
  2. 在目标网站中允许Docker Hub访问服务;
  3. 在Docker Hub中配置一个“自动创建”类型的项目,即新建或选择已有的仓库,在Builds选项卡中选择Configure Automated Builds;
  4. 选取一个目标网站中的项目(需要含Dockerfile)和分支;
  5. 指定Dockerfile的位置,并提交创建。

之后,可以在Docker Hub的“自动创建”页面中跟踪每次创建的状态 。

2 第三方镜像市场

国内不少云服务商都提供了Docker镜像市场包括腾讯云、网易云、阿里云等。下面以时速云为例,介绍如何使用这些市场。

2.1 查看镜像

访问https://hub.tenxcloud.com,即可看到己存在的仓库和存储的镜像,包括Ubuntu、Java、Mongo、MySQL、Nginx等热门仓库和镜像。 时速云官方仓库中的镜像会保持与DockerHub中官方镜像的同步。

以MongoDB仓库为例,其中包括了2.6、3.0和3.2等镜像。

2.2 下载镜像

下载镜像也是使用docker pull命令,但是要在镜像名称前添加注册服务器的具体地址。格式为index.tenxcloud.com/<namespace>/<repository>:<tag>

例如,要下载Docker官方仓库中的node:latest镜像,可以使用如下命令 :

$ docker pull index.tenxcloud.com/docker_library/node:latest

正常情况下,镜像下载会比直接从Docker Hub下载快得多。通过docker images命令来查看下载到本地的镜像:

$ docker images
REPOSITORY TAG IMAGE ID CREATED S 工 ZEindex tenxcloud.com/docker_library/node
latest e79fe5711c94 4 weeks ago 660 7 MB

下载后,可以更新镜像的标签,与官方标签保持一致,方便使用:

$ docker tag index.tenxcloud.com/docker_library/node:latest node:latest

除了每次在pull中填写注册地址外,也可以如第1章2.2.4节说明的,配置加速服务。

另外,除了使用这些公共镜像服务外,还可以搭建本地的私有仓库服务器,将在下一节介绍。

3 搭建本地私有仓库

有时候使用Docker Hub这样的公共仓库可能不方便,用户可以创建一个本地仓库供私人使用。

3.1 使用registry镜像创建私高仓库

docker-registry是官方提供的工具,可以用于构建私有的镜像仓库。本节内容基于docker-registry v2.x版本。

安装Docker后,可以通过官方提供的registry镜像来简单搭建一套本地私有仓库环境:

$ docker run -d -p 5000:5000 registry:2

这将自动下载井启动一个registry容器,创建本地的私有仓库服务。

例如:

(base) pang@pang-HP:~$ sudo docker run -d -p 5000:5000 registry:2
Unable to find image 'registry:2' locally
2: Pulling from library/registry
2408cc74d12b: Pull complete
ea60b727a1ce: Pull complete
c87369050336: Pull complete
e69d20d3dd20: Pull complete
fc30d7061437: Pull complete
Digest: sha256:bedef0f1d248508fe0a16d2cacea1d2e68e899b2220e2258f1b604e1f327d475
Status: Downloaded newer image for registry:2
557793dbfb9533ec8559bc8b0a88e882d4e4ed1638f13835a7b375012e76f425
(base) pang@pang-HP:~$ sudo docker images
REPOSITORY    TAG            IMAGE ID       CREATED        SIZE
python        3              763642b839b7   2 days ago     55.4MB
debian        stretch-slim   a88d8e7bd33c   2 weeks ago    55.4MB
registry      2              773dbf02e42e   3 weeks ago    24.1MB
hello-world   latest         feb5d9fea6a5   8 months ago   13.3kB
centos        7              eeb6ee3f44bd   9 months ago   204MB
(base) pang@pang-HP:~$ sudo docker ps -a
CONTAINER ID   IMAGE        COMMAND                  CREATED          STATUS          PORTS                                       NAMES
557793dbfb95   registry:2   "/entrypoint.sh /etc…"   44 minutes ago   Up 44 minutes   0.0.0.0:5000->5000/tcp, :::5000->5000/tcp   wonderful_shannon
98bbce6f5691   centos:7     "/bin/bash"              24 hours ago     Up 24 hours                                                 reverent_morse
(base) pang@pang-HP:~$

默认情况下,仓库会被创建在容器的/var/lib/registry目录下。可以通过-v参数来将镜像文件存放在本地的指定路径 。

例如下面的例子将上传的镜像放到/opt/data/registry目录:

$ docker run -d -p 5000 5000 -v /opt/data/registry:/var/lib/registry registry:2

此时,在本地将启动一个私有仓库服务,监听端口为5000。

3.2 管理私有仓库

私有仓库可以通过registry提供的api来操作,可以参考官网的api文档,链接如下:https://docs.docker.com/registry/spec/api/#detail

3.2.1 上传镜像到本地仓库

  • 先在本机查看已有的镜像。
(base) pang@pang-HP:~$ sudo docker image ls
REPOSITORY    TAG            IMAGE ID       CREATED        SIZE
python        3              763642b839b7   2 days ago     55.4MB
debian        stretch-slim   a88d8e7bd33c   2 weeks ago    55.4MB
registry      2              773dbf02e42e   3 weeks ago    24.1MB
hello-world   latest         feb5d9fea6a5   8 months ago   13.3kB
centos        7              eeb6ee3f44bd   9 months ago   204MB
(base) pang@pang-HP:~$
  • 使用docker tag将python:3这个镜像标记为127.0.0.1:5000/python:3,语法格式docker tag IMAGE[:TAG] [REGISTRY_HOST[:REGISTRY_PORT]/]NAME[:TAG]
(base) pang@pang-HP:~$ sudo docker tag python:3 127.0.0.1:5000/python:3
(base) pang@pang-HP:~$ sudo docker images
REPOSITORY              TAG            IMAGE ID       CREATED        SIZE
127.0.0.1:5000/python   3              763642b839b7   2 days ago     55.4MB
python                  3              763642b839b7   2 days ago     55.4MB
debian                  stretch-slim   a88d8e7bd33c   2 weeks ago    55.4MB
registry                2              773dbf02e42e   3 weeks ago    24.1MB
hello-world             latest         feb5d9fea6a5   8 months ago   13.3kB
centos                  7              eeb6ee3f44bd   9 months ago   204MB
(base) pang@pang-HP:~$
  • 使用docker push上传标记的镜像
(base) pang@pang-HP:~$ sudo docker push 127.0.0.1:5000/python:3
The push refers to repository [127.0.0.1:5000/python]
692f0d941fcb: Pushed
2ddc9f2aee6d: Pushed
3: digest: sha256:c001da366c3e68619a8bcd8a61b6a888b7e1bb3a293ac30382d865d0fad3789f size: 736
(base) pang@pang-HP:~$
  • 用curl查看仓库中的镜像
(base) pang@pang-HP:~$ curl http://127.0.0.1:5000/v2/_catalog
{"repositories":["python"]}
(base) pang@pang-HP:~$

这里可以看到 {“repositories”:[“python”]},表明镜像已经被成功上传了。

3.2.2 搜索本地仓库镜像

  • 查询本地仓库有哪些镜像
# 使用命令  curl -XGET http://ip:端口/v2/_catalog
(base) pang@pang-HP:~$ curl -XGET http://127.0.0.1:5000/v2/_catalog
{"repositories":["python"]}
(base) pang@pang-HP:~$
  • 获取某个镜像的标签列表
# 使用命令   curl -XGET http://ip:端口/v2/私有仓库镜像名称/tags/list
(base) pang@pang-HP:~$ curl -XGET http://127.0.0.1:5000/v2/python/tags/list
{"name":"python","tags":["3"]}
(base) pang@pang-HP:~$

3.2.3 下载本地仓库镜像

先删除已有镜像,再尝试从私有仓库中下载这个镜像。

(base) pang@pang-HP:~$ sudo docker rmi 127.0.0.1:5000/python:3
Untagged: 127.0.0.1:5000/python:3
Untagged: 127.0.0.1:5000/python@sha256:c001da366c3e68619a8bcd8a61b6a888b7e1bb3a293ac30382d865d0fad3789f
(base) pang@pang-HP:~$ sudo docker images
REPOSITORY    TAG            IMAGE ID       CREATED        SIZE
python        3              763642b839b7   2 days ago     55.4MB
debian        stretch-slim   a88d8e7bd33c   2 weeks ago    55.4MB
registry      2              773dbf02e42e   3 weeks ago    24.1MB
hello-world   latest         feb5d9fea6a5   8 months ago   13.3kB
centos        7              eeb6ee3f44bd   9 months ago   204MB
(base) pang@pang-HP:~$ sudo docker pull 127.0.0.1:5000/python:3
3: Pulling from python
Digest: sha256:c001da366c3e68619a8bcd8a61b6a888b7e1bb3a293ac30382d865d0fad3789f
Status: Downloaded newer image for 127.0.0.1:5000/python:3
127.0.0.1:5000/python:3
(base) pang@pang-HP:~$ sudo docker images
REPOSITORY              TAG            IMAGE ID       CREATED        SIZE
127.0.0.1:5000/python   3              763642b839b7   2 days ago     55.4MB
python                  3              763642b839b7   2 days ago     55.4MB
debian                  stretch-slim   a88d8e7bd33c   2 weeks ago    55.4MB
registry                2              773dbf02e42e   3 weeks ago    24.1MB
hello-world             latest         feb5d9fea6a5   8 months ago   13.3kB
centos                  7              eeb6ee3f44bd   9 months ago   204MB
(base) pang@pang-HP:~$

3.2.4 配置非https仓库地址

如果不想使用127.0.0.1:5000作为仓库地址,比如想让本网段的其他主机也能把镜像推送到私有仓库。就得把例如192.168.199.100:5000这样的内网地址作为私有仓库地址,这时会发现无法成功推送镜像。

这是因为Docker默认不允许非HTTPS方式推送镜像。我们可以通过Docker的配置选项来取消这个限制。

  • Ubuntu 16.04+, Debian 8+, centos7等使用systemd的系统
    请在 /etc/docker/daemon.json 中写入如下内容(如果文件不存在请新建该文件)
{"registry-mirror": ["https://hub-mirror.c.163.com","https://mirror.baidubce.com"],"insecure-registries": ["192.168.199.100:5000"]
}
  • 重启docker服务:
systemctl daemon-reload
systemctl restart docker

3.3 私有仓库高级配置

前面搭建了一个具有基础功能的私有仓库,更安全的方式是使用自签名证书,具体可以参考docker官网介绍

本小节我们来使用Docker Compose搭建一个拥有权限认证、TLS的私有仓库。这种方式可以在测试环境中使用,因为可信的证书颁发机构都需要有一个可用的域名,我们在内网部署的时候不一定是有域名的,可能就是一个内网IP地址。

  • docker registry的server上新建一个文件夹,以下步骤均在该文件夹中进行。
mkdir -p ssl

3.3.1 准备站点证书

这里我们假设没有互联网域名,所以这里使用openssl自行签发证书(如果拥有一个域名,可以使用国内各大云服务商均提供免费的站点证书)。

假设我们将要搭建的私有仓库地址为docker.domain.com,下面我们介绍使用openssl自行签发docker.domain.com的站点SSL证书。

  • 第一步创建CA私钥。
$ openssl genrsa -out "root-ca.key" 4096
  • 第二步利用私钥创建CA根证书请求文件。
$ openssl req \-new -key "root-ca.key" \-out "root-ca.csr" -sha256 \-subj '/C=CN/ST=Shanxi/L=Datong/O=Your Company Name/CN=Your Company Name Docker Registry CA'

以上命令中-subj参数里的/C表示国家,如CN;/ST表示省;/L表示城市或者地区;/O表示组织名;/CN通用名称。

  • 第三步配置CA根证书,新建root-ca.cnf。
[root_ca]
basicConstraints = critical,CA:TRUE,pathlen:1
keyUsage = critical, nonRepudiation, cRLSign, keyCertSign
subjectKeyIdentifier=hash

第四步签发根证书。

$ 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
  • 第五步生成站点SSL私钥。
$ openssl genrsa -out "docker.domain.com.key" 4096
  • 第六步使用私钥生成证书请求文件。
$ openssl req -new -key "docker.domain.com.key" -out "site.csr" -sha256 \-subj '/C=CN/ST=Shanxi/L=Datong/O=Your Company Name/CN=docker.domain.com'
  • 第七步配置证书,新建site.cnf文件。
[server]
authorityKeyIdentifier=keyid,issuer
basicConstraints = critical,CA:FALSE
extendedKeyUsage=serverAuth
keyUsage = critical, digitalSignature, keyEncipherment
subjectAltName = DNS:docker.domain.com, IP:127.0.0.1
subjectKeyIdentifier=hash
  • 第八步签署站点SSL证书。
$ openssl x509 -req -days 750 -in "site.csr" -sha256 \-CA "root-ca.crt" -CAkey "root-ca.key"  -CAcreateserial \-out "docker.domain.com.crt" -extfile "site.cnf" -extensions server

这样已经拥有了docker.domain.com的网站SSL私钥docker.domain.com.key和SSL证书docker.domain.com.crt及CA根证书root-ca.crt

新建ssl文件夹并将docker.domain.com.keydocker.domain.com.crtroot-ca.crt这三个文件移入,删除其他文件。

3.3.2 配置私有仓库

私有仓库默认的配置文件位于容器内的/etc/docker/registry/config.yml,我们先在本地编辑config.yml,之后挂载到容器中。

version: 0.1
log:accesslog:disabled: truelevel: debugformatter: textfields:service: registryenvironment: staging
storage:delete:enabled: truecache:blobdescriptor: inmemoryfilesystem:rootdirectory: /var/lib/registry
auth:htpasswd:realm: basic-realmpath: /etc/docker/registry/auth/nginx.htpasswd
http:addr: :443host: https://docker.domain.comheaders:X-Content-Type-Options: [nosniff]http2:disabled: falsetls:certificate: /etc/docker/registry/ssl/docker.domain.com.crtkey: /etc/docker/registry/ssl/docker.domain.com.key
health:storagedriver:enabled: trueinterval: 10s
threshold: 3
  • 生成http认证文件
$ mkdir auth$ docker run --rm \--entrypoint htpasswd \httpd:alpine \-Bbn username password > auth/nginx.htpasswd

将上面的 username password 替换为你自己的用户名和密码。

  • 编辑docker-compose.yml
version: '3'services:registry:image: registryports:- "443:443"volumes:- ./:/etc/docker/registry- registry-data:/var/lib/registry
volumes:registry-data:
  • 修改hosts,编辑/etc/hosts
127.0.0.1 docker.domain.com
启动
$ docker-compose up -d

这样我们就搭建好了一个具有权限认证、TLS的私有仓库,接下来我们测试其功能是否正常。

3.3.3 测试私有仓库功能

由于自行签发的CA根证书不被系统信任,所以我们需要将CA根证书ssl/root-ca.crt移入/etc/docker/certs.d/docker.domain.com文件夹中。

$ sudo mkdir -p /etc/docker/certs.d/docker.domain.com$ sudo cp ssl/root-ca.crt /etc/docker/certs.d/docker.domain.com/ca.crt

登录到私有仓库。

$ docker login docker.domain.com

尝试推送、拉取镜像。

$ docker pull ubuntu:18.04$ docker tag ubuntu:18.04 docker.domain.com/username/ubuntu:18.04$ docker push docker.domain.com/username/ubuntu:18.04$ docker image rm docker.domain.com/username/ubuntu:18.04$ docker pull docker.domain.com/username/ubuntu:18.04

如果我们退出登录,尝试推送镜像。

$ docker logout docker.domain.com$ docker push docker.domain.com/username/ubuntu:18.04no basic auth credentials

发现会提示没有登录,不能将镜像推送到私有仓库中。

3.4 Nexus3

使用Docker官方的Registry创建的仓库面临一些维护问题。比如某些镜像删除以后空间默认是不会回收的,需要一些命令去回收空间然后重启Registry。在企业中把内部的一些工具包放入Nexus中是比较常见的做法,最新版本Nexus3.x 全面支持Docker的私有镜像。所以使用Nexus3.x一个软件来管理Docker,Maven,Yum,PyPI等是一个明智的选择。

3.4.1 启动Nexus容器

$ docker run -d --name nexus3 --restart=always \-p 8081:8081 \--mount src=nexus-data,target=/nexus-data \sonatype/nexus3

首次运行需等待3-5分钟,你可以使用docker logs nexus3 -f查看日志:

$ docker logs nexus3 -f2021-03-11 15:31:21,990+0000 INFO  [jetty-main-1] *SYSTEM org.sonatype.nexus.bootstrap.jetty.JettyServer -
-------------------------------------------------Started Sonatype Nexus OSS 3.30.0-01-------------------------------------------------

如果你看到以上内容,说明Nexus已经启动成功,你可以使用浏览器打开http://YourIP:8081访问Nexus了。例如:http://10.30.185.122:8081/

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Nx0jnLRP-1655689956680)(https://note.youdao.com/yws/res/25638/WEBRESOURCEea1c7e91e13c438d318aa0c9acd07a6d)]

其数据目录为:

root@pang-HP:/var/lib/docker/volumes/nexus-data# ll
总用量 12
drwx-----x  3 root root 4096  6月 17 14:41 ./
drwx-----x  4 root root 4096  6月 17 14:41 ../
drwxr-xr-x 15  200  200 4096  6月 17 16:09 _data/
root@pang-HP:/var/lib/docker/volumes/nexus-data#

首次运行请通过以下命令获取初始密码:

$ docker exec nexus3 cat /nexus-data/admin.password9266139e-41a2-4abb-92ec-e4142a3532cb

首次启动Nexus的默认帐号是admin,密码则是上边命令获取到的,点击右上角登录,首次登录需更改初始密码。

登录之后可以点击页面上方的齿轮按钮按照下面的方法进行设置。

3.4.2 创建仓库

创建一个私有仓库的方法:Repository->Repositories点击右边菜单Create repository选择docker (hosted)

  • Name: 仓库的名称
  • HTTP: 仓库单独的访问端口(例如:5000)
  • Hosted -> Deployment pollcy: 请选择Allow redeploy否则无法上传Docker镜像。

其它的仓库创建方法请各位自己摸索,还可以创建一个docker (proxy) 类型的仓库链接到DockerHub上。再创建一个 docker (group) 类型的仓库把刚才的hosted与proxy添加在一起。主机在访问的时候默认下载私有仓库中的镜像,如果没有将链接到DockerHub中下载并缓存到Nexus中。

3.4.3 添加访问权限

菜单Security->RealmsDocker Bearer Token Realm移到右边的框中保存。

添加用户规则:菜单Security->Roles->Create rolePrivlleges选项搜索docker把相应的规则移动到右边的框中然后保存。

添加用户:菜单Security->Users->Create local user在Roles选项中选中刚才创建的规则移动到右边的窗口保存。

3.4.4 重启nexus服务,开放5000端口

(base) pang@pang-HP:~$ sudo docker stop nexus3
nexus3
(base) pang@pang-HP:~$ sudo docker rm nexus3
nexus3
(base) pang@pang-HP:~$ sudo docker ps -a
CONTAINER ID   IMAGE      COMMAND       CREATED      STATUS      PORTS     NAMES
98bbce6f5691   centos:7   "/bin/bash"   3 days ago   Up 3 days             reverent_morse
(base) pang@pang-HP:~$
(base) pang@pang-HP:~$ sudo docker run -d --name nexus3 --restart=always \-p 8081:8081 \-p 5000:5000 \--mount src=nexus-data,target=/nexus-data \sonatype/nexus3
9a102684ab20514cad0e84617f4f4185120a23b306d76f12f920152c6c0acb6f
(base) pang@pang-HP:~$ sudo docker ps -a
CONTAINER ID   IMAGE             COMMAND                  CREATED         STATUS         PORTS                                                                                  NAMES
9a102684ab20   sonatype/nexus3   "sh -c ${SONATYPE_DI…"   9 seconds ago   Up 9 seconds   0.0.0.0:5000->5000/tcp, :::5000->5000/tcp, 0.0.0.0:8081->8081/tcp, :::8081->8081/tcp   nexus3
98bbce6f5691   centos:7          "/bin/bash"              3 days ago      Up 3 days                                                                                             reverent_morse
(base) pang@pang-HP:~$ ss -tan
State                     Recv-Q                 Send-Q                                      Local Address:Port                                    Peer Address:Port                 Process
...
LISTEN                    0                      4096                                              0.0.0.0:5000                                         0.0.0.0:*
...
LISTEN                    0                      4096                                              0.0.0.0:8081                                         0.0.0.0:*
...
(base) pang@pang-HP:~$

3.4.5 测试

  • curl命令
(base) pang@pang-HP:~$ curl -l http://10.30.185.122:5000
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8"/>
<title>Error 400 Not a Docker request</title>
</head>
<body><h2>HTTP ERROR 400 Not a Docker request</h2>
<table>
<tr><th>URI:</th><td>/</td></tr>
<tr><th>STATUS:</th><td>400</td></tr>
<tr><th>MESSAGE:</th><td>Not a Docker request</td></tr>
<tr><th>SERVLET:</th><td>-</td></tr>
</table>
<hr><a href="https://eclipse.org/jetty">Powered by Jetty:// 9.4.43.v20210629</a><hr/></body>
</html>
(base) pang@pang-HP:~$

3.4.6 docker登录仓库

(base) pang@pang-HP:~$ sudo docker login http://10.30.185.122:5000
Username: pang
Password:
Error response from daemon: Get "https://10.30.185.122:5000/v2/": http: server gave HTTP response to HTTPS client
(base) pang@pang-HP:~$

nexsu仓库开的是http,docker要走https。参考3.2.4节处理。处理后重新登录:

(base) pang@pang-HP:/etc/docker$ sudo docker login http://10.30.185.122:5000
Authenticating with existing credentials...
Login did not succeed, error: Error response from daemon: Get "http://10.30.185.122:5000/v2/": dial tcp 10.30.185.122:5000: connect: connection refused
Username (admin): pang
Password:
Error response from daemon: Get "http://10.30.185.122:5000/v2/": dial tcp 10.30.185.122:5000: connect: connection refused
(base) pang@pang-HP:/etc/docker$

此时发现,创建的账户pang无法登录(无法登录原因未解决 ???)。重新使用admin登录成功:

(base) pang@pang-HP:/etc/docker$ sudo docker login http://10.30.185.122:5000
Username: admin
Password:
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-storeLogin Succeeded
(base) pang@pang-HP:/etc/docker$

3.4.7 操作镜像

  • 上传镜像到Nexus3中
(base) pang@pang-HP:~$ sudo docker images
REPOSITORY        TAG            IMAGE ID       CREATED        SIZE
python            3              763642b839b7   5 days ago     55.4MB
debian            stretch-slim   a88d8e7bd33c   3 weeks ago    55.4MB
registry          2              773dbf02e42e   3 weeks ago    24.1MB
sonatype/nexus3   latest         aab1398bb647   4 weeks ago    705MB
centos            7              eeb6ee3f44bd   9 months ago   204MB
(base) pang@pang-HP:~$ sudo docker tag python:3 10.30.185.122:5000/python:v1
(base) pang@pang-HP:~$ sudo docker images
REPOSITORY                  TAG            IMAGE ID       CREATED        SIZE
10.30.185.122:5000/python   v1             763642b839b7   5 days ago     55.4MB
python                      3              763642b839b7   5 days ago     55.4MB
debian                      stretch-slim   a88d8e7bd33c   3 weeks ago    55.4MB
registry                    2              773dbf02e42e   3 weeks ago    24.1MB
sonatype/nexus3             latest         aab1398bb647   4 weeks ago    705MB
centos                      7              eeb6ee3f44bd   9 months ago   204MB
(base) pang@pang-HP:~$ sudo docker push 10.30.185.122:5000/python:v1
The push refers to repository [10.30.185.122:5000/python]
692f0d941fcb: Pushed
2ddc9f2aee6d: Pushed
v1: digest: sha256:c001da366c3e68619a8bcd8a61b6a888b7e1bb3a293ac30382d865d0fad3789f size: 736
(base) pang@pang-HP:~$
  • 检查Nexus3中镜像结果

3.4.8 服务端启动方式改进,将Nexus3注册成系统服务

  • 编写Linux文件 vim /etc/systemd/system/nexus.service
[Unit]
Description=Nexus
Documentation=https://www.sonatype.com
After=network-online.target docker.service
Requires=docker.service[Service]
ExecStartPre=-/usr/bin/docker rm -f nexus
ExecStart=/usr/bin/docker run \
-p 8081:8081 \
-p 5000:5000 \
--mount src=nexus-data,target=/nexus-data \
sonatype/nexus3ExecStop=/usr/bin/docker stop nexusLimitNOFILE=65535
Restart=on-failure
StartLimitBurst=3
StartLimitInterval=60s[Install]
WantedBy=multi-user.target
  • 停止和删除命令行启动的nexus服务
# docker stop nexus
# docker rm nexus

用systemd启动服务

# systemctl daemon-reload
# systemctl start nexus
# systemctl enable nexus
# systemctl status nexus

3.4.9 改nexus仓库的http为https

前面我们用docker容器搭建nexus服务,创建了一个的镜像仓库,仓库端口为5000,协议为http,不是https。nexsu仓库开的是http,dockr 要走https,我们是通过在客户端添加仓库信任解决的。

那么,有没有更符合最佳实践的方式呢?有!用nexus-https镜像,nexus官方镜像的改进版

具体可以参考:【nexus】用nexus3.x 官方镜像搭建docker私有镜像仓库

Docker笔记-04 仓库相关推荐

  1. 取得 Git 仓库 —— Git 学习笔记 04

    取得 Git 仓库 -- Git 学习笔记 04 我认为, Git 的学习分为两大块:一是工作区.索引.本地版本库之间的交互:二是本地版本库和远程版本库之间的交互.第一块是基础,第二块是难点. 下面, ...

  2. docker 笔记(2) -- 镜像

    docker 笔记(2) -- 镜像 Ubuntu 14.04 无论如何,飞蛾扑火都是一种高贵的姿态. 参考 菜鸟教程 -- docker 额 当使用的镜像文件本地不存在时,则从远程镜像库中下载,默认 ...

  3. docker 笔记一

    docker 笔记一 docker 官网:https://www.docker.com/ docker概述 docker 出现的原因,解决了什么问题 在我们接触的传统项目开发中,项目或者说产品的一般拥 ...

  4. Maven-学习笔记04【基础-Maven生命周期和概念模型图】

    Java后端 学习路线 笔记汇总表[黑马程序员] 黑马程序员(腾讯微云)Maven基础讲义.pdf Maven-学习笔记01[基础-Maven基本概念] Maven-学习笔记02[基础-Maven的安 ...

  5. openCVPracticalExercise学习笔记04

    原创:openCVPracticalExercise学习笔记04 30使用OpenCV实现图像孔洞填充 31使用OpenCV将一个三角形仿射变换到另一个三角形 1 2 3 4 5 6 7 8 9 10 ...

  6. Docker笔记(精简版)

    文章目录 初始Docker 学习背景 Docker解决依赖兼容问题 Docker解决操作系统环境差异 Docker架构 镜像和容器 DockerHub Docker架构 安装Docker 卸载(可选) ...

  7. Docker笔记-02 镜像

    文章目录 1 获取镜像 1.1 pull子命令选项 2 查看镜像信息 2.1 使用images命令列出镜像 2.1.1 虚悬镜像 2.1.2 中间层镜像 2.1.3 列出部分镜像 2.1.4 以特定格 ...

  8. AntDeploy工具一键发布镜像到腾讯云Docker私有镜仓库

    AntDeploy工具功能简介 支持docker一键部署(支持netcore) 支持iis一键部署(支持netcore和framework) 支持windows服务一键部署(支持netcore和fra ...

  9. Docker教程-8-DockerHub仓库及私有仓库的使用

    转自:Docker教程-8-DockerHub仓库及私有仓库的使用,更优阅读体验:http://www.kongzid.com/ 目录 1.Docker Hub镜像仓库的使用 1.1 注册账号并登录 ...

最新文章

  1. 2022-2028年中国数字化档案加工行业市场深度分析及发展策略分析报告
  2. intellij idea 常见遇到的问题整理
  3. linux入门教程命令,Linux入门命令掌握
  4. 数据库命名规则(转)
  5. Playmaker全面实践教程之简单的使用Playmaker示例
  6. kbengine 的 nginx反向代理https/wss 配置 支持kbe负载均衡
  7. 在ASP.NET 中实现单用户登录(利用Cache, 将用户信息保存在服务器缓存中)[转]
  8. 史上最全Oracle数据泵常用命令
  9. 机械表小案例之transform的应用
  10. 职业生涯规划不会做?首先要知道职引生涯规划!
  11. epub格式电子书编辑器
  12. Java从入门到放弃第1天
  13. AutoCAD打印样式中缺少.ctb只有.stb怎么办?
  14. 冰冻三尺,非一日之寒。数据解析——xpath(4)
  15. minus oracle 顺序_Minus 在oracle 中的用法
  16. tp5.1 页面调取微信扫一扫识别条形码和二维码
  17. Ubuntu系统下安装微信客户端
  18. 2018-2019-1 20189215 书籍速读
  19. CSAPP作业:Fork函数的学习感悟
  20. api日常总结:前端常用js函数和CSS常用技巧

热门文章

  1. python期中作业
  2. php字体大小_PHP中改变网页文字大小代码
  3. linux下phylip软件构建NJ树,进化树构建-NJ法lpar;megarpar;
  4. 2110-微服务核心知识点及问题分析
  5. 家庭和办公路由器被劫持以发动 DDoS 攻击
  6. win10不让桌面上显示宽带连接服务器,win10系统宽带连接放在桌面的操作方法
  7. 5号字对应的数字字号_请问在WORD文档里,字体大小所对应的用数字表示是多少...
  8. 国米w ndows错误,争议缠身的超级巨星,23岁爽约尤文,28岁激怒巴萨,35岁逼宫国米...
  9. 人民币贬值如何影响你的生活
  10. 完全开源!华为方舟编译器正式支持C语言了,并开放鸿蒙教程!