一、对于开源的镜像,如redis,nginx等,可以通过官方仓库Docker Hub,或者国内的阿里云等共有仓库下载获取到镜像。但是企业内对于自己的研发产品不可能往公共仓库去发布镜像的,一般都会搭建私有的镜像仓库,保障内部研发的镜像对内可用,外部是无法获取的。Redistry是Docker官方提供的私有镜像仓库,本例搭建一下。
二、搭建Redistry和UI服务
1、创建registry_data数据卷
命令:
docker volume create registry_data
2、编写docker-compose.yml文件,配置私有仓库registry和可视化界面UI。
docker-compose.yml示例如下:
version: '3.0'
services:
registry:
image: registry
volumes:
- registry_data:/var/lib/registry
ui:
image: joxit/docker-registry-ui:static
ports:
- 8092:80
environment:
- REGISTRY_TITLE=weisian的私有镜像仓库
- REGISTRY_URL=http://registry:5000
depends_on:
- registry
volumes:
registry_data:
说明:
registry服务:
使用registry最新镜像,指定数据卷registry_data打通容器内的/var/lib/registry目录。
UI服务:
使用joxit/docker-registry-ui:static镜像,指定宿主机8092端口映射容器内的80端口,指定环境变量(标题,仓库服务的地址为仓库服务的5000端口),ui服务依赖于registry服务的运行。
volumes:为生明registry_data是一个数据卷,需要提前创建好。
3、运行配置,启动registry和ui
命令:
docker-compose -f docker-compose.yml up -d
4、查看是否启动成功
(1)、查看docker的进程
docker ps 可以看到两个进程都存在,端口也都为配置的端口
(2)、浏览器访问镜像仓库地址,可以正常访问
http://192.168.249.88:8092/
以上完成了私有镜像仓库的搭建。
三、推送私有仓库,和私有仓库拉取镜像
1、推送到仓库前,目标镜像需要打tag,即指定仓库地址和镜像版本
(固定格式:私服ip:端口/镜像名称:版本)
命令:
docker tag nginx:latest 192.168.249.88:8092/nginx:1.1
说明:上命令将本地的nginx:latest镜像打成tag镜像(实际上tag镜像和源镜像的镜像id还是一致的,tag镜像指定了仓库地址),这样在推送tag的时候就知道往哪里推送了
2、推送tag镜像到远程仓库
命令:
docker push 192.168.249.88:8092/nginx:1.1
注:
如上图是推送失败的结果。原因就是docker使用https的请求去访问resistry的服务,但是服务器没有配置https证书,所以https请求就不能成功。解决办法:1、服务器配置https证书,2、修改docker的daemon.json信息,可以针对某些地址进行http访问
方法2步骤:
(1)、打开docker的daemon.json
vi /etc/docker/daemon.json
(2)、添加下面的配置(即请求http://192.168.249.88:8092时使用http请求方式),注意上一行需要添加英文逗号
“insecure-registries”:[“http://192.168.249.88:8092”]
(3)、# 重新加载deamon文件
systemctl daemon-reload
(4)、重启docker
systemctl restart docker
完成上诉daemon的配置后,再次推送tag,可以成功
3、查看推送的结果
浏览器访问私有镜像仓库http://192.168.249.88:8092/,可以看到有nginx的镜像了
4、拉取私有仓库的镜像
在浏览器上点击如下位置获取拉取该镜像的命令
执行命令
docker pull 192.168.249.88:8092/nginx:1.0
如下可以看出,已经拉取到仓库的镜像到docker容器中了。
5、拉取的nginx镜像,启动服务
docker run -d --name nginx_1 -p 8093:80 192.168.249.88:8092/nginx:1.0
6、查看nginx服务
http://192.168.249.88:8093/
如上完成了,私有镜像仓库的搭建,已经推送和拉取镜像的过程,验证了拉取到的镜像可以正常运行。
学海无涯苦作舟!!!