Compose是一个用于定义和运行多容器Docker应用程序的工具 。使用Compose,您可以使用YAML文件来配置应用程序的服务 。然后,只需一个命令,就可以从配置中创建并启动所有服务 。
Install Docker Compose
- 下载docker compose
$sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
- 给docker compose设置可执行权限
$ sudo chmod +x /usr/local/bin/docker-compose
- 验证
$ docker-compose --version
Uninstallation$ sudo rm /usr/local/bin/docker-compose
Getting Started用Python构建一个简易网页统计网页点击量,docker-compose进行发布Step1:创建项目
- 创建项目目录
- $ mkdir test_web
$ cd test_web - 在项目目录中创建App.py文件,并把下面代码复制进去
- import time
import redis
from flask import Flask
app = Flask(__name__)
cache = redis.Redis(host='redis', port=6379)
def get_hit_count():
retries = 5
while True:
try:
return cache.incr('hits')
except redis.exceptions.ConnectionError as exc:
if retries == 0:
raise exc
retries -= 1
time.sleep(0.5)
@app.route('/')
def hello():
count = get_hit_count()
return 'Hello World! I have been seen {} times.n'.format(count) - 创建requirements.txt文件,以下内容复制进去
flaskredis
Step2:创建Dockerfile文件FROM python:3.7-alpineWORKDIR /codeENV FLASK_APP=app.pyENV FLASK_RUN_HOST=0.0.0.0RUN apk add --no-cache gcc musl-dev linux-headersCOPY requirements.txt requirements.txtRUN pip install -r requirements.txtEXPOSE 5000COPY . .CMD ["flask", "run"]
Step3:在docker-compose.yml中定义servicesversion: "3.9"services:web:build: .ports:- "5000:5000"redis:image: "redis:alpine"
Step4:用Docker compose构建和运行app- 进入项目目录,运行docker-compose up
- $ docker-compose up
- 在浏览器访问http://localhost:5000/ ,刷新页面看变化
- 查看使用compose构建的镜像
- $ docker images
version: "3.9"services:web:build: .ports:- "5000:5000"volumes:- .:/codeenvironment:FLASK_ENV: developmentredis:image: "redis:alpine"
将当前目录与容器的/code目录绑定,这样可以动态修改代码Step6:重新构建和运行app
先docker-compose down停止服务,在构建
$ docker-compose down$ docker-compose up
Compose file用YAML文件定义服务,默认文件是docker-compose.yml,包含4个顶级key,version、services、networks、volumes参考compose-spec/spec.md at master · compose-spec/compose-spec · GitHub
version指定本 yml 依从的 compose版本
services定义多个应用服务,包含环境配置、镜像构建等
build指定构建镜像的路径
version: "3.9"services:webapp:build: ./app
blkio_config定义服务的block IO配置,参考compose-spec/spec.md at master · compose-spec/compose-spec · GitHubcontainer_name指定自定义容器名称
depends_on定义服务间启动或关闭的依赖关系
services:web:build: .depends_on:- db- redisredis:image: redisdb:image: postgres
command覆盖容器启动的默认命令command: [ "bundle", "exec", "thin", "-p", "3000" ]
domainnamedomainname declares a custom domain name to use for the service container.entrypoint覆盖容器默认的entrypoint
env_file【Docker从入门到精通之Docker Compose】从文件中添加环境变量到容器,可以是一个或多个文件
env_file: .env
env_file:- ./a.env- ./b.env
文件格式:# Set Rails/Rack environmentRACK_ENV=developmentVAR="quoted"
environment添加环境变量environment:RACK_ENV: developmentSHOW: "true"USER_INPUT:
expose暴露端口,但不映射到宿主机,只被连接的服务访问,仅可以指定内部端口expose:- "3000"- "8000"
推荐阅读
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Google广告出价策略-入门篇
- 安徒生童话飞箱这篇故事主要内容是什么?安徒生童话飞箱这个故事中的箱子最后
- 柠檬红茶怎么做才好喝,润元昌柠檬红茶
- 入伏从哪一天开始算起?
- 翡翠|买翡翠就购买正绿首饰,不要买偏色玉石,否则从颜色上就输了
- 红茶有提神吗,绞股蓝配红茶可以吗
- 善良的狼的童话故事?狼感恩的故事
- 张飞关羽的武艺怎么练出来的?关羽张飞武功从哪学的
- 红茶中投法,黄茶的入门茶
- 男人偏爱一种食物,从此口臭相伴