继续创造,加速生长!这是我参与「日新方案 10 月更文应战」的第26天,点击查看活动概略

引文

之前写了一篇DOCKER的基础常识文章,今日来补习一下DOCKER的进阶常识—COMPOSE,Compose 是用于定义和工作多容器 Docker 运用程序的东西。通过 Compose,可以运用 YML 文件来配备运用程序需求的全部服务。然后,运用一个指令,就可以从 YML 文件配备中创建并发起全部服务。本文就个人在学习该常识时的阅历来给我们简略讲一讲。

底子常识

底子流程

Compose 运用的三个进程:

运用 Dockerfile 定义运用程序的环境。

运用 docker-compose.yml 定义构成运用程序的服务,这样它们可以在隔离环境中一起工作。

最终,实行 docker-compose up 指令来发起并工作整个运用程序。

设备

sudo curl -L https://get.daocloud.io/docker/compose/releases/download/1.25.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose

增加可实行指令的权限:

sudo chmod +x /usr/local/bin/docker-compose

我们可以查看一下设备有没有成功:

$ docker-compose --version

yml文件

compose中比较重要的一部分就是yml文件的编写,首要我们看一下什么是yml文件:yml文件是一种键值对格局的文件,是compose的模板文件,包括 version、services、networks 三大部分。底子格局如下:

version:
services:
	服务1:
		#服务配备
	服务2:
		#服务配备	
# 其他配备 网络、券、大局规矩
volumes:
network:
configs:

这儿需求留意的是version是向下兼容的,高版本可向下兼容:

一篇文章带你入门docker-compose

因为这一步很重要,我们详细讲一下services 的书写规矩:

image

services:
  web:
    image: xino

其间web为我们自定义的服务称号,而image则是对应的镜像文件名或许id,假如我们定义了一个没有的镜像,会自动帮我们拉取下载。

build

指定 Dockerfile 地址文件夹的途径。利用它自动构建镜像,然后运用这个镜像发起服务容器。

可以定义成绝对途径或许相对途径:

build: /path/
build: ./dir

command

设置容器发起后默许实行的指令:

command: bundle exec thin -p 3000

container_name

自定义容器名字:

container_name: xino

depends_on

因为我们发起容器时,有些服务可能会需求前置服务,我们可以通过depends_on来决议服务发起的先后顺序。

services:
  web:
    build: .
    depends_on:
      - redis
  redis:
    image: redis
  db:
    image: postgres

env_file

定义运用的环境变量:

env_file:
  - ./common.env

假定我们编写一个关于nigix的yml文件:

version: '3' 	#版本号
services:		#docker容器
  nginx:		#容器称号
    container_name: nginx-1		#自定义发起后容器名
    restart: always				#设置为always,表明此容器应该在停止的情况下总是重启
    image: nginx:latest			#镜像名:版本号
    ports:						#发起端口号
      - 4433:80
    volumes:					#数据卷,将容器中的文件与服务器映射
      - ./conf.d:/etc/nginx/conf.d
    environment:				#环境配备
      TZ: Asia/shandong

常用指令

简介介绍一些docker-compose里常用的一些指令:

 # 1. 根据docker-compose.yml发起处理的容器
docker-compose up -d
# 2. 关闭并删除容器
docker-compose down
# 3. 敞开|关闭|重启已经存在的由docker-compose维护的容器
docker-compose start|stop|restart
# 4. 查看由docker-compose处理的容器
docker-compose ps
# 5. 查看日志
docker-compose logs -f

运用示例

创建工程文件夹

mkdir composetest
cd composetest

创建创建python flask运用app.py文件:

from flask import Flask
from redis import Redis
app = Flask(__name__)
redis = Redis(host='redis', port=6379)
@app.route('/')
def hello():
    count = redis.incr('hits')
    return 'Hello World! I have been seen {} times.\n'.format(count)
if __name__ == "__main__":
    app.run(host="0.0.0.0", debug=True)

因为app.py中import了flask和redis于是我们建立requestments.txt文件来便利后续导入:

flask
redis

接下来创建dockerfile文件,

FROM python:3.7-alpine
WORKDIR /code
ENV FLASK_APP=app.py
ENV FLASK_RUN_HOST=0.0.0.0
RUN apk add --no-cache gcc musl-dev linux-headers
COPY requirements.txt requirements.txt
RUN pip install -r requirements.txt
EXPOSE 5000
COPY . .
CMD ["flask", "run"]

简略剖析一下指令:Python 3.7的镜像开端构建一个容器镜像。

将当前工作目录设置为 /code

设备Python依靠联系(requestments.txt)。

将容器的默许指令设置为python app.py

下一步就是编写docker-compose.yml文件

version: "3.9"
services:
  web:
    build: .
    ports:
      - "8000:5000"
  redis:
    image: "redis:alpine"

简略剖析一下含义,定义了WEB和REDIS服务,运用我们指定的目录中的Dockerfile构建映像。

将容器上的露出端口8000映射到主机上的端口5000。 我们运用Flask Web服务器的默许端口5000。

redis容器:

redis服务运用从Docker Hub提取公共镜像。

接下来我们创建工作docker-compose

docker compose up

成功后我们便可以查看镜像:

docker images

结语

简略学习了一下docker-compose的运用,本文就个人学习进程简略记录了一下,并没有过分深化的解说,总结一下来说docker-compose仍是挺好用的,有爱好的小伙伴可以自己去测验一下。