一.什么是Docker Compose
Docker Compose 的前身是 Fig,它是一个定义及运行多个 Docker 容器的工具。使用 Docker Compose 时,只需要在一个配置文件中定义多个 Docker 容器,然后使用一条命令启 动这些容器。Docker Compose 会通过解析容器间的依赖关系按先后顺序启动所定义的容器。
二.Docker Compose的安装
[root@localhost ~]# curl -L "https://github.com/docker/compose/releases/download/1.24.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose [root@localhost ~]# chmod +x /usr/local/bin/docker-compose #加执行权 [root@localhost ~]# ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose #可在其他位置使用Docker-Compose命令 [root@localhost ~]# docker-compose --version |
三.文件格式以及编写注意事项
YAML 是一种标记语言,它可以很直观的展示数据序列化格式,可读性高。类似于 XML数据描述语言,语法比 XML 简单的很多。YAML 数据结构通过缩进来表示,连续的项目通过减号来表示,键值对用冒号分隔,数组用中括号([])括起来, hash 用花括号({})括起来
使用 YAML 时需要注意下面事项:
(1)不支持制表符 tab 键缩进,需要使用空格缩进。
(2)通常开头缩进两个空格。
(3)字符后缩进一个空格,如冒号、逗号、横杆。
(4)用#号注释。
(5)如果包含特殊字符,要使用单引号('')引起来。
(6)布尔值(true、 false、 yes、 no、 on、 off)必须用引号("")括起来,这样分析器会将它们解释为字符串。
四.常用字段
字段 | 描述 |
build dockerfile context | 指定Dockerfile文件名构建镜像上下文路径 |
image | 指定镜像 |
command | 执行命令,覆盖默认命令 |
container name | 指定容器名称,由于容器名称是唯一的,如果指定自定义名称,则无法scale |
deploy | 指定部署和运行服务相关配置,只能在Swarm模式使用 |
environment | 添加环境变量 |
networks | 加入网络 |
ports | 暴露容器端口,与-p相同,但端口不能低于60 |
volumes | 挂载宿主机路径或命令卷 |
restart | 重启策略,默认no,always,no-failure,unless-stoped |
五.常用命令
列1 | 列2 |
字段 | 描述 |
build | 重新构建服务 |
ps | 列出容器 |
up | 创建和启动容器 |
exec | 在容器里面执行命令 |
scale | 指定一个服务容器启动数量 |
top | 显示容器进程 |
logs | 查看容器输出 |
down | 删除容器、网络、数据卷和镜像 |
stop/start/restart | 停止/启动/重启服务 |
六.compose的案例
1.编写文件
[root@localhost ~]# vim docker-compose.yaml
version: '2' #版本号,现以弃用
services: #定义一个或多个服务。这里只有一个服务 webapp
webapp:
image: 'nginx' #使用的 Docker 镜像为 nginx
ports: #将容器的端口映射到宿主机的端口
- "80:80"
volumes: #将宿主机的目录或文件挂载到容器中。
- "/www/html:/www/html:rw" #具有读写权限
- "/opt/nginx/nginx.conf:/etc/nginx/nginx.conf" #用于自定义 Nginx 配置
2.修改nginx配置文件
将nginx的配置文件上传到docker主机上
[root@localhost ~]# mkdir /opt/nginx
[root@localhost ~]# vim /opt/nginx/nginx.conf
nginx.conf配置文件的内容为
#user nobody;
worker_processes 1;
#pid logs/nginx.pid;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
#gzip on;
server {
listen 80;
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
root /www/html;
index index.html index.htm index.php;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
location ~ \.php$ {
root /www/html;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
include fastcgi_params;
}
}
}
3.执行文件,生成容器
docker-compose up -d
4.列出当前运行的容器
[root@localhost ~]# docker-compose ps
[root@localhost ~]# docker-compose stop webapp #停止容器运行
[root@localhost ~]# docker-compose rm webapp #删除容器