该实践是在已经安装了docker的基础上,如果还未安装docker,请先安装docker : https://www.cnblogs.com/theRhyme/p/9813019.html

docker-compose容器编排,可以启动多个容器(在docker-compose.yml中配置),或重新编译多个容器,以及关闭等操作。

1. 安装

第一种方式:使用pip安装(推荐)

sudo pip install docker-compose

第二种方式:Docker官网安装教程

https://docs.docker.com/compose/install/

在Linux系统下执行下面的命令:

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

该过程大概需要10多分钟。

给docker-compose添加权限

sudo chmod +x /usr/local/bin/docker-compose

版本

查看docker-compose版本

docker-compose --version

  

2. Get started with Docker Compose

下面运行一个python框架flask的web项目

Step 1: 项目设置

创建一个项目目录,进入到该目录

mkdir docker-comopse-test
cd docker-compose-test

  

在该目录下创建一个app.py文件,并加入下面的内容

大体意思是访问项目路径"/",在redis中点击次数"hits"+1

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)

  

创建一个文本项目"requirements.txt",该文件内容是项目所依赖的东西

flask
redis

  

Step 2: Create a Dockerfile

创建Dockerfile为了创建一个docker镜像,这个镜像包含了全部的项目依赖:

FROM python:3.4-alpine
ADD . /code
WORKDIR /code
RUN pip install -r requirements.txt
CMD ["python", "app.py"]

构建一个python3.4的镜像;

将当前目录"."添加到镜像的/code目录下;

设置镜像工作目录为/code;

构建镜像阶段执行集成项目依赖的命令;

为容器启动后默认执行的命令

Step 3: Define services in a Compose file

创建一个docker-compose.yml在当前项目目录下,内容如下:

version: '3'
services:
web:
build: .
ports:
- "5000:5000"
redis:
image: "redis:alpine"

  

这个Compose文件定义了两个服务:web和redis;

web服务使用的镜像是build当前目录下"."下Dockerfile后的镜像,暴露当前宿主机(localhost)的端口号5000,与docker容器的5000端口(本项目的flask)映射;

redis服务的镜像就是从docker仓库拉下来的公共的Redis镜像;

Step 4: Build and run your app with Compose

构建并运行刚才的flask web项目

docker-compose up

  

通过浏览器访问http://localhost:5000/,如下图

上图,是我多次刷新的效果。

由于刚才的启动命令没有才后台运行,所以我们再开启一个terminal窗口执行:

docker image ls

  

就能够看到我们刚刚已经构建的本地镜像列表

刚才我们的web服务的镜像名,是"当前目录名称_服务名"的格式自动生成。

关闭当前容器:

在项目的根目录,docker-compose.yml所在的目录执行命令

docker-compose down

该命令会停止容器并且删除容器对应的镜像(web和redis),以及网络配置

或者在未后台运行的窗口:"Ctrl+C"

Step 5: Edit the Compose file to add a bind mount

编辑"docker-compose.yml"文件内容,把宿主机的路径"."(当前目录)挂载到容器中的"/code",格式是:"HOST:CONTAINER"

version: '3'
services:
web:
build: .
ports:
- "5000:5000"
volumes:
- .:/code
redis:
image: "redis:alpine"

  

Step 6: Re-build and run the app with Compose

docker-compose up

  

Step 7: Update the application

编辑"app.py"文件,将返回的内容修改为

return 'Hello from Docker! I have been seen {} times.\n'.format(count)

  

刷新浏览器,返回结果已经改变了

Step 8: Experiment with some other commands

执行"docker-compose"命令必须在当前目录或环境下要有对应的"docker-compose.yml"文件

后台启动运行

docker-compose up -d

  

查看已经启动的容器

docker-compose ps

  

执行一次性的命令:docker-compose run

比如查看某个service的环境参数:docker-compose run 服务名 env

这里的服务名即是"docker-compose.yml"文件中"services"节点下的名称,如"web".

docker-compose run web env

创建并进入docker 容器

docker-compose run service名称 sh

停止容器

如果是容器是以后台方式运行的,可以使用

docker-compose stop

仅仅停止运行的容器

关闭所有内容,完全删除容器,并且删除数据卷

docker-compose down --volumes

  

docker-compose --help

  

来源:https://docs.docker.com/compose/gettingstarted/

docker-compose学习的更多相关文章

  1. Docker compose学习笔记

    一.compose compose 作用 你的应用可能需要很多个服务,比如web服务,数据库服务,缓存服务等等.我们可以把这些服务放到单独的容器里面,如果手工去配置这些服务会有些麻烦,docker c ...

  2. Docker学习笔记 - Docker Compose 脚本命令

    Docker Compose 配置文件包含 version.services.networks 三大部分,最关键的是 services 和 networks 两个部分, version: '2' se ...

  3. Docker学习笔记 - Docker Compose

    一.概念 Docker Compose 用于定义运行使用多个容器的应用,可以一条命令启动应用(多个容器). 使用Docker Compose 的步骤: 定义容器 Dockerfile 定义应用的各个服 ...

  4. Docker学习笔记之编写 Docker Compose 项目

    0x00 概述 通过阅读之前的小节,相信大家对 Docker 在开发中的应用已经有了一定的了解.作为一款实用的软件,我们必须回归到实践中来,这样才能更好地理解 Docker 的实用逻辑和背后的原理.在 ...

  5. Docker学习笔记之常用的 Docker Compose 配置项

    0x00 概述 与 Dockerfile 一样,编写 Docker Compose 的配置文件是掌握和使用好 Docker Compose 的前提.编写 Docker Compose 配置文件,其本质 ...

  6. Docker学习笔记之使用 Docker Compose 管理容器

    0x00 概述 通过之前的介绍,我们已经基本掌握了构建.运行容器的方法,但这还远远不够,由于 Docker 采用轻量级容器的设计,每个容器一般只运行一个软件,而目前绝大多数应用系统都绝不是一个软件所能 ...

  7. 在Windows环境中开始Docker的学习和体验

    研究docker有一段时间了,当然我主要的使用环境还是在Linux中,确实很方便. 但也有不少朋友希望使用Windows来工作学习,这里介绍一下在Windows中如何快速开始Docker的学习和体验吧 ...

  8. Docker系列10—容器编排工具Docker Compose详解

    本文收录在容器技术学习系列文章总目录 1.Docker Compose 概述 Compose是一个用于定义和运行多容器Docker应用程序的工具.使用Compose,您可以使用Compose文件来配置 ...

  9. Istio入门实战与架构原理——使用Docker Compose搭建Service Mesh

    本文将介绍如何使用Docker Compose搭建Istio.Istio号称支持多种平台(不仅仅Kubernetes).然而,官网上非基于Kubernetes的教程仿佛不是亲儿子,写得非常随便,不仅缺 ...

  10. Docker,Docker Compose,Docker Swarm,Kubernetes之间的区别

    Dcoker Docker 这个东西所扮演的角色,容易理解,它是一个容器引擎,也就是说实际上我们的容器最终是由Docker创建,运行在Docker中,其他相关的容器技术都是以Docker为基础,它是我 ...

随机推荐

  1. phpcms 路由配置

    这是一个由apache多站点配置引发的"血案",本以为是本地多站点配置的问题,结果找了半天没找到相关配置,最后还是问的大腿,同时也了解一些关于c盘hosts文件的映射作用以及使用 ...

  2. 如何理解Minkowski不等式

    [转载请注明出处]http://www.cnblogs.com/mashiqi 2017/02/16 Minkowski不等式: 设$f$是$\mathbb{R}^n \times \mathbb{R ...

  3. 有人WIFI ble101配置

    新买来的模块,默认为slave模式,波特率57600,8位数据位,无检验位,1位停止位. 发送+++a,进入命令模式. 需要加回车符 1.设置模块名称 AT+NAME=BT_Shining 2.设置发 ...

  4. 我的代码-models

    # coding: utf-8 # In[1]: import pandas as pdimport numpy as npfrom sklearn import treefrom sklearn.s ...

  5. 远程桌面连接问题,ping服务器ip无法连接主机。

    今天是礼拜一,上班的第一天去连公司的服务器,远程桌面竟然登录不上. 试了一下同事的电脑,也是一样的情况无法连接到远程计算机.这下可把我急坏了. 试了很多方法,也重新启动了服务器,重启后同事的win10 ...

  6. Java_IO异常处理方式_入门小笔记

    package IO; import java.io.FileWriter; import java.io.IOException; /** * IO异常处理方式 */ class FileWrite ...

  7. addEventListener以及滑轮滑动事件的应用

    addEventListener用于向元素添加事件,而其适用于较新版的IE浏览器(如IE9),对于IE6/7/8来说,应该用attachEvent 下面的代码即为向<img>元素添加事件 ...

  8. Centos7.4安装配置haproxy和Keepalived补充内容

    补充比较杂 1.当master服务恢复正常之后,backup机器收到消息,然后让出vip 下面是master机器服务恢复正常后,backup机器的Keepalived日志 收到master的消息通知, ...

  9. 聊聊Java反射

    反射是Java最重要的特性.通过Java反射可以在运行时知道一个类的所有成员和方法,知道一个对象的类类型.成员和方法的所有信息,进而调用对象的方法或生成对象的代理或包装类. Java是面向对象语言,除 ...

  10. Linux内核分析第九次作业

    理解进程调度时机跟踪分析进程调度与进程切换的过程 一.基础知识 Linux系统的一般执行过程 一般情况:正在运行的用户态进程X切换到运行用户态进程Y的过程 1. 正在运行的用户态进程X 2. 发生中断 ...