千家信息网

详解基于Docker的服务部署流程

发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,本次总结涉及到Docker-io、Docker-ce的安装、CentOS7镜像的制作、Docker私有仓库搭建、CentOS6.7环境下从CentOS7私有仓库拉取私有镜像、Docker容器运行、Ce
千家信息网最后更新 2026年11月02日详解基于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安装与配置

由于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.reposudo yum makecache fast#安装docker并检测docker安装运行情况sudo yum -y install docker-cedocker versionsystemctl enable docker.servicesystemctl start docker.service#配置dockersudo mkdir -p /etc/dockersudo tee /etc/docker/daemon.json<<-'EOF'{"graph": "/data/docker"}EOFsudo systemctl daemon-reloadsudo 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-reloadsystemctl 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前提下配置/etc/docker/daemon.json文件添加insecure-registries,ip地址自己更改:

{  "insecure-registries":["192.168.1.78:5000"]}

然后重启docker,执行pull,同理也可以上传镜像

systemctl daemon-reloadsystemctl restart dockerdocker 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:7MAINTAINER tcy  tiancy@jovision.comRUN yum  update  -y && \  yum  install crontabs iproutewget net-tools gcc automake autoconflibtool make gcc gcc-c++  zlib* zlib-devel -yRUN mkdir -p /home/mynginxCOPY  octmts /home/mynginx/octmtsCOPY  tools /home/mynginx/toolsWORKDIR /home/mynginx/octmtsRUN 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/dockerother_args=DOCKER_CERT_PATH=/etc/docker## addDOCKER_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:portprog="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

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

镜像 私有 配置 仓库 版本 代码 容器 运行 文件 程序 服务 命令 指令 内容 问题 主机 参数 目录 系统 支持 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 重庆互联网络科技 互联网的科技创新 伴你行互联网科技有限公司 科技互联网创业计划书 互联网养老 桔豆科技 卓越科技互联网 招聘 中正互联网科技招聘 新华互联网科技2019 互联网科技人工智能实验室 企晟互联网信息科技有限公司 深圳市罗太互联网科技有限公司 晋城互联网科技 威龙国际互联网科技公司 2021互联网科技公司排名 富国互联网金融科技混合基金 上海同邻互联网科技有限公司规模 萌小萌互联网科技河南有限公司 全球科技与互联网公司市值变化 互联网科技企业商标注意事项 互联网的科技体现在哪里 互联网科技股 科技股互联网 美国互联网前沿科技 甘肃拓世互联网科技有限公司 深圳卡尔迅互联网科技有限公司怎么样 互联网新科技动漫ppt素材 互联网在线教育科技创业 梅州GM互联网络科技有限公司 互联网领先科技活动 互联网大会出现的黑科技
0