Docker学习笔记 - Docker Compose

时间:2022-11-07 09:53:04

一、概念

Docker Compose 用于定义运行使用多个容器的应用,可以一条命令启动应用(多个容器)。

使用Docker Compose 的步骤:

  1. 定义容器 Dockerfile
  2. 定义应用的各个服务 docker-compose.yml
  3. 启动应用 docker-compose up 

二、安装

Note that Compose 1.8.0 requires Docker Engine 1.10.0 or later for version 2 of the Compose File format, and Docker Engine 1.9.1 or later for version 1.

# curl -L https://github.com/docker/compose/releases/download/1.8.0/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
# chmod +x /usr/local/bin/docker-compose

也可以用pip或官网的run.sh脚本安装

安装后确认

# docker-compose --version

三、运行

1、创建一个Python应用

使用Flask,将数值记入Redis

1.1 建立一个python应用目录和文件

Docker学习笔记 - Docker Compose
# mkdir python
# cd python # vi app.py
from flask import Flask
from redis import Redis app = Flask(__name__)
redis = Redis(host='redis', port=6379) @app.route('/')
def hello():
redis.incr('hits')
return 'Hello World! I have been seen %s times.' % redis.get('hits') if __name__ == "__main__":
app.run(host="0.0.0.0", debug=True) # vi requirements.txt
flask
redis
Docker学习笔记 - Docker Compose

1.2 创建 Dockerfile

在同一目录下,创建Dockerfile

# vi Dockerfile
FROM python:2.7
ADD . /code
WORKDIR /code
RUN pip install -r requirements.txt
CMD python app.py

对上面的Dockerfile做一下简单说明:

  • 容器使用Python 2.7的镜像
  • 将当前目录下文件拷贝到容器内/code
  • 指定工作目录为/code
  • 安装python需要的库:flask, redis
  • 容器执行命令 python app.py

1.3 创建编排脚本

在同一目录下,创建 docker-compose.yml

Docker学习笔记 - Docker Compose
# cat docker-compose.yml
version: '2'
services:
web:
build: .
ports:
- "5000:5000"
volumes:
- .:/code
depends_on:
- redis
redis:
image: redis
Docker学习笔记 - Docker Compose

对上面的编排脚本做一下简单说明:

  • 这个应用定义了两个服务:web, redis
  • web容器通过当前路径下的Dockerfile生成
  • web容器内的5000端口映射到主机的5000端口
  • 将当前目录挂载到web容器内/code
  • web容器依赖于redis容器
  • redis容器从Docker Hub获取镜像

1.4 启动应用

会执行编排脚本,分别制作和抓取web,redis镜像,启动容器

# docker-compose up

1.5 访问应用

http://localhost:5000/

四、命令

1、daemon模式启动/停止

# docker-compose up -d
# docker-compose stop

2 查看信息

# docker-compose ps

3 对容器执行命令(一次)

#docker-compose run services cmd

例如:查看web容器环境变量

# docker-compose run web env

五、例子

1、例一 - docker-compose.yml

version: '2'
services:
web:
image: dockercloud/hello-world
ports:
- 8080
networks:
- front-tier
- back-tier redis:
image: redis
links:
- web
networks:
- back-tier lb:
image: dockercloud/haproxy
ports:
- 80:80
links:
- web
networks:
- front-tier
- back-tier
volumes:
- /var/run/docker.sock:/var/run/docker.sock networks:
front-tier:
driver: bridge
back-tier:
driver: bridge

2、例二 - docker-compose.yml

Docker学习笔记 - Docker Compose
# cat docker-compose.yml
version: '2'
services:
db:
image: mysql:5.7
volumes:
- "./.data/db:/var/lib/mysql"
restart: always
environment:
MYSQL_ROOT_PASSWORD: wordpress
MYSQL_DATABASE: wordpress
MYSQL_USER: wordpress
MYSQL_PASSWORD: wordpress wordpress:
depends_on:
- db
image: wordpress:latest
links:
- db
ports:
- "8000:80"
restart: always
environment:
WORDPRESS_DB_HOST: db:3306
WORDPRESS_DB_PASSWORD: wordpress
Docker学习笔记 - Docker Compose

3、例三 - docker-compose.yml

Docker学习笔记 - Docker Compose的更多相关文章

  1. Docker学习笔记 — Docker私有仓库搭建

    Docker学习笔记 — Docker私有仓库搭建   目录(?)[-] 环境准备 搭建私有仓库 测试 管理仓库中的镜像 查询 删除 Registry V2   和Mavan的管理一样,Dockers ...

  2. Docker学习笔记 - Docker容器内部署redis

    Docker学习笔记(2-4)Docker应用实验-redist server 和client的安装使用 一.获取redis容器(含客户端和服务端) 二.创建服务端容器 1.在终端A中运行redis- ...

  3. Docker学习笔记 - Docker的守护进程

    学习目标:  查看Docker守护进程的运行状态 启动.停止.重启Docker守护进程 Docker守护进程的启动选项 修改和查看Docker守护进程的启动选项 1.# 查看docker运行状态  方 ...

  4. Docker学习笔记 - Docker客户端和服务端

    学习内容: Docker客户端和服务端的通讯方式:client和自定义程序 Docker客户端和服务端的连接方式:socket 演示Docker客户端和服务端之间用remote-api通讯:nc   ...

  5. Docker学习笔记 — Docker私有仓库搭建【转载】

    标签: Docker 2015-03-10 21:08 24190人阅读 评论(0) 收藏 举报  分类: Docker(26)    目录(?)[+]   和Mavan的管理一样,Dockers不仅 ...

  6. Docker学习笔记 - Docker部署nginx网站

    一.制作 nginx 镜像 1.下载配置文件 mkdir /opt/nginx_docker && cd /opt/nginx_docker mkdir nginx &&amp ...

  7. Docker学习笔记 - Docker的镜像

    一个容器实际上是运行在宿主机上的一个进程. 只不过在启动这个进程之前进行了一些特殊处理,让这个容器进入了一个全新的虚拟环境,与宿主机的环境分开, 所以这个进程及其子进程认为自己运行在一个独立的世界里面 ...

  8. Docker学习笔记 - Docker的基本概念

    一.cs架构 Docker客户端:本地或远程 Docker服务端:守护进程Docker Daemon 二.基本概念 Docker镜像:打包阶段,层叠的只读文件系统,引导->root(ubuntu ...

  9. Docker学习笔记 - Docker的数据卷容器

    一.什么是数据卷容器 如果你有一些持续更新的数据需要在容器之间共享,最好创建数据卷容器. 数据卷容器:用于容器间的数据共享,主动挂载宿主机目录,用于其他容器挂载和共享. 二.数据卷容器的操作 1.创建 ...

  10. Docker学习笔记-Docker for Linux 安装

    前言: 环境:centos7.5 64 位 正文: Docker 软件包已经包括在默认的 CentOS-Extras 软件源里.因此想要安装 docker,只需要运行下面的 yum 命令: yum i ...

随机推荐

  1. Corex-M0 系统嘀嗒定时器 Systick 详解

  2. Objective - C - 添加类目 - NSDate

    1.类目为系统内部的类或者是没有源代码的类添加方法,不有添加实例变量 2.添加的方法会成为原类的一部分,子类照样可以使用 3.类目的文件名为原类名+文件名 4.既可以添加实例方法,也可以添加类方法 X ...

  3. Linux下统计高速网络中的流量

    netpps.sh统计每秒数据量,包含接收(RX)或发送(TX) netpps.sh eth0 #!/bin/bash INTERVAL=" # update interval in sec ...

  4. ADO.NET和ORACLE操作数据库传参数赋值的方式

    在使用.Net使用OracleParameter进行Oracle数据库操作的时候,因为Oracle和SQLServer针对查询参数化的语法不同, 在操作SQLServer的时候使用的是@Paramet ...

  5. assert的使用

    1.eclipse.myeclipse开启assert(断言),默认是关闭,如下: 说白了就是设置一下jvm的参数,参数是-ea或者-enableassertions 2.assert格式 (1)as ...

  6. day42 字段的增删改查详细操作

    复习 # 1.表的详细操作 create table nt like ot; # 只复制表的结构包括约束 create table nt select * from ot where 1=2; # 复 ...

  7. IntelliJ Idea设置单击打开文件或者双击打开文件、自动定位文件所在的位置

  8. 用大白话谈谈XSS与CSRF

    这两个关键词也是老生常谈了,但是还总是容易让人忘记与搞混~.XSS与CSRF这两个关键词时常被拉出来一起比较(尤其是面试),我在这里也在写一篇扫盲文,也帮自己整理一下知识脉络. 这篇文章会用尽量“人话 ...

  9. (转载)mysql:设置mysql的远程访问

    1.登陆Mysqlmysql -u root -p2.允许任何IP访问,其中密码为admingrant all privileges on *.* to root@"%" iden ...

  10. 虚拟机之 LAMP

    LAMP 就是Linux apache mysql php 一.下载: 安装下载工具 yum install wget -y mysql:5.5.47 wget http://mirrors.sohu ...