Docker-14.项目部署-DockerCompose

一.DockerCompose

大家可以看到,我们部署一个简单的java项目,其中包含3个容器:

MySQL

Nginx

Java项目

而稍微复杂的项目,其中还会有各种各样的其它中间件,需要部署的东西远不止3个。如果还像之前那样手动的逐一部署,就太麻烦了。而且整个项目的部署没有体现出项目的整体性,不方便运维。

而Docker Compose就可以帮助我们实现多个相互关联的Docker容器的快速部署。它允许用户通过一个单独的 docker-compose.yml 模板文件(YAML 格式)来定义一组相关联的应用容器。

docker-compose.yml文件的基本语法可以参考官方文档:

https://docs.docker.com/compose/compose-file/compose-file-v3/

docker-compose文件中可以定义多个相互关联的应用容器,每一个应用容器被称为一个服务(service)。由于service就是在定义某个应用的运行时参数,因此与docker run参数非常相似。

举例来说,用docker run部署MySQL的命令如下:

复制代码
docker run -d \
  --name mysql \
  -p 3306:3306 \
  -e TZ=Asia/Shanghai \
  -e MYSQL_ROOT_PASSWORD=123 \
  -v ./mysql/data:/var/lib/mysql \
  -v ./mysql/conf:/etc/mysql/conf.d \
  -v ./mysql/init:/docker-entrypoint-initdb.d \
  --network hmall
  mysql

如果用docker-compose.yml文件来定义,就是这样:

复制代码
version: "3.8"

services:
  mysql:
    image: mysql
    container_name: mysql
    ports:
      - "3306:3306"
    environment:
      TZ: Asia/Shanghai
      MYSQL_ROOT_PASSWORD: 123
    volumes:
      - "./mysql/conf:/etc/mysql/conf.d"
      - "./mysql/data:/var/lib/mysql"
    networks:
      - new
networks:
  new:
    name: hmall

version: '3.8"是docker compose的语法版本号,containerA是服务名(一个服务就代表了一个镜像),其中包含了镜像,容器名,端口信息等。

对比如下:

dockerCompose和docker run描述的信息基本是一样的,只是语法不一样。

下面是一个dockerCompose的命令示例:

复制代码
version: "3.8"

services:
  mysql:
    image: mysql
    container_name: mysql
    ports:
      - "3306:3306"
    environment:
      TZ: Asia/Shanghai
      MYSQL_ROOT_PASSWORD: 123
    volumes:
      - "./mysql/conf:/etc/mysql/conf.d"
      - "./mysql/data:/var/lib/mysql"
      - "./mysql/init:/docker-entrypoint-initdb.d"
    networks:
      - hm-net
  hmall:
    build: 
      context: .
      dockerfile: Dockerfile
    container_name: hmall
    ports:
      - "8080:8080"
    networks:
      - hm-net
    depends_on:
      - mysql
  nginx:
    image: nginx
    container_name: nginx
    ports:
      - "18080:18080"
      - "18081:18081"
    volumes:
      - "./nginx/nginx.conf:/etc/nginx/nginx.conf"
      - "./nginx/html:/usr/share/nginx/html"
    depends_on:
      - hmall
    networks:
      - hm-net
networks:
  hm-net:
    name: hmall

在构建hmall容器时,由于我们是通过jar包部署的,因此我们先要通过build构建镜像,然后再来生成容器。这里直接使用

复制代码
 hmall:
    build: 
      context: .

就能完成容器的创建。

在构建网络时,我们只需要指定一个网络标签,并在网络标签下指定要构建的网络名称,dockerCompose就会帮助我们自动构建网络,并将其他指定该网络标签的容器自动配置到这一网络下。

复制代码
networks:
  hm-net:
    name: hmall

hm-net就是网络标签。网络名为hmall。

那么如何利用dockerCompose文件完成一键部署呢?

使用docker compose命令即可。

-f:指定路径,如果在当前目录下可以不指定,省略掉。

-p:指定项目名称,可以不指定,默认就叫root。

up:一键启动,创建并启动所有容器。

down:停止并移除所有容器。

ps:列出所有启动容器。

logs:查看指定容器日志。

stop:停止某个容器。

start:启动某个容器。

restart:重启某个容器。

top:查看运行进程。

exec:进入容器内指定命令。

接下来我们使用docker compose进行一键部署,由于在docker compose文件中我们使用的都是相对路径,因此我们要保证docker compose文件和mysql文件夹、nginx文件夹等在同一目录下。

都在同一目录下,满足

使用docker compose up -d进行一键部署:

部署成功!

相关推荐
后台模板学习9 小时前
GitHub Actions 与 Jenkins 在日志监
运维·github·jenkins
whyutianict_vv9 小时前
零基础转 AI 运维:投入清单、技术路线与核对表
linux·运维·人工智能·ai
杨云龙UP10 小时前
Oracle 同义词(SYNONYM)详解及 Toad for Oracle SQL 智能补全配置实战
运维·数据库·sql·oracle·同义词·toad·toad for oracle
晨陌y10 小时前
Flare自托管导航页教程:Docker部署、多用户、API与公网访问
运维·docker·容器
Android系统攻城狮10 小时前
Linux FFmpeg深度解析之avcodec_parameters_copy调用流程与实战(二十五)
linux·运维·服务器·ffmpeg·音视频·车载音频
cakeism82510 小时前
2026 中国企业 DevOps 平台选型:从工具链到一体化平台的决策框架
运维·servlet·devops
Z21-X10 小时前
云原生运维实战笔记:华为云存储类服务全景解析——EVS、OBS、SFS与CBR深度实践
运维·笔记·学习·云原生·华为云
Decay__11 小时前
17_MySQL 监控体系构建 —— mysqld_exporter + Prometheus + Grafana 全栈实战
运维·数据库·sql·mysql·架构
天远数科11 小时前
零信任架构实战:基于天远全能家政风险报告构建自动化即时到家保洁与短工抢单安全核验网关
运维·人工智能·架构·自动化
源图客11 小时前
解决CentOS操作系统网络异常问题
linux·运维·centos