阅读 125

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

docker使用场景和优缺点

这不是本文的重点O(∩_∩)O哈哈~。如果各位看官想了解这些的话可以看看 这儿。

为什么要自己搭镜像仓库

阿里云当然已经有了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。

关注下面的标签,发现更多相似文章
评论