💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
[TOC] ## 一 docker-compose的简介 docker-compose是dokcer官方的单机编排工具,让用户通过编写一个简单的模板文件,快速地创建和管理基于docker容器的应用集群。实现对docker容器集群的快速编排。 允许用户通过一个单独的docker-compose.yml模板文件(YAML格式)来定义一组相关联的应用容器作为一个项目(project) ### A. Compose2个重要概念: 1. 服务(service) 一个应用的容器,实际上可以包含若干运行相同镜像的容器实例。 2. 项目(project) 由一组关联的应用容器组成的一个完整业务单元,在docker-compose.yml文件中定义。 ### B. 使用Compose的三步骤: 1. Dockerfile 定义应用的运行环境 2. docker-compose.yml 定义组成应用的各服务 3. docker-compose up 启动整个应用 ### C. docker-compose命令与模板文件 1. docker-compose命令 对于Compose来说,大部分命令的对象既可以是项目本身,也可以指定为项目中的服务或容器。默认针对项目 ``` docker-compose [-f <arg>...] [options] [COMMAND] [ARGS...] -f 指定使用的Compose模板文件,默认为docker-compose.yml,可多次指定 -p 指定项目名称,默认将使用所在目录名称作为项目名 -x-network-driver DRIVER指定网络后端的驱动,默认为bridge ``` 2. compose的yml模板 docker-compose.yml文件是compose的模板文件默认文件名,使用docker-compose时,会通过该模板文件构建镜像、启动容器、关联容器等 Docker Compose 运行目录下的所有文件(docker-compose.yml)组成一个工程,一个工程包含多个服务,每个服务中定义了容器运行的镜像、参数、依赖,一个服务可包括多个容器实例 模板文件类似dockerfile,但命令更多,命令详情见模板文件详解 ## 二 docker-compose安装 Compose项目是用Python语言编写的,所以compose可以通过python的pip工具进行安装。安装过程如下: ### A. pip在线安装法 1. 安装更新pip ```sh curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo yum install -y python-pip pip install --upgrade pip -i https://pypi.douban.com/simple/ ``` 2. pip安装docker-compose ```sh pip install docker-compose -i https://pypi.douban.com/simple/ [root@docker01 ~]# docker-compose version docker-compose version 1.24.0, build 0aa5906 docker-py version: 3.7.2 CPython version: 2.7.5 OpenSSL version: OpenSSL 1.0.1e-fips 11 Feb 2013 ``` ### B. github脚本安装法 可以直接下载docker官方存放在GitHub上的程序,然后授权启动即可,这样做的好处是可以控制下载指定的版本使用,而第一种方法默认会下载最新版 ```sh wget -O /usr/local/bin/docker-compose \ https://github.com/docker/compose/releases/download/1.24.0/docker-compose-$(uname -s)-$(uname -m) chmod +x /usr/local/bin/docker-compose ``` ## 三 Compose编排快速使用 ### A. 简单编排演示 1. 创建目录及模板文件 ```sh mkdir /test/www -p && cd /test/ cat >docker-compose.yml <<EOF version: "3" volumes: web: services: web-ser1: image: busybox:latest command: httpd -h /test/ -p 80 -f volumes: - web:/test/ ports: - "81:80" web-ser2: image: busybox:latest command: httpd -h /test/ -p 80 -f volumes: - /test/www/:/test/ ports: - "82:80" EOF ``` 2. 启动项目并写入测试文件 ```sh docker-compose up -d echo 'linux file test pag' > /test/www/index.html echo 'docker-volumes test pags' >/var/lib/docker/volumes/test_web/_data/index.html ``` 3. 验证功能 ```sh [root@docker01 test]# curl 127.0.0.1:81 docker-volumes test pags [root@docker01 test]# curl 127.0.0.1:82 linux file test pag ``` ### B. 该模板功能解释 该模板做了一下几件事: 1. 目录为`test`,所以项目名就是test 2. compose模板有3个语法版本,使用第3版 3. 创建一个卷web,会自动加上项目名为`test_web` 4. 创建第一个容器`web-ser1`,全名`test_web-ser1_1` * 用busybox做镜像,将docker卷web挂载到`/test/` * 启动简易httpd服务,映射端口81:80 5. 创建第二个容器`web-ser2`,全名`test_web-ser2_1` * 用busybox做镜像,将指定目录挂载到`/test/` * 启动简易httpd服务,映射端口82:80 可以通过docker相关命令验证是是否有创建相关的卷 1. 验证volume ```sh [root@docker02 test]# docker volume ls DRIVER VOLUME NAME local test_web [root@docker02 test]# docker volume inspect test_web|grep data "Mountpoint": "/var/lib/docker/volumes/test_web/_data", ``` 2. 验证容器 ```sh [root@docker02 test]# docker container ls CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES f378003a21d3 busybox:latest "httpd -h /test/ -p …" 23 minutes ago Up 23 minutes 0.0.0.0:82->80/tcp test_web-ser2_1 47ca927c1abd busybox:latest "httpd -h /test/ -p …" 23 minutes ago Up 23 minutes 0.0.0.0:81->80/tcp test_web-ser1_1 [root@docker02 test]# docker container inspect test_web-ser1_1 |grep -A5 Mounts "Mounts": [ { "Type": "volume", "Name": "test_web", "Source": "/var/lib/docker/volumes/test_web/_data", "Destination": "/test", [root@docker02 test]# docker container inspect test_web-ser2_1 |grep -A4 Mounts "Mounts": [ { "Type": "bind", "Source": "/test/www", "Destination": "/test", ```