Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。
我们知道docker镜像可以托管到dockerhub中,跟代码库托管到github是一个道理。但如果我们不想把docker镜像公开放到dockerhub中,只想在部门或团队内部共享docker镜像,能不能像gitlab一样在搭建私有的仓库呢?答案是肯定的,docker也支持将镜像存到私有仓库。
这篇文章默认你的机器上已经安装了docker,并有了docker的一些基础知识,本文主要讲私有仓库搭建,证书认证,鉴权管理等内容,关于docker的内容请参考其他文章。
如果Docker还不会,可以在公众号回复“docker”,会有docker视频教程提供给你进行学习。
开始搭建私有仓库
假设我们有两台机器,一台是Client是平时工作用的,IP是192.168.1.100,一台是Server安装私有仓库的,IP是192.168.1.200。
我们在Server机器上搭建私有仓库,一条命令即可,非常简单
$ docker run --name docker-registry -d -p 5000:5000 --restart=always registry:2
--name 用来设置容器的名字
-d 后台启动
-p 5000:5000 指定宿主机5000端口映射容器5000端口,
--restart=always Docker容器的重启策略
Docker容器的重启策略是面向生产环境的一个启动策略
no,默认策略,在容器退出时不重启容器
on-failure,在容器非正常退出时(退出状态非0),才会重启容器
on-failure:3,在容器非正常退出时重启容器,最多重启3次
always,在容器退出时总是重启容器
unless-stopped,在容器退出时总是重启容器,但是不考虑在Docker守护进程启动时就已经停止了的容器
docker run的退出状态码如下:
0,表示正常退出
非0,表示异常退出(退出状态码采用chroot标准)
125,Docker守护进程本身的错误
126,容器启动后,要执行的默认命令无法调用
127,容器启动后,要执行的默认命令不存在
其他命令状态码,容器启动后正常执行命令,退出命令时该命令的返回状态码作为容器的退出状态码。
这条命令执行完成以后,如果是第一次执行,docker会从dockerhub中去下载这个registry镜像到本地。然后运行生成容器。
我们执行docker ps 看一下容器是否启动成功。
$ docker ps
我们可以看到有一个name为docker-registry的容器已经启动成功。这就是我们私有仓库了。怎么样,简单吧。继续下一步,把客户端的镜像提交到服务端的仓库里。
提交镜像
我们现在切换到工作机器上进行提交镜像,也就是Client端,执行命令docker pull tomcat,从hub.docker.com下载最新版本的tomcat镜像.
$ docker pull tomcat
执行命令docker images查看镜像列表。
$ docker images
这个镜像的ID是dd6ff929584a,下面我们给这个镜像添加一个带有私有仓库IP的TAG,这样才能成功推送到私有仓库:
$ docker tag dd6ff929584a 192.168.1.200:5000/tomcat