一、Docker compose简介
1.1 docker compose的应用需求
Compose 项目是 Docker 官方的开源项目,负责实现对 Docker 容器集群的快速编排。
使用前面介绍的Dockerfile文件可以很容易定义一个单独的应用容器。然而在日常开发工作中,经常会碰到需要多个容器相互配合来完成某项任务的情况。
例如要实现一个 Web 项目,除了 Web 服务容器本身,往往还需要再加上后端的数据库服务容器;再比如在分布式应用一般包含若干个服务,每个服务一般都会部署多个实例。
而docker compose工具就可以实现这些服务的编排,统一管理这些容器服务,提高管理和维护的效率,通常就应用在一组需要关联的应用容器得创建上。
compose的两个重要概念:
- project项目:由一组相关联饿应og器组成的一个完整业务单元,在docker-compose.yml中定于
- services服务:一个应用的容器,可以包含多个运行相同镜像的容器的实例
1.2 docker-compose.yml文件常用字段
文件格式及编写注意事项
- 不支持制表符tab键缩进,需要使用空格缩进
- 通常开头缩进2个空格
- 字符后缩进1个空格,如冒号、逗号、横杆
- 用#号注释
- 如果包含特殊字符用单引号引起来
- 布尔值必须用引号括起来
1.3 docker-compose常用命令
docker-compose [options] [COMMAND] [ARG...]
//docker-compose选项:
--verbose输出更多调试信息
--version打印版本并退出
-f, -file FILE使用特定的compose模板文件,默认为docker-compose.yml
-p, --project-name NAME指定项目名称,默认使用目录名称
//举例:
docker-compose -f docker-compose.yml up -d
二、docker compose案例搭建nginx服务
下载docker-compose工具包
curl -L https://github.com/docker/compose/releases/download/1.21.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
更改compose工具路径,使其可以全局使用
cp -p docker-compose /usr/local/bin
chmod +x /usr/local/bin/docker-compose
创建一个compose总目录,目录下包含以下文件
[root@server1 compose-nginx]# tree ./
./
├── docker-compose.yml
├── nginx
│ ├── Dockerfile
│ ├── nginx-1.12.2.tar.gz
│ └── run.sh
└── wwwroot
└── index.html
首先创建nginx目录,用于创建nginx镜像,见这篇文章 nginx的dockfile
创建yml文件,即用compose工具编排nginx容器的创建运行
[root@server1 compose-nginx]# vi docker-compose.yml
version: '3' #冒号后有空格
services:
nginx:
hostname: nginx
build:
context: ./nginx #指定Dockerfile目录,当前目录下的nginx内
dockerfile: Dockerfile
ports:
- 1216:80 #冒号后无空格,是端口映射,-后有空格
- 1217:443
networks:
- abc #新的网络空间,可ifconfig查看
volumes: #与宿主目录共享的数据卷,用于发布nginx网页
- ./wwwroot:/usr/local/nginx/html
networks:
abc:
#整个compose工具的网络空间,自定义名称abc,compose工具编排的服务都是用这个网络,处于同于网段,172.18.0.0网段
使用docker-compose命令执行编排容器,-f 向yml文件位置
docker-compose -f /root/compose-nginx/docker-compose.yml up -d
创建网页站点文件,wwwroot目录会自动创建,进入目录
[root@server1 compose-nginx]# cd wwwroot/
[root@server1 wwwroot]# vi index.html
<h1>hello this is my web!</h1>
验证
查看镜像和容器,并访问nginx服务
[root@server1 compose-nginx]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
compose-nginx_nginx latest 29c47493dea5 37 seconds ago 447MB
[root@server1 compose-nginx]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f196696d8caa compose-nginx_nginx "/run.sh" 57 seconds ago Up 55 seconds 0.0.0.0:1216->80/tcp, 0.0.0.0:1217->443/tcp compose-nginx_nginx_1
访问192.168.247.130:1216