电商网站建设效果,路由器做网站80端口,C语言网站开发pdf,ui手机app界面设计......续接上一篇文章。
六、镜像库及应用
Rancher还有很多功能#xff0c;在这里都不细说了#xff0c;因为这是一篇快速上手指南#xff0c;讲到这已经差不多了。但是还得补充下更重要的内容#xff0c;上一篇通篇讲的都是使用Rancher拉取公共镜像来创建容器或应用在这里都不细说了因为这是一篇快速上手指南讲到这已经差不多了。但是还得补充下更重要的内容上一篇通篇讲的都是使用Rancher拉取公共镜像来创建容器或应用那么如何创建和使用我们自已的私有镜像这也是初学者必须掌握的。
1. Rancher添加镜像库
Rancher基础架构菜单下有一个添加镜像库的功能除了DockerHub的公有镜像库不用添加其他的公有或私有镜像库都应该添加就算是DockerHub私有镜像也需要添加账号密码配置这样在用Rancher添加容器时就能够把搜索镜像的范围从DockerHub扩展到其他镜像库了。 2. 公网镜像库
一、基于DockerHub的账号
1首先得在DockerHub上注册个账号没翻墙估计注册不了https://hub.docker.com
假如账号是rexentest
2然后将本地镜像以alpine示例打上tag标签可以通过docker pull alpine:3.4下载个镜像到本地。
docker tag alpine:3.4 rexentest/alpine:3.4
3然后登录DockerHub
docker login
#输入用户名和密码
4push镜像到DockerHub上
docker push rexentest/alpine:3.4
5如果要下载这个新的镜像必须用新名称rexentest/alpine:3.4
Docker pull rexentest/alpine:3.4
二、基于阿里云的账号
阿里云镜像主页https://dev.aliyun.com/search.html
方法基本同上也需求注册账号建立自己的镜像管理中心我已经建了一个
registry.cn-hangzhou.aliyuncs.com/rexen/
1)为了加快下载速度建议使用阿里云的加速地址以下是华东1区专用的地址 sudo tee/etc/docker/daemon.json -EOF { registry-mirrors:[https://j8zppnv0.mirror.aliyuncs.com] } EOF sudo systemctldaemon-reload sudo systemctlrestart docker 2)登录阿里云镜像库 sudo docker login--usernamesmooth00 registry.cn-hangzhou.aliyuncs.com 密码******
3)推送镜像到镜像库 sudo docker tag 镜像Idregistry.cn-hangzhou.aliyuncs.com/rexen/镜像名:镜像版本号 sudo docker pushregistry.cn-hangzhou.aliyuncs.com/rexen/镜像名:镜像版本号 这样就完成了镜像的上传通过页面能够查到我下上传的镜像 4)镜像下载pull docker pullregistry.cn-hangzhou.aliyuncs.com/rexen/镜像名:镜像版本号 5)在Rancher直接可以使用该镜像名称得完整如下
registry.cn-hangzhou.aliyuncs.com/rexen/镜像名:镜像版本号
在Rancher中使用阿里云的镜像首先需要在基础架构à镜像库中添加镜像库地址及授权账号如下所示 3. 自建镜像库
创建内网私有镜像库也可以用容器的方式创建也挺简单但是要创建带公有证书的https镜像库就不容易了以下提供一个创建http访问的私有镜像库方案。
1)在Rancher界面的主机如172.16.1.37面板上添加容器选择镜像registry:2 配置对外端口4000可任意但内部端口一定是要5000
2添加卷
参数 /opt/data/registry:/var/lib/registry 冒号前为主机下的文件目录冒号后为容器中的文件目录。 在创建前需要到172.16.1.37中创建/opt/data/registry目录并给予读写权限
chmod 777 /opt/data/registry
说明添加卷的目的是因为容器一旦删除容器里的所有东西就消失了而卷可以让宿主机和容器共享这个目录到时候容器删除后目录还在里面保存的镜像也会存在。
3调度规则
按照默认的指定本机调度 4点击创建完成容器的创建。
直接浏览器访问 http://172.16.1.37:4000/v2 显示{} 表示正常
5将私有镜像库加到Rancher的镜像库里
基础架构à镜像库à添加镜像选择Custom输入地址172.16.1.37:4000
点击创建完成私有镜像库的添加。
6在各个需要上传和下载镜像的主机里配置私有镜像库的http访问方式
由于docker的push和pull镜像都必须以https访问所以我们需要做以下配置
在/etc/docker下创建daemon.json文件写入
{insecure-registries:[192.168.163.131:5000]}
重启Docker:
systemctl restart docker.service
如果重启的是172.16.1.37里的docker那么registry容器也将被停止所以需要进入Rancher相应的主机界面里启动registry。
7上传镜像到私有库
需要将本地的镜像改名如 将mytomcat:0.0.1进行改名
docker tag mytomcat:0.0.1 172.16.1.37:4000/tomcat7
改完名后就可以直接push上传了
docker push 172.16.1.37:4000/tomcat7
curl http://172.16.1.37:4000/v2/_catalog或直接查看页面也能看到上传到镜像 8下载镜像
docker pull 172.16.1.37:4000/tomcat7
就能够从私有库中拉取镜像。
通过Rancher也能将该镜像添加成容器Rancher能自动从私有库下载前提是Rancher镜像库添加了172.16.1.37:4000链接 除了http访问的镜像库https自有证书访问的镜像库也是可以搭建的由于是自有证书docker容器所在主机需要拷贝相关证书否则也访问不了。具体安装见公司知识库里我的另一篇文章
http://172.16.1.9:8090/pages/viewpage.action?pageId21529682
4. 创建自有镜像
这个不属于Rancher的功能但是这块事关镜像创建的标准化和可维护化用Dockerfile来创建镜像已经成为业内的标准所以强烈建议研发人员学会编辑Dockerfile。
创建镜像的方法一般是两种
1第一种就是在正在使用的容器下进行配置修改和在容器内安装软件比如安装一个JDK具体操作方式可以用docker run命令或是进入容器内部命令窗口然后再将本次修改的容器直接打成新的镜像包使用如下命令
docker commit 当前容器ID 新的镜像名
这种方式是最简单的镜像创建方式但是也是最不值得倡导的方式因为这种方式会导致多次版本迭代后镜像冗余越来越大可维护性变差最后逼的又得从基础镜像开始。不像Dockerfile那样通过RUN、ADD、COPY、CMD等命令就能持续构建。
2第二种就是前面说的用Dockerfile指令来创建这种方式能快速构建规范的镜像文件只要使用了高质量的指令来创建那么镜像的质量就会很高而且将Dockerfile上传到SVN或GitHub上进行版本管理,再结合jenkins就能实现自动化构建和部署。以下是我以tomcat为基础做的一个简单Dockerfile
# First docker file frombolingcavalry# VERSION 0.0.1# Author: bolingcavalry# 基础镜像FROM tomcat:7.0.88-jre8# 作者# MAINTAINER zgh zhengguanghuarexen.com.cn# 定义工作目录定义变量ENV WORK_PATH /usr/local/tomcat/confENV WEB_PATH /usr/local/tomcat/webapps# 定义要替换的文件名ENV USER_CONF_FILE_NAME tomcat-users.xml# 定义要替换的server.xml文件名ENV SERVER_CONF_FILE_NAME server.xml# 定义要发布的war包文件名ENV WEB_APP rfzf.war# 删除原文件tomcat-users.xmlRUN rm $WORK_PATH/$USER_CONF_FILE_NAME# 复制文件tomcat-users.xmlCOPY ./$USER_CONF_FILE_NAME $WORK_PATH/# 删除原文件server.xmlRUN rm $WORK_PATH/$SERVER_CONF_FILE_NAME# 复制文件server.xmlCOPY ./$SERVER_CONF_FILE_NAME $WORK_PATH/# 复制war包到wepapps目录下COPY ./$WEB_APP $WEB_PATH/
这个Dockerfile实现的是在tomcat7基础镜像默认从docker Hub拉取中发布人防执行平台的war包并配置tomcat-users.xml和server.xml文件然后将需要发布的文件与Dockerfile放在一起发布 执行以下命令生成新的镜像
docker build -t mytomcat-zgh:0.0.1 .
如果是Dockerfile在github上也可以直接调用生成镜像举例
docker build github.com/creack/docker-firefox
说明由于Dockerfile指令很好学懂点shell的人都没问题关键是如何提高质量避免创建过多layer这种方式方便版本化追踪管理所以我们要求创建镜像一定是这么做。
5. 镜像的传输
镜像images不是简单的一个文件所以没办法直接拷贝复制到别的机器上目前镜像的传递方式有两种一种是以镜像库的形式包括公网镜像库或自建镜像库一种是通过save和load命令的镜像备份和加载方式。如下
一、push和pull方式
1首先得获取镜像库的操作权限除非自建不带账号登录的镜像库以阿里云为例
sudo docker login --username用户名 registry.cn-hangzhou.aliyuncs.com
然后提示输入密码完成登录。
2Push镜像到库
先是tag成指定格式的镜像名只要是自建的镜像都必须tag成指定格式
docker tag [镜像名]:[tag号] [IP或域]:[端口]/[仓库名或镜像名]:[镜像版本号]
然后push新的镜像
docker push [IP或域]:[端口]/[仓库名或镜像名]:[镜像版本号]
以阿里云为例
sudo docker tag [镜像ID] registry.cn-hangzhou.aliyuncs.com/[命名空间]/[仓库名]:[镜像版本号]
sudo docker pull registry.cn-hangzhou.aliyuncs.com/[命名空间]/[仓库名]:[镜像版本号]
3从镜像库Pulldockerpull [IP或域]:[端口]/[仓库名或镜像名]:[镜像版本号]
如果镜像是设置成公有性质的pull就不需要先登录账号和密码了。
以阿里去为例
sudo docker pull registry.cn-hangzhou.aliyuncs.com/[命名空间]/[仓库名]:[镜像版本号]
二、save和load方式
我们推荐用上面的方式但如果镜像不通过镜像库的push和pull如何迁移到别的服务器上呢方法如下
1save 镜像
docker save 镜像ID /home/dockerfile/dockerimage1.0.tar
如果导出目录不存在需要事先创建。然后把这个生成的tar文件传到别的服务器上
2load镜像
docker load /home/dockerfile/dockerimage1.0.tar
因为生成的镜像名为none需要更改为你希望的镜像名:tag版本号
docker tag $(docker images|grep none|awk {print $3 }) 镜像名:tag版本号
这样就把tar中的镜像加载到本地的镜像列表里通过docker images就能看到
注意有很多人在频繁操作镜像和容器后本地会出现大量的none镜像和exited状态的容器我们建议要么用tag改名镜像要么直接都批量清除了
docker ps -a | grepExited | awk {print $1 }|xargs docker stop
docker ps -a | grepExited | awk {print $1 }|xargs docker rm
docker images|grep none|awk {print $3 }|xargs docker rmi
七、附Docker常用命令
由于是在Rancher平台下部署和管理Docker其实不用记太多命令就记住以下几个
1Docker服务启动命令 1. [rootlocalhost ~]# service docker restart 2. Redirecting to /bin/systemctl restart docker.service 3. [rootlocalhost ~]# service docker stop 4. Redirecting to /bin/systemctl stop docker.service 5. [rootlocalhost ~]# service docker start 6. Redirecting to /bin/systemctl start docker.service 2Docker查看当前运行的容器
docker ps
3Docker查看本地镜像
docker images
4Docker搜索镜像默认是DockerHub
docker search 镜像名
5Docker删除容器得先dockerstop 容器ID
docker rm 容器ID
6Docker删除镜像得先docker rm 容器ID
docker rmi 镜像ID
7往容器中拷贝文件
docker cp/home/testfile 容器ID:/home/
8将容器中文件拷出
docker cp 容器ID:/home/testfile/home/
9在容器中安装新的程序
docker runimage_name apt-get install -y app_name
其它的命令可以上网搜索的到就不一一列出。
10进入docker容器的方式
使用dockerattachsudo docker attach 容器ID使用SSH在镜像容器中安装SSH Server运行时开启22端口映射使用nsenter将nsenter安装到主机中通过sudo docker inspect 容器ID使用execsudo docker exec -it 容器ID /bin/bash使用Rancher管理界面选择容器管理的【执行命令行】操作