这不是本文的重点O(∩_∩)O哈哈~。若是各位看官想了解这些的话能够看看 这儿。node
阿里云固然已经有了registry仓库服务,还挺方便的。可是有的就会以为这种私有镜像仍是本身保管比较好啊,咱们这儿说的是本身搭建仓库用来管理私有镜像。测试彻底后提交到私有的registry,线上再从registry拉取部署,和阿里云的registry仓库服务同样的使用方式。docker
ubuntu 16.04ubuntu
安装docker环境这里不作介绍了,网上不少文章都有介绍。bash
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
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表示自启动。
建立证书目录:
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搭好了。
咱们在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 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功能相似
复制代码
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。