【Docker】使用Docker Compose部署项目

目录

前言

使用


前言

如果你部署项目需要很多个容器, 并且还是在手动一个一个启动的话来试试Docker Compose, 只需要写好Docker Compose文件运行命令就能帮你一次性全启动, 对微服务很友好啊~

使用

运行以下命令查看是否有版本号, 确保你已经安装了Docker Compose

docker-compose -version

 如果没有安装的话可运行以下命令进行安装

sudo curl -L "https://github.com/docker/compose/releases/download/v2.2.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

有版本号要求的更换为链接当中的版本即可

接下来创建一个docker-compose.yml文件, 书写如下代码(仅作为参考):

version: '3.8' # compose文件的版本, 版本不一样语法可能也有差异

services:
  app:
    build: .      # 构建当前目录下的dockerfile
    ports:
      - "6898:8080"   # 容器的端口映射
    container_name: app_container  # 容器名
    volumes:
      - ./web:/usr/local/web   # 当前目录下的项目挂载到容器内的web目录(前提是容器内有该目录, 因此可以在dockerfile里加一个创建该目录的命令)
      - ./localhost:/usr/local/tomcat/apache-tomcat-9.0.73/conf/Catalina/localhost
    depends_on:
      - db   # 启动该服务依赖于db服务, 添加该参数后可以做到先启动db服务再启动当前的服务

  db:
    image: mysql:5.7.41  # 根据mysql镜像创建容器
    ports:
      - "3396:3306"     # 容器的端口映射
    container_name: mysql_container  # 容器名
    environment:
      MYSQL_ROOT_PASSWORD: root  # 设置root用户的密码
      MYSQL_DATABASE: test  # 新建库
    volumes:
      - ./initdb:/docker-entrypoint-initdb.d  # 将当前目录下的initdb文件夹挂载到docker-entrypoint-initdb.d 容器启动时自动运行initdb文件夹下的文件

 compose文件的版本要注意看能否在你的docker版本上使用:

【Docker】使用Docker Compose部署项目_第1张图片

 

  更多参数可以参考:

  • ​​​​​​​Compose file version 3 reference
  • 命令说明 - Docker — 从入门到实践

有一点需要说明, 我在db服务中添加了一个数据卷./initdb:/docker-entrypoint-initdb.d, 我在注释中已经说明了它的作用, 当它运行容器后会自动执行initdb文件夹下的*.sql脚本等, 比如我正好需要在创建的同时添加一些初始化数据, 那么只需要把sql脚本放入initdb文件夹挂载即可, 这些初始化操作会默认在MYSQL_DATABASE指定的库当中进行, 下面是mysql官方镜像的说明

【Docker】使用Docker Compose部署项目_第2张图片

 mysql官方镜像地址:Docker

 我们在使用Docker Compose启动容器后默认会为里面的容器建一条可以相互访问的网络, 假如我要app服务访问db服务的话只需要这么写:http://db:端口号/....../......

 【Docker】使用Docker Compose部署项目_第3张图片

我的目录: 

【Docker】使用Docker Compose部署项目_第4张图片

 接下来只需把相关东西上传到服务器, 进入docker-compose.yml存在的目录, 执行命令就好啦

docker-compose up -d

如果想在前台启动调式的话去掉-d参数即可


点赞,你的认可是我创作的动力 !
收藏,你的青睐是我努力的方向!
✏️评论,你的意见是我进步的财富!  

你可能感兴趣的:(docker,运维,容器)