30

Docker Compose

  1. DockerFile 单个容器 手动运行。
  2. Docker Compose 定义多个容器,高效管理。

安装

curl -L https://get.daocloud.io/docker/compose/releases/download/1.25.5/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
chmod a+x /usr/local/bin/docker-compose

image-20210110023952336

官方demo

  1. mkdir compose
  2. cd compose
  3. 创建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)
  1. 创建requirements.txt ,写入需要用到的python库

    flask
    redis
  2. 创建``DockerFile`

    FROM python:3.7-alpine
    WORKDIR /code
    ENV FLASK_APP=app.py
    ENV FLASK_RUN_HOST=0.0.0.0
    RUN apk add --no-cache gcc musl-dev linux-headers
    COPY requirements.txt requirements.txt
    RUN pip install -r requirements.txt
    EXPOSE 5000
    COPY . .
    CMD ["flask", "run"]
  3. 创建``docker-compose.yml`

    version: "3.3"
    services:
    web:
    build: .
    ports:
    - "5000:5000"
    redis:
    image: "redis:alpine"
  4. docker-compose up 启动成功

image-20210110030552217

网络

当使用docker-compose启动一个环境时,docker network会自定义一个网络

image-20210110032007279

所有服务都在同一个网络下,并都可使用域名访问

image-20210110032102626

yaml规则

docker-compose.yml

#核心配置services
version: #版本信息,对应docker版本,往下兼容
services: #服务,核心
服务1:web
#服务配置
服务2:redis
#服务配置
服务3:network
#服务配置
服务4:depends_on #重要,服务启动依赖,按照依赖来启动服务
......
#其他配置
volumes: #卷挂载
networks: #网络配置
configs: #配置信息

image-20210110033222947

一键部署WP博客

  1. mkdir mywordpress
  2. cd mywordpress
  3. 编写yaml文件
version: '3.3'															#版本信息

services: #服务
db: #数据库服务
image: mysql:5.7 #数据库镜像为mysql:5.7版本
volumes: #挂载卷目录
- db_data:/var/lib/mysql
restart: always #重启服务:总是重启服务
environment: #数据库配置
MYSQL_ROOT_PASSWORD: somewordpress #数据库root密码
MYSQL_DATABASE: wordpress #数据库命令
MYSQL_USER: wordpress #数据库账户
MYSQL_PASSWORD: wordpress #数据库密码

wordpress: #博客
depends_on: #依赖环境,依赖于db,先启动db,在启动博客
- db
image: wordpress:latest #博客镜像
ports:
- "80:80" #端口映射。主机端口:容器端口
restart: always #重启服务:总是重启服务
environment: #环境配置
WORDPRESS_DB_HOST: db:3306 #数据库连接
WORDPRESS_DB_USER: wordpress #数据库账户
WORDPRESS_DB_PASSWORD: wordpress #数据库密码
WORDPRESS_DB_NAME: wordpress #数据库名称
volumes: #卷挂载
db_data: {}

后台启动

docker-compose up -d

image-20210110035547264

搭建成功

image-20210110035627009

停止服务

docker-compose down   #必须在环境的目录下才可停止

image-20210110035746136

docker-compose官方文档地址:https://docs.docker.com/compose/compose-file/compose-file-v3/#restart

实战搭建s2-061漏洞环境

上篇文章中,我们使用了Dockerfile搭建漏洞环境,本文中还是沿用上文中的Dockerfile文件,然后来编写yaml文件,来一键启动s2-061环境

version: "3"
services:
s2-061:
build: .
ports:
- "8099:8080"

image-20210113224236587