Docker swarm

Docker swarm 容器编排工具。

 

下面说的是怎么启动work和manager节点,并在节点上运行服务,并停止服务

启动manager和work节点

ip a         # 查看本机的ip地址,看veth·的IP地址
docker swarm init --advertise-addr=上面的IP地址   # 成为manager节点
#  会返回执行work的命令

# 进入另一台主机, 执行上面返回的work命令
# 再进入另一台主机,执行上面返回的work命令
# 这样就启动了2个work节点。和一个manager节点

运行service和停止service

# 在节点运行service
# manager节点
docker service create --name demo busybox sh -c "while true; do sleep 3600; done;"

docker service ls       # 查看有几个服务
docker service ps demo  # 查看服务的具体情况,看到这个服务运行在manager上,不一定非得是manager上吧,多分と思います。
docker service scale demo=5  # 开启5个demo服务,水平扩展,将5个服务自动分给上面的3个节点(2个work,1个manager)


# 进入work一个主机
docker rm -f 容器ID             # 删掉一个容器

# 在进入manager主机
docker service ls               # 发现REPLICAS 4/5, 再执行一次变成5/5, 大概就是这个意思
# 就是说swarm,会检测停掉的容器,发现容器停掉,还会自己重新启动


docekr service rm demo         # 删除demo服务,5个容器都停掉了

 

各个节点的相互访问

通过overlay

docker network create -d overlay demo-net
docker network ls 
docker service create --name mysql --env MYSQL_ROOT_PASSWORD=root --env MYSQL_DATABASE=wordpress ---network demo-net --mount type=volume, source=mysql-data,destination=/var/xxx
docker service create --name wordpress -p 80:80 --env WORDPRESS_DB_PASSWORD=root --env WORDPRESS_DB_HOST=mysql --network demo-net wordpress

docker service ps wordpress 
# 查看wordpress, 发现运行在work2上, 运行在哪,不重要,而且不能确定,说这句话就是说要记住这个命令


# 进入work2节点
ip a
# 找到verh2显示的ip
# 通过这个ip, 用worlk1和manager也能访问到,, (可能有问题,我再看看)

 

利用docker-compose.yml文件部署swarm

上面全是手动,可以通过docker-compose文件部署,就像前面docker-compose 使用那样

version:: '3'

service:
  web:
    image: wordpress   # 镜像只能拉取,不能自己建立
    ports:
      - 8080:8080
    secrets:          # 指定密码
      - my-pw
    environment:
      WOEDPRESS_DB_HOST: mysql
      WORDPPEDD_DB_PASSWORD: /run/secrets/my-pw  # 使用密码
    networks:
      - my-network 
    depend_on:
      - mysql
    deploy:
      mode: replicated
      replicas: 3            # 一下启动3个wordpress服务
      restart_policy:        # 下面是重启策略
        condition: on-failure
        delay: 5s
        max_attempts: 3
      update_config:        # 更新策略
        parallelism: 1
        delay: 10s
  
  mysql:
    image: mysql
    secrets:
      - my-pw
    environment:
      MYSQL_ROOT_PASSWORD: /run/secrets/my-pw
      MYSQL_DATABASSE: wordpress
    volumes:
      - mysql-data:/var/lib/mysql
    networks:
      - my-network
    deploy:
      mode: global           # 不能启动多个
      placement:
        constraints:bu
          - node.role == manager   # mysql只能部署到manager节点
    
  volumes:
    mysql-data:
  
  networks:
    my-network:
      driver: overlay
  
  secrets:                # 事先没创建secret,要在这指定,相当于创建了secrets.如果提前创建了,就不需要在制定了
    my-pw:
      file: ./password    # password是个文件
  # 这种方式不推荐,因为存在了文件里。不安全,尽量提前创建secrets

swarm运行这个文件需要下面这个命令

docker stack

  • deploy                 Deploy a new stack update an existing stack
  • ls                         List stacks 
  • ps                        List the stacks in the stacks
  • rm                        Remove one or more stacks
  • services                List the services in the stack    (yml中定义的service)
docker stack deploy wordpress --compose-file=docker-compose.yml
# swarm 通过--compose-file 指定yml文件来启动, wordpress 是自己起stack的名

docker stack ls 
docker stack ps wordpress
docker stack services wordpress
docker service scale stack名字_service名字=3 
# 如 docker service scale wordpress_web=3
# 把stack里面的service启动成几个,

 

select Management

密码管理

  • 存在Swarm Manager 节点,Rafc database里
  • 在container内部secret看起来像文件,实际是内存
  • secrect 可以assign给service,这个service就能看到这个secret

基本命令:

  • docker secret create
  • docker secret inspect
  • docker ls
  • docker rm

可以通过两种方法创建select

① 通过文件

vim password
# 随便输入一个密码
docker secret create my_password password
# 创建一个密码,my_password是自己起的名字, password是个文件

rm -rm passwpord             # 出于安全考略,密码用完就删
docker secret ls 

 

②通过标准输出

echo "要使用的密码" | docekr secret create my-password2 -
# 别忘了加这个-,  这个-是啥意思了?以前记得用过,,

 

检验一下,

docker service create --name client --secret xx busybox sh -c "while true; do sleep 3600; done"
docker exec -it ccee sh      # 进入到busybox
cd /run/secrets/             # 密码放在这个文件里
ls
cat xxx                      #  能看到密码

 

使用:

docker service create --name db --secret xx -e MYSQL_ROOT_PASSWORD_FILE=/run/secrets/xx

或者通过上面的docker-compose来指定,注意,如果没有最后名于service选项相同的选项,就要提前创建密码。

 

 

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值