docker学习05-docker三剑客之Compose
Dockerfile可以定义一个单独的应用容器,但是如果要定义多个容器时就要用到服务编排。服务编排有很多种技术方案,官方提供的是Compose
Dockerfile 可以让用户管理一个单独的应用容器,而Compose则允许用户在一个模板(YAML格式)中定义一组相关联的应用容器(被称为一个project,即项目),例如一个web服务器再加上后端的数据库服务器等。
docker Compose介绍
Docker-Compose 是Docker的一种编排服务,是一个用于在Docker上定义并运行复杂应用的工具,可以让用户在集群中不熟分布式应用
通过Docker-Compose 用户可以很容易的用一个配置文件定义一个多容器的应用,然后使用一条指令安装这个应用的所有以来,完成构建。Docker-Compose解决了容器与容器之间如何编排的问题。
Docker Compose 工作原理
Compose中有两个重要的概念:
- 服务(service):一个应用的容器,实际上可以包括若干运行相同镜像的容器实例。
- 项目(project) :由一组关联的应用容器组成的一个完整业务单元,在docker-compose.yml文件中定义。
一个项目可以有多个服务(容器)关联而成,compose面向项目进行管理,通过子命令对项目中的一组容器进行便捷的生命周期管理。
Compose项目由python编写,实际上调用了Docker服务提供的API来对容器进行管理。因此,只要所操作的平台支持DockerAPI,就可以在其上利用Compose来进行编排管理。
Docker Compose安装
Docker Compose是Docker的独立产品,因此需要安装Docker之后单独安装Docker Compose
官方安装方法sudo curl -L "https://github.com/docker/compose/releases/download/1.23.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose sudo chmod +x /usr/local/bin/docker-compose $ docker-compose --version官方实例 创建项目路径
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) if __name__ == "__main__": app.run(host="0.0.0.0", debug=True)
在这个例子中,redis使用了容器内的网络默认端口是6379。这段Python程序的内容就是。启动后连接redis并且输出hello()方法,当每次访问的时候累计访问次数并且将结果放回到页面。
在同目录下闯将
requirements.txt文件
cat requirements.txt flask redis创建dockerfile
写一个dockerfile来定义Docker镜像,此镜像包含了Python的依赖包和Python环境。
cat Dockerfile FROM python:3.4-alpine ADD . /code WORKDIR /code RUN pip install -r requirements.txt CMD ["python", "app.py"]
- 使用基础镜像Python3.4
- 将当前目录映射到镜像的/code目录下
- 设置工作目录为/code
- 安装Pyhton依赖包
- 启动 app.py程序
cat docker-compose.yml version: '3' services: web: build: . ports: - "5000:5000" redis: image: "redis:alpine"启动
docker-compose up
启动成功后在浏览器访问:http://ip:5000 会返回
Hello World! I have been seen 1 times.
再次刷新,看变化
Docker Compose 常用命令
docker-compose up -d在后台启动服务
docker-compose stop停止服务
docker-compose -f指定使用的compose模板文件,默认为docker-compose.yml,可以多次指定。
docker-compose -f docker-compose.yml up -d
#启动所有容器,-d 将会在后台启动并运行所有的容器
docker-compose up -d
#查看服务容器的输出
docker-compose logs
#列出项目中目前的所有容器
docker-compose ps
#构建(重新构建)项目中的服务容器。服务容器一旦构建后,将会带上一个标记名,例如对于 web 项目中的一个 db 容器,可能是 web_db。可以随时在项目目录下运行 docker-compose build 来重新构建服务
docker-compose build
#拉取服务依赖的镜像
docker-compose pull
#重启项目中的服务
docker-compose restart
#删除所有(停止状态的)服务容器。推荐先执行 docker-compose stop 命令来停止容器。
docker-compose rm
#在指定服务上执行一个命令。
docker-compose run ubuntu ping docker.com
#设置指定服务运行的容器个数。通过 service=num 的参数来设置数量
docker-compose scale web=3 db=2
#启动已经存在的服务容器。
docker-compose start
#停止已经处于运行状态的容器,但不删除它。通过 docker-compose start 可以再次启动这些容器。
docker-compose stop
- docker学习05--docker三剑客之Swarm
- Docker学习笔记 — Compose简介、安装与简单使用
- Docker-compose学习总结
- Docker(四):Docker 三剑客之 Docker Compose
- docker学习笔记6---编写docker-compose.yml并运行实例(docker学习结束)
- PowerShell + docker-compose +.net core 发布阿里云镜像库 学习笔记(前言)
- 学习使用Docker、Docker-Compose和Rancher搭建部署Pipeline(一)
- Docker学习笔记4: Docker-Compose—简化复杂容器应用的利器
- docker学习(7) docker-compose使用示例
- Docker 学习笔记(四) docker-compose 篇 搭建多容器 ghost博客系统
- Docker学习笔记4: Docker-Compose—简化复杂容器应用的利器
- 学习使用Docker、Docker-Compose和Rancher搭建部署Pipeline(一)
- docker学习笔记05:docker inspect命令
- docker学习笔记之Docker Compose与docker swarm
- centos7 Docker 三剑客之compose安装
- docker三剑客之应用machine,compose,swarm
- 学习docker-compose
- Docker 三剑客之 Docker Compose
- CentOS下Docker与.netcore(三)之 三剑客之一Docker-Compose
- docker三剑客之docker-compose(记官方案例)