一、什么是 Docker Compose
Docker Compose 是一个用于定义和运行多容器 Docker 应用程序的工具。
作用:
通过一个名为 docker-compose.yml(或 compose.yaml)的配置文件,可以:
- 用代码描述多个服务(如 Web 服务器、数据库、缓存等);
- 定义它们之间的依赖关系、网络、卷(数据持久化)等;
- 用一条命令(如 docker compose up)一键启动或停止整个应用栈。
注意:从 Docker Desktop 较新版本(特别是 v2.0 以后),docker-compose 功能被集成进 docker 命令,作为子命令使用。
这种形式称为 Compose V2,它是一个插件,语法几乎完全兼容,但命令格式略有不同。
场景 | 写法
旧版命令 | docker-compose
新版(V2)| 命令 docker compose
通用名称/文档中 | Docker Compose
一般来说,一个完整的项目就对应一个DockerCompose 文件-
定义容器之后,还需要去描述关于容器的一些参数信息。比如端口,内存大小等等。
前提:需要描述清楚容器信息。它才能够去帮助我们部署容器。
二、服务器如何安装配置 Docker Compose
查看安装信息-
docker compose version
如果没有信息,则单独安装,安装命令为:
sudo yum install -y docker-compose-plugin
三、创建 docker-compose.yml 文件
建议名称最好是固定。
然后配置内容,示例如下-- version: '3.8' # 明确指定版本,避免兼容性问题<br><br>services:<br> mysql: # 服务名称<br> image: mysql:5.7 # 镜像名称<br> container_name: mysql # 容器名称<br> ports: # 宿主机:容器的映射端口<br> - "43157:3306"<br> environment: # 环境配置<br> TZ: Asia/Shanghai # 时区<br> MYSQL_ROOT_PASSWORD: 123456 # 数据库密码<br> volumes: # 挂载的路径和文件<br> - "/opt/u01/exam/mysql/my.cnf:/etc/mysql/my.cnf"<br> - "/opt/u01/exam/mysql/logs:/var/log/mysql"<br> - "/opt/u01/exam/mysql/data:/var/lib/mysql"<br> networks: # 加入的docker网络<br> - exam-net<br> restart: unless-stopped # 重启策略<br> redis:<br> image: redis:5.0.9<br> container_name: redis<br> ports:<br> - "6379:6379"<br> environment:<br> TZ: Asia/Shanghai<br> volumes:<br> - "/opt/u01/exam/redis/redis.conf:/usr/local/etc/redis/redis.conf"<br> - "/opt/u01/exam/redis/data:/data"<br> command: ["redis-server", "/usr/local/etc/redis/redis.conf"]<br> restart: unless-stopped<br> networks:<br> - exam-net<br> web:<br> build:<br> context: ./java # 注意路径<br> dockerfile: Dockerfile # 注意路径<br> image: my-web:latest # 指定固定镜像名<br> container_name: web<br> ports:<br> - "8080:8080"<br> environment:<br> TZ: Asia/Shanghai<br> volumes:<br> - "/opt/u01/exam/java/logs:/app/logs"<br> networks:<br> - exam-net<br> depends_on:<br> - mysql<br> - redis<br> restart: unless-stopped # 重启策略<br> user: "1000:1000" # 显式指定 UID:GID-解决权限问题<br> nginx:<br> image: nginx:1.24.0<br> container_name: nginx<br> ports:<br> - "443:443"<br> volumes:<br> - "/opt/u01/exam/nginx/html:/usr/share/nginx/html" # 挂载静态文件目录<br> - "/opt/u01/exam/nginx/log:/var/log/nginx" # 挂载日志目录<br> - "/opt/u01/exam/nginx/sslkey:/etc/nginx/ssl:ro" # 挂载证书目录(只读) 你的 SSL 证书和私钥 不需要被容器修改<br> - "/opt/u01/exam/nginx/nginx.conf:/etc/nginx/nginx.conf" # 挂载主配置文件<br> - "/opt/u01/exam/nginx/conf.d:/etc/nginx/conf.d" # 挂载其他配置文件<br> logging:<br> driver: "json-file" # 明确指定使用 json-file 驱动<br> options:<br> max-size: "100m" # 单个日志文件最大 100MB<br> max-file: "30" # 最多保留 3 个日志文件(包括当前正在写入的)<br> tag: "{{.Name}}/{{.ID}}" # 日志标签,方便识别<br> networks:<br> - exam-net<br> depends_on:<br> - web<br> restart: unless-stopped # 重启策略<br>networks: # docker-网络设置<br> exam-net:<br> name: exam-network
复制代码
说明:上面的配置中,会先创建网络,然后在启动各个容器服务,启动容器之后,会自动添加到docker创建的网络中。
同一台服务器上,各个服务之间就可以直接使用 容器的名称来相互访问。
以mysql配置为例,以下为详细的配置讲解-- mysql: # 服务名称<br> image: mysql:5.7 # 镜像名称<br> container_name: mysql # 容器名称<br> ports: # 宿主机:容器的映射端口<br> - "43157:3306"<br> environment: # 环境配置<br> TZ: Asia/Shanghai # 时区<br> MYSQL_ROOT_PASSWORD: 123456 # 数据库密码<br> volumes: # 挂载的路径和文件<br> - "/opt/u01/exam/mysql/my.cnf:/etc/mysql/my.cnf"<br> - "/opt/u01/exam/mysql/logs:/var/log/mysql"<br> - "/opt/u01/exam/mysql/data:/var/lib/mysql"<br> networks: # 加入的网络<br> - exam-net<br> restart: unless-stopped # 重启策略
复制代码
四、停止、启动服务常用命令
docker compose up -d --build
命令解释:docker compose v2 版本命令使用docker compose ;
up 表示启动所有服务;
-d 表示在后台启动服务,即使退出当前窗口,服务还会继续运行。
--build 表示我在启动容器时,需要构建镜像,这一步不是必须的,有就添加,没有就不添加。
注意事项:只能在docker-compose.yml所在的同一级目录下,才能够执行docker compose命令
停止所有容器服务的命令为:
docker compose down
个人服务器路径如下
exam/
-docker-compose.yml
-java(目录)
-mysql(目录)
-nginx(目录)
-redis(目录)
查看所有已经启动的容器信息:docker compose ps
查看某个容器日志的命令
# 查看所有服务的日志
docker compose logs
# 查看某个特定服务的日志(例如 web)
docker compose logs web
单独重启某一个容器-
docker compose restart 容器名
docker compose restart nginx
实时跟踪某个服务的日志(类似 tail -f)
docker compose logs -f
docker compose logs -f nginx
基础命令-
查看状态与日志-
管理单个服务-
构建与更新-
其他实用命令-
IT技术学习-优先推荐使用千问-专业,就是好用!
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |
|
|
|
|
|
相关推荐
|
|
|