走进docker-compose
什么是Docker-Compose?
Docker-Compose 是用于定义和运行多容器 Docker 应用程序的工具。通过 Compose,您可以使用 YML 文件来配置应用程序需要的所有服务。然后,使用一个命令,就可以从 YML 文件配置中创建并启动所有服务。比如我们发布一个系统可能包含多个服务,服务与服务之间网络需要互通,那此时我们需要一个容器一个容器去启动,如果使用Docker-Compose即可定义一个描述文件docker-compose.yaml完成所有服务的发布, 并且实现容器间互通(单台物理机)。
Docker-Compose安装
Docker Compose依靠Docker Engine进行任何有意义的工作,因此请确保根据您的设置在本地或远程安装Docker Engine。参考上篇文章安装Docker环境 升级 如果要从Compose 1.2或更早版本进行升级,请在升级Compose之后删除或迁移现有容器。这是因为从1.3版开始,Compose使用Docker标签来跟踪容器,并且需要重新创建容器以添加标签。如果Compose检测到创建的没有标签的容器,它将拒绝运行,这样您就不会最终获得两组标签。如果要继续使用现有容器(例如,因为它们具有要保留的数据量),则可以使用Compose 1.5.x通过以下命令迁移它们:
docker-compose migrate-to-labels
#删除容器
docker container rm -f -v myapp_web_1 myapp_db_1 ...
卸载 如果使用curl以下命令进行安装,则要卸载Docker Compose
#如果使用curl以下命令进行安装,则要卸载Docker Compose
sudo rm /usr/local/bin/docker-compose
#如果使用pip以下命令进行安装,则要卸载Docker Compose:
pip uninstall docker-compose
开始安装Docker-Compose 命令安装
#下载二进制
sudo curl -L https://github.com/docker/compose/releases/download/1.21.2/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose
#修改执行权限
sudo chmod +x /usr/local/bin/docker-compose
下载可执行文件安装
#下载二进制
mv docker-compose /usr/local/bin/docker-compose
#修改执行权限
sudo chmod +x /usr/local/bin/docker-compose
docker-compose.yaml 构建文件
官网demo:
version: '3'
services:
back:
image: backService:1.0
container_name: back
environment:
- name=tom
- DB_PATH=jdbc:sqlite:/data/ns.db
restart: always
privileged: true
ports:
- "9000:9000"
networks:
- "net"
volumes:
- "/root/k3s.kube.config:/k3s.kube.config"
- "/root/data:/data"
- "/etc/network/interfaces:/etc/network/interfaces"
front:
image: front:1.0
container_name: front
restart: always
ports:
- "10087:80"
networks:
- "net"
volumes:
- "/root/nginx.conf:/etc/nginx/nginx.conf"
networks:
net:
version v3 版本不支持 volume_from 和 extends 属性 cpu 和 内存属性的设置移到了 deploy 中 v3 版本直接支持 docker swarm,而 v2 版本不支持,这也是最主要的区别 如果是初学者,建议直接使用 v3。
services 多个服务 image 镜像名称 build 不使用镜像时候采用主动build镜像 environment 环境变量 expose 标示端口号 ports 映射端口号到宿主机 volumes 挂在目录到宿主机 depend_on 规定service加载顺序,例如数据库服务需要在后台服务前运行 container_name 容器名称 networks 网络(自定义网络名称) restart always每次docker启动时候重启 links 连接目标容器(services下配置的名称) privileged: true:容器可获得root权限 logging 日志选项 driver 配置驱动 options 可选配置
networks 配置自定义网络
Docker-Compose命令详解
docker-compose version :用于查看当前的版本
docker-compose ps -a :查看当前启动服务
-a 查看所有包含已经停止的服务,不加则只展示运行中的服务
docker-compose build:用于docker-compose文件中描述的build构建镜像
docker-compose up 启动服务
docekr-compose stop停止服务
docker-compose start 启动停止的服务
docker-compose run 启动docker-compose.yml描述的一个service
docker-compose restart 重启服务
docker-compose logs 查看日志
docker-compose down 下线服务
docker-compose pull 拉取镜像
docker-compose push 推送镜像到仓库
更多命令参考 docker-compose help
Docker-Compose实战
为项目创建目录:
mkdir composetest
cd composetest
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)
在此示例中,redis是应用程序网络上的redis容器的主机名。我们为Redis使用默认端口6379。 3. requirements.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"]
有关如何编写Dockerfile的更多信息,请查看上篇文章
编写docker-compose.yml文件
version: "3.9"
services:
web:
build: .
ports:
- "5000:5000"
redis:
image: "redis:alpine"
该Compose文件定义了两个服务:web和redis。
运行服务
docker-compose up
在浏览器中输入http://localhost:5000/以查看该应用程序正在运行。
下篇带大家详细介绍Docker-Machine,敬请期待!
欢迎关注公众号!
公众号回复:
入群
,扫码加入我们交流群!读一本好书,就是在和高尚的人谈话。