• 企业400电话
  • 网络优化推广
  • AI电话机器人
  • 呼叫中心
  • 全 部 栏 目

    网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    详解基于Docker的服务部署流程
    POST TIME:2021-10-16 18:02

    本次总结涉及到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.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前提下配置/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安装MySQL8的方法步骤
    下一篇:centos7.0安装离线JDK1.8方法详解
  • 相关文章
  • 

    关于我们 | 付款方式 | 荣誉资质 | 业务提交 | 代理合作


    © 2016-2020 巨人网络通讯

    时间:9:00-21:00 (节假日不休)

    地址:江苏信息产业基地11号楼四层

    《增值电信业务经营许可证》 苏B2-20120278

    X

    截屏,微信识别二维码

    微信号:veteran88

    (点击微信号复制,添加好友)

     打开微信