一、安装 docker compose(Linux)
https://docs.docker.com/compose/install/ 选择linux 即可,Windows和Mac OS 安装Docker时自动安装docker-compose
curl -L "https://github.com/docker/compose/releases/download/1.24.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
或者
curl -L "https://github.com/docker/compose/releases/download/1.24.1/docker-compose-Linux-x86_64" -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
注:如果下载太慢,可以在Windows本地下载,再重命名为docker-compose后拷贝到/usr/local/bin/文件夹下
二、docker-compose使用
2.1、docker-compose命令介绍
常用:
- docker-compose build # 如果 docker-compose.yml 中有镜像要 build 可以先 build
- docker-compose up # 根据 docker-compose.yml 安装 docker-compose 的服务
- docker-compose up -d # 根据 docker-compose.yml 安装 docker-compose 的服务 后台运行
- docker-compose down # 停止 服务, 删除 容器 ,删除 网络,删除 挂载
- docker-compose stop # 停止 服务
- docker-compose rm # 从容器中删除停止的服务
- docker-compose start # 启动 服务
- docker-compose restart # 重启 服务
- docker-compose ls # 列出所有容器
- docker-compose images # 列出所使用的镜像
- docker-compose exec [service_name: eg wordpress] bash # 进入正在服务的容器内部
2.2、安装启动:docker-compose up
# 以docker-compose.yml 为配置文件启动docker (因为默认为docker-compose.yml,故可简写为docker-compose up)
# docker-compose.yml 文件 见附件
docker-compose -f docker-compose.yml up
2.3、验证一下
2.4、进入容器内部
- docker-compose exec mysql bash
- docker-compose exec wordpress bash
三、docker-compose 从本地 的 Dockerfile 创建 服务
3.1、docker-compose.yml文件
version: "3"
services:
redis:
image: redis
web:
build:
context: .
dockerfile: Dockerfile
ports:
- 8080:5000
environment:
REDIS_HOST: redis
3.2、Dockerfile文件
FROM python:2.7
LABEL maintaner="Peng Xiao [email protected]"
COPY . /app
WORKDIR /app
RUN pip install flask redis
EXPOSE 5000
CMD [ "python", "app.py" ]
3.3、app.py文件
from flask import Flask
from redis import Redis
import os
import socket
app = Flask(__name__)
redis = Redis(host=os.environ.get('REDIS_HOST', '127.0.0.1'), port=6379)
@app.route('/')
def hello():
redis.incr('hits')
return 'Hello Container World! I have been seen %s times and my hostname is %s.\n' % (redis.get('hits'),socket.gethostname())
if __name__ == "__main__":
app.run(host="0.0.0.0", port=5000, debug=True)
附件:docker-compose.yml文件
version: '3'
services:
wordpress:
image: hub.c.163.com/library/wordpress
ports:
- 8080:80
environment:
WORDPRESS_DB_HOST: mysql
WORDPRESS_DB_PASSWORD: 123
networks:
- my-bridge
mysql:
image: hub.c.163.com/library/mysql
ports:
- 3306:3306
environment:
MYSQL_ROOT_PASSWORD: 123
MYSQL_DATABASE: wordpress
volumes:
- mysql-data:/var/lib/mysql
networks:
- my-bridge
volumes:
mysql-data:
networks:
my-bridge:
driver: bridge