Docker Compose

目录

[1. Docker Compose 环境安装](#1. Docker Compose 环境安装)

[2. YAML 文件格式及编写注意事项](#2. YAML 文件格式及编写注意事项)

[3. Docker Compose配置常用字段](#3. Docker Compose配置常用字段)

[4. Docker Compose 常用命令](#4. Docker Compose 常用命令)

[5. Docker Compose 文件结构](#5. Docker Compose 文件结构)


1. Docker Compose 环境安装

Docker Compose 是 Docker 的独立产品,因此需要安装 Docker 之后在单独安装 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

或者

源码编译

安装

复制代码
chmod +x /usr/local/bin/docker-compose

查看版本

复制代码
docker-compose --version

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

YAML 是一种标记语言,它可以很直观的展示数据序列化格式,可读性高。类似于 json 数据描述语言,语法比 json 简单的很多。YAML 数据结构通过缩进来表示,连续的项目通过减号来表示,键值对用冒号分隔,数组用中括号 \[\] 括起来, hash 用花括号 {} 括起来。

使用 YAML 时需要注意下面事项:

●大小写敏感

●通过缩进表示层级关系

●不支持制表符 tab 键缩进,只能使用空格缩进

●缩进的空格数目不重要,只要相同层级左对齐,通常开头缩进2个空格

●用 # 号注释

●符号字符后缩进1个空格,如冒号 : 、逗号 , 、横杠 -

●如果包含特殊字符用单引号('')引起来会作为普通字符串处理,双引号(""): 特殊字符作为本身想表示的意思

3. Docker Compose配置常用字段

|----------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 字段 | 描述 |
| build | 指定 Dockerfile 文件名, 要指定Dockerfile文件需要在build标签的子级标签中使用dockerfile标签指定 |
| dockerfile | 构建镜像上下文路径 |
| context | 可以是 dockerfile 的路径,或者是指向 git 仓库的 url 地址 |
| image | 指定镜像 |
| command | 执行命令,覆盖容器启动后默认执行的命令 |
| container_name | 指定容器名称,由于容器名称是唯一的,如果指定自定义名称,则无法scale指定容器数量 |
| deploy | 指定部署和运行服务相关配置,只能在 Swarm 模式使用 |
| environment | 添加环境变量 |
| networks | 加入网络,引用顶级networks下条目 |
| network_mode | 设置容器的网络模式,如 host,bridge,... |
| ports | 暴露容器端口,与 -p 相同,但端口不能低于 60 |
| volumes | 挂载一个宿主机目录或命令卷到容器,命名卷要在顶级 volumes 定义卷名称 |
| volumes_from | 从另一个服务或容器挂载卷,可选参数 :ro 和 :rw,仅版本 '2' 支持 |
| hostname | 容器主机名 |
| sysctls | 在容器内设置内核参数 |
| links | 连接到另外一个容器,- 服务名称:服务别名 |
| privileged | 用来给容器root权限,注意是不安全的,true | false |
| restart | -设置重启策略,no,always,no-failure,unless-stopped no,默认策略,在容器退出时不重启容器。 on-failure,在容器非正常退出时(退出状态非0),才会重启容器。 on-failure:3,在容器非正常退出时重启容器,最多重启3次。 always,在容器退出时总是重启容器。 unless-stopped,在容器退出时总是重启容器,但是不考虑在 Docker 守护进程启动时就已经停止了的容器。 |
| depends_on | 在使用Compose时,最大的好处就是少打启动命令,但一般项目容器启动的顺序是有要求的,如果直接从上到下启动容器,可能会因为容器依赖问题而启动失败。例如在没启动数据库容器的时候启动应用容器,应用容器会因为找不到数据库而退出。depends_on标签用于解决容器的依赖、启动先后的问题。 |

4. Docker Compose 常用命令

|--------------------|----------------|
| 字段 | 描述 |
| build | 重新构建服务 |
| ps | 列出容器 |
| up | 创建和启动容器 |
| exec | 在容器里面执行命令 |
| scale | 指定一个服务容器启动数量 |
| top | 显示容器进程 |
| logs | 查看容器输出 |
| down | 删除容器、网络、数据卷和镜像 |
| stop/start/restart | 停止/启动/重启服务 |

5. Docker Compose 文件结构

复制代码
yum install -y tree
tree /opt/compose_nginx
/opt/compose_nginx/
├── docker-compose.yml                #创建模板脚本
├── nginx
│?? ├── Dockerfile                    #创建容器脚本
│?? ├── nginx-1.12.0.tar.gz           #复制源码包
│?? └── run.sh                        #启动服务脚本
└── wwwroot
    └── index.html                    #站点网页

(1)准备依赖文件

复制代码
mkdir -p /opt/compose_nginx/nginx /opt/compose_nginx/wwwroot
cd /opt/compose_nginx/nginx
cp nginx-1.12.0.tar.gz ./

vim run.sh
#!/bin/bash
/usr/local/nginx/sbin/nginx

vim Dockerfile
#基于基础镜像
FROM centos:7
#用户信息
MAINTAINER this is nginx image <wl>
#添加环境包
RUN yum -y update
RUN yum -y install pcre-devel zlib-devel gcc gcc-c++ make
RUN useradd -M -s /sbin/nologin nginx
#上传nginx软件压缩包,并解压
ADD nginx-1.12.0.tar.gz /usr/local/src/
#指定工作目录
WORKDIR /usr/local/src/nginx-1.12.0
RUN ./configure \
--prefix=/usr/local/nginx \
--user=nginx \
--group=nginx \
--with-http_stub_status_module && make && make install
ENV PATH /usr/local/nginx/sbin:$PATH
#指定http和https端口
EXPOSE 80
EXPOSE 443
方法一:
RUN echo "daemon off;" >> /usr/local/nginx/conf/nginx.conf            #关闭 nginx 在后台运行
#添加宿主机中run.sh到容器中
ADD run.sh /run.sh
RUN chmod 755 /run.sh
CMD ["/run.sh"]
方法二:
ENTRYPOINT [ "/usr/local/nginx/sbin/nginx", "-g", "daemon off;" ]

echo "<h1>ggl like family!</h1>" > /opt/compose_nginx/wwwroot/index.html

(2)编写配置文件docker-compose.yml

复制代码
vim /opt/compose_nginx/docker-compose.yml

version: '3'
services:
  nginx:
    container_name: nginx
    #build:
      #context: ./nginx
      #dockerfile: Dockerfile
    image: nginx:ggl
    ports:
    - 80:80
    volumes:
    - ./nginx/html:/usr/local/nginx/html
    networks:
      lnmp:
        ipv4_address: 172.18.0.10


  mysql:
    container_name: mysql
    #build:
      #context: ./mysql
      #dockerfile: Dockerfile
    image: mysql:ggl
    ports:
    - 3306:3306
    volumes:
 - db-data:/usr/local/mysql
    networks:
      lnmp:
        ipv4_address: 172.18.0.20
    privileged: true


  php:
    container_name: php
    #build:
     #context: ./php
      #dockerfile: Dockerfile
    image: php:ggl
    ports:
    - 9000:9000
    volumes:
    - db-data:/usr/local/mysql
    - ./nginx/html:/usr/local/nginx/html
    networks:
      lnmp:
        ipv4_address: 172.18.0.30
    depends_on:
    - nginx
    - mysql

networks:
  lnmp:
    driver: bridge
    ipam:
      config:
        - subnet: 172.18.0.0/16

volumes:
  db-data:


cd /opt/compose_nginx/
docker-compose -f docker-compose.yml up -d

-f, --file FILE :使用特定的 compose 模板文件,默认为 docker-compose.yml

-p, --project-name NAME :指定项目名称,默认使用目录名称

-d :在后台运行

复制代码
docker ps -a

CONTAINER ID   IMAGE       COMMAND                   CREATED          STATUS          PORTS                                       NAMES
5028e3f31eda   php:ggl     "/usr/local/php/sbin..."   36 minutes ago   Up 36 minutes   0.0.0.0:9000->9000/tcp, :::9000->9000/tcp   php
7ebfbb7e9e5d   mysql:ggl   "/usr/local/mysql/bi..."   36 minutes ago   Up 36 minutes   0.0.0.0:3306->3306/tcp, :::3306->3306/tcp   mysql
3fdc4392345f   nginx:ggl   "/usr/local/nginx/sb..."   36 minutes ago   Up 36 minutes   0.0.0.0:80->80/tcp, :::80->80/tcp           nginx

cd /opt/compose_nginx/
docker-compose ps                    #必须在docker-compose.yml所在目录执行此命令

Name               Command               State                    Ports
-----------------------------------------------------------------------------------------
mysql   /usr/local/mysql/bin/mysqld      Up      0.0.0.0:3306->3306/tcp,:::3306->3306/tcp
nginx   /usr/local/nginx/sbin/ngin ...   Up      0.0.0.0:80->80/tcp,:::80->80/tcp
php     /usr/local/php/sbin/php-fpm -F   Up      0.0.0.0:9000->9000/tcp,:::9000->9000/tcp
相关推荐
武子康34 分钟前
调查研究-183 Apple container:Mac 上用轻量 VM 跑 Linux 容器,Swift 会改写本地容器体验吗?
docker·容器·apple
大树883 天前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai
摇滚侠3 天前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
霸道流氓气质3 天前
领域驱动设计(DDD)在 Spring Boot 微服务中的实践指南
运维·spring boot·微服务
Inhand陈工3 天前
基于台达PLC与映翰通IG502的智慧水产养殖精准投喂与远程运维解决方案
运维·人工智能·物联网·阿里云·信息与通信
Alsn863 天前
等待学习-学习目录:Docker 容器安全攻防
学习·安全·docker
酣大智3 天前
ARP代理--工作原理
运维·网络·arp·arp代理
shushangyun_3 天前
2026年快消品B2B系统推荐:支持终端门店订货、促销政策自动化的工具?
java·运维·网络·数据库·人工智能·spring·自动化
施努卡机器视觉3 天前
SNK施努卡侧滑门锁上滑轮总成自动化装配线,从零件到组件,全流程精密制造方案
运维·自动化·制造
AC赳赳老秦3 天前
用 OpenClaw 搭建服务器故障应急响应系统,自动处理 80% 常见运维故障
android·运维·服务器·python·rxjava·deepseek·openclaw