论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
朋友圈
看朋友圈动态,了解ToB世界。
ToB门户
了解全球最新的ToB事件
博客
Blog
排行榜
Ranklist
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
导读
Guide
相册
Album
记录
Doing
搜索
本版
文章
帖子
ToB圈子
用户
免费入驻
产品入驻
解决方案入驻
公司入驻
案例入驻
登录
·
注册
只需一步,快速开始
账号登录
立即注册
找回密码
用户名
Email
自动登录
找回密码
密码
登录
立即注册
首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
圈子
SAAS
IT评测·应用市场-qidao123.com
»
论坛
›
物联网
›
物联网
›
Docker Compose的使用
Docker Compose的使用
南飓风
论坛元老
|
2025-1-20 19:35:55
|
显示全部楼层
|
阅读模式
楼主
主题
1028
|
帖子
1028
|
积分
3084
文章首发于我的博客:https://blog.liuzijian.com/post/docker-compose.html
Docker Compose是什么
Docker Compose是Docker官方的开源项目,负责实现对Docker容器的快速编排,Docker发起每个容器只运行一项服务,因为容器运行的开销很小,但是同时部署多个应用须要每个容器都单独编写Dockerfile会显得非常复杂,因而Docker官方提供了多容器部署的编排工具Docker Compose
Docker Compose允许用户通过一个单独的配置文件来界说一组相关联的应用容器为一个项目,Docker Compose可以管理多个Docker容器构成的一个应用,只须要界说好一个yaml格式的配置文件docker-compose.xml,写很多多少个容器之间的调用关系,然后只要一个下令就可以实现一键部署和一键启动和关闭这些容器。
Docker Compose文件格式版本有多种,这里以最为主流的3.x为例
Docker Compose安装
先去下载docker-compose的可执行文件,Docker Compose发布在GitHub上面(https://github.com/docker/compose/releases/),我下载的版本是linux64位的v2.30.3,下载地址:
docker-compose-linux-x86_64
安装很简朴,只要将下载下来的可执行文件赋予执行权限,并链接即可,先将下载下来的文件docker-compose-linux-x86_64放到/opt目录下,然后作为可执行文件,并建立软链接
chmod +x ./docker-compose-linux-x86_64
复制代码
ln -s /opt/docker-compose-linux-x86_64 /usr/local/bin/docker-compose
复制代码
之后,就可以在恣意目录执行docker-compose的下令了
Docker Compose文件
一个DockerCompose文件就是一个工程,工程由服务构成,服务就是一个个的应用实例,由一组关联的容器构成一个完整的业务单位就是工程。
文件内包含以下顶级元素:
version docker-compose文件版本,大多用3
name 应用部署的名称
services 服务,下面可以界说多个部署的应用
networks 自界说网络,供services下的应用使用
volumes 卷,应用用到的卷配置
configs 配置
secrets 密钥
每个顶级元素下又有以下常用配置项:
services.$service-name.image 使用的镜像和TAG
services.$service-name.privileged 设置容器权限
services.$service-name.container_name 容器名
services.$service-name.environment 环境变量
services.$service-name.restart 自启动,常见配置:总是always,出错时自启on-failure/on-failure:3
services.$service-name.command 自界说下令行参数
services.$service-name.ports 端口映射
services.$service-name.volumes 数据卷挂载
services.$service-name.depends_on 依赖哪个服务,在哪些服务启动后再启动
services.$service-name.networks 使用的自界说网络
networks.$network-name.driver 自界说网络的类型,不设置的话默认是bridge
networks.$network-name.ipam.config IP地址管理,用于管理网络的IP地址分配,不设置则Docker自动分配
networks.$network-name.ipam.config.subnet 自界说网络的网段,例如192.168.1.0/24
networks.$network-name.ipam.config.gateway 自界说网络的网关,例如192.168.1.1
例:
version: '3'
name: my-demo
services:
app_1:
# 镜像:TAG
image: demo:1.0
# 容器名
container_name: demo
# 提升容器内权限
privileged: true
# 环境变量
environment:
- NAME1=VALUE1
- NAME2=VALUE2
restart: always
command: ["-c nginx.conf"]
# 宿主机端口:容器内端口
ports:
- "80:80"
# 扩展语法设置卷,允许更详细的配置,如设置卷驱动和选项
volumes:
# 绑定挂载,将主机上的一个具体目录或文件直接挂载到容器中
- type: bind
source: /var/lib/data
target: /data
# volume是由Docker管理的存储区域,通常在/var/lib/docker/volumes/下
- type: volume
source: my-data
target: /data
volume:
nocopy: true
subpath: sub
networks:
- my-network
app_2:
image: mysql:8
depends_on:
- app_1
# 绑定挂载,直接将主机路径映射到容器路径
volumes:
#宿主机路径:容器内路径
- /data:/var/data
#只读卷
- /host/path:/container/path:ro
app_3:
# 命名卷,由用户指定名称,Docker 管理其存储位置
volumes:
- my-data2:/var/lib/mysql
app_4:
# 匿名卷,由Docker自动生成,不指定主机路径或命名卷
volumes:
- /var/lib/mysql
#多容器共享卷
app_5:
image: mysql:8
volumes:
- my-data3:/var/lib/mysql
app_6:
image: mysql:8
volumes:
- my-data3:/var/lib/mysql
networks:
my-network:
driver: bridge
ipam:
config:
- subnet: 192.168.1.0/24
gateway: 192.168.1.1
volumes:
my-data:
my-data2:
my-data3:
复制代码
Docker Compose常用下令
在docker-compose.yml文件路径下执行以下下令,如果docker-compose.yml文件的路径不是./或文件名不是默认的docker-compose.yml,你可以使用-f参数来指定文件路径和文件名。这样,DockerCompose会使用你指定的文件来运行下令。
帮助
docker-compose -h
复制代码
上线全部的服务
docker-compose up
docker-compose -f ./compose.yml up
复制代码
上线全部的服务并后台运行
docker-compose up -d
docker-compose -f ./compose.yml up -d
复制代码
上线某一服务
docker-compose up <service>
docker-compose [-f ./compose.yml] up <service>
复制代码
下线并删除容器、网络、数据卷和镜像
docker-compose down
复制代码
停止某一服务
docker-compose stop <service>
复制代码
删除某服务容器
docker-compose rm -f <service>
复制代码
进入容器实例内部
docker-compose exec <service> /bin/bash
复制代码
展示当前docker-compose文件编排过的运行的全部容器
docker-compose ps
复制代码
展示当前docker-compose文件编排过的容器进程
docker-compose top
复制代码
查看容器输出的日记
docker-compose logs <service>
复制代码
检查配置是否有语法错误
docker-compose config
复制代码
检查配置,有题目的才输出
docker-compose -q
复制代码
重启服务
docker-compose restart <service>
复制代码
启动服务
docker-compose start <service>
复制代码
扩容,将服务名为app的应用扩容3份
docker-compose scale <service>×3
复制代码
案例:部署WordPress博客系统
1.编辑compose.yml
name: by_blog
services:
mysql:
privileged: true
image: mysql:8.0
ports:
- "3306:3306"
environment:
- MYSQL_ROOT_PASSWORD=123456
- MYSQL_DATABASE=wordpress
volumes:
- mysql-data:/var/lib/mysql
- /app/myconf:/etc/mysql/conf.d
networks:
- blog-network
restart: always
wordpress:
privileged: true
image: wordpress
ports:
- "8080:80"
restart: always
depends_on:
- mysql
environment:
- WORDPRESS_DB_HOST=mysql
- WORDPRESS_DB_USER=root
- WORDPRESS_DB_PASSWORD=123456
- WORDPRESS_DB_NAME=wordpress
volumes:
- wordpress-data:/var/www/html
networks:
- blog-network
volumes:
mysql-data:
wordpress-data:
networks:
blog-network:
复制代码
2.执行docker-compose下令启动服务
docker-compose -f ./compose.yml up -d
复制代码
下令行输出
[root@localhost opt]# docker-compose -f ./compose.yml up -d
[+] Running 35/24
✔ wordpress 22 layers [⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿] 0B/0B Pulled 66.2s
✔ mysql 11 layers [⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿] 0B/0B Pulled 93.2s
[+] Building 0.0s (0/0)
[+] Running 5/5
✔ Network by_blog_blog-network Created 0.4s
✔ Volume "by_blog_mysql-data" Created 0.0s
✔ Volume "by_blog_wordpress-data" Created 0.0s
✔ Container by_blog-mysql-1 Started 2.6s
✔ Container by_blog-wordpress-1 Started 3.6s
[root@localhost opt]#
复制代码
编排完成,服务乐成启动,可以看到docker-compose先是创建了自界说的网络,然后是创建和挂载数据卷,然后在按次序启动容器。
打开欣赏器,简朴举行初始化的操纵后,WordPress博客系统便进入可用状态了
本帖子中包含更多资源
您需要
登录
才可以下载或查看,没有账号?
立即注册
x
回复
使用道具
举报
0 个回复
倒序浏览
返回列表
快速回复
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
or
立即注册
本版积分规则
发表回复
回帖并转播
回帖后跳转到最后一页
发新帖
回复
南飓风
论坛元老
这个人很懒什么都没写!
楼主热帖
零信任介绍
容斥原理
开源SPL助力JAVA处理公共数据文件(txt ...
使用 Helm 安装 MQTT 服务器-EMQX ...
数理逻辑第1-3章
Ubuntu如何安装Mysql+启用远程连接[完 ...
dotnet 修复在 Linux 上使用 SkiaSharp ...
DOS窗口命令和单表简单查询
Java笔记(13) 简单的Lambda表达式 ...
.gitignore文件配置以及gitee提交报Pus ...
标签云
AI
运维
CIO
存储
服务器
浏览过的版块
DevOps与敏捷开发
Oracle
SQL-Server
网络安全
移动端开发
云原生
前端开发
Mysql
分布式数据库
快速回复
返回顶部
返回列表