docker-swarm學習


swarm :多主機 多容器管理

在docker 1.13中,集成了docker swarm命令

如果你看到要單獨起swar容器docker run swarm,那說明是老版的

先安裝docker-machine docker-compose,docker三劍客一起搞基

安裝Docker Machine(Linux)

curl -L https://github.com/docker/machine/releases/download/v0.9.0-rc2/docker-machine-`uname -s`-`uname -m` >/tmp/docker-machine && chmod +x /tmp/docker-machine && sudo cp /tmp/docker-machine /usr/local/bin/docker-machine

安裝Docker compose

pip install docker-compose

好了,工具准備好了,我們正式開始:
集群主要架構:3個worker,2個manager

# 創建管理節點
docker-machine create --driver virtualbox manager1
docker-machine create --driver virtualbox manager2

# 創建工作節點
docker-machine create --driver virtualbox worker1
docker-machine create --driver virtualbox worker2
docker-machine create --driver virtualbox worker3

查看環境變量

docker-machine env manager1
docker-machine ip manager1
docker-machine ssh manager1 “command”  # 連接manager1運行命令

創建集群

docker-machine ssh manager1 docker swarm init --listen-addr 192.168.99.101:2377 --advertise-addr 192.168.99.101

id 用manager1的ip

你會看到返回一條命令,連入其他主機運行該命令(啥也不用改)就能以worker身份加入集群

docker-machine ssh worker1 docker swarm join --token SWMTKN-1-3z5rzoey0u6onkvvm58f7vgkser5d7z8sfshlu7s4oz2gztlvj-c036gwrakjejql06klrfc585r 192.168.99.101:2377
docker-machine ssh worker2 docker swarm join --token SWMTKN-1-3z5rzoey0u6onkvvm58f7vgkser5d7z8sfshlu7s4oz2gztlvj-c036gwrakjejql06klrfc585r 192.168.99.101:2377
docker-machine ssh worker3 docker swarm join --token SWMTKN-1-3z5rzoey0u6onkvvm58f7vgkser5d7z8sfshlu7s4oz2gztlvj-c036gwrakjejql06klrfc585r 192.168.99.101:2377

查看節點

docker-machine ssh manager1 docker node ls

查看是否加入成功

下面加入管理節點

# 獲取manage token
docker-machine ssh manager1 docker swarm join-token manager
# 運行命令
docker-machine ssh manager2 docker swarm join --token SWMTKN-1-3z5rzoey0u6onkvvm58f7vgkser5d7z8sfshlu7s4oz2gztlvj-c036gwrakjejql06klrfc585r 192.168.99.101:2377

再次查看節點

docker-machine ssh manager1 docker node ls

查看是否加入成功

下面用幾個命令熟悉一下:

# 創建一個overlay網絡
docker network create --driver overlay swarm_test

# pull鏡像到節點
docker-machine ssh manager1 docker pull nginx:alpine

# 多節點使用swarm_test組成一組服務
docker service create --replicas 2 --name helloworld --network=swarm_test nginx:alpine
--replicas 啟動幾個容器

# 查看服務狀態
docker service ls

# 查看 helloworld 服務詳情
docker service ps helloworld

# 進入節點查看
docker-machine ssh manager1 docker ps -a

# 進入節點1執行ping命令節點2:
docker-machine ssh manager1 docker exec -i helloworld.1.ay081uome3eejeg4mspa8pdlx \
ping helloworld.2.16cvore0c96rby1vp0sny3mvt
ssh連上集群,exec進入容器 運行ping命令
# 刪除服務
docker service rm helloworld

# 新建端口映射的服務
docker service create --replicas 2 --name helloworld -p 7080:80 --network=swarm_test nginx:alpine

# 殺死節點
docker-machine ssh worker2 docker kill helloworld.2.7acmhj0udzusv1d7lu2tbuhu4

# 啟動3個節點
docker service scale helloworld=3


下面用docker-compose運行一個投票網站:
在當前目錄新建文件

version: "3"
services:

  redis:
    image: redis:alpine
    ports:
      - "6379"
    networks:
      - frontend
    deploy:
      replicas: 2
      update_config:
        parallelism: 2
        delay: 10s
      restart_policy:
        condition: on-failure
  db:
    image: postgres:9.4
    volumes:
      - db-data:/var/lib/postgresql/data
    networks:
      - backend
    deploy:
      placement:
        constraints: [node.role == manager]
  vote:
    image: dockersamples/examplevotingapp_vote:before
    ports:
      - 5000:80
    networks:
      - frontend
    depends_on:
      - redis
    deploy:
      replicas: 2
      update_config:
        parallelism: 2
      restart_policy:
        condition: on-failure
  result:
    image: dockersamples/examplevotingapp_result:before
    ports:
      - 5001:80
    networks:
      - backend
    depends_on:
      - db
    deploy:
      replicas: 2
      update_config:
        parallelism: 2
        delay: 10s
      restart_policy:
        condition: on-failure

  worker:
    image: dockersamples/examplevotingapp_worker
    networks:
      - frontend
      - backend
    deploy:
      mode: replicated
      replicas: 1
      labels: [APP=VOTING]
      restart_policy:
        condition: on-failure
        delay: 10s
        max_attempts: 3
        window: 120s

  visualizer:
    image: dockersamples/visualizer:stable
    ports:
      - "8080:8080"
    stop_grace_period: 1m30s
    volumes:
      - "/var/run/docker.sock:/var/run/docker.sock"
    deploy:
      placement:
        constraints: [node.role == manager]

networks:
  frontend:
  backend:

volumes:
  db-data:

 

# 拷貝文件到集群
docker-machine scp docker-compose.yml manager1:~

# 部署
docker-machine ssh manager1 "docker stack deploy -c docker-compose.yml vote"

# 啟動情況
docker-machine ssh manager1 "docker stack ps vote"

訪問網站:
ip:5000
ip:5001
ip:8080

附上官網上的命令:

docker-machine create --driver virtualbox myvm1 # Create a VM (Mac, Win7, Linux)
docker-machine create -d hyperv --hyperv-virtual-switch "myswitch" myvm1 # Win10
docker-machine env myvm1 # View basic information about your node
docker-machine ssh myvm1 "docker node ls" # List the nodes in your swarm
docker-machine ssh myvm1 "docker node inspect <node ID>" # Inspect a node
docker-machine ssh myvm1 "docker swarm join-token -q worker" # View join token
docker-machine ssh myvm1 # Open an SSH session with the VM; type "exit" to end
docker-machine ssh myvm2 "docker swarm leave" # Make the worker leave the swarm
docker-machine ssh myvm1 "docker swarm leave -f" # Make master leave, kill swarm
docker-machine start myvm1 # Start a VM that is currently not running
docker-machine stop $(docker-machine ls -q) # Stop all running VMs
docker-machine rm $(docker-machine ls -q) # Delete all VMs and their disk images
docker-machine scp docker-compose.yml myvm1:~ # Copy file to node's home dir
docker-machine ssh myvm1 "docker stack deploy -c <file> <app>" # Deploy an app

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM