docker 和 docker-compose 对比
1、Docker进行项目部署存在的问题
2、假设未编排的容器启动顺序
- 缺陷:容器间,不能使用容器名称访问
什么是Docker Compose
compose项目是Docker官方的开源项目,负责实现对Docker容器集群的快速编排
快速编排:站在项目角度讲一组相关联容器整合在一起,对这组容器按照指定顺序启动。compose定位于多个docker容器管理
理解
docker-compose.yml 就是一个compose应用(project)
应用(project)就是docker-compose.yml
Project:有一组关联的应用容器(服务)组成一个完整的业务单元,在docker-compose.yml文件中定义
Service:一个项目中某一个容器,称之为服务
安装
- 注意:只有Linux平台上安装Docker时,没有安装docker-compose,Windows、MacOS安装Docker时自动安装docker-compose
1、在线安装
# 下载文件,{1.16.1}为变量,根据自己的需求下载
sudo curl -L https://github.com/docker/compose/releases/download/{1.16.1}/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
# 修改权限
chmod +x /usr/local/bin/docker-compose2、离线安装
# a、下载docker-compose脚本
# b、放入/usr/local/bin目录
# c、修改权限命令
- 指定这个命令在docker-compose.yml配置文件目录
docker-compose up # 启动
docker-compose down # 停止docker-compose 命令 项目|项目中某个服务 注意:没有特殊说明,默认都是对项目操作
语法:docker-compose -f docker-compose.yml 命令 [选项] [服务ID]
- up -d [服务ID]
docker-compose up 启动整个项目
docker-compose up [服务ID] 对当前docker-compose中对应的服务ID的容器操作
- down
docker-compose down 停止整个项目
docker-compose down [服务ID]
注意:docker-compose down 关闭所有容器,并溢出网络
- exec
docker-compose exec [服务ID] bash # 进入指定容器 - ps
docker-compose ps # 列出所有运行的服务,-q 只显示ID - restart
docker-compose restart 重启整个项目
docker-compose restart -t 20 [服务ID] 20s后重启指定服务容器
rm
docker-compose rm -f(强制删除) [服务ID] -v(删除容器锁挂载的数据卷)不指定服务ID时,删除所有停止的服务- 注意:-v谨慎使用
- top
docker-compose top [服务ID] 查看整个项目中所有服务容器内运行进程或指定服务ID的容器的进程 - pause暂停 和 unpause回复
docker-compose (pause|unpause) [服务ID] 暂停或回复所有服务或指定服务ID的服务 - logs
docker-compose logs -f(实时)[服务ID] 查看日志
示例
docker-compose.yaml(引用已有镜像的)
# 代表使用docker-compose项目的版本号
# https://docs.docker.com/compose/compose-file/compose-file-v3/
version: "3"
services:
app:
#container_name:web-app1 # 代表给容器指定一个名称 类似于docker run --name 参数
image: app:1.0
ports:
- 8080:8080
redis:
image: redis:5.0.21
ports:
- 6379:6379
mysql:
image: mysql:5.7.21
ports:
- 3306:3306
environment: # 代表给当前容器指定环境,类似于docker run -e MYSQL_ROOT_PASSWORD=root
- "MYSQL_ROOT_PASSWORD=root"
volumes:
#- /home/mysql/data:/var/lib/mysql # 绝对路径
- mysqlData:/var/lib/mysql # 相对路径,但是需要先申明
volumes:
mysqlData:docker-compose.yaml(根据Dockerfile构建)
# 代表使用docker-compose项目的版本号
# https://docs.docker.com/compose/compose-file/compose-file-v3/
version: "3"
services:
apps:
# build: ./ # 指定Dockerfile上下文目录,一切都是默认值
build:
context: ./ # 指定Dockerfile上下文目录
dockerfile: Dockerfile # 指定Dockerfile文件名称
ports:
- 8085:8085
# command:["app-2.0.jar"] # 用来覆盖容器启动后默认指令,类似于docker run image 覆盖的指令
depends_on:
- mysql
- redis
networks:
- appNetwork
redis:
image: redis:5.0.21
ports:
- 6379:6379
networks:
- appNetwork
mysql:
image: mysql:5.7.21
ports:
- 3306:3306
#environment: # 代表给当前容器指定环境,类似于docker run -e MYSQL_ROOT_PASSWORD=root
#MYSQL_ROOT_PASSWORD: root
env_file:
- ./common.env
- ./config.env
volumes:
#- /home/mysql/data:/var/lib/mysql # 绝对路径
- mysqlData:/var/lib/mysql # 相对路径,但是需要先申明
networks:
- appNetwork
# 申明存储卷
volumes:
mysqlData:
# 声明网桥
networks:
appNetwork:common.env 文件
MYSQL_ROOT_PASSWORD: root自定义build,而不是应用已有镜像
docker-compose.yml中支持模板命令
- build 通过docker-compose在启动容器之前根据Dockerfile构建镜像,然后根据构建镜像启动容器
- command 覆盖容器启动后默认执行的命令
- container_name 指定docker-compose启动容器名称,(注意:不推荐指定容器名称)
depends_on 解决容器的依赖,启动先后的问题
- 注意:当前服务不会等待被依赖的服务【完全启动】之后才启动
- environment 用来给容器启动指定环境变量,相当于docker run -e
- env_file 用来给容器指定环境变量文件
- expose 用来指定构建镜像过程中容器暴露的端口号
- image 用来指定启动容器使用的镜像是谁,相当于docker run image(镜像)
- network 用来指定启动的容器使用的网桥,相当于docker run --network
- ports 用来指定宿主机和容器之间的端口映射,相当于docker run -p
- volumes 用来指定宿主机目录和容器中目录映射,相当于docker run -v
- restart 用来指定docker容器(服务)总是运行,相当于docker run --restart=always
评论 (0)