目录
什么是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
[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 |
常用命令
字段 | 描述 |
---|---|
build | 重新构建服务 |
ps | 列出容器 |
up | 创建和启动容器 |
exec | 在容器里面执行命令 |
scale | 指定一个服务容器启动数量 |
top | 显示容器进程 |
logs | 查看容器输出 |
down | 删除容器、网络、数据卷和镜像 |
stop/start/restart | 停止/启动/重启服务 |
运行
前台运行
docker-compose up
后台运行
docker-compose up -d
重新构建运行
docker-compose up --build -d
关闭
关闭指定容器
docker-compose stop <容器名称>
# 示例:
docker-compose stop nginx
全部关闭
docker-compose stop
启动
启动指定容器
docker-compose start <容器名称>
# 示例:
docker-compose start nginx
全部启动
docker-compose start
重启
重启指定容器
docker-compose restart <容器名称>
# 示例:
docker-compose restart nginx
全部重启
docker-compose restart
删除
docker-compose down
Docker Compose示例
[root@bogon ~]# mkdir demo
[root@bogon ~]# cd demo/
[root@bogon demo]# mkdir nginx
[root@bogon demo]# wget -P nginx/ http://nginx.org/download/nginx-1.15.2.tar.gz
[root@bogon demo]# cat nginx/Dockerfile
FROM centos:7.6.1810
RUN yum -y install gcc make pcre-devel zlib-devel tar zlib
ADD nginx-1.15.2.tar.gz /usr/src/
RUN cd /usr/src/nginx-1.15.2 \
&& mkdir /usr/local/nginx \
&& ./configure --prefix=/usr/local/nginx && make && make install \
&& ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/
RUN rm -rf /usr/src/nginx-1.15.2
EXPOSE 80
EXPOSE 443
CMD ["nginx","-g","daemon off;"]
[root@bogon demo]# mkdir mysql
[root@bogon demo]# cat mysql/Dockerfile
# 指定基础镜像
FROM hub.c.163.com/library/mysql:5.7
# 修改编码方式
RUN echo "character-set-server=utf8" >> /etc/mysql/mysql.conf.d/mysqld.cnf
RUN service mysql restart
EXPOSE 3306
[root@bogon demo]# echo 'MYSQL_ROOT_PASSWORD=root' > mysql/mysql.env
[root@bogon demo]# cat docker-compose.yaml
# 指定本 yml 依从的 compose 哪个版本制定的
version: "3"
# 定义服务,此处定义了两个服务一个nginx一个redis
services:
nginx:
# 指定为构建镜像上下文路径
## 我这里在docker-compose.yml文件的上一级目录有一个nginx目录,nginx目录下有准备好的dockerfile所以这里直接指定../nginx
build: ./nginx
# 启动的时候先启动redis和mysql
depends_on:
- redis
- mysql
# 指定端口号
ports:
- "80:80"
redis:
# 该 redis 服务使用 Docker Hub 的公共 Redis 映像
image: "redis:alpine"
ports:
- "6379:6379"
mysql:
# 指定为构建镜像上下文路径
build:
# 指定目录
context: ./mysql
# 指定dockerfile文件名,一般适用于dockerfile的文件名不叫Dockerfile
dockerfile: Dockerfile
# 从文件添加环境变量
env_file:
- ./mysql/mysql.env
ports:
- "3306:3306"
# 通过docker-compose运行
[root@bogon demo]# docker-compose up –d
# 查看容器运行情况
[root@bogon demo]# docker-compose ps
Name Command State Ports
-------------------------------------------------------------------------------------
demo_mysql_1 docker-entrypoint.sh mysqld Up 0.0.0.0:3306->3306/tcp,:::330
6->3306/tcp
demo_nginx_1 nginx -g daemon off; Up 443/tcp, 0.0.0.0:80->80/tcp,:
::80->80/tcp
demo_redis_1 docker-entrypoint.sh redis ... Up 0.0.0.0:6379->6379/tcp,:::637
9->6379/tcp