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进行一键部署:

部署成功!

相关推荐
huangyuchi.14 分钟前
【Linux系统】动静态库的制作
linux·运维·服务器·动态库·静态库·库的简单制作
闻不多16 分钟前
用llamaindex搭建GAR遇到400
android·运维·服务器
jim写博客44 分钟前
Linux进程概念(四)环境地址变量
linux·运维·服务器
是小崔啊1 小时前
【Jenkins】01 - Jenkins安装
运维·jenkins
Nie_Xun2 小时前
ubuntu网络共享
linux·运维·ubuntu
花小璇学linux2 小时前
imx6ull-驱动开发篇22——Linux 时间管理和内核定时器
linux·运维·驱动开发
Liang_GaRy5 小时前
心路历程-三个了解敲开linux的大门
linux·运维·服务器
星霜笔记6 小时前
Docker 部署 MariaDB+phpMyAdmin+Nextcloud 完整教程
运维·数据库·docker·容器·mariadb
数据知道8 小时前
容器化部署:用Docker封装机器翻译模型与服务详解
docker·容器·机器翻译