Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2655478
  • 博文数量: 416
  • 博客积分: 10220
  • 博客等级: 上将
  • 技术积分: 4193
  • 用 户 组: 普通用户
  • 注册时间: 2006-12-15 09:47
文章分类

全部博文(416)

文章存档

2022年(1)

2021年(1)

2020年(1)

2019年(5)

2018年(7)

2017年(6)

2016年(7)

2015年(11)

2014年(1)

2012年(5)

2011年(7)

2010年(35)

2009年(64)

2008年(48)

2007年(177)

2006年(40)

我的朋友

分类: 虚拟化

2018-12-25 16:11:14


       应用需求:在docker swarm环境下,希望某app所在的容器能在多个node上运行,则docker service create时镜像文件从registry中获取。

 

      考虑到要使用docker swarm 支持群集问题,docker软件安装不低于12版本,因此选择了Ubuntu 16系统。测试中若image是从已经有的网上registry中获取,一般没有什么大的问题,若是自己制作的镜像,没有把它放入registry中,而是直接在create service是指定的本地镜像,则会发现其容器集中运行在manager node上,worker node上则没有运行, 刚开始还没有留意这个问题,以为搭建好了swarm,容器在docker stack deploydocker service create时会自动发布在多个node上,实际情况则是事与愿违。


相关参考:
docker swarm
集群的搭建:
https://blog.csdn.net/letter_a/article/details/81975820

使用docker创建集成服务—lnmp

https://www.cnblogs.com/s-b-b/p/8624491.html

Ubuntu 搭建docker registry 私有仓库:

https://www.cnblogs.com/xiao987334176/p/9946915.html


简单地记录一下流水帐:
1
Docker的安装:

deb ubuntu-xenial main

apt-get install -y docker-engine=17.05.0~ce-0~ubuntu-xenial --fix-missing

vi /etc/apt/sources.list


列出下关的内处配置文件:

/etc/default/docker

/etc/docker/daemon.json
/etc/systemd/system/multi-user.target.wants/docker.service

 

shell中通过命令行提取文件中某一行某一列的字段

命令如下:

sed -n Np /file/path | cut -d " " -fM

docker ps|grep 8500 |cut -d " " -f1.

 

2docker swarm集群的搭建(略)
3
。制作镜像,docker-compose.yml(略)
4
。容器运行测试:

 

在执行docker service create --replicas 2 --name my_eproc esproc /bin/bash
遇到image could not be accessed on a registry to record its digest.
运行的容器都在manager node节点上,而没有分配到其它worker node上。

 

开始以为是生成的镜像问题,后来用《使用docker创建集成服务--lnmp》中的例子在本地测试一下,是没有问题,将它改为本地的镜像后,结果出现的现象与当前的一样,感觉问题出在镜像registry来源上,测试的image只是本地存在的,但它并没有入库。本来想取巧用阿里云docker来验证一下想法,谁知道以前正常的docker pull不行了, 只好在本地建立私有regitry来测试。

5.Ubuntu 搭建docker registry 私有仓库

docker pull registry

 

docker push 192.168.91.131:5000/alpine

输出:

The push refers to a repository [192.168.91.131:5000/alpine]
Get https://192.168.0.77:5000/v1/_ping: http: server gave HTTP response to HTTPS client
 这个需要在/etc/docker/daemon.json 中修改,其中若想基非manager node机上操作,也需要加上它 /etc/docker/daemon.json 
{
   "registry-mirrors": [
      ""
   ],
   "insecure-registries": [
      "192.168.0.77:5000"
    ]
}
 
systemctl restart docker 检测上传的镜像库文件.
curl 
 
6Docker stack deploy测试
esproc改为private registry,并上传
docker tag esproc 192.168.0.77:5000/unc/esproc
docker push 192.168.0.77:5000/unc/esproc

 

docker stack deploy -c docker-compose.yml my

# more docker-compose.yml

version: "3"

services:

  proc:

    image: 192.168.0.77:5000/unc/esproc

    volumes:

      - /home/docker/share:/share:ro

      - /opt/app/u01:/u01

    deploy:

      replicas: 4

      resources:

        limits:

          cpus: "0.5"

          memory: 250M

      restart_policy:

        condition: on-failure

    tty: true

    ports:

      - "80:80"

    networks:

      - overlay

 

networks:

  overlay:

 

检测执行情况

# docker service ps my_proc

ID                  NAME                IMAGE                                 NODE                DESIRED STATE       CURRENT STATE               ERROR               PORTS

cbvp3xos2bqa        my_proc.1           192.168.0.77:5000/unc/esproc:latest   worker              Running             Running about an hour ago                      

18h3znc97mv2        my_proc.2           192.168.0.77:5000/unc/esproc:latest   master              Running             Running about an hour ago                      

doaqlydtoen2        my_proc.3           192.168.0.77:5000/unc/esproc:latest   worker              Running             Running about an hour ago                      

ejbqw4nuv728        my_proc.4           192.168.0.77:5000/unc/esproc:latest   master              Running             Running about an hour ago     

初次要慢一些,docker自动把要运行的镜像发布到关联的node节点机上,不需要自己手动再布署,然后再运行起来,看来还比较自动化。

阅读(1722) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~