基于Docker的服务部署流程
本次总结涉及到Docker-io、Docker-ce的安装、CentOS7镜像的制作、Docker私有仓库搭建、CentOS6.7环境下从CentOS7私有仓库拉取私有镜像、Docker容器运行、CentOS6.5及CentOS7一起运行时兼容性处理等内容。
一、Docker基本组件及DevOps运作流程
DockerImage:Docker镜像是一个运行容器的只读模板。
DockerContainer:Docker容器是一个运行应用的标准化单元。
DockerRegistry:Docker注册服务器用来存放镜像。
DockerEngine:Docker引擎用来在主机上创建,运行和管理容器。
Docker在DevOps体系中的运作流程如下:
二、Docker安装与配置
由于Docker国外站点下载较慢或无法正常下载,需要更新为国外源之后再进行快速安装配置。CentOS6.5安装docker-io,CnetOS7安装docker-ce
#创建docker相关的目录
mkdir -p /data/docker
#安装docker运行必要工具
sudo yum install -y yum-utilsdevice-mapper-persistent-data lvm2 crontabs
#增加docker下载仓库,使用阿里云仓库下载,国外站点下载太慢
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
sudo yum makecache fast
#安装docker并检测docker安装运行情况
sudo yum -y install docker-ce
docker version
systemctl enable docker.service
systemctl start docker.service
#配置docker
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json<<-'EOF'
{"graph": "/data/docker"}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
三、搭建私有Docker仓库
Docker安装完成后dockerd的配置文件在/etc/docker/daemon.json中,如果没有该文件,可以手动创建。
1、安装配置registry镜像
pull docker官方的registry的第二个版本,docker1.6版本以上支持registry2
docker pull registry:2.6.0
或者不指定版本,表示latest版本
docker pull registry
配置daemon.json,去掉docker默认的https的访问,否则易出现如下问题:
Get https://120.78.253.133:5000/v2/:http: server gave HTTP response to HTTPS client
打开配置文件
vim /etc/docker/daemon.json
里面的内容是一个json对象,加上一项insecure-registries,地址自己更改:
{
"insecure-registries":["192.168.1.78:5000"]
}
此处设置无效时,直接配置服务程序如下(增加红色字体内容):
vim/usr/lib/systemd/system/docker.service
ExecStart=/usr/bin/dockerd --insecure-registry 172.18.3.242:5000
重启docker
systemctl daemon-reload
systemctl restart docker
2、无认证启动registry容器
上传到私有仓库的镜像时是默认存放在容器的/var/lib/registry/,为了防止删除registry时上传的镜像也被删除,所以启用一个volume,将上传的镜像持久化保存在我们物理机上,这里保存位置是/opt/registry/。
docker run -d --name registry -p5000:5000 --restart=always -v /opt/registry/:/var/lib/registry/ registry:2.6.0
测试是否启动容器
curlhttp://192.168.1.78:5000/v2/_catalog
如果返回以下信息表示启动成功
{"repositories":["mynginx"]}
3、私有仓库推拉私有镜像
测试上传到我们自己的私有registry,首先将mynginx镜像重命名tag:
docker tag mynginx 192.168.1.78:5000/mynginx
这里需要注意的是重命名的tag必须带有建立192.168.1.78:5000/这个前缀,后面的mynginx是新镜像名,二者名称可以不同。然后开始push到我们建立的私有registry仓库:
docker push 192.168.1.78:5000/mynginx
检测推送镜像的情况,返回以下结果说明推送正常。
curl http://192.168.1.78:5000/v2/_catalog
{"repositories":["mynginx"]}
测试私有仓库镜像拉取pull,本机拉取如下:
docker rmi 192.168.1.78:5000/mynginx
docker pull 192.168.1.78:5000/mynginx
其他物理主机拉取私有仓库镜像,在安装docker前提下配置/etc/docker/daemon.json文件添加insecure-registries,ip地址自己更改:
{
"insecure-registries":["192.168.1.78:5000"]
}
然后重启docker,执行pull,同理也可以上传镜像
systemctl daemon-reload
systemctl restart docker
docker pull 192.168.1.78:5000/mynginx
4、Dockerfile创建服务镜像
Dockfile是一种被Docker程序解释的脚本,Dockerfile由一条一条的指令组成,每条指令对应Linux下面的一条命令。Docker程序将这些Dockerfile指令翻译真正的Linux命令。Dockerfile有自己书写格式和支持的命令,Docker程序解决这些命令间的依赖关系,类似于Makefile。Docker程序将读取Dockerfile,根据指令生成定制的image。相比image这种黑盒子,Dockerfile这种显而易见的脚本更容易被使用者接受,它明确的表明image是怎么产生的。有了Dockerfile,当我们需要定制自己额外的需求时,只需在Dockerfile上添加或者修改指令,重新生成image即可,省去了敲命令的麻烦。
基于centos7创建镜像,首先拉取centos7镜像,
docker pull centos7
制作镜像的dockerfile如下所示:
FROM centos:7
MAINTAINER tcy tiancy@jovision.com
RUN yum update -y && \
yum install crontabs iproutewget net-tools gcc automake autoconflibtool make gcc gcc-c++ zlib* zlib-devel -y
RUN mkdir -p /home/mynginx
COPY octmts /home/mynginx/octmts
COPY tools /home/mynginx/tools
WORKDIR /home/mynginx/octmts
RUN chmod –R 755 *
RUN sh install.sh octmts
编译创建镜像
docker build -t octmts -f dockerfile-octmts .
创建容器
程序文件和dockerfile放在同一目录
docker create --name octmts3.0 -v/home/docker_oct/data:/home/mynginx/octmts/log -p 50000:50000 -p 50001:50001 -p50002:50002 octmts1.0
创建容器+运行
docker run -id --net=host --nameoctmts2.0 -v /home/docker_oct/data:/home/mynginx/octmts/log -p 50000:5000octmts1.0
创建CentOS7容器,使用systemctl后台运行服务程序时遇到以下问题:
Failed to get D-Bus connection
解决方案(此方案在主机是CentOS6.5系统下无效,暂时无法处理):
docker create --privileged --net=host --nameoctmts3.0 -v /home/docker_oct/data:/home/mynginx/octmts/log -p 50000:50000 -p50001:50001 -p 50002:50002 octmts1.0 /usr/sbin/init
或者
docker run --privileged --net=host -id --nameoctmts3.0 -v /home/docker_oct/data:/home/mynginx/octmts/log -p 50000:5000octmts1.0 /usr/sbin/init
四、CentOS6.5系统下使用私有仓库的兼容问题
CentOS6.5系统下使用私有仓库时由于版本问题导致pull私有镜像失败,Docker 1.7.1版本pull私有镜像仓库报错,V1,V2等。Docker 1.7版本和Docker CE的配置文件的位置不同:
· Docker 1.7版本 /etc/sysconfig/docker
· Docker CE版本使用 /etc/docker/daemon.json
使用docker 1.7版本如果要pulldocker registry v2或harbor里的镜像,如果没有配置CA证书的话,需要配置insecure-registry,并且需要将这个参数加到docker daemon的启动参数里。配置步骤:
1、Docker 1.7解决办法
⑴ 配置DOCKER_OPTS参数并保存
[root@123 ] # vi /etc/sysconfig/docker
other_args=
DOCKER_CERT_PATH=/etc/docker
## add
DOCKER_OPTS="--insecure-registry ip:port"
⑵ 修改启动项
[root@123 ] # vi /etc/init.d/docker
## 找到 start 函数,在exec处增加刚配置的DOCKER_OPTS,参见下边空行处
start() {
if [ ! -x $exec ]; then
if [ ! -e $exec ]; then
echo "Docker executable $exec not found"
else
echo "You do not have permission to execute the Docker executable$exec"
fi
exit 5
fi
check_for_cleanup
if ! [ -f $pidfile ]; then
prestart
printf "Starting $prog:\t"
echo "\n$(date)\n" >> $logfile
## addDOCKER_OPTS
$exec -d $DOCKER_OPTS &>> $logfile &
pid=$!
touch $lockfile
# waitup to 10 seconds for the pidfile to exist. see
#https://github.com/docker/docker/issues/5359
tries=0
while [ ! -f $pidfile -a $tries -lt 10 ]; do
sleep 1
tries=$((tries + 1))
done
success
echo
else
failure
echo
printf "$pidfile still exists...\n"
exit 7
fi
}
⑶ 重启docker并验证pull功能
[root@123 ] # service docker restart
⑷其他方法
不这么费事,直接修改启动项,原理和结果都是相同的,然后重启dockerdaemon
[root@123 ] # vi /etc/init.d/docker
## 找到exec,直接添加--insecure-registry ip:port
prog="docker"
exec="/usr/bin/$prog --insecure-registryip:port"
pidfile="/var/run/$prog.pid"
lockfile="/var/lock/subsys/$prog"
logfile="/var/log/$prog"
2、Docker CE版本
检查/etc/docker目录下是否有daemon.json文件,如果没有则创建,或者直接vi/etc/docker/daemon.json修改完在:wq也行。
[root@123 ] # vi /etc/docker/daemon.json
## add
{
"registry-mirrors": ["https://registry.docker-cn.com"],
"insecure-registries" : ["ip:port","ip:port"]
}
添加完成后重启docker服务
service docker restart
基于Docker的服务部署流程相关推荐
- 基于docker微服务架构_使用基于微服务的流架构更好地进行大规模的复杂事件处理(第1部分)...
基于docker微服务架构 基于微服务的流架构与开源规则引擎相结合,使实时业务规则变得容易 这篇文章旨在详细介绍我将OSS业务规则引擎与Kafka风格的现代流消息传递系统集成在一起的项目. 该项目的目 ...
- 联盟链Quorum(基于raft共识)部署流程(三)- 部署基于Quorum链的区块链浏览器
这篇文章算得上是继联盟链Quorum(基于raft共识)部署流程(二)的续篇 我的演示系统环境时 Ubuntu 18.04 LTS. 环境要求: DockerDocker-Compose 安装方法见下 ...
- 广告业务系统 之 敏捷交付 —— “基于 Docker 容器同机部署”
文章目录 广告业务系统 之 敏捷交付 -- "基于 Docker 容器同机部署" 服务 Docker 构建及部署 代码支持 服务打包&构建 服务部署 广告业务系统 之 敏捷 ...
- Docker入门 服务部署的艺术
Docker入门 服务部署的艺术 本课程可能涉及的内容 :Docker核心命令, Docker软件部署,Dockerfile镜像制作, Docker实战, Docker集群搭建 Docker需求:高可 ...
- Rasa课程、Rasa培训、Rasa面试、Rasa实战系列之Docker Duckling服务部署
Rasa课程.Rasa培训.Rasa面试.Rasa实战系列之Docker Duckling服务部署 vmvare 本地安装 docker Duckling服务 简介在windows 10 本地电脑上安 ...
- SpringBoot | 第十四章:基于Docker的简单部署
前言 讲解了单元测试,本章节讲讲应用的部署吧.总体而言,在进行自动化部署时,基本都会用上Jenkins+Maven+Docker进行部署.本章节主要讲解使用Maven+Docker进行SpringBo ...
- 基于Docker的GoldenGate部署
前言 Docker最近几年异常火爆,主要是因为其方便.快捷.轻量,相对于VM,它不需要占用太多资源,随时可以创建.删除,或在已有image上添加一些软件,再制作成另一个模板image供日后使用.Doc ...
- zabbixdocker里的mysql_基于Docker安装与部署Zabbix
今天测试了一天的Zabbix-Docker,部署起来确实方便,就需要在安装了Docker的linux系统中输入以下命令就可以了. 1.安装MysqL数据库,启动一个空的MysqL服务器实例 docke ...
- 基于Docker的云部署
一.简介 服务器:腾讯云 系统:CentOS 7.5 64位 远程桌面方式:SSH 文件上传:scp.filezilla 框架:Spring Boot 软件包格式:jar(sotest-0.0.1-S ...
最新文章
- Java虚拟机详解----JVM常见问题总结
- 如何编译 dotnet/runtime 源代码
- 用python写简单爬虫,用Python写简单的爬虫
- birt报表表格边框_选开源报表开发还是商用?2020报表软件产品整理
- 手机端的1px细线问题
- apache lucene介绍
- thinkphp多表查询之join方法
- php做个抽签人名,怎样在excel制作一个用于抽签函数,别的工具也行(excel随机抽取人名不重复)...
- springBoot dubbo junit 单元测试
- Reflector dll反编译工具
- SmartSVN for Mac(SVN客户端)
- 阿里3大营销模型:AIPL、FAST、GROW
- 操作系统原理1-3章答案 黑新宏 胡元义主编
- JQuery网页飘窗
- 计算机六个方面的领域,计算机的应用领域分为哪六个方面
- 苹果手机微信聊天记录删除了怎么恢复?(基础操作版)
- python re.split 空格_str.split和re.split中空格的区别
- 报表数据源之Hadoop
- 罗技鼠标正在连接服务器失败,说好的真爱,怎么就翻车了!失败的罗技M720入手记...
- 图片轮播器——javascript