13.常用的Docker Compose配置

version: "3"
services:
	redis:
		image: redis:3.2
		networks:
			- backend
		volumes:
			- ./redis/redis.conf:/etc/redis.conf:ro
		ports:
			- "6379:6379"
		command: ["redis-server", "/etc/redis.conf"]
	database:
		image: mysql:5.7
		networks:
			- backend
		volumes:
			- ./mysql/my.cnf:/etc/mysql/my.cnf:ro
			- mysql-data:/var/lib/mysql
		environment:
			- MYSQL_ROOT_PASSWORD=my-secret-pw
		ports:
			- "3306:3306"
	webapp:
		build: ./webapp
		networks:
			- frontend
			- backend
		volumes:
			- ./webapp:/webapp
		depends_on:
			- redis
			- database
	nginx:
		image: nginx:1.12
			- networks:
			- frontend
		volumes:
			- ./nginx/nginx.conf:/etc/nginx/nginx.conf:ro
			- ./nginx/conf.d:/etc/nginx/conf.d:ro
			- ./webapp/html:/webapp/html
	depends_on:
			- webapp
	ports:
			- "80:80"
			- "443:443"
networks:
	frontend:
	backend:
volumes:
	mysql-data:
指定镜像

容器最基础的就是镜像,在Docker Compose中指定镜像有两种方式。
方式1:image这种比较简单,就之间指定镜像仓库中的镜像名称就可以。
方式2:采用Dockerfile文件来构建镜像。通过 build 这个配置能够定义构建的环境⽬录,这与 docker build 中的环境⽬录是同⼀个含义。如果我们通过这种⽅式指定镜像,那么 Docker Compose 先会帮助我们执⾏镜像的构建,之后再通过这个镜像启动容器。在docker build中通过选项还可以定义许多内容,在Docker Compose也可以。

webapp:
	build:
		context: ./webapp
		dockerfile: webapp-dockerfile
		args:
			- JAVA_VERSION=1.6

依赖声明
虽然在配置文件中定义了服务,在书写上有从上到下的先后关系。但是在实际的启动中,由于各种因素,这个顺序是无法保证的。如果一个容器的启动依赖于别的容器,那么可以通过depends_on进行配置

文件挂载

在 Docker Compose ⾥定义⽂件挂载的⽅式与 Docker Engine ⾥也并没有太多的区别,使⽤ volumes 配置可以像 docker CLI ⾥的 -v 选项⼀样来指定外部挂载和数据卷挂载。

能够直接挂载宿主机⽂件系统中的⽬录,也可以通过数据卷的形式挂载内容。并且在使⽤外部⽂件挂载的时候,可以直接指定相对⽬录进⾏挂载,这⾥的相对⽬录是指相对于 docker-compose.yml ⽂件的⽬录

数据卷
如果需要使用数据卷来存放特殊数据,那么可以通过独立于servicesvolumes来声明。Docker Compose会自动创建,如果需要引用外部数据卷需要配置external,此时Docker Compose 在创建项⽬时不会直接创建数据卷,⽽是优先从 Docker Engine 中已有的数据卷⾥寻找并直接采⽤

配置网络

在 Docker Compose ⾥,我们可以为整个应⽤系统设置⼀个或多个⽹络。网络的声明也独立与services之外,在根配置下的networks中,除了上面的例子中简单的声明⽹络名称,让 Docker Compose 自动按默认形式完成网络配置外,还可以显式的指定⽹络的参数。
声明网络并且配置网络驱动和网段。

networks:
	frontend:
		driver: bridge
		ipam:
			driver: default
			config:
				- subnet: 10.10.1.0/24

使用网络别名
直接使⽤容器名或服务名来作为连接其他服务的⽹络地址,因为缺乏灵活性,常常还不能满⾜我们的需要。这时候我们可以为服务单独设置⽹络别名,在其他容器⾥,我们将这个别名作为⽹络地址进⾏访问。

## ......
database:
	networks:
		backend:
			aliases:
				- backend.database
## ......
webapp:
	networks:
		backend:
			aliases:
				- backend.webapp
		frontend:
			aliases:
				- frontend.webapp
## ......

端口映射
类似与docker CLI-p的选项,但是需要注意的是,由于 YAML 格式对 xx:yy 这种格式的解析有特殊性,在设置⼩于 60 的值时,会被当成时间⽽不是字符串来处理,所以我们最好使⽤引号将端⼜映射的定义包裹起来,避免歧义。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值