docker registry私有仓库的使用方法介绍

栏目: 编程工具 · 发布时间: 5年前

内容简介:阿里云当然已经有了registry仓库服务,还挺方便的。但是有的就会觉得这种私有镜像还是自己保管比较好啊,我们这儿说的是自己搭建仓库用来管理私有镜像。测试完全后提交到私有的registry,线上再从registry拉取部署,和阿里云的registry仓库服务一样的使用方式。安装docker环境这里不做介绍了,网上很多文章都有介绍。cd ~/;

阿里云当然已经有了registry仓库服务,还挺方便的。但是有的就会觉得这种私有镜像还是自己保管比较好啊,我们这儿说的是自己搭建仓库用来管理私有镜像。测试完全后提交到私有的registry,线上再从registry拉取部署,和阿里云的registry仓库服务一样的使用方式。

环境:

ubuntu 16.04

Docker registry2.x的加密部署方法

安装 docker 环境这里不做介绍了,网上很多文章都有介绍。

下拉registry镜像,命令:

docker pull registry2.2

生成自签名证书:

cd ~/;

mkdir registry && cd registry && mkdir certs && cd certs;
openssl req -x509 -days 3650 -subj '/CN=reg.lajiaochaorou.com/' -nodes -newkey rsa:2048 -keyout registry.key -out registry.crt;

其中 reg.lajiaochaorou.com 是我给这个仓库定的域名,可以写别的。

生成用户和密码:

cd ~/registry&& mkdir auth;
docker run --entrypoint htpasswd registry:2.2 -Bbn lajiaochaorou 123456 > auth/htpasswd;

这里生成的用户名密码就是lajiaochaorou:123456, 可以写别的。

创建挂载目录:

mkdir –p ~/data/registry2

启动registry server:

docker run -d –p 5000:5000 --restart=always --name registry \
-v `pwd`/auth:/auth \
-e "REGISTRY_AUTH=htpasswd" \
-e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" \
-e "REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd" \
-v `pwd`/certs:/certs \
-e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/registry.crt \
-e REGISTRY_HTTP_TLS_KEY=/certs/registry.key \
-v ~/data/registry2:/var/lib/registry    registry:2.2
复制代码

把上面的命令放到脚本start_reg.sh(爱取什么名随你),放到~/registry下。 --restart=always表示自启动。

配置client(也就是我们宿主机):

创建证书目录:

mkdir -p /etc/docker/certs.d/reg.jack.com:5000

下载证书:

cp ~/registry/certs/registry.crt /etc/docker/certs.d/reg.jack.com:5000

域名解析:

echo 192.168.215.*** reg.lajiaochaorou.com >> /etc/hosts (这里的ip写宿主机ip)

登陆registry:

docker login reg.lajiaochaorou.com:5000

按照要求输入用户名,密码(我这里为lajiaochaorou:123456)

登录成功就可以存放和拉取私有镜像了!registry搭好了。

Docker pull/push镜像

我们在push镜像到私有仓库之前,要把镜像的名称改成reg.lajiaochaorou.com:5000/imagename的形式,否则系统认为你要push到公共仓库,会提示没有权限。命令:

docker tag ubuntu reg.lajiaochaorou.com:5000/ubuntu
docker push reg.lajiaochaorou.com:5000/ubuntu

上面是以修改ubuntu镜像为例,实际中我们一般是操作自己的项目镜像。

执行成功后镜像被提交到仓库了。

我们删除这个reg.lajiaochaorou.com:5000/ubuntu镜像试试:

docker rmi reg.lajiaochaorou.com:5000/ubuntu

删除成功,我们再把这个镜像pull下来试试:

docker pull reg.lajiaochaorou.com:5000/ubuntu

下拉成功,我们运行这个镜像吧:

docker run –it reg.lajiaochaorou.com:5000/ubuntu

应该有一个伪终端弹出来,这时的文件系统已经是这个容器(ubuntu)的文件系统了,因此可以很方便地对这个容器里面的文件进行操作。比如:

touch test.c
echo 'hello world' > hello.txt
复制代码

这时我们在容器外面执行:

docker diff 容器id|容器名;

可以看到有添加了两个文件。

不如趁机提交成一个新的镜像:

docker commit 容器id|容器名 reg.lajiaochaorou.com:5000/ubuntu2.0(新的镜像名 )

这时,我们看一下现在有哪些镜像:

docker images

可以看到,一个新的镜像reg.lajiaochaorou.com:5000/ubuntu2.0产生了!

我们运行这个新的镜像:

docker run –it reg.lajiaochaorou.com:5000/ubuntu2.0

伪终端出来之后,我们ls一下,可以看到刚才touch和echo的两个文件确实在这个文件系统了。

以上就是全部的registry使用方法了, 缺点是,没有图片的展示。当时没有及时截图,就这样吧。

补充一下docker常用命令吧

docker run: 运行一个容器
-it   通常it两个参数一起用的,表示以交互模式执行,并分配一个伪终端
-v   挂载目录,本地目录:容器目录
--name 给容器一个名字,不指定就随机产生
-e    设置环境变量
--rm   容器退出之后就删除

docker rm: 删除一个容器
docker rm 容器名|容器id

docker rmi:删除一个镜像
	docker rmi 镜像名
docker ps: 查看正在运行的容器
	docker ps –a :产看所有容器
docker kill :杀死一个运行中的容器,也可以用-s参数向容器发送信号
docker stop:结束一个运行中的容器
docker exec : 在运行中的容器执行命令,通常可以-t分配伪终端达到进入容器的目的
docker commit: 提交一个容器成新的镜像,可以-m 给出说明,-a给出作者
docker start: 启动一个容器
docker inspect: 查看镜像|容器的元数据
docker build: 编译一个新的镜像,与commit功能类似
复制代码

补充一下Dockerfile的使用

Dockfile是一种被Docker程序解释的脚本,Dockerfile由一条一条的指令组成,每条指令对应 Linux 下面的一条命令。Docker程序将这些Dockerfile指令翻译真正的Linux命令。 这是打包镜像的主要方式。 命令解释:

FROM    //基于哪个镜像
MAINTAINER   //创建人
CMD       //容器启动时执行的命令,Dockerfile只能有一条CMD
USER        //用哪个用户跑container
ENV          //设置环境变量
ADD            //将文件<src>拷贝到container的文件系统对应的路径<dest>
COPY       //与ADD类似,COPY只能是本地数据
VOLUME        //将本地文件夹挂载到container容器中
WORKDIR       //切换目录
复制代码

例子:

FROM busybox
ENV foo /bar
WORKDIR ${foo}   # WORKDIR /bar
ADD . $foo       # ADD . /bar
COPY \$foo /quux # COPY $foo /quux
复制代码

使用命令:

docker build –t ubuntu5.0 .

生成一个新的镜像,名为ubuntu5.0,不用-f指定Dockerfile的路径那么就是使用的当前目录的Dockerfile。


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Unity 3D脚本编程

Unity 3D脚本编程

陈嘉栋 / 电子工业出版社 / 2016-9-1 / 79

《Unity 3D脚本编程——使用C#语言开发跨平台游戏》以Unity 3D 的跨平台基础Mono,以及其游戏脚本语言C#为基础进行讲解。全面系统地剖析了Unity 3D 的跨平台原理以及游戏脚本开发的特点。 第1 章主要介绍了Unity 3D 引擎的历史以及编辑器的基本知识;第2 章主要介绍了Mono,以及Unity3D 利用Mono 实现跨平台的原理,并且分析了C#语言为什么更适合Uni......一起来看看 《Unity 3D脚本编程》 这本书的介绍吧!

HTML 压缩/解压工具
HTML 压缩/解压工具

在线压缩/解压 HTML 代码

随机密码生成器
随机密码生成器

多种字符组合密码

HTML 编码/解码
HTML 编码/解码

HTML 编码/解码