[TOC]
## 一 docker仓库和镜像tag
### A. docker仓库分类
docker镜像是需要放到一个统一的仓库的,以便不同的主机可以下载和使用相同的镜像而不必每次都用dockerfile自己做,docker镜像仓库按如下方式划分
1. 公共仓库
* 官方公共仓库
* docker hub
* 第三方公共仓库
* 阿里云
* 七牛云
* DaoCloud
* 时速云
2. 私有仓库
* 官方命令行仓库:registry
* 第三方web仓库:harbor
### B. docker镜像tag命名规范
在基础知识部分,介绍了标准镜像名由四部分组成: **仓库地址/项目名/镜像名:标签**,如`daocloud.io/library/nginx:latest`
一个高效的版本命名方案可以让用户清楚地知道当前使用的是哪个镜像,同时还可以保持足够的灵活性。
每个镜像可以有多个 tag,而多个 tag 可能对应的是同一个镜像。下面介绍 Docker 社区普遍使用的 tag 方案。
1. 初始版本`v1.9.1`
镜像名为myimage,当前需要的版本为 v1.9.1。那么可以给镜像打上四个 tag:1、1.9、1.9.1和 latest。
```
docker tag myimage-v1.9.1 myimage:1
docker tag myimage-v1.9.1 myimage:1.9
docker tag myimage-v1.9.1 myimage:1.9.1
docker tag myimage-v1.9.1 myimage:latest
```
2. 小版本更新`v1.9.2`
过了一段时间,发布了 v1.9.2。这时可以打上 1.9.2 的 tag,并将1、1.9和 latest 从 v1.9.1 移到 v1.9.2。
```
docker tag myimage-v1.9.2 myimage:1
docker tag myimage-v1.9.2 myimage:1.9
docker tag myimage-v1.9.2 myimage:1.9.2
docker tag myimage-v1.9.2 myimage:latest
```
3. 大版本更新
之后,v2.0.1 发布了。这时可以打上2、2.0、2.0.1的tag,并将 latest 移到 v2.0.1。
```
docker tag myimage-v2.0.1 myimage:2
docker tag myimage-v2.0.1 myimage:2.0
docker tag myimage-v2.0.1 myimage:2.0.1
docker tag myimage-v2.0.1 myimage:latest
```
4. tag方法有点总结
myimage:1 始终指向 1 这个分支中最新的镜像。
myimage:1.9 始终指向 1.9.x 中最新的镜像。
myimage:latest 始终指向所有版本中最新的镜像。
如果想使用特定版本,可以选择 myimage:1.9.1、myimage:1.9.2 或 myimage:2.0.1。
**Docker Hub 上很多 repository 都采用这种方案,要熟练使用**。
## 二 公共仓库docker hub
docker hub是docker官方提供的的公共镜像仓库,类似于代码仓库github,需要注册.
官方地址:https://hub.docker.com/
本人账号:luoxiaogang
账号密码:隐藏
私有仓库:c7-nginx
### A. 修改镜像名
修改镜像名,使其符合docker hub命名规范
```sh
docker image tag c7-nginx:v2 luoxiaogang/c7-nginx:v2
[root@docker01 ~]# docker image ls luoxiaogang/c7-nginx
REPOSITORY TAG IMAGE ID CREATED SIZE
luoxiaogang/c7-nginx v2 669691018aa6 5 days ago 789MB
```
### B. 登录docker hub
```sh
[root@docker01 ~]# docker login -u luoxiaogang
Password:
......
Login Succeeded
```
### C. 推送镜像
```
[root@docker01 ~]# docker push luoxiaogang/c7-nginx
The push refers to repository [docker.io/luoxiaogang/c7-nginx]
fd2fdb015cf0: Pushed
7912ce70bbc0: Pushed
2de8d3b18deb: Pushed
f903e5a29540: Pushed
228f6119c990: Pushed
54470def7538: Pushed
d69483a6face: Pushed
v2: digest: sha256:12843dfd....6 size: 1782
```
## 三 私有仓库(命令行)
### A. 公共操作-添加信任仓库
需要添加信任的原因是docker默认需要使用https的安全连接来下载镜像,而我们自己搭建的环境只有http,所以需要信任该地址.
```sh
vi /etc/docker/daemon.json
{
"registry-mirrors": ["https://registry.docker-cn.com"],
"insecure-registries": ["10.0.0.11:5000","10.0.0.11:5001"]
}
systemctl restart docker
```
### B. 无密码认证的私有仓库
1. 运行docker仓库
```sh
docker run -d -p 5000:5000 --restart=always -v /opt/myregistry:/var/lib/registry registry
```
2. 修改tag并推送
```sh
docker image tag c7-nginx:v2 10.0.0.11:5000/c7-nginx:v2
docker push 10.0.0.11:5000/c7-nginx
```
### C. 带密码认证的私有仓库
1. base认证密码文件准备
```sh
yum install httpd-tools -y
mkdir /opt/registry-var/auth/ -p
htpasswd -Bbn luogang 123456 >> /opt/registry-var/auth/htpasswd
```
2. 启动docker私有仓库
```sh
docker run -d -p 5001:5000 -v /opt/registry-var/auth/:/auth/ \
-v /opt/myregistry:/var/lib/registry \
-e "REGISTRY_AUTH=htpasswd" \
-e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" \
-e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd \
registry
```
3. 登录docker仓库
```
docker login 10.0.0.11:5001 -u luogang
```
4. 修改tag并推送
```sh
docker image tag c7-nginx:v2 10.0.0.11:5001/c7-nginx:v2
docker push 10.0.0.11:5001/c7-nginx
```
## 四 私有仓库(harbor)
企业级私有仓库harbor需要用到docker的单机编排工具docker-compose,所以这里仅列出步骤,等学过后便的docker-compose工具后,在单独写harbor的部署
1. 安装docker和docker-compose
2. 下载harbor
3. 修改harbor.cfg配置文件
4. 执行安装脚本
参考链接:https://www.cnblogs.com/pangguoping/p/7650014.html