本博客为JDGan自修Docker的笔记,如有粗鄙之处,还请见谅~
阅读本博客前,请确定掌握了前一篇blog:Docker配置及安装,最好顺便还掌握了分享docker镜像。
服务(services)
在一个发布的产品里,不同的app被我们称为“服务”(service),前两篇blog里的friendlyhello
就是一个服务。在一般的情况下,建议是每一个容器有且仅有运行一个镜像,也就是一个服务,以实现服务之间的影响最小化。
一个实际的应用里,我们可能需要运行很多很多个服务,需要实现多个服务之间的数据传输,资源共享。那么我们就要对这些服务进行管理,而docker平台就可以非常便利的对服务进行管理和维护。
容器行为配置文件
为了实现对容器和服务的管理,docker需要用到docker-compose.yml
。[YAML]
这个文件的内容一般如下:
version: "3"
services:
web:
image: $username/$repository:$tag
deploy:
replicas: 5
resources:
limits:
cpus: "0.1"
memory: 50M
restart_policy:
condition: on-failure
ports:
- "80:80"
networks:
- webnet
networks:
webnet:
下面解释一下上面文件的描述:
- 版本号
3
指的是yaml版本为3。 - 通过
$username/$repository:$tag
获取app镜像(执行pull)。 - 运行5个该app镜像容器作为一个服务名为
web
,并限制每个镜像的cpu最大使用率10%,内存最大限制50MB。 - 设置重启策略为:失败后马上重启。
- 映射端口80到服务
web
的端口80。 - 所有
web
的容器共享端口80,并配置一个名为webnet
负载均衡覆盖网络。 - 使用默认配置定义负载均衡覆盖网络
webnet
。
新建文件docker-compose.yml
,并放到项目目录下。
运行群服务
在部署运行群服务之前,首先运行:
$ docker swarm init
然后就可以进行部署:
$ docker stack deploy -c docker-compose.yml getstartedlab
Creating network getstartedlab_webnet
Creating service getstartedlab_web
o(^▽^)o 启动成功! 执行ps命令查看。
$ docker stack ps getstartedlab
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS
muc0g4py7u6g getstartedlab_web.1 username/test:share moby Running Running 3 seconds ago
sil8jzmjqxpt getstartedlab_web.2 username/test:share moby Running Running 2 seconds ago
vryfp1iz6e5a getstartedlab_web.3 username/test:share moby Running Running 2 seconds ago
nb3bnumfosed getstartedlab_web.4 username/test:share moby Running Running 3 seconds ago
khoxuflpcqgb getstartedlab_web.5 username/test:share moby Running Running 3 seconds ago
增减容器
docker可以实现动态增减镜像,避免了增删容器时出现服务不可用的情况。修改的方法就是直接修改配置文件docker-compose.yml
,修改完 replicas
的值后,直接再次运行:
$ docker stack deploy -c docker-compose.yml getstartedlab
docker就会自动更新容器的数量。
例如上面的栗子中修改replicas: 2
,再次运行docker stack ps
:
$ docker stack ps getstartedlab
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS
muc0g4py7u6g getstartedlab_web.1 username/test:share moby Running Running 13 minutes ago
nb3bnumfosed getstartedlab_web.4 username/test:share moby Running Running 13 minutes ago
o(^▽^)o 简单快捷,舒适平滑。
关闭群服务
执行docker stack rm getstartedlab
直接关闭app。
需要关闭群服务则需要再执行docker swarm leave --force
。
可以通过docker node ls
查看群服务是否还在运行。