Compose简介:

Compose是Docker容器进行编排的工具,定义和运行多容器的应用,可以一条命令启动多个容器,使用Docker Compose,不再需要使用shell脚本来启动容器。

Compose通过一个配置文件来管理多个Docker容器,在配置文件中,所有的容器通过services来定义,然后使用docker-compose脚本来启动,停止和重启应用。

docker-compose默认的模板文件是 docker-compose.yml,其中定义的每个服务都必须通过image 指令指定镜像或 build指令(需要Dockerfile)来自动构建镜像。

1

2

3

1.下载并安装docker-compose

安装包:(二进制文件)

docker-compose-Linux-x86_64-1.22.0

1

#1.下载

[root@server1 ~]# ls

docker-compose-Linux-x86_64-1.22.0

#2.拷贝二进制文件

[root@server1 ~]# mv docker-compose-Linux-x86_64-1.22.0 /usr/local/bin/docker-compose

#3.添加权限

[root@server1 ~]# chmod +x /usr/local/bin/docker-compose

1

2

3

4

5

6

7

2.创建目录

[root@server1 ~]# cd /tmp/

[root@server1 tmp]# mkdir docker

[root@server1 tmp]# ls

docker

[root@server1 tmp]# cd docker/

[root@server1 docker]# pwd

/tmp/docker

[root@server1 docker]# mkdir compose

[root@server1 docker]# cd compose/

[root@server1 compose]# ls

1

2

3

4

5

6

7

8

9

10

3.编写compose文件

[root@server1 compose]# vim docker-compose.yml

#######################

web1: #容器名称

image: nginx #镜像名称

expose: #对外暴露端口

- 80

volumes: #挂载卷

- ./web1:/usr/share/nginx/html #将当前目录下的web1挂载到容器的/usr/share/nginx/html 目录下

web2:

image: nginx

expose:

- 80

volumes:

- ./web2:/usr/share/nginx/html

haproxy:

image: haproxy

volumes:

- ./haproxy/haproxy.cfg:/usr/local/etc/haproxy/haproxy.cfg:ro #只读挂载

links: #容器链接

- web1

- web2

ports: #端口映射

- "80:80"

expose:

- "80"

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

4.编写发布文件

[root@server1 compose]# mkdir web1

[root@server1 compose]# mkdir web2

[root@server1 compose]# echo web1 > web1/index.html

[root@server1 compose]# echo web2 > web2/index.html

1

2

3

4

5.编写haproxy文件

haproy:提供负载均衡

1

[root@server1 compose]# mkdir haproxy

[root@server1 compose]# cd haproxy/

[root@server1 haproxy]# ls

[root@server1 haproxy]# vim haproxy.cfg

#######################

global

log 127.0.0.1 local0

log 127.0.0.1 local1 notice

defaults

log global

mode http

option httplog

option dontlognull

timeout connect 5000ms

timeout client 50000ms

timeout server 50000ms

stats uri /status

frontend balancer

bind 0.0.0.0:80

default_backend web_backends

backend web_backends

balance roundrobin #轮询算法;check表示健康检查

server server1 web1:80 check

server server2 web2:80 check

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

[root@server1 haproxy]# ls

haproxy.cfg

[root@server1 haproxy]# cd ..

[root@server1 compose]# ls

docker-compose.yml haproxy web1 web2

1

2

3

4

5

6.下载并导入镜像

镜像:

nginx.tar

ubuntu.tar

1

2

#1.下载镜像

[root@server1 ~]# ls

nginx.tar ubuntu.tar

#2.导入镜像

[root@server1 ~]# docker load -i nginx.tar

[root@server1 ~]# docker load -i haproxy.tar

#3.查看年镜像

[root@server1 ~]# docker images

REPOSITORY TAG IMAGE ID CREATED SIZE

nginx latest 881bd08c0b08 2 weeks ago 109MB

haproxy latest fbd1f55f79b3 3 years ago 139MB

1

2

3

4

5

6

7

8

9

10

11

7.启动compose

[root@server1 ~]# cd /tmp/docker/compose

#启动;注意必须在此路径下才能执行

[root@server1 compose]# docker-compose up -d

1

2

3

#查看日志

[root@server1 compose]# docker-compose logs

Attaching to compose_haproxy_1, compose_web1_1, compose_web2_1

haproxy_1 | <7>haproxy-systemd-wrapper: executing /usr/local/sbin/haproxy -p /run/haproxy.pid -f /usr/local/etc/haproxy/haproxy.cfg -Ds

1

2

3

4

测试:

输入: http://172.25.66.1/status 发现可以实现健康检查

1

输入:http://172.25.66.1/ 刷新网页,发现可以实现轮询

1

管理compose:

#必须先关闭才能删除

[root@server1 haproxy]# docker-compose stop

[root@server1 haproxy]# docker-compose rm

1

2

3

#下次想再使用,只需再开启即可

[root@server1 haproxy]# docker-compose up -d

1

2