内容简介:阿里云当然已经有了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脚本编程
陈嘉栋 / 电子工业出版社 / 2016-9-1 / 79
《Unity 3D脚本编程——使用C#语言开发跨平台游戏》以Unity 3D 的跨平台基础Mono,以及其游戏脚本语言C#为基础进行讲解。全面系统地剖析了Unity 3D 的跨平台原理以及游戏脚本开发的特点。 第1 章主要介绍了Unity 3D 引擎的历史以及编辑器的基本知识;第2 章主要介绍了Mono,以及Unity3D 利用Mono 实现跨平台的原理,并且分析了C#语言为什么更适合Uni......一起来看看 《Unity 3D脚本编程》 这本书的介绍吧!