Docker Compose 基本概要
Docker Compose 基本概要
Compose 是一个用于定义和运行多容器 Docker 应用程序的工具。使用 YAML 文件来配置多个应用程序的服务,包括生产、暂存、开发、测试以及 CI 工作流。
尝试构建 Docker Compose
一个简单的 Python Web 应用程序服务:使用 Flask 框架并在 Redis 中维护
基础素材
项目创建一个目录
mkdir compose-test && cd compose-test
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,为之后的 pip 使用
flask
redis
创建 Dockerfile
# syntax=docker/dockerfile:1
# Python 3.7 映像开始构建映像
FROM python:3.7-alpine
# 设置环境变量
ENV FLASK_APP=app.py
ENV FLASK_RUN_HOST=0.0.0.0
# 安装 gcc 以及相关依赖
# set -e 表示之后任意命令错误立刻退出而不继续
# --no-cache 表示不使用缓存,相当与自己执行 apk update 绕过缓存的使用
RUN <<EOF
set -e
sed -i 's/dl-cdn.alpinelinux.org/mirrors.ustc.edu.cn/g' /etc/apk/repositories
apk add --no-cache gcc musl-dev linux-headers
EOF
# 设置工作区
WORKDIR /code
# pip 安装相关 Python 包
COPY requirements.txt requirements.txt
RUN pip install -r requirements.txt -i https://mirrors.ustc.edu.cn/pypi/web/simple
# 将项目中的当前目录复制到工作区
COPY . .
# 添加容器正在监听端口并启动 flask run
EXPOSE 5000
CMD ["flask", "run"]
编写 docker-compose.yml 文件定义了两个服务:web, redis
version: "3.9"
services:
web:
build: .
ports:
- "8000:5000"
volumes:
- .:/code
environment:
FLASK_DEBUG: "true"
redis:
image: "redis:alpine"
- ports 映射端口到宿主机
- volumes 当前目录挂载到 /code 容器内部
- environment 设置环境变量
- FLASK_DEBUG 环境变量告诉 flask 在开发模式下运行并在更改时重新加载代码
最后使用 docker compose up
即可构建并运行服务
docker compose 命令
常用命令
docker compose up 根据 yml 文件构建服务并运行
-d
选项可以挂后台,类似docker run -d
挂容器
docker compose ps 查看活跃服务
docker compose run 允许为服务运行一次性命令
docker compose stop 停止服务
docker compose down 关闭所有内容,完全删除容器
--volumes
移除容器使用的数据卷
最重要命令 docker compose --help
环境变量
.env
文件:存储环境变量,有点 requirements.txt 对于 pip 的感觉
- 该文件应放在文件旁边的项目目录的根目录下 docker-compose.yml
- 使用
--env-file
选项指定文件位置 - docker-compose.yml 的 env_file 属性指定文件位置
docker-compose.yml 使用 environment 属性定义环境变量
web:
environment:
- DEBUG=1
docker-compose.yml 中对于环境变量是可以直接使用 shell 中的环境变量
优先级(由高到低):
- 在 CLI 中 docker compose 的 -e 选项
- shell 自带
- docker-compose.yml 的 environment 属性
- 命令行的 --env-file
- docker-compose.yml 的 env_file 属性
- docker-compose.yml 同级目录的
.env
文件 - 镜像的 ENV 设置
使用环境文件
#
注释符\
转义字符通过键值方式,其中值可以使用单引号或双引号,比如
VAL=EMV
双引号支持转义,比如
\n
四种作用方法
- 直接使用变量
${VAR}
- 默认值
${VAR:-default}
如果 VAR 没有被设置且非空,就使用 default - 必须值
${VAR:?error}
如果 VAR 没有被设置且非空,以 error 退出 - 替代值
${VAR:+replacement}
如果 VAR 被设置且非空,使用 replacement 替代 - 其中不涉及非空状态使用去除
:
- 直接使用变量
参考资料
其中 Docker Compose 文件标准 https://docs.docker.com/compose/compose-file/
Docker Compose 基本概要的更多相关文章
- Docker compose学习笔记
一.compose compose 作用 你的应用可能需要很多个服务,比如web服务,数据库服务,缓存服务等等.我们可以把这些服务放到单独的容器里面,如果手工去配置这些服务会有些麻烦,docker c ...
- docker compose 笔记
https://www.youtube.com/watch?v=Uez88TWOECg 是基于这个视频做的笔记. Docker Compose: Compose is a tool for defin ...
- 利用docker compose启动gitlab及runner
添加docker compose配置文件 新建文件docker-compose.yml,输入如下内容: gitlab: image: 'gitlab/gitlab-ce:latest' contain ...
- Docker Compose to CoreOS
taken from https://docs.docker.com/compose/install/ the only thing is that /usr is read only, but /o ...
- Docker Compose—简化复杂容器应用的利器
Compose是用于定义和运行复杂Docker应用的工具.你可以在一个文件中定义一个多容器的应用,然后使用一条命令来启动你的应用,然后所有相关的操作都会被自动完成. 1. 安装Docker和Compo ...
- .NET遇上Docker - 使用Docker Compose组织Ngnix和.NETCore运行
本文工具准备: Docker for Windows Visual Studio 2015 与 Visual Studio Tools for Docker 或 Visual Studio 2017 ...
- Docker Compose容器编排
Compose是Docker官方的开源项目,可以实现对Docker容器集群的快速编排.Compose 中有两个重要的概念:服务(service):一个应用的容器,实际上可以包括若干运行相同镜像的容器实 ...
- Docker(四):Docker 三剑客之 Docker Compose
前两篇文章我们介绍了 Dockerfile 的使用Docker(二):Dockerfile 使用介绍,我们知道使用一个 Dockerfile 模板文件可以定义一个单独的应用容器,如果需要定义多个容器就 ...
- Spring Boot 2.0(五):Docker Compose + Spring Boot + Nginx + Mysql 实践
我知道大家这段时间看了我写关于 docker 相关的几篇文章,不疼不痒的,仍然没有感受 docker 的便利,是的,我也是这样认为的,I know your felling . 前期了解概念什么的确实 ...
- Docker学习笔记 - Docker Compose 脚本命令
Docker Compose 配置文件包含 version.services.networks 三大部分,最关键的是 services 和 networks 两个部分, version: '2' se ...
随机推荐
- claude3国内API接口对接
众所周知,由于地理位置原因,Claude3不对国内开放,而国内的镜像网站使用又贵的离谱! 因此,团队萌生了一个想法:为什么不创建一个一站式的平台,让用户能够通过单一的接口与多个模型交流呢?这样,用户就 ...
- itest(爱测试) 开源接口测试,敏捷测试管理平台10.1.4发布
一:itest work 简介 itest work 开源敏捷测试管理,包含极简的任务管理,测试管理,缺陷管理,测试环境管理,接口测试,接口Mock,还有压测 ,又有丰富的统计分析,8合1工作站.可按 ...
- Vue3组件通信方式
Vue3组件通信方式 不管是vue2还是vue3,组件通信方式很重要,不管是项目还是面试都是经常用到的知识点. 比如:vue2组件通信方式 props:可以实现父子组件.子父组件.甚至兄弟组件通信 自 ...
- uniapp 复选框全选(基于colorui组件)
说明:本案例的样式基于colorui组件库 感兴趣的小伙伴可以看下教程 colorui组件库开发文档或者csdn的文档,顺便再分享下 colorui的群资源 html <checkbox-gro ...
- 代码审计——基础(JAVAEE)
JAVAEE 目录 JAVAEE 常见框架 Struct2(控制层) Hibernate(持久层(与数据库交互)(不用再写简单的sql语句,但是需要一些列复杂的配置文件))(全ORM模型) Sprin ...
- 使用腾讯元宝+markmap生成思维导图
AI可以帮助我们进行提炼和总结, 节省了大量搜索资料和查阅的时间,像上图这张思维导图,就是使用腾讯元宝大模型进行内容提炼,再使用markmap生成思维导图,下面讲解下详细实现步骤: 一.工具准备 腾讯 ...
- 多个if查询及case when 语句
concat( if(t2.`flow_flag`=1 and t1.`field_source`= '06','支付宝账号1',''),if(t2.`flow_flag`=0 and t1.`fie ...
- NumPy 差分、最小公倍数、最大公约数、三角函数详解
NumPy 差分 离散差分意味着相邻元素之间的减法. 例如,对于 [1, 2, 3, 4],离散差分将是 [2-1, 3-2, 4-3] = [1, 1, 1] 要找到离散差分,使用 diff() 函 ...
- CF187D 题解
模拟考最后一题是这道题,要是数组开大就场切了,最后不小心挂了 \(15\) 分. 以下是考场思路: 考虑这样一个问题,所有时间对 \(r+g\) 取余是可以的.毕竟红绿灯是一个循环. 再考虑这样一个东 ...
- “古剑山”初赛Misc 幸运饼干
"古剑山"初赛Misc 幸运饼干 考点:Chrome的Cookies解密 赛中思路 bandzip极限压缩hint.jpg后打明文攻击 压缩包密码:sv@1v3z ┌──(root ...