一、公共镜像仓库
https://hub.docker.com/search?q=
二、私有镜像仓库
创建一个普通仓库
① 创建仓库
docker run -d -p 5000:5000 --restart=always --name registry -v /opt/myregistry:/var/lib/registry registry
② 修改配置文件,使之支持http
[root@docker01 ~]# cat /etc/docker/daemon.json
{
"registry-mirrors": ["https://registry.docker-cn.com"],
"insecure-registries": ["10.0.0.100:5000"]
}
insecure-registries:此步用于让 docker信任私有仓库地址
③ 重启docker让修改生效
systemctl restart docker.service
④ 测试
打开浏览器 输入地址http://10.0.0.100:5000/v2/_catalog看到
{"repositories":[]}
表示私有仓库搭建成功并且内容为空
创建basic认证的仓库
① 安装加密工具
yum install httpd-tools -y
② 设置认证密码
mkdir /opt/registry-var/auth/ -p
htpasswd -Bbn clsn 123456 > /opt/registry-var/auth/htpasswd
③ 启动容器,在启动时传入认证参数
docker run -d -p 5000:5000 -v /opt/registry-var/auth/:/auth/ -e "REGISTRY_AUTH=htpasswd" -e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" -e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd registry
④ 测试
打开浏览器 输入地址https://10.0.0.100:5000/v2/_catalog看到
{"repositories":[]}
表示私有仓库搭建成功并且内容为空
镜像上传至私有仓库
① 标记此镜像为私有仓库的镜像
docker tag jdk1.8 192.168.184.141:5000/jdk1.8
② 再次启动私服容器
docker start registry
③ 上传标记的镜像
docker push 192.168.184.141:5000/jdk1.8
三、镜像仓库管理
登录仓库
docker login : 登陆到一个Docker镜像仓库,如果未指定镜像仓库地址,默认为官方仓库 Docker Hub
docker login [参数] [仓库名称]
参数说明:
参数 | 作用 |
-u | 账号 |
-p | 密码 |
--password-stdin | 通过 STDIN 提供密码 |
# 交互式登录
docker login
# 登陆到Docker Hub (这样不安全,通过linux的history命令,能够查看到明文密码)
docker login -u 用户名 -p 密码
# 先将密码存储在 pwd.txt 文件中,在登陆到Docker Hub
cat 密码文件.txt | docker login -u 用户名 --password-stdin
docker login -u 用户名 -p 密码 registry.cn-hangzhou.aliyuncs.com
登出仓库
docker logout : 登出一个Docker镜像仓库,如果未指定镜像仓库地址,默认为官方仓库 Docker Hub
docker logout [仓库名称]
# 登出Docker Hub
docker logout
docker logout registry.cn-hangzhou.aliyuncs.com
查看登录状态
Docker会将token存储在~/.docker/config.json文件中,从而作为拉取私有镜像的凭证。
当退出服务器时会自动删除token
[root@localhost .docker]# cat ~/.docker/config.json
{
"auths": {
"harbor.docker-plus.xyz": {
"auth": "YWRtaW46SGFyYm1yMTIzNDU="
},
"https://index.docker.io/v1/": {
"auth": "d2FsbGV6ejoxN1gxMTA1MzExNQ=="
}
},
"HttpHeaders": {
"User-Agent": "Docker-Client/18.09.6 (linux)"
}
}
搜索镜像
从仓库中搜索镜像
docker search [参数] 镜像名称[:镜像标签]
参数说明:
参数 | 作用 |
–automated | 只列出 automated build类型的镜像 |
–no-trunc | 显示完整的镜像描述 |
--limit | 显示的数量 |
-f <过滤条件> | 列出指定条件的镜像 支持的过滤器:
|
--format | 格式化输出
使用 --format 选项时,search 命令将完全按照模板的声明输出数据。如果显示列标题,需要加上 table 伪指令 |
# 搜索 tomcat 镜像
docker search tomcat
# 显示前十条 tomcat 镜像
docker search --limit 10 tomcat
# 搜索官方版本的 tomcat 镜像
docker search --filter is-official=true tomcat
# 搜索自动构建的,且至少3颗星的 tomcat 镜像
docker search --filter is-automated=true --filter stars=3 tomcat
# 以 “镜像名:星数” 且不带列标题的格式显示 tomcat 镜像
docker search --format "{{.Name}}: {{.StarCount}}" tomcat
字段名 | 字段描述 |
NAME | 仓库名称 |
DESCRIPTION | 镜像描述 |
STARS | 用户评价 |
OFFICIAL | 是否官方 |
AUTOMATED | 自动构建,表示该镜像由Docker Hub自动构建流程创建的 |
也可以去官网可视化页面搜索镜像
https://hub.docker.com/search?q=
拉取镜像
从镜像仓库中拉取或者更新指定镜像
docker pull [参数] 镜像名称[:镜像标签]
参数说明:
参数 | 作用 |
–a | 拉取所有 tagged 镜像 |
–-disable-content-trust | 忽略镜像的校验,默认开启 |
# 从Docker Hub下载java最新版镜像
docker pull java
# 从Docker Hub下载REPOSITORY为java的所有镜像
docker pull -a java
# 拉第三方镜像方法
docker pull index.tenxcloud.com/tenxcloud/httpd
上传镜像
将本地的镜像上传到镜像仓库,要先登陆到镜像仓库
docker push [参数] 镜像名称[:镜像标签]
参数说明:
参数 | 作用 |
–-disable-content-trust | 忽略镜像的校验,默认开启 |
# 上传本地镜像myapache:v1到镜像仓库中
docker push myapache:v1
docker push x.xx.xx.xx:5000/zwx/nginx
删除镜像
从私有仓库中删除镜像
docker rmi x.xx.xx.xx:5000/zwx/nginx
四、镜像仓库推送实战
docker推送镜像时,私有仓库的地址要求是https,如果你想推送到http的私有仓库,需要修改docker配置文件
vi /etc/docker/daemon.json
"insecure-registries": ["192.168.0.30:30002"]
修改完毕后,重启docker
# 登录仓库
docker login 192.168.0.30:30002 -u admin
# 构建镜像
docker build -t 192.168.0.30:30002/hcbmp-test/hcbmp-front:0.0.1 -f Dockerfile .
# 上传镜像
docker push 192.168.0.30:30002/hcbmp-test/hcbmp-front:0.0.1
# 登出仓库
docker logout 192.168.0.30:30002