Docker-compose

准备工作:安装docker

同基础上

Docker Compose


Docker-Compose(优缺点) Docker-Compose 是用来管理你的容器的,有点像一个容器的管家,想象一下当你的Docker中有成百上千的容器需要启动,如果一个一个的启动那得多费时间。有了Docker-Compose你只需要编写一个文件,在这个文件里面声明好要启动的容器,配置一些参数,执行一下这个文件,Docker就会按照你声明的配置去把所有的容器启动起来,但是Docker-Compose只能管理当前主机上的Docker,也就是说不能去启动其他主机上的Docker容器docker compose 来轻松高效管理容器。定义运行多个容器。

作用:批量容器编排。

compose是官方的开源项目,需要安装!

Compose :重要的概念

  • 服务services,容器,应用,(web/redis/mys,,)

  • 项目 project。 一组关联的容器,博客,web,mysql,wp。

     

安装compose

1、下载

#官网
curl -L "https://github.com/docker/compose/releases/download/1.26.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/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    

image-20200914143537857

2、安装成功

image-20200914143742812

多看官网!!

3、体验

地址:https://docs.docker.com/compose/gettingstarted/

通过Docker Compose上构建一个简单的Python web应用程序,使用Flask框架并在Redis中维护一个计数器,用来记录改web应用被访问的次数。

1、准备工作

yum -y install python-pip  #pip是Python 包管理工具
yum -y install epel-release #报错执行安装依赖

2、为项目创建目录

mkdir composetest
cd -

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. '.format(count)

4、在项目目录中创建另一个名为requirements.txt的文件

flask
redis

5、在项目目录中,创建名为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"]  # CMD ["python", "app.py"]
#从Python 3.7映像开始构建映像。
#将工作目录设置为/code。
#设置flask命令使用的环境变量。
#安装gcc和其他依赖项
#复制requirements.txt并安装Python依赖项。
#向图像添加元数据以描述容器正在侦听端口5000
#将.项目中的当前目录复制到.映像中的工作目录。
#将容器的默认命令设置为flask run。

6、在项目目录中创建一个名为docker-compose.yml的文件:

#定义了两个服务:web和redis
version: '3'
services:
web:
  build: .
  ports:
     - "5000:5000"
redis:
  image: "redis:alpine"  

大概流程:

  1. 应用 app.py

  2. Dockerfile 将应用打包为镜像

  3. Docker-compose yaml 文件(定义整个服务,需要的一些环境。web/redis)完整的上线服务

  4. 启动 compose 项目 (docker-compose up)

流程:

  1. 创建网络

  2. 执行 Docker-compose yaml

  3. 启动服务:(很慢)

    • Creating composetest_redis_1 ... done Creating composetest_web_1 ... done

  • 文件名 composetest

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

    自动默认规则

 

测试成功!

[root@localhost ~]# docker ps
CONTAINER ID       IMAGE               COMMAND                 CREATED             STATUS             PORTS                               NAMES
188f23975dd3       composetest_web     "flask run"              58 minutes ago     Up 2 minutes        0.0.0.0:5000->5000/tcp             composetest_web_1
8fe4249f2093       redis:alpine        "docker-entrypoint.s…"   58 minutes ago     Up 2 minutes        6379/tcp                           composetest_redis_1  
[root@localhost ~]# curl localhost:5000
Hello World! I have been seen 5 times.
[root@localhost ~]# curl localhost:5000
Hello World! I have been seen 6 times.
[root@localhost ~]# curl localhost:5000
Hello World! I have been seen 7 times.
[root@localhost ~]# docker service ls
Error response from daemon: This node is not a swarm manager. Use "docker swarm init" or "docker swarm join" to connect this node to swarm and try again.

默认的服务名 文件名-服务名-num

多个服务器 集群 A B _num 副本数量

服务redis服务=>4个副本

集群状态,弹性、HA 高并发 (kubetctl service 负载均衡)

网络规则:

image-20200914180730434

10个服务=》项目 (项目中的内容都在同一个网络下,域名访问 )

image-20200914181146729

 

image-20200914181018123

如果在同一网络下,可以通过域名来访问。HA!

停止:docker-compose down(在对应的文件下) 或者: Ctrl+C

image-20200914181527305

Docker-Compose

以前都是单个docker run 启动容器

docker-compose、通过docker-compose编写yaml配置文件、可以通过compose一键启动所有服务,停止!

 

Docker小结:

  1. Docker镜像,run=》容器

  2. Dockerfile构建镜像 (服务打包)

  3. Docker-Compose启动项目(编排、多个微服务/环境)

  4. Docker网络!

  5.  

Yaml规则:


docker-compose.yaml 核心

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

# 3层
version:      #版本   1   向下兼容
services:     #服务   2
  服务1: web
  #服务配置
  images
  build
  network
  ....
  服务2:Redis
  ...
#其他配置 网络/卷、全局规则 3
networks
vloume
configs
......

image-20200914182518131

多写,多练,多看,compose.yaml文件!官方文档 、开源项目。

 

开源项目(博客)


下载程序、安装数据库、配置......

compose 应用=>一键启动!

  1. 下载项目(docker-compose.yaml)

  2. 如果需要文件。Dockerfile

  3. 文件准备齐全(直接一键启动项目)

# 1、创建一个空的项目目录my_wordpress,并进入目录;
[root@localhost home]# mkdir my_wordpress
[root@localhost home]# cd my_wordpress
# 2、创建一个docker-compose.yml文件来启动您的 WordPress博客,并创建一个单独的MySQL实例,该实例具有用于数据持久性的卷挂载:
version: '3.3'

services:
  db:
    image: mysql:5.7
    volumes:
      - db_data:/var/lib/mysql
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: somewordpress
      MYSQL_DATABASE: wordpress
      MYSQL_USER: wordpress
      MYSQL_PASSWORD: wordpress

  wordpress:
    depends_on:
      - db
    image: wordpress:latest
    ports:
      - "8000: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卷db_data将WordPress所做的所有更新持久化到数据库。WordPress Multisite仅适用于port 80和443。
3、启动docker-compose up
[root@localhost my_wordpress]# docker-compose up
Status: Downloaded newer image for wordpress:latest
Creating my_wordpress_db_1 ... done
Creating my_wordpress_wordpress_1 ... done
Attaching to my_wordpress_db_1, my_wordpress_wordpress_1
[root@localhost composetest]# docker ps
CONTAINER ID       IMAGE               COMMAND                 CREATED             STATUS             PORTS                               NAMES
6d0cc0d74fd6       wordpress:latest    "docker-entrypoint.s…"   31 seconds ago     Up 30 seconds       0.0.0.0:8000->80/tcp               my_wordpress_wordpress_1
cc754e2eae77       mysql:5.7           "docker-entrypoint.s…"   32 seconds ago     Up 31 seconds       3306/tcp, 33060/tcp                 my_wordpress_db_1
a86d12bfa37e       mysql:5.7           "docker-entrypoint.s…"   3 days ago         Up 3 days           0.0.0.0:3306->3306/tcp, 33060/tcp   dq-mysql

image-20200914184345553

 

前台启动 : docker -d 、docker-compose up -d

[root@localhost my_wordpress]# docker-compose up -d
Starting my_wordpress_db_1 ... done
Starting my_wordpress_wordpress_1 ... done

 

原文地址:https://www.cnblogs.com/james-23/p/13668448.html