docker-compose

Posted xinzaiyuan

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了docker-compose相关的知识,希望对你有一定的参考价值。

目录

1.1 docker-compose 基础

1.2 docker-compose 应用

1.3 docker-compose 配置文件解析

1.1 docker-compose 基础

1.什么是docker-compose

  1. Compose是一个定义和管理多容器的工具,使用Python语言编写。

  2. 使用Compose配置文件描述多个容器应用的架构,比如使用什么镜像、数据卷、网络、映射端口等;

  3. 然后一条命令管理所有服务,比如启动、停止、重启等。

2.docker compose作用

  1. 现在我们要部署django项目,需要 django+mysql+redis+nginx

  2. 我们需要开启四个docker容器进行部署每一个组件,如果每个容器单独管理太过于复杂,而且可能是给客户部署项目

    1). 每一个容器启动都是有说法的,比如celery会使用redis,如果redis没有启动先启动celery服务起不来

    2). 我们的django项目会使用 mysql、还会使用redis,如果这两个没有启动而先启动django项目,也会报错

  3. docker compose就是一个可以同时管理一个项目中的多个docker容器的工具,一键部署启动

  4. 一条命令

    docker-compose -f xxx.yml

3.docker compose安装

[root@linux-node4 ~]# curl -L https://github.com/docker/compose/releases/download/1.15.0/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
[root@linux-node4 ~]# chmod +x /usr/local/bin/docker-compose

4. YAML文件格式及编写注意事项

  注:docker-compose使用yaml文件对容器进行描述

  YAML是一种标记语言很直观的数据序列化格式,可读性高。类似于XML数据描述语言,语法比XML简单的很多。

  YAML数据结构通过缩进来表示,连续的项目通过减号来表示,键值对用冒号分隔,数组用中括号括起来,hash用花括号括起来。

  YAML文件格式注意事项:

    1.不支持制表符tab键缩进,需要使用空格缩进

    2.通常开头缩进2个空格

    3.字符后缩进1个空格,如冒号、逗号、横杆

    4.用井号注释

    5.如果包含特殊字符用单引号引起来

    6.布尔值(true、false、yes、no、on、off)必须用引号括起来,这样分析器会将他们解释为字符串。

5. compose 配置常用字段

技术图片

技术图片
 1 [root@linux-node1 mysql-docker]# vim docker-compose.yml 
 2 version: 3
 3 services:
 4   mysql:
 5     image: mysql:5.7
 6     volumes:
 7       - ./data:/var/lib/mysql
 8     ports:
 9       - "3306:3306"
10     environment:
11       - MYSQL_ROOT_PASSWORD=root
12       - MYSQL_DATABASE=djangodb
13 [root@linux-node1 mysql-docker]# docker-compose -f docker-compose.yml up
14 
15 docker-compose.yml 部署mysql简单测试
docker-compose.yml 部署mysql测试
技术图片docker-compose 配置文件

6.常用命令

技术图片

技术图片
 1 ‘‘‘1.docker-compose常用命令‘‘‘
 2 docker-compose -f docker-compose.yml  up -d    # 启动docker-compose管理的所有容器
 3 docker-compose ps                               # 列出 Compose 应用中的各个容器,类似docker ps
 4 docker-compose logs web                        # 查看web服务日志
 5 docker-compose down                               # 停止并移除容器、网络、镜像和数据卷.比stop更彻底
 6 docker-compose images                             # 列出所有镜像
 7 
 8 
 9 ‘‘‘2.docker-compose其他命令 ‘‘‘
10 docker-compose stop                               # 停止 Compose 应用相关的所有容器,但不会删除它们
11 docker-compose restart                           # 重启YAML文件中定义的服务
12 docker-compose kill                            # 停止服务
13 docker-compose rm                               # 删除指定已经停止服务的容器(它会删除容器和网络,但是不会删除卷和镜像)
14 docker-compose build                           # 构建或重建服务
15 docker-compose pull                               # 拉去并下载指定服务镜像
16 docker-compose push                            # push服务镜像
17 docker-compose top                               # 显示各个容器内运行的进程
18 
19 docker-compose常用管理命令
docker-compose 常用管理命令

7.docker读写层

[root@linux-node1 84c0e08a8cc81e85b2e6a2508bd7a92920129471ec1f5ad1dfe4187c7571e72d]# ll
total 8
drwxr-xr-x 5 root root  39 Mar  4 20:54 diff     # docker容器自己的读写层(只有我们改动的文件在这里)
-rw-r--r-- 1 root root  26 Mar  4 20:54 link
-rw-r--r-- 1 root root 347 Mar  4 20:54 lower
drwxr-xr-x 1 root root  39 Mar  4 20:54 merged   # docker真正的工作区
drwx------ 3 root root  18 Mar  4 20:54 work     # 项目工作路径

1.2 docker-compose在企业中应用

1.拉取线上代码

1 $  git clone https://gitee.com/edushiyanlou/django-docker.git
2 
3 $  docker-compose up -d        # 启动所有容器
4 
5 $  docker-compose logs celery  # 查看celery运行日志
6 
7 $  docker-compose down         # 关闭所有容器
8 
9 启动后访问:http://192.168.56.11

2.部署Django程序一般使用那些

  • django
  • mysql
  • celery
  • redis
  • nginx

技术图片

1.3 docker-compose.yml说明

 1 version: 3                       # cocker compose版本号
 2 
 3 services:                          # 顶级配置文件(名称自己写)
 4   mysql:                           # 服务名: 容器建通信、管理容器(mysql这个容器取的名字,也是自己写的)
 5     image: mysql:5.7               # 引入官方mysql镜像(可以大家自己的hub仓库,中大型公司都会自己搭建docker hub仓库)
 6     volumes:
 7       - ./mysql:/var/lib/mysql         # 把当前文件夹下的 ./mysql文件夹挂载到docker容器 /var/lib/mysql 路径下
 8     expose:
 9       - "3306"                        # 将当前容器的端口3306端口暴露给link到本容器的容器
10     restart: always                   # 宿主机重启自动拉起这个docker容器
11     environment:
12       - MYSQL_ROOT_PASSWORD=root             # mysql服务器root密码root
13       - MYSQL_DATABASE=djangodocker          # 创建数据库 djangodocker
14       - MYSQL_USER=django                    # 创建一个用户 django
15       - MYSQL_PASSWORD=django                # 用户密码为django
16 
17 
18 - 单独部署一个nginx
19   - 安装nginx服务
20   - 配置nginx.conf
21   - 配置 /etc/nginx/conf.d/*.conf
22   - 访问端口
23 
24   nginx:
25     image: nginx:alpine
26     volumes:
27       - ./nginx/nginx.conf:/etc/nginx/nginx.conf
28       - ./nginx/conf:/etc/nginx/conf.d
29       - ./web/staticfiles:/django_static
30     ports:
31       - "80:80"                             # 绑定容器的80端口到主机的80端口
32     depends_on:
33       - web                                 # 必须先启动web容器然才能启动nginx容器
34 
35   redis:
36     image: redis:alpine
37     expose:
38       - "6379"
39     restart: always
40 
41   web:
42     build: .
43     # command: python manage.py runserver 0:8000
44     # ports:
45     #   - "8000:8000"
46     command: uwsgi --ini uwsgi.ini             # 启动uwsgi命令
47     working_dir: /code/web                     # 项目工作路径
48     volumes:
49       - .:/code                                # 将当前文件夹下所有文件挂载到容器的 /code 文件夹
50     expose:
51       - "8000"
52     depends_on:                                # 必须mysql和reids容器启动后才能启动web容器
53       - mysql
54       - redis
55 
56   celery:
57     build: .
58     command: celery -A web worker -l info
59     working_dir: /code/web
60     volumes:
61       - .:/code
62     depends_on:
63       - mysql
64       - redis

单独部署一个nginx

  • 安装nginx服务
  • 配置nginx.conf
  • 配置 /etc/nginx/conf.d/*.conf
  • 访问端口

 相似指令比较

1 ‘‘‘1. expose 与 ports 比较‘‘‘
2 # ports: 绑定容器的端口到主机的端口,这样就可以在外网访问docker容器的服务
3 # expose: 将当前容器的端口3暴露给link到本容器的容器,expose不会将端口暴露给主机
4 
5 ‘‘‘2. depends_on 与 links区别‘‘‘
6 # depends_on: 指定本容器启动依赖的容器必须先启动
7 # links: 保证容器如果ip变化也能访问(基本已经弃用,因为不使用link仍然可以通过容器名称访问)

 

以上是关于docker-compose的主要内容,如果未能解决你的问题,请参考以下文章

监听更改并在代码更改时重新加载容器 - docker-compose

Springboot 容器使用 docker-compose 连接到 mongo 容器的 503 错误代码

将 docker-compose 与 CI 结合使用 - 如何处理退出代码和守护程序链接容器?

docker-compose未显示对代码的任何更改

Docker Compose部署Nexus3时的docker-compose,yml代码

使用`docker-compose run`时无法调试,但`docker-compose up`有效