4 Oct 2019

docker-4-组合

组合

Compose

应用可以需要多个服务,比如web服务,数据库服务等,我们倡议每个服务对应一个docker容器,那么问题就是维持多个服务的容器会比较麻烦,我们可以使用docker compose 来解决这个问题。我们可以创建一个compose文件,在这个文件的上面我们可以描述我们的应用需要哪些服务,这些服务使用的镜像,数据卷和网络等等,再用一条命令启动和管理这些服务。

Compose文件

在compose这个文件里面我们可以定义应用需要的服务,网络和数据卷,这个文件用的yaml格式,docker规定的一些指令,使用他们可以设置对应的东西,比如它主要分成3个区域,sevices就是服务,在它的下面你可以定义需要的服务,每个服务都有自己的名字,使用的镜像,挂载的数据卷,所属的网络依赖的其他服务等等。networks可以定义应用使用的网路名字,类型和其他东西。volumes可以定义数据卷,然后挂载到不同的服务上去使用。

atom docker-compose.yml
version:'2'

Services

定义服务

Docker-compose.yml

version: '2'
services:
	phoenix:
		image: nginx
    ports:
			- "8080:80"
	dragon:
		image: nginx
    ports:
			-	"8081:80"

:和后面value值之间要空一格

然后执行 docker-compose up

启动服务

docker-compose.yml文件所在目录下执行 docker-compose up
后台运行 则加上 -d 参数

服务的生命周期

查看服务可以使用 docker-compose ps

停止服务可以使用 docker-compose stop 服务名称

重新启动可以使用 docker-compose start

查看日志可以使用 docker-compose log 服务名称,如果加 -f 则可持续跟踪

登陆到某个服务容器里面可以使用 docker-compose exec phoenix bash

删除使用 docker-compose rm ,但是rm不会删除创建的网络和数据卷

如果删除掉所有东西,可以使用 docker-compose down

Networks

网络

网络决定了服务之间还有外界和服务之间怎么样进行沟通,在执行 docker-compose up 的时候,docker会给我们创建默认的网络,所有的服务也会默认属于这个默认的网络,服务之间可以使用服务名字进行相互通信,我们可以创建自己的网络,让后让指定的服务加入到我们自己创建的网络里面,这样的话属于这网络的服务之间可以相互通信,不属于这网络的服务就无法通信了,这样的话会对服务有隔离作用,也更安全一些。

定义网络

version: '2'
services:
 phoenix:
  image: nginx
  ports:
   - "8080:80"
  networks:
   - "fairyland"
 dragon:
  image: nginx
  ports:
   - "8081:80"
  networks:
   - "fairyland"
 monkey:
  image: nginx
  ports:
   - "8082:80"
  networks:
   - "default"      
networks:
 fairyland: 
  driver: bridge

Volumes

命名的数据卷

version: '2'
services:
 phoenix:
  image: nginx
  ports:
   - "8080:80"
  networks:
   - "fairyland"
  volumes:
	 - nest:/mnt
 dragon:
  image: nginx
  ports:
   - "8081:80"
  networks:
   - "fairyland"
  volumes:
	 - nest:/mnt
 monkey:
  image: nginx
  ports:
   - "8082:80"
  networks:
   - "default"      
networks:
 fairyland: 
  driver: bridge
volumes:
	nest:
		driver: local

指定位置的数据卷

version: '2'
services:
 phoenix:
  image: nginx
  ports:
   - "8080:80"
  networks:
   - "fairyland"
  volumes:
   - nest:/mnt
   - ./web:/usr/share/nginx/html
 dragon:
  image: nginx
  ports:
   - "8081:80"
  networks:
   - "fairyland"
  volumes:
   - nest:/mnt
   - ./web:/usr/share/nginx/html
 monkey:
  image: nginx
  ports:
   - "8082:80"
  networks:
   - "default"      
networks:
 fairyland: 
  driver: bridge
volumes:
 nest:
  driver: local

Tags:
Stats:
0 comments