macOS 系统下 docker-machine 的安装和单机集群环境的构建

ref

https://stackoverflow.com/questions/42079458/how-to-run-docker-machine-create-in-os-x
https://github.com/machine-drivers/docker-machine-driver-xhyve
https://asciinema.org/a/29930
https://docs.docker.com/machine/
https://www.jianshu.com/p/9fce6e583669
https://yeasy.gitbooks.io/docker_practice/swarm_mode/create.html
https://www.qiancheng.me/post/coding/show-linux-issue-version

安装

$ brew install docker-machine-driver-xhyve

# docker-machine-driver-xhyve need root owner and uid
$ sudo chown root:wheel $(brew --prefix)/opt/docker-machine-driver-xhyve/bin/docker-machine-driver-xhyve
$ sudo chmod u+s $(brew --prefix)/opt/docker-machine-driver-xhyve/bin/docker-machine-driver-xhyve

创建

# 比较随意的尝试 ...
# 创建一个 docker-machine
docker-machine -D create --driver xhyve xhyve-test 
# 查看创建的 docker-machine
(demo) (base) furuiyangdeMacBook-Pro:bin furuiyang$ docker-machine ls
NAME         ACTIVE   DRIVER   STATE     URL                       SWARM   DOCKER     ERRORS
xhyve-test   *        xhyve    Running   tcp://192.168.64.2:2376           v18.09.4
# 再创建一个 docker-machine 用 docker-machine create -d virtualbox default  会 失败 是因为我们没有使用正确的引擎 
# 按照相同的引擎再创建一个 
docker-machine -D create --driver xhyve test2
# 查看 
(demo) (base) furuiyangdeMacBook-Pro:bin furuiyang$ docker-machine ls
NAME         ACTIVE   DRIVER   STATE     URL                       SWARM   DOCKER     ERRORS
test2        -        xhyve    Running   tcp://192.168.64.3:2376           v18.09.4
xhyve-test   *        xhyve    Running   tcp://192.168.64.2:2376           v18.09.4

# 创建一个具有三个节点的集群 
# kill 掉之前创建的节点 最好先停掉再kill 不然可能会有延迟 
(base) furuiyangdeMacBook-Pro:~ furuiyang$ docker-machine kill xhyve-test
Killing "xhyve-test"...
(xhyve-test) Killing xhyve-test ...
Machine "xhyve-test" was killed.
# 杀死之后貌似要移除才能够不显示 
# 杀死之后貌似移除才能不显示 
(base) furuiyangdeMacBook-Pro:~ furuiyang$ docker-machine rm test2
About to remove test2
WARNING: This action will delete both local reference and remote instance.
Are you sure? (y/n): y
Successfully removed test2
(base) furuiyangdeMacBook-Pro:~ furuiyang$ docker-machine rm xhyve-test
About to remove xhyve-test
WARNING: This action will delete both local reference and remote instance.
Are you sure? (y/n): y
Successfully removed xhyve-test

# 开始创建工作 创建一个 docker 主机作为管理节点 
docker-machine -D create --driver xhyve manager
# 使用 docker swarm init 在管理节点初始化一个 swarm 集群 
# 进入manager 节点 
(base) furuiyangdeMacBook-Pro:~ furuiyang$ docker-machine ssh manager
   ( '>')
  /) TC (\   Core is distributed with ABSOLUTELY NO WARRANTY.
 (/-_--_-\)           www.tinycorelinux.net

docker@manager:~$
# (3) 在初始化集群的时候 如果我们的 Docker 主机有多个网卡拥有多个 ip 必须使用 —advertise-addr指定 IP
执行了 docker swarm init 命令的节点自动成为管理节点:
docker@manager:~$ docker swarm init --advertise-addr 192.168.64.4
Swarm initialized: current node (a5pj98cwqvtzbku5hx791fwbx) is now a manager.

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

    docker swarm join --token SWMTKN-1-0lxcpv2s9t6tuo2ylz5e2nk009kcpvuopl09verkio2vbq12k8-85vdf3io09ergf0ghnp56gmtc 192.168.64.4:2377

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

# 上一步是初始化了一个 Swarm 集群拥有了一个管理节点,下面要继续创建两个 docker 主机作为工作节点,并加入集群中
docker-machine -D create --driver xhyve worker-1
docker-machine ssh worker-1
# 按照上一步的提示 加入集群 :
docker@worker-1:~$ docker swarm join --token SWMTKN-1-0lxcpv2s9t6tuo2ylz5e2nk009kcpvuopl09verkio2vbq12k8-85vdf3io09ergf0ghnp56gmtc 192.168.64.4:2377
This node joined a swarm as a worker.
# 相同的流程,再创建一个 worker-2

#  现在我们就拥有了一个最小的 swarm 集群,包含一个管理节点和两个工作节点:
# 在管理节点使用 docker node ls 查看集群 :
docker-machine ssh manager

docker@manager:~$ docker node ls
ID                            HOSTNAME            STATUS              AVAILABILITY        MANAGER STATUS      ENGINE VERSION
a5pj98cwqvtzbku5hx791fwbx *   manager             Ready               Active              Leader              18.09.4
sbklk1trusrzk6fh5autpc4r0     worker-1            Ready               Active                                  18.09.4
lspybekg0bu2hn29qi6rppxs6     worker-2            Ready               Active                                  18.09.4


# 我们使用 docker service 命令来管理 Swarm 集群中的服务,该命令只能在管理节点运行:
docker@manager:~$ docker service --help

Usage:	docker service COMMAND

Manage services

Commands:
  create      Create a new service
  inspect     Display detailed information on one or more services
  logs        Fetch the logs of a service or task
  ls          List services
  ps          List the tasks of one or more services
  rm          Remove one or more services
  rollback    Revert changes to a service's configuration
  scale       Scale one or multiple replicated services
  update      Update a service

Run 'docker service COMMAND --help' for more information on a command.

# 使用 docker service ls 来查看当前集群运行的服务
docker@manager:~$ docker service ls
ID                  NAME                MODE                REPLICAS            IMAGE               PORTS

# 在当前的 swarm 集群中创建运行一个名字为 nginx 的服务:
docker@manager:~$ docker service create --replicas 3 -p 80:80 --name nginx nginx:1.13.7-alpine
8zhje131zfvkjcvzf3n994g6p
overall progress: 3 out of 3 tasks
1/3: running   [==================================================>]
2/3: running   [==================================================>]
3/3: running   [==================================================>]
verify: Service converged

# 再次查看当前集群中运行的服务:
docker@manager:~$ docker service ls
ID                  NAME                MODE                REPLICAS            IMAGE                 PORTS
8zhje131zfvk        nginx               replicated          3/3                 nginx:1.13.7-alpine   *:80->80/tcp

# 查看某个服务的详情 
docker@manager:~$ docker service ps nginx
ID                  NAME                IMAGE                 NODE                DESIRED STATE       CURRENT STATE            ERROR                              PORTS
o6q2krpwgen8        nginx.1             nginx:1.13.7-alpine   manager             Running             Running 3 minutes ago
fao1f7wn38ov        nginx.2             nginx:1.13.7-alpine   worker-1            Running             Running 3 minutes ago
kdwep3qbdzek         \_ nginx.2         nginx:1.13.7-alpine   worker-1            Shutdown            Rejected 3 minutes ago   "No such image: nginx:1.13.7-a…"
nthguxsg4i58         \_ nginx.2         nginx:1.13.7-alpine   worker-1            Shutdown            Rejected 3 minutes ago   "No such image: nginx:1.13.7-a…"
s46wy6mxcgli         \_ nginx.2         nginx:1.13.7-alpine   worker-1            Shutdown            Rejected 3 minutes ago   "No such image: nginx:1.13.7-a…"
gjpo9ee74teq        nginx.3             nginx:1.13.7-alpine   worker-2            Running             Running 3 minutes ago
docker@manager:~$


# 查看某个服务的日志 
docker service logs nginx

# 从集群中移除某个服务 
$ docker service rm nginx


# 服务伸缩:我们可以使用 docker service scale 对一个服务运行的容器数量进行伸缩
docker@manager:~$ docker service scale nginx=5
nginx scaled to 5
overall progress: 5 out of 5 tasks
1/5: running   [==================================================>]
2/5: running   [==================================================>]
3/5: running   [==================================================>]
4/5: running   [==================================================>]
5/5: running   [==================================================>]
verify: Service converged

docker@manager:~$ docker service scale nginx=2
nginx scaled to 2
overall progress: 2 out of 2 tasks
1/2: running   [==================================================>]
2/2: running   [==================================================>]
verify: Service converged

在 swarm 集群中部署 WordPress

创建 docker-compose.yml 文件
version: "3"

services:
  wordpress:
    image: wordpress
    ports:
      - 80:80
    networks:
      - overlay
    environment:
      WORDPRESS_DB_HOST: db:3306
      WORDPRESS_DB_USER: wordpress
      WORDPRESS_DB_PASSWORD: wordpress
    deploy:
      mode: replicated
      replicas: 3

  db:
    image: mysql
    networks:
       - overlay
    volumes:
      - db-data:/var/lib/mysql
    environment:
      MYSQL_ROOT_PASSWORD: somewordpress
      MYSQL_DATABASE: wordpress
      MYSQL_USER: wordpress
      MYSQL_PASSWORD: wordpress
    deploy:
      placement:
        constraints: [node.role == manager]

  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]

volumes:
  db-data:
networks:
  overlay:

我们要在管理节点创建该文件,这里面得 visualizer 服务提供一个可视化的页面,我们可以从浏览器中
很直观的查看集群中各个服务的运行节点。

# 在 swarm 中使用 docker-compose.yml 我们使用 docker stock 命令:
# -c 用于指定 compose 文件名 
docker@manager:~$ docker stack deploy -c docker-compose.yml wordpress
Creating network wordpress_overlay
Creating network wordpress_default
Creating service wordpress_wordpress
failed to create service wordpress_wordpress: Error response from daemon: rpc error: code = InvalidArgument desc = port '80' is already in use by service 'nginx' (8zhje131zfvkjcvzf3n994g6p) as an ingress port

# 失败 是因为集群中已经有一个占用了 80 端口的服务 
# 那我们首先关闭 nginx 服务: 
docker@manager:~$ docker service rm nginx
nginx

# 再次创建 :
docker@manager:~$ docker stack deploy -c docker-compose.yml wordpress
Creating service wordpress_wordpress
Creating service wordpress_db
Creating service wordpress_visualizer


# 退出 查看集群任一节点暴露出的ip
(base) furuiyangdeMacBook-Pro:~ furuiyang$ docker-machine ip manager
192.168.64.4
(base) furuiyangdeMacBook-Pro:~ furuiyang$ docker-machine ip workoer-1
Docker machine "workoer-1" does not exist. Use "docker-machine ls" to list machines. Use "docker-machine create" to add a new one.
(base) furuiyangdeMacBook-Pro:~ furuiyang$ docker-machine ip worker-1
192.168.64.5
(base) furuiyangdeMacBook-Pro:~ furuiyang$ docker-machine ip worker-2
192.168.64.6

# 这时候我们打开浏览器 输入任一节点的IP:8080 就可以查看各个节点的运行状态: 
http://192.168.64.6:8080/


# 查看服务 使用 docker stack ls 
docker@manager:~$ docker stack ls
NAME                SERVICES            ORCHESTRATOR
wordpress           3                   Swarm

#  关停服务   docker stack down wordpress
docker@manager:~$ docker stack down wordpress
Removing service wordpress_db
Removing service wordpress_visualizer
Removing service wordpress_wordpress
Removing network wordpress_default
Removing network wordpress_overlay

# 移除服务不会移除相关的 数据卷 需要自己使用 docker volume rm  xxxx
docker@manager:~$ docker volume ls
DRIVER              VOLUME NAME
local               efdf2083aaf8478a08c05ef5e513aa8cc10aed9e23fcd287590f14f78d4c49fe
local               wordpress_db-data
docker@manager:~$ docker volume rm efdf2083aaf8478a08c05ef5e513aa8cc10aed9e23fcd287590f14f78d4c49fe
Error response from daemon: remove efdf2083aaf8478a08c05ef5e513aa8cc10aed9e23fcd287590f14f78d4c49fe: volume is in use - [a6c2950b04b180d5b2b531d70b5c9adbe6830b30778a7f023b2388912a6e111f]
docker@manager:~$ docker volume rm wordpress_db-data
wordpress_db-data
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值