Docker 私有仓库搭建 及 docker-compose 体系规划
说明
在基于docker的部署体系中,往往会用到 image
模式发布java web项目,这时候就需要用到私有仓库来存放 image
。
本章内容包含两部分,分别是 docker 的私有仓库搭建和devops
体系的docker-compose 规划。
一. 镜像查找
-
首先,登陆 docker hub 官方网站,搜索所需软件的
docker images
,本文选择registry
。
注意:镜像选择原则为,优先选择Docker Certified
的镜像,其次选择official image
的镜像 ,再次选择star
和download
数量最高的镜像。 -
然后,查看镜像详情信息,获取镜像拉取得脚本。
-
tags
作为docker image
的镜像版本,我们根据业务需要选择合适的tags
。
二. 镜像获取
根据我们从docker hub 官网查询 registry
的image说明,选取2.7.1
版本作为我们devops
体系的私有仓库镜像。拉取脚本如下:
docker pull registry:2.7.1
三. 镜像导入导出
有时候会遇到需要内网安装的docker环境的业务场景,这时候没有网络,我们可以通过 docker save
和 docker load
命令从有外网的机器导出镜像,再导入到需要安装的内网环境。
1、镜像导出
docker 镜像导出 命令语法: docker save < imageid > -o <imagefile.tar>
- 查看本地
images
列表,并记录image id
docker images
- 导出
image
到指定目录
docker save f32a97de94e1 -o /external/export_images/registry_2.7.1.tar
2、镜像导入
docker 镜像导入 命令语法: docker load -i <imagefile.tar>
docker load -i /external/import_images/registry_2.7.1.tar
注意:镜像导入成功后,我们发现镜像的 repositroy
和tag
均为 none
。
3、解决导入后 repository和tag名称为none的问题
根据原导出镜像的repository和tag信息,设置镜像的tag
即可。命令语法:docker tag [image id] [name]:[版本]
docker tag f32a97de94e1 registry:2.7.1
四. 容器创建
重点:
考虑到docker run命令每次重新执行后,都会重新划分虚拟目录,所以我们需要把数据目录和配置目录映射到物理磁盘下。
1、映射目录分配
查看registry
的 Dockerfile
可知,registry:2.7.1的内容存储卷为/var/lib/registry
。
按照 devops
的物理映射目录规划,将 /var/lib/registry
映射到 registry 容器的 data 目录,规划如下:
/devops/registry/data:/var/lib/registry
2、端口映射规划
registry私有仓库的端口为 5000,外部映射端口也是用5000,故端口规划如下:
5000:5000
3、容器创建
目录创建脚本
sudo mkdir -p /devops/registry/data
容器创建脚本
docker run -d --name registry --restart always \
--publish 5000:5000 \
-v /devops/registry/data:/var/lib/registry \
registry:2.7.1
说明:
-d
:容器以后台持续运行模式启动,-d
是--detach
的缩写--name registry
:容器名称为registry
--restart always
:容器重启策略,采用always
在容器退出时总是重启容器--publish 5000:5000
:容器内的5000
端口映射到容器外的5000
端口(左侧为外部端口)-v /devops/registry/data:/var/lib/registry
:容器内的/var/lib/registry
目录映射到容器外的/devops/registry/data
目录,-v
是--volume
的缩写registry:2.7.1
:镜像名称
创建结果如下:
五. 私有仓库访问
docker 默认的远程仓库为 https://registry.hub.docker.com/v1/repositories ,如需访问我们自己搭建的私有仓库,需要配置docker的信任服务器。
操作如下:
1、配置docker的私有仓库访问地址
cd /etc/docker/
vi daemon.conf
注意:
daemon.conf 扩展名必须为 .conf
添加如下配置信息:
文件中添加如下配置 (ip地址为私有仓库的ip地址,本架构中私有仓库在本机)
{ “insecure-registries”:[“127.0.0.1:5000”] }
注意:
添加国内的docker image 镜像站,方式与此相同
{ “registry-mirrors”: [“https://cr.console.aliyun.com”] }
配置结果如下图所示:
2、将daemon.conf添加到docker启动项中
sudo vi /lib/systemd/system/docker.service
在 ExecStart
配置的上一行
添加如下内容
EnvironmentFile=/etc/docker/daemon.conf
3、重启docker服务
sudo systemctl daemon-reload
sudo service docker restart
六. 私有仓库推送(拉取)镜像
注意:为演示image推送,我们先从官方拉取busybox
镜像,再推送至私有仓库
1、本地镜像准备
- 拉取镜像
docker pull busybox:latest
- 查看本地镜像列表,并记录
image id
,(busybox
的镜像ID为b534869c81f0
)
docker images
2、创建私有仓库busybox
镜像的tag
docker tag b534869c81f0 192.168.43.150:5000/busybox:latest
3、推送镜像
docker push 192.168.43.150:5000/busybox:latest
4、查看推送结果
curl http://192.168.43.150:5000/v2/_catalog
七. 私有仓库常用API
官方文档 https://docs.docker.com/registry/spec/api/#introduction
常用API如下
/v2/_catalog
:镜像目录/v2/busybox/tags/list
:指定镜像的tag
列表
八. docker-compose 规划
docker-compose 通过一个docker-compose.yml
模板文件,将docker run
命令的参数按照 yml
文件格式编写,实现一条命令管理所有docker容器
的功能。
我们的devops
的docker容器规划,采用 version 2
规范编写docker-compose.yml
文件,物理文件规划以 /devops
目录作为devops的根目录,docker-compose.yml
文件存放在此目录下。然后在该目录下以各个容器名称创建文件夹,并根据所需物理映射的内容将文件目录分为conf
、data
、log
目录,规划结构样例如下:
以registry
私有仓库为例,构建docker-compose.yml文件,未来所有新的docker容器脚本直接添加到此模板,并创建相应映射的物理文件目录即可。
docker-compose.yml
文件内容如下
version: '2'
services:
registry:
container_name: registry
image: registry:2.7.1
restart: always
ports:
- "5000:5000"
volumes:
- "./registry/data:/var/lib/registry"
注意: 对口映射和磁盘映射的语法与docker run
稍有差别。
启动 docker-compose
的容器集合,命令如下:
docker-compose up -d
docker-compose常用命令:
docker-compose up [options] [--scale SERVICE=NUM...] [SERVICE...]
:创建容器,-d
后台运行。docker-compose ps [options] [SERVICE...]
:查看容器信息docker-compose logs [options] [SERVICE...]
:查看容器日志docker-compose stop [options] [SERVICE...]
:停止容器docker-compose start [SERVICE...]
:启动已存在的容器docker-compose restart [options] [SERVICE...]
: 重启容器docker-compose rm [options] [SERVICE...]
:删除(停止状态的)服务容器
注意: docker-compose 所有命令执行,必须在 docker-compose.yml
文件所在目录
下执行,如/devops
。
devops
完整的目录规划、docker-compose.yml 及 nginx配置,请到作者码云下载:https://gitee.com/tysite/devops