Docker Compose

Docker能够很容易地将每个微服务绑定到容器,并且Docker Compose使得这些容器的编排变得非常简单。没有Docker Compose,容器编排步骤将涉及各种镜像、创建所需的网络,以及以一定顺序通过一系列Docker run 命令来运行应用程序,

Docker Compose的功能不仅在于启动容器;它还有以下的功能:

  • 构建、停止以及启动与应用程序相关的容器
  • 跟踪运行中容器的日志,避免了必须打开多个终端会话来跟踪每个容器的麻烦
  • 查看每个容器的状态

Docker Compose 是本地开发测试使用的,真正上线不用它

linux需要额外安装,自行百度

 

Compose文件是一个YAML配置文件,该文件定义了启动应用程序所需的服务、网络和卷。Docker要求Compose文件所处的路径与调用docker-compose命令时所处的位置相同,并且该位置中要有一个docker-compose.yml或者docker-compose.yaml的文件,就是说创建个docker-compose文件,把Docker Compose写进这个文件中。一般都是写在同级目录下,也可以使用-f标记来重写这个位置。

 

常用命令

  • docker-compose up        Create and start containers
  • docker-compose stop     Stop services
  • docker-compose start     Start services
  • docker-compose down    Stop and remove containers, networks, images, and volumes 停止并删除所有的容器
  • docker-compose exec     跟docker exec 一样,对正在运行的容器操作
  • docker-compose build     Build or rebuild services 先把yml文件中需要build的镜像先build起来,然后再up起来,如果yml中的自定义的Dockerfile文件发生了更改,则需要先这样运行。
  • docker-compose config   Validate and view the Compose file, 就是查看自己写的docker-compose.yml文件
  • docker-compose logs      查看这些容器的日志
  • docker-compose logs --tail=n   查看容器的后n条数据
  • docker-compose ps           列举docker-compse 里的server
  • docker-compose images    列举docker-compose定义的container和images
  • docker-compose scale      Set number of containers for a service,就是一次启动几个服务,后面会说
  • docker-compose -f  docker-compose.yml up     -f 指定文件,默认是docker-compose。yml 通过-f 可以指定

 

关于文件版本

一共有三个版本,现在都用版本3,及开头用

version: '3'

version: '3'
services:
	database:        (这是服务的名字,随便取)
		image:mysql  (写成这个样子,是要在docker hub 拉取镜像)
		environment:
			xxxxx: xx
	webserver:
		image: nginx:alpine
		ports:
			- 8080:80
		depends_on:   (这个是说明了启动顺序,Docker Compose默认按从上到下执行,
                              但是这个指定了顺序,webserver->cache->database)
			- cache
			- database
	cache:
		image: redis

然后要启动所有的容器:

docker-compose up

 

Docker Compose 文件参考

1 Services

  • 一个service代表一个container,这个container可以从dockerhub的image来创建,或者本地的Dockerfile,build来创建
  • service的启动类似docker run ,可以指定network 和 vomlume,所以可以给service指定network和volume。

service包括以下的选项:

  • build
  • context
  • image
  • environment/env_file
  • depend_on
  • image
  • ports
  • volumes
  • restart

①build

build键值包含了在构建时要应用的配置选项。build键值可以是构建上下文的路径,也可以是一个由上下文和可选的Dockefile位置构成的详情对象。

services:
	app:
	    build: ./app
		
# 一般用这个就就行了,指明了Dockerfile所在的路径
	
	
services:
	app:
	    context: ./app
	    Dockerfile: dockerfile-app

②context

设置上下文路径,如果时相对路径,就是相对于Compose文件位置而言。

services:
	app:
	    context: ./app
	    Dockerfile: dockerfile-app

③image

如果使用了build选项时提供了image标签,那么Docker会构建该镜像,并使用所提供的镜像名称和标签为该镜像赋予名称和打上标签。

services:
	app:
	    build: ./app
	    image: xxx:xxx    # 就是给这个容器起一个明,相当于docker run -t xxx:xxx

如果没有build,只有image,那么docker会优先在本地找镜像,本地没有在从dockerhub找

services:
	db:
	    image: pstgres:9.4   # 本地没有,则会从dockrhub拉取

④environment/env_file

environment用于设置应用程序的环境变量,而env_file则提供envirment文件的路径,设置环境变量时会读取该路径。environment/env_file都可以接收作为数组输入的单个文件或多个文件。

environment可以用 = 或者 :

 environment:
     - ssss=ssss
 environment:
     ssss: ssss
version: '3'
services:
	app:
	    image: mysql
		environment:
	        PATH: /nome
# ############################

version: '3'
services: 
    app:
	image: mysql
	env_file: .env
		
# ############################

version: '3'
services:
	app:
	image: mysql
	env_file:
		- common.env
		- app.env
		- secrets.env
		

⑤depends_on

这个键值用于设置跨各个服务的依赖性需求。

version: '3'
services:
	database:
		image: mysql
	webserver:
		iamge: naginx:alpine
	depends_on:
		- cache
		- database
	cache:
		image: redis

⑥ports

这个键值用于指定要被公开到主机端口的容器端口。在提供这个键值时,可指定要将容器端口公开到哪个Docker宿主机端口,也可以仅指定容器端口,这样的话就会在主机上选择一个随机的临时端口号。

version: '3'
services:
    database:
	    imgae: nginx
	    ports:
		- "8080:80"
# ##########################

version: '3'
services:
    database:
	imgae: nginx
	ports:
            - "80"

⑦ volumes

volumes可以用作顶级键值,就是和services同级,也可以用作子选项,就是附属在services下。顶级和子选项要同时用。

注意如果有子选项,但是没有顶级的volumes键值,那么就会报错,因为相当于没创建卷,却直接引用。

前面说的利用卷,必须设置顶级的键值,但是要是用绑定挂载,就不需要顶级的键了。

version: '3'
services:
    database:
        image: mysql
        environment: 
            xxx:sss
        volumes:
            - "dbdata:/var/lib/mysql"   # 指定这个容器需要绑定的卷
    webserver:
        image: nginx:apine
        depends_on:
            - caceh
            - database
    cache:
        image: redis
    volumes:
        dbdata                         # 相当于 docker volume create dbdata
version: '3'
sercives:
    database:
        image: mysql
        environment:
            xxx: xxx
        volumes:
            - "./dbdir:/var/lib/mysql"     # 绑定挂载

⑥ restart

restart键值提供了容器的重启策略,默认情况下,重启策略被设置为no, 这意味着Docker无论如何都不重启该容器。可以在以下的重启策略之间选择。

  • no       容器绝不会重启
  • always  容器总是会在退出之后重启
  • on-failure   如果由于运行错误导致退出,则容器将会重启
  • unless-stopped   除非显示退出或者Docker守护程序停止运行,否则容器总是会重启

 

 

Docekr Compose Demo

docker-compose.yaml 代码清单

version: '3'
services:
    app:
        build: .
        depends_on:
            - mysql
        restart: "on-failure"
        volumes:
            - "appdata:/apps/xxx"
    mysql:
        iamge: mysql
        volumes:
            - "dbdata:/xxx/xxx"
        environment:
            - ssss=ssss
    volumes:
        dbdata
        appdata
docker-compose config     # 看是否正常
docker-compose up --build      # --build会强制Docker重新构建镜像

 

再来个例子,这里是指定network

version: '3'
    services:
        worker:
            build: ./worker
            networks:
                -back-tier
    networks:
        back-iter:
            driver: bridge

 

关于--scale选项, 启动多个服务

version: '3'
services:
    redis:
        image: redis
    web:
        build:
            context: .
            dockefile: Docekrfile




docker-compose up --scale web=3 -d   启动3个web服务,注意web是docker-conpose.yml文件里的services名

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值