Docker Compose
官方文档:https://docs.docker.com/compose
一、介绍
Compose
项目是 Docker 官方的开源项目,负责实现对 Docker 容器集群的快速编排。是用来定义和运行多个Docker容器应用的工具,它允许用户通过一个单独的 docker-compose.yml
模板文件(YAML 格式)来定义一组相关联的应用容器为一个项目(project)。
Compose
中有两个重要的概念:
-
服务 (
service
):一个应用的容器,实际上可以包括若干运行相同镜像的容器实例。 -
项目 (
project
):由一组关联的应用容器组成的一个完整业务单元,在docker-compose.yml
文件中定义。
Compose
的默认管理对象是项目,通过子命令对项目中的一组容器进行便捷地生命周期管理。Compose
项目由 Python 编写,实现上调用了 Docker 服务提供的 API 来对容器进行管理。因此,只要所操作的平台支持 Docker API,就可以在其上利用 Compose
来进行编排管理。
二、Linux 安装
curl -L https://github.com/docker/compose/releases/download/1.19.0/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose chmod a+x /usr/local/bin/docker-compose
docker-compose -version docker-compose version 1.19.0, build 9e633ef
三、启动一个项目
3.1 编写一个yaml文件
pwd /home/bigberg/docker/compose-test # 编写yaml文件 vim docker-compose.yml version: '3' services: web: build: . ports: - "8888:80" # version : 需要和docker 版本相匹配 # services : 定义组中的容器和服务等 # web : 容器镜像服务的标识,通过这个标识来管理镜像 # build . : 构建镜像的目录 # ports : 映射的端口
version 对应的docker版本:
3.2 编写一个Dockerfile文件
FROM centos MAINTAINER bigberg RUN yum -y install httpd php php-gd php-mysql RUN echo "<?php phpinfo()?>" > /var/www/html/index.php CMD ["/usr/sbin/httpd","-D","FOREGROUND"] EXPOSE 80
3.3 构建镜像
docker-compos up
构建完成后查看:
docker-compose ps Name Command State Ports -------------------------------------------------------------------------------- composetest_web_1 /usr/sbin/httpd -D FOREGROUND Up 0.0.0.0:8888->80/tcp
访问地址:(项目确实起来了)
四、python-web事例
4.1 定义应用的一些依赖
创建文件夹
mkdir -p compose-test/python-test cd compose-test/python-test
创建一个app.py文件
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
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) if __name__ == "__main__": app.run(host="0.0.0.0", debug=True)
在app.py中,host='redis' 中redis 是 redis 容器的主机名,在这个项目的网络中可以被解析
Name: redis Address 1: 172.20.0.3 625eb281eafd
创建一个requirements.txt文件
flask redis
4.2 创建一个Dockerfile
FROM python:3.4-alpine ADD . /code WORKDIR /code RUN pip install -r requirements.txt CMD ["python", "app.py"]
- 构建使用的python:3.4-alpine镜像
- 将当前目录添加到镜像中/code目录
- 设置工作目录为 /code
- 安装python依赖
- 设置容器启动运行命令为 python app.py
4.3 创建docker-compose.yml 文件
version: '3' services: web: build: . ports: - "5000:5000" redis: image: "redis:alpine"
这个ymal文件有两个服务:web 和 redis
web服务:
- 构建使用Dockerfile中定义的镜像
- 映射端口5000到宿主机端口5000,也就是flask web的默认端口
redis服务:
- 构建使用的是Docker Hub中公共Redis镜像
4.4 构建项目
docker-compose up
4.5 访问项目
每次刷新,访问的次数会增长
4.6 修改ymal文件,将目录挂在到镜像中
version: '3' services: web: build: . ports: - "5000:5000" volumes: - .:/code redis: image: "redis:alpine"
通过volumes 将当前目录挂在到镜像中的 /code目录,这个就可以在宿主机目录中修改文件,容器中也会生效,不必每次修改都要重新构建
4.7 重新docker-compose up
docker-compose up
4.8 修改app.py文件
Hello world! 改为 Hello from Docker!
相关文章
- 阿里云Ubuntu环境搭建Docker服务
- Docker 系列(五):Docker 容器数据卷(Data Volume)与数据管理
- Docker备份镜像
- docker-compose使用
- Docker教程---实现持续交付、持续部署
- LXC是如何与CGROUP,namespace扯上关系的?再加上DOCKER.IO。完美!!!
- 运维基础之Docker(4)实用工具ctop
- docker-compose 挂载的深刻理解,只能挂载文件夹,不能挂载文件啊!!!
- 前后端项目部署-4, flask+Gunicorn+gevent+supervisor+nginx+redis,docker-compose部署
- [Docker] Create a Volume
- docker 应用篇————docker-compose[十九]
- Docker 一篇文章总结Docker的网络模式
- docker-compose部署Atomci(云原生CICD平台)
- 在docker配置文件/etc/default/docker中配置registry-mirror镜像仓库地址
- docker自主搭建Hadoop3.2.0 HBASE2.1.6 Spark2.4.8三节点集群(含docker镜像制作过程)
- docker-compose安装mongodb
- docker可视化工具portainer的安装(docker命令和docker-compose两种途径)
- 【ubuntu】解决“Unable to locate package docker.io”问题
- Tensorflow Serving Docker compose 部署服务细节(Ubuntu)
- Docker-compose 安装 Nginx PHP MySQL
- How to set up a Headless Chrome Node.js server in Docker
- Docker Compose部署lnmp
- 容器化应用的健康探针(DockerDocker-ComposeK8S)——筑梦之路
- 带看板的项目管理工具TaskCare_docker-compose —— 筑梦之路
- Docker 教程:如何将Helix QAC作为容器创建并运行 上
- HAproxy连接Mycat集群docker-compose版
- docker之Dockerfile实践
- docker-docker-compose 安装
- Docker技术----docker-compose实战----快速搭建WordPress博客系统
- 6.Docker的网络模式
- 在Kubernetes 1.20版本中不推荐使用Docker !
- 【Docker系列】6.使用docker-compose安装nginx
- Docker笔记 | 常用命令指南
- 云原生之使用Docker部署docker-compose-ui工具
- docker-compose容器集群编排详解(十二)