Docker学习笔记(四)——Get Started, Part 3:服务

要求

  • 安装了1.13版本以上的Docker
  • 安装了Docker Compose
	# 下载安装docker compose
    sudo curl -L https://github.com/docker/compose/releases/download/1.24.0/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
    # 为docker-compose 添加执行权限
    sudo chmod +x /usr/local/bin/docker-compose
  • 确保发布了part2中的friendlyhello image
  • 确保friendlyhello 能正常启动
 	 # 启动iamge
 	 docker run -p 80:80 username/repo:tag
 	 # 访问 http://localhost/

关于服务

服务实际上就是“生产中的容器”。一个服务只运行一个image,但它编纂image的运行方式 ——它应该使用哪些端口,应该运行多少个容器副本,以便服务具有所需的容量,等等。扩展服务会更改运行该软件的容器实例的数量,从而为流程中的服务分配更多计算资源。

幸运的是,使用Docker平台定义,运行和扩展服务非常容易 - 只需编写一个docker-compose.yml文件即可。

第一个 docker-compose.yml 文件

  • docker-compose.yml 定义了Docker containers 的行为
  • docker-compose.yml 可以保存到任意位置
    一个docker-compose.yml文件是一个YAML文件,它定义了如何Docker容器在生产中应表现。

创建 docker-compose.yml 文件,保存到任意位置

version: "3"
services:
  web:
    # replace username/repo:tag with your name and image details
    image: username/repo:tag
    deploy:
      replicas: 8
      resources:
        limits:
          cpus: "0.1"
          memory: 50M
      restart_policy:
        condition: on-failure
    ports:
      - "4000:80"
    networks:
      - webnet
networks:
  webnet:

该docker-compose.yml文件告诉Docker执行以下操作:

  • 拉我们在步骤2中上传的image

  • 运行该image的8个实例,作为服务,叫做web,限制每个实例最多使用单个CPU核心时间的10%,以及50MB RAM。

  • 如果有一个失败了,立即重启所有容器。

  • 将主机上的端口4000映射到web端口80。

  • 指示web容器通过称为负载平衡的网络共享端口80 webnet。(在内部,容器本身web在短暂的端口发布到 80端口。)

webnet使用默认设置(负载平衡的覆盖网络)定义网络。

Run your new load-balanced(负载均衡) app

  • 1、初始化集群(part4会具体讲解)
docker swarm ini
  • 2、部署应用,可以给应用设置一个名字:getstartedlab
docker stack deploy -c docker-compose.yml getstartedlab

现在我们的 stack 中正运行着5个容器实例,可以在浏览器中输入http://localhost:4000/访问服务了

  • 3、查看service ID
# 方法1
docker service ls
ID                  NAME                MODE                REPLICAS            IMAGE                         PORTS
vieno09adja5        getstartedlab_web   replicated          8/8                 yolanda99/get-started:part2   *:4000->80/tcp

# 方法2
docker stack services getstartedlab
ID                  NAME                MODE                REPLICAS            IMAGE                         PORTS
vieno09adja5        getstartedlab_web   replicated          8/8                 yolanda99/get-started:part2   *:4000->80/tcp**
  • 4、查看service或者stack的所有任务
    在service上运行的一个container 叫做一个task,task 有唯一的自增id,task个数就是docker-compose.yml 文件中定义的replicas个数
# 方法1
docker service ps getstartedlab_web
ID                  NAME                  IMAGE                         NODE                   DESIRED STATE       CURRENT STATE         ERROR               PORTS
kxev9e1bqe3z        getstartedlab_web.1   yolanda99/get-started:part2   server2-OptiPlex-380   Running             Running 5 hours ago
d2emxey208gz        getstartedlab_web.2   yolanda99/get-started:part2   server2-OptiPlex-380   Running             Running 5 hours ago
jtentwj29xgt        getstartedlab_web.3   yolanda99/get-started:part2   server2-OptiPlex-380   Running             Running 5 hours ago
h451ix24b0om        getstartedlab_web.4   yolanda99/get-started:part2   server2-OptiPlex-380   Running             Running 5 hours ago
lwobxl7su15u        getstartedlab_web.5   yolanda99/get-started:part2   server2-OptiPlex-380   Running             Running 5 hours ago
eegrl8znxdme        getstartedlab_web.6   yolanda99/get-started:part2   server2-OptiPlex-380   Running             Running 5 hours ago
syqiyo2px3h7        getstartedlab_web.7   yolanda99/get-started:part2   server2-OptiPlex-380   Running             Running 5 hours ago
r4247hsc4qhm        getstartedlab_web.8   yolanda99/get-started:part2   server2-OptiPlex-380   Running             Running 5 hours ago

# 方法2
docker stack ps getstartedlab
ID                  NAME                  IMAGE                         NODE                   DESIRED STATE       CURRENT STATE         ERROR               PORTS
kxev9e1bqe3z        getstartedlab_web.1   yolanda99/get-started:part2   server2-OptiPlex-380   Running             Running 5 hours ago
d2emxey208gz        getstartedlab_web.2   yolanda99/get-started:part2   server2-OptiPlex-380   Running             Running 5 hours ago
jtentwj29xgt        getstartedlab_web.3   yolanda99/get-started:part2   server2-OptiPlex-380   Running             Running 5 hours ago
h451ix24b0om        getstartedlab_web.4   yolanda99/get-started:part2   server2-OptiPlex-380   Running             Running 5 hours ago
lwobxl7su15u        getstartedlab_web.5   yolanda99/get-started:part2   server2-OptiPlex-380   Running             Running 5 hours ago
eegrl8znxdme        getstartedlab_web.6   yolanda99/get-started:part2   server2-OptiPlex-380   Running             Running 5 hours ago
syqiyo2px3h7        getstartedlab_web.7   yolanda99/get-started:part2   server2-OptiPlex-380   Running             Running 5 hours ago
r4247hsc4qhm        getstartedlab_web.8   yolanda99/get-started:part2   server2-OptiPlex-380   Running             Running 5 hours ago

也可以通过列出所有 container 显示task,但是没有用service过滤

docker container ls -q
2db10346e0e0
595fe0574031
5c7d06409f22
cb698b371925
45f00ea2ca98
8511c370da6e
4d39ce4eaa28
2c5302f215d6

您可以连续多次运行 curl -4 http://localhost:4000,或者在浏览器中转到该URL并点击刷新几次。无论哪种方式,容器ID都会发生变化,从而证明负载均衡; 对于每个请求,以循环方式选择5个任务中的一个来响应。容器ID与上一个命令(docker container ls -q)的输出匹配。

Scale the app(扩展应用程序)

修改docker-compose.yml 文件中的replicas 的值,重新部署docker

docker stack deploy -c docker-compose.yml getstartedlab
Updating service getstartedlab_web (id: hwb75v60hlt9lpc3q78jlm1gq)

Take down the app and the swarm(移除应用程序和集群)

移除应用程序

docker stack rm getstartedlab

移除集群

docker swarm leave --force

命令小结

docker stack ls                                            # List stacks or apps
docker stack deploy -c <composefile> <appname>  # Run the specified Compose file
docker service ls                 # List running services associated with an app
docker service ps <service>                  # List tasks associated with an app
docker inspect <task or container>                   # Inspect task or container
docker container ls -q                                      # List container IDs
docker stack rm <appname>                             # Tear down an application
docker swarm leave --force      # Take down a single node swarm from the manager
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值