docker-compose教程(安装,使用, 快速入门)
DockerCompose容器编排
一 入门
(一) 场景
- 一个应用系统,的启动往往依赖了多个容器(Nginx tomcat redis mysq…),每个容器的启动都有先后顺序,一个一个手动管理很麻烦。
- 往往我们会管理多个服务器,每个服务器上有几十个容器,每个容器由分属于不同的web系统,无法记忆,管理繁琐。(项目环境迁移也麻烦)
(二) 简介
DockerCompose
提供的,站在一个项目
角度,管理和编排一定数量的容器。
Docker Compose 是一个用于定义和运行多容器 Docker 应用程序的工具。它使用 YAML 文件来定义应用程序的服务、网络和卷。使用 Docker Compose,您可以通过在单个文件中定义应用程序的期望状态,然后使用 docker-compose up
命令来启动和停止容器,轻松管理和扩展应用程序。
Docker Compose 的一些关键特性包括:
-
服务定义:您可以在 Docker Compose 文件中定义多个服务,每个服务都有自己的配置,例如镜像、端口、卷、环境变量等。
-
网络连接:Docker Compose 自动为应用程序创建一个网络,允许容器使用它们的服务名称相互通信。
-
卷管理:您可以在 Docker Compose 文件中定义卷,以在容器重新启动之间持久保存数据或在容器之间共享数据。
-
环境变量:Docker Compose 允许您为容器定义环境变量,以便轻松配置和定制应用程序。
-
扩展:使用 Docker Compose,您可以通过更改特定服务的副本数量轻松扩展应用程序。
总体而言,Docker Compose 简化了管理和运行多容器 Docker 应用程序的过程,对开发人员和系统管理员非常有价值。
-
总结
-
- ① 站在项目角度关联多个docker容器
- ② 按照一定的顺序,编排docker容器。
(三) 要素
-
docker-compose.yml
文件 -
- 定义描述一个项目中所有
容器/Service服务
的信息:名字、端口、环境变量、启动顺序、数据卷映射、docker build
- 定义描述一个项目中所有
-
Project 项目
:一个web项目,其中包含多个容器。 -
Service 服务
:一个容器。
二 使用
1. yum安装
1. 安装扩展yum源
yum install -y epel-release
2. 安装docker-compose
yum install -y docker-compose
3. 验证docker-compose
[root@localhost ~]# docker-compose -v
docker-compose version 1.18.0, build 8dd22a9
2. 入门案例
准备一个项目cms相关容器:nginx、redis
(1) 创建目录,作为项目名
注意:空目录,不要放无关紧要其他文件。
(2) 在项目名目录中,创建docker-compose.yml
注意:文件名,固定,不要改。
(3) 编写资源(容器)清单:docker-compose.yml
# 第一步:先写版本
version: '3'
# 第二步:编写所有服务(容器)
services:
# nginx容器
nginx-1: # 容器名字: 项目名_容器名_x,例如:cms_nginx-1_?
image: nginx:1.21 # 使用的镜像:tag
ports: # 映射容器启动端口,相当于docker run -p
- 88:80
# redis容器
redis-1:
image: redis:5
ports:
- 6379:6379
(4) dockercompose管理服务(容器)
注意:必须在docker-compose.yml所在目录执行。
1. 启动
docker-compose up [-d]
2. 关闭
docker-compose down [-v]
3. 重启
docker-compose restart
4. 查看项目下的服务(容器)
docker-compose ps
说明:查看当前这个项目下的所有服务(容器)
(5) 版本参考
三 模板指令
1. 指令详解
(1) image:
? 指定该服务(容器),用到的镜像名:tag
? 类似:docker run 后面的 镜像名:tag
(2) ports:
? 指定服务(容器),映射的端口
? 类似:docker run -p
(3) environment:
? 指定该服务(容器)的环境变量
? 类似:docker run -e MYSQL_ROOT_PASSWORD=xxxx
# 第一步:先写版本
version: '3'
# 第二步:编写所有服务(容器)
services:
mysql-1:
image: mysql:5.7
ports:
- 3306:3306
environment:
- MYSQL_ROOT_PASSWORD=admins
(4) env_file:
? 可以将环境变量的值全部存放在ENV文件中,通过env_file引用这个文件即可。
? 注意:通常放在当前docker-compose.yml 同级或者子目录中,例如:commons/mysql/ENV
。
# 第一步:先写版本
version: '3'
# 第二步:编写所有服务(容器)
services:
mysql-1:
image: mysql:5.7
ports:
- 3306:3306
# environment:
# - MYSQL_ROOT_PASSWORD=admins
env_file:
- ./ENV # 将环境变量写在一个文件中,这里引用即可。通常放在当前docker-compose.yml 同级或者子目录中。
(5) command:
? 可以在启动容器内部启动主进程,替换内部CMD启动命令。
? 类似:docker run … redis:5 redis-server --appendonly yes
# 第一步:先写版本
version: '3'
# 第二步:编写所有服务(容器)
services:
# nginx容器
nginx-1: # 容器名字: 项目名_容器名_x,例如:cms_nginx-1_?
image: nginx:1.21 # 使用的镜像:tag
ports: # 映射容器启动端口,相当于docker run -p
- 88:80
# redis容器
redis-1:
image: redis:5
ports:
- 6379:6379
command: redis-server --appendonly yes
(6) depends_on
? 表示服务启动,依赖了哪个服务,用来指定启动的先后顺序的。
? 注意:以后实际项目中,有数据的服务(mysql redis)先启动,没有数据例如(nginx tomcat)后启动。
(7) restart
? 指定重启策略,restart:always,默认容器随着docker引擎的启动而启动。
(8) volumes
? 指定服务的数据卷映射。
? 类似:docker run -v -v -v
? 注意:docker-compose指定的数据卷名字,不会自动创建。
# 第一步:先写版本
version: '3'
# 第二步:编写所有服务(容器)
services:
# redis容器
redis-1:
image: redis:5
ports:
- 6379:6379
command: redis-server --appendonly yes
volumes:
- redis_data:/data
# 数据卷
volumes:
redis_data: # 作用:创建数据卷,相当于docker volume create 作用。
(9) build
? 作用指定该服务(容器)对应的镜像,通过dockerfile来创建。自动执行创建过程。
? 类似:构建镜像时候使用docker build -t 镜像名:tag -f docker-file文件名
.
命令。
? 注意:docker-compose使用外部dockerfile,要放在当前目录下,或者子目录下。
# 第一步:先写版本
version: '3'
# 第二步:编写所有服务(容器)
services:
app-server:
build: # build替代image.
context: . #指定build的上下文,相当于docker build结尾的.
dockerfile: dockerfile-app #指定dockerfile文件名,相当docker build -f
ports:
- 8080:8080
2. 模板示例
# 第一步:先写版本
version: '3'
# 第二步:编写所有服务(容器)
services:
# nginx容器
nginx-1: # 容器名字: 项目名_容器名_x,例如:cms_nginx-1_?
image: nginx:1.21 # 使用的镜像:tag
ports: # 映射容器启动端口,相当于docker run -p
- 88:80
depends_on:
- redis-1
restart: always
# redis容器
redis-1:
image: redis:5
ports:
- 6379:6379
command: redis-server --appendonly yes
volumes:
- redis_data:/data
mysql-1:
image: mysql:5.7
ports:
- 3306:3306
# environment:
# - MYSQL_ROOT_PASSWORD=admins
env_file:
- ./ENV # 将环境变量写在一个文件中,这里引用即可。通常放在当前docker-compose.yml 同级或者子目录中。
app-server:
build: # build替代image.
context: . #指定build的上下文,相当于docker build结尾的.
dockerfile: dockerfile-app #指定dockerfile文件名,相当docker build -f
ports:
- 8080:8080
# 数据卷
volumes:
redis_data: # 作用:创建数据卷,相当于docker volume create 作用。
四 DockerCompose命令
1. 基本语法
- 命令格式
docker-compose [选项] [命令] --help
- 帮助命令
docker-compose [命令] --help
2. 选项
- 选项
-f, --file FILE 指定使用的 Compose 模板文件,默认为 docker-compose.yml,可以多次指定。
--verbose 输出更多调试信息。
- 案例
1. 指定docker-compose.yml文件名
docker-compose -f docker-compose.yml文件名 up
# 说明:不执行-f,则默认使用docker-compose.yml这个名字
2. 指定项目名
docker-compose -p 自定义项目名 up
# 说明:如果不指定,则使用当前所在目录名作为项目名
3. 启动输出调试信息
docker-compose --verbose up
3. up命令
- 作用
- 该命令十分强大,它将尝试自动完成包括构建镜像,(重新)创建服务,启动服务,并关联服务相关容器的一系列操作。
- 注意:该命令严格叫做
上线部署
- 命令选项
1. 启动指定服务
docker-compose up [服务名]
2. 在后台运行服务容器,生产环境下使用。
docker-compose up -d
4. down命令
- 作用
- 对整个项目的容器进行停止, 并删除网络
- 注意:严格叫做
下线
- ① 关闭容器
- ② 删除容器
- ③ 删除网络
- ④ 删除数据卷 (注意:重要数据要提前备份)
- 命令
1. 全局停止
docker-compose down -v
5. exec命令
-
作用
- 进入某个服务容器内部
-
命令
docker-compose exec mysql-1 bash
6. ps命令
-
作用
- 查看项目所有的容器
-
命令
docker-compose ps
-
案例
1. 查看所有服务
[root@localhost his]# docker-compose ps
Name Command State Ports
------------------------------------------------------------------------------------------------------------
his_mysql-1_1 docker-entrypoint.sh mysqld Up 0.0.0.0:3307->3306/tcp,:::3307->3306/tcp, 33060/tcp
his_nginx-1_1 /docker-entrypoint.sh ngin ... Up 0.0.0.0:81->80/tcp,:::81->80/tcp
his_redis-1_1 docker-entrypoint.sh redis ... Up 0.0.0.0:6379->6379/tcp,:::6379->6379/tcp
2. 查看所有服务id
[root@localhost his]# docker-compose ps -q
ab57c820a6f62925e6204a25827402670a729df6a56669e43b7582ec7a330176
a978eab0a906f9a36ed5890fff0c880bf3c70e7e432b5d7c57dfe238b754f270
07d671c6292f48d8a6af1d187477dbe9bd0274b81bd961409aa20d04148cfbcd
7. restart命令
-
作用
- 重启项目中的服务
-
命令
docker-compose restart
8. start|stop命令
-
作用
- stop 停止容器
- start 启动容器
-
- 停止某个服务
-
命令
docker-compose start 服务id
docker-compose stop 服务id
9. rm命令
-
作用
- 删除某个已经停止的服务
-
命令
docker-compose rm 服务id
10. top命令
-
作用
-
- 查看某个服务容器内部进程
-
命令
docker-compose top [服务id]
-
案例
1. 查看当前项目下所有容器的进程
[root@localhost his]# docker-compose top
his_mysql-1_1
UID PID PPID C STIME TTY TIME CMD
-------------------------------------------------------------
polkitd 91820 91781 0 08:45 ? 00:00:00 mysqld
his_nginx-1_1
UID PID PPID C STIME TTY TIME CMD
----------------------------------------------------------------------------------------------
root 91734 91687 0 08:45 ? 00:00:00 nginx: master process nginx -g daemon off;
101 91889 91734 0 08:45 ? 00:00:00 nginx: worker process
101 91890 91734 0 08:45 ? 00:00:00 nginx: worker process
his_redis-1_1
UID PID PPID C STIME TTY TIME CMD
--------------------------------------------------------------------------
polkitd 91741 91706 0 08:45 ? 00:00:00 redis-server *:6379
2. 查看某个服务容器下的进程
root@localhost his]# docker-compose top mysql-1
his_mysql-1_1
UID PID PPID C STIME TTY TIME CMD
-------------------------------------------------------------
polkitd 91820 91781 4 08:45 ? 00:00:00 mysqld
11. logs命令
-
作用
-
- 查看服务的日志
-
命令
docker-compose logs [服务ID]
-
案例
1. 查看全局日志 docker-compose logs 2. 查看指定服务日志 docker-compose logs mysql-1
12. pause|unpause暂停和恢复
-
作用
-
- 暂停服务和回复
-
命令
dockerc-compose pause [服务id]
docker-compose unpause [服务id]
-
案例
1. 全局暂停恢复 [root@localhost his]# docker-compose pause Pausing his_nginx-1_1 ... done Pausing his_redis-1_1 ... done Pausing his_mysql-1_1 ... done [root@localhost his]# docker-compose ps Name Command State Ports ------------------------------------------------------------------------------------------------------------- his_mysql-1_1 docker-entrypoint.sh mysqld Paused 0.0.0.0:3307->3306/tcp,:::3307->3306/tcp, 33060/tcp his_nginx-1_1 /docker-entrypoint.sh ngin ... Paused 0.0.0.0:81->80/tcp,:::81->80/tcp his_redis-1_1 docker-entrypoint.sh redis ... Paused 0.0.0.0:6379->6379/tcp,:::6379->6379/tcp [root@localhost his]# docker-compose unpause Unpausing his_mysql-1_1 ... done Unpausing his_redis-1_1 ... done Unpausing his_nginx-1_1 ... done [root@localhost his]# docker-compose ps Name Command State Ports ------------------------------------------------------------------------------------------------------------ his_mysql-1_1 docker-entrypoint.sh mysqld Up 0.0.0.0:3307->3306/tcp,:::3307->3306/tcp, 33060/tcp his_nginx-1_1 /docker-entrypoint.sh ngin ... Up 0.0.0.0:81->80/tcp,:::81->80/tcp his_redis-1_1 docker-entrypoint.sh redis ... Up 0.0.0.0:6379->6379/tcp,:::6379->6379/tcp 2. 指定服务暂停和恢复 [root@localhost his]# docker-compose pause mysql-1 Pausing his_mysql-1_1 ... done [root@localhost his]# docker-compose unpause mysql-1 Unpausing his_mysql-1_1 ... done
(八) compose资源库
四 案例
部署一个web项目:包含nginx、springboot的jar、mysql、redis等。
资源清单
version: '3'
services:
nginx-1:
image: nginx:1.21
ports:
- 80:80
depends_on:
- app-server
app-server:
build:
context: .
dockerfile: dockerfile-app
ports:
- 8989:8080
depends_on:
- mysql-1
mysql-1:
image: mysql:5.7
ports:
- 3307:3306
environment:
- MYSQL_ROOT_PASSWORD=admins
- MYSQL_DATABASE=cms
volumes:
- mysql_data:/var/lib/mysql
- mysql_conf:/etc/mysql/conf.d
command:
--character-set-server=utf8mb4
--collation-server=utf8mb4_general_ci
volumes:
mysql_conf:
mysql_data:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!