Docker笔记-04 仓库
文章目录
- 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)上的项目,一旦项目发生新的提交,则自动执行创建。
要配置自动创建,包括如下的步骤:
- 创建并登录Docker Hub,并且在Docker Hub点击右上角头像,在账号设置(Account Settings)中关联(Linked Accounts)目标网站(如Github);
- 在目标网站中允许Docker Hub访问服务;
- 在Docker Hub中配置一个“自动创建”类型的项目,即新建或选择已有的仓库,在Builds选项卡中选择Configure Automated Builds;
- 选取一个目标网站中的项目(需要含Dockerfile)和分支;
- 指定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.key
、docker.domain.com.crt
、root-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->Realms
把Docker Bearer Token Realm
移到右边的框中保存。
添加用户规则:菜单Security->Roles->Create role
在Privlleges
选项搜索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 仓库相关推荐
- 取得 Git 仓库 —— Git 学习笔记 04
取得 Git 仓库 -- Git 学习笔记 04 我认为, Git 的学习分为两大块:一是工作区.索引.本地版本库之间的交互:二是本地版本库和远程版本库之间的交互.第一块是基础,第二块是难点. 下面, ...
- docker 笔记(2) -- 镜像
docker 笔记(2) -- 镜像 Ubuntu 14.04 无论如何,飞蛾扑火都是一种高贵的姿态. 参考 菜鸟教程 -- docker 额 当使用的镜像文件本地不存在时,则从远程镜像库中下载,默认 ...
- docker 笔记一
docker 笔记一 docker 官网:https://www.docker.com/ docker概述 docker 出现的原因,解决了什么问题 在我们接触的传统项目开发中,项目或者说产品的一般拥 ...
- Maven-学习笔记04【基础-Maven生命周期和概念模型图】
Java后端 学习路线 笔记汇总表[黑马程序员] 黑马程序员(腾讯微云)Maven基础讲义.pdf Maven-学习笔记01[基础-Maven基本概念] Maven-学习笔记02[基础-Maven的安 ...
- openCVPracticalExercise学习笔记04
原创:openCVPracticalExercise学习笔记04 30使用OpenCV实现图像孔洞填充 31使用OpenCV将一个三角形仿射变换到另一个三角形 1 2 3 4 5 6 7 8 9 10 ...
- Docker笔记(精简版)
文章目录 初始Docker 学习背景 Docker解决依赖兼容问题 Docker解决操作系统环境差异 Docker架构 镜像和容器 DockerHub Docker架构 安装Docker 卸载(可选) ...
- Docker笔记-02 镜像
文章目录 1 获取镜像 1.1 pull子命令选项 2 查看镜像信息 2.1 使用images命令列出镜像 2.1.1 虚悬镜像 2.1.2 中间层镜像 2.1.3 列出部分镜像 2.1.4 以特定格 ...
- AntDeploy工具一键发布镜像到腾讯云Docker私有镜仓库
AntDeploy工具功能简介 支持docker一键部署(支持netcore) 支持iis一键部署(支持netcore和framework) 支持windows服务一键部署(支持netcore和fra ...
- Docker教程-8-DockerHub仓库及私有仓库的使用
转自:Docker教程-8-DockerHub仓库及私有仓库的使用,更优阅读体验:http://www.kongzid.com/ 目录 1.Docker Hub镜像仓库的使用 1.1 注册账号并登录 ...
最新文章
- 2022-2028年中国数字化档案加工行业市场深度分析及发展策略分析报告
- intellij idea 常见遇到的问题整理
- linux入门教程命令,Linux入门命令掌握
- 数据库命名规则(转)
- Playmaker全面实践教程之简单的使用Playmaker示例
- kbengine 的 nginx反向代理https/wss 配置 支持kbe负载均衡
- 在ASP.NET 中实现单用户登录(利用Cache, 将用户信息保存在服务器缓存中)[转]
- 史上最全Oracle数据泵常用命令
- 机械表小案例之transform的应用
- 职业生涯规划不会做?首先要知道职引生涯规划!
- epub格式电子书编辑器
- Java从入门到放弃第1天
- AutoCAD打印样式中缺少.ctb只有.stb怎么办?
- 冰冻三尺,非一日之寒。数据解析——xpath(4)
- minus oracle 顺序_Minus 在oracle 中的用法
- tp5.1 页面调取微信扫一扫识别条形码和二维码
- Ubuntu系统下安装微信客户端
- 2018-2019-1 20189215 书籍速读
- CSAPP作业:Fork函数的学习感悟
- api日常总结:前端常用js函数和CSS常用技巧
热门文章
- python期中作业
- php字体大小_PHP中改变网页文字大小代码
- linux下phylip软件构建NJ树,进化树构建-NJ法lpar;megarpar;
- 2110-微服务核心知识点及问题分析
- 家庭和办公路由器被劫持以发动 DDoS 攻击
- win10不让桌面上显示宽带连接服务器,win10系统宽带连接放在桌面的操作方法
- 5号字对应的数字字号_请问在WORD文档里,字体大小所对应的用数字表示是多少...
- 国米w ndows错误,争议缠身的超级巨星,23岁爽约尤文,28岁激怒巴萨,35岁逼宫国米...
- 人民币贬值如何影响你的生活
- 完全开源!华为方舟编译器正式支持C语言了,并开放鸿蒙教程!