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

docker使用场景和优缺点

这不是本文的重点O(∩_∩)O哈哈~。若是各位看官想了解这些的话能够看看 这儿。node

为何要本身搭镜像仓库

阿里云固然已经有了registry仓库服务,还挺方便的。可是有的就会以为这种私有镜像仍是本身保管比较好啊,咱们这儿说的是本身搭建仓库用来管理私有镜像。测试彻底后提交到私有的registry,线上再从registry拉取部署,和阿里云的registry仓库服务同样的使用方式。docker

环境:

ubuntu 16.04ubuntu

Docker registry2.x的加密部署方法

安装docker环境这里不作介绍了,网上不少文章都有介绍。bash

下拉registry镜像,命令:

docker pull registry2.2测试

生成自签名证书:

cd ~/;ui

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是我给这个仓库定的域名,能够写别的。spa

生成用户和密码:

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.lajiaochaorou.com:5000

下载证书:

cp ~/registry/certs/registry.crt /etc/docker/certs.d/reg.lajiaochaorou.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。

相关文章
相关标签/搜索