1. 程式人生 > >Swarm+docker叢集搭建

Swarm+docker叢集搭建

Swarm控制docker叢集

spring cloud+jenkins+docker+swarm的devops環境。本文主要記錄的是docker+swarm叢集在Centos7上的搭建。

1、 安裝docker

centos7下docker 安裝

yum update

--安裝依賴工具
yum install -y yum-utils device-mapper-persistent-data lvm2

--設定國內源(加快速度)
yum-config-manager     --add-repo     https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
--安裝 yum makecache fast yum install docker-ce --啟動 systemctl enable docker systemctl start docker --使用阿里雲加速器 vim /etc/systemd/system/multi-user.target.wants/docker.service 找到 ExecStart= 這一行,在這行最後新增加速器地址 --registry-mirror=<加速器地址>,如: ExecStart=/usr/bin/dockerd --registry-mirror=https://你的阿里雲加速器地址.mirror.aliyuncs.com
重啟使加速器生效 systemctl daemon-reload systemctl restart docker 檢查加速器設定是否正確: ps -ef | grep dockerd

修改映象本地儲存位置

1) 停止 Docker: service docker stop
2) 做個備份:tar -cvzf  /mnt/backup/var_lib_docker-backup.tar.gz /var/lib/docker
3) 遷移/var/lib/docker目錄到mnt 目錄下: mv /var/lib/docker /mnt/docker
4) 建個 symlink: ln -s /mnt/docker /var
/lib/docker 5) 確認資料夾型別為symlink 型別 ls /var/lib/docker 6) 啟動 service docker start.

2、安裝本地registry映象倉庫

安裝本地映象倉庫易於本地叢集中的映象流轉。

docker run -d -p 5000:5000 --restart always --name registry registry

如果不想麻煩用https,還需要將docker設定為允許用http方式去倉庫拉取資料。

# 編輯daemon檔案,沒有則新建
vim /etc/docker/daemon.json

# 在裡面寫入如下,將localhost改為你的倉庫伺服器地址
{
  "insecure-registries" : ["localhost:5000"]
}

# 重啟使設定生效
systemctl daemon-reload
systemctl restart docker

3、 建立swarm叢集

# 首先安裝docker-machine,可能因為網路問題,下載速度慢,建議迅雷下載好後上傳到伺服器
curl -L https://github.com/docker/machine/releases/download/v0.13.0/docker-machine-`uname -s`-`uname -m` >/tmp/docker-machine &&
    chmod +x /tmp/docker-machine &&
    sudo cp /tmp/docker-machine /usr/local/bin/docker-machine

Linux 64迅雷下載地址:https://github.com/docker/machine/releases/download/v0.13.0/docker-machine-Linux-x86_64

# 在主節點(假設為10.8.80.11)上初始化swarm節點
docker swarm init --advertise-addr 10.8.80.11

# 通過以上節點的初始化,會獲得子節點的加入token,類似下面的格式,請儲存
Swarm initialized: current node (dxn1zf6l61qsb1josjja83ngz) is now a manager.

To add a worker to this swarm, run the following command:

    docker swarm join \
    --token SWMTKN-1-49nj1cmql0jkz5s954yi3oex3nedyz0fb0xx14ie39trti4wxv-8vxv8rssmk743ojnwacrr2e7c \
    192.168.99.100:2377

To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.

# 在子節點(假設為10.8.80.12)上加入swarm叢集,執行上面得到的join命令
docker swarm join \
    --token SWMTKN-1-49nj1cmql0jkz5s954yi3oex3nedyz0fb0xx14ie39trti4wxv-8vxv8rssmk743ojnwacrr2e7c \
    10.8.80.12:2377

# 加入後,可在主節點上使用以下命令檢視當前叢集的已接入節點資訊
docker node ls

4、執行service

service是什麼:一個docker叢集執行多個service,一個service可以是一個或多個container組成。其實就是一個或多個相同的例項。

# 啟動一個service,其中replicas表示需要多少個副本
docker service create --replicas 1 --name helloworld alpine ping docker.com

5、自定義網路環境(解決微服務dns問題)

通過解決微服務的dns問題,同一網路下,可以使用服務名連線到其他服務

# 叢集主節點建立自定義網路
docker network create --driver overlay my-network

# 建立執行service時,需加引數`--network my-network`,如:
docker service create -d --name qms-config-server  --network my-network 10.8.80.11:5000/qms/qms-config-server:40

6、常用命令


docker node ls

docker service ls