docker-compose离线部署JAVA项目教程

docker-compose脚本一键部署JAVA项目


前言

本文docker不做过多基础讲解,需要熟悉docker基本命令掌握基础知识,提供docke-composer一键部署的思路

简介

docker:是一个供开发和运维人员开发、测试、部署和运行应用程序的容器平台(docker是一个容器平台)

docker-compose:是一个用于创建和管理多容器应用程序的工具

docker-compose的优势

  1. 统一管理和部署:可以将多个容器组织成一个整体,方便管理和部署。
  2. 快速配置和部署:可以通过Docker镜像快速构建和部署容器。
  3. 扩展能力:可以方便地扩展和缩放容器,以满足不同负载的需求。
  4. 版本控制:可以将Docker Compose配置文件纳入版本控制系统,方便管理程序的配置和版本。

docker-compose常用命令

Compose常用命令
docker-compose -h                           # 查看帮助
docker-compose up                           # 启动所有docker-compose服务
docker-compose up -d                        # 启动所有docker-compose服务并后台运行
docker-compose down                         # 停止并删除容器、网络、卷、镜像。
docker-compose exec  yml里面的服务id         # 进入容器实例内部  docker-compose exec docker-compose.yml文件中写的服务id /bin/bash
docker-compose ps                      		# 展示当前docker-compose编排过的运行的所有容器
docker-compose top                     		# 展示当前docker-compose编排过的容器进程
 
docker-compose logs  yml里面的服务id     	# 查看容器输出日志
docker-compose config     					# 检查配置
docker-compose config -q  					# 检查配置,有问题才有输出
docker-compose restart   					# 重启服务
docker-compose start     					# 启动服务
docker-compose stop      					# 停止服务

1.创建脚本目录结构

bin:用于存放编译后的可执行文件(例如可执行程序、库文件或脚本)

conf:存放配置文件,宿主机映射配置文件,例nginx目录下存放nginx.conf

data:数据文件

docker:目录下存放Dockerfile和docker-compose.yml脚本文件,image目录下存放镜像tar包,ubantu目录下存放docker-compose安装包,我这里是ubantu系统,所以docker的版本下载的ubantu的,如果是其他系统就下载其他系统的版本

init:初始化sql文件,也可以根据实际使用存放其他初始化文件

log:日志目录

target:jar和html文件存放目录

.保存镜像文件生成tar包

通过docker images命令查看网上拉取下来的镜像,然后通过docker save -o mysql.tar mysql保存下来,默认保存在当前路径下
在这里插入图片描述

在这里插入图片描述

2.编写docker-compose文件

在docker目录下创建docker-compose.yml文件,配置容器参数和宿主机映射目录

version: "3"

services: 
  manage-server:
    # 镜像名
    image: manage:2023
    # 容器名
    container_name: manage
    # 重启策略 
    # always:任何原因重启 
    # no:不重启
    # on-failure:容器因错误代码停止时才重启
    # unless-stopped:对 .yml 文件或任何项目目录文件进行任何更改后重启
    restart: always
    build: 
      context: ../docker
      dockerfile: Dockerfile-manage
    # 容器访问端口
    expose:
      - 9007
    volumes:
      - ../log/manage:/home/logs
      - ../target:/manage/target
      - ../bin/manage-start.sh:/manage/sh/manage-start.sh
      - ../conf/manage/application.yml:/manage/conf/application.yml
      - ../file/file:/manage/file
    networks:
      - server_net

  nginx:
    image: nginx:1.22.1
    container_name: nginx
    restart: always
    # 指定容器中的主机名
    hostname: nginx
    # 针对宿主机设置环境变量
    # 时区上海
    environment:
      TZ: Asia/Shanghai
    logging:
      driver: "json-file"
      options:
        max-size: "500m"
    ports:
      - 80:80
      - 443:443
    volumes: 
      - ../data/nginx:/data
      - ../target/html:/html
      - ../conf/nginx/nginx.conf:/etc/nginx/nginx.conf
      - ../conf/nginx/conf.d:/etc/nginx/conf.d
      - ../log/nginx:/var/log/nginx
    networks:
      - server_net

  mysql:
    image: mysql:latest
    container_name: mysql8
    restart: always
    # 指定容器中的主机名
    hostname: mysql8
    # 针对宿主机设置环境变量
    # docker安全验证
    security_opt:
      - seccomp:unconfined
    environment:
      TZ: Asia/Shanghai
      MYSQL_ROOT_PASSWORD: '123456'
      MYSQL_USER: 'test'
      MYSQL_PASS: '123456'
      # 指定初始化sql文件的数据库
      MYSQL_DATABASE: yw_manage
    logging:
      driver: "json-file"
      options:
        max-size: "500m"
    ports:
      - 9008:3306
      - 33069:33060
    #使用 command 可以覆盖容器启动后默认执行的命令
    command: [
         #设置数据库表的数据集
         '--character-set-server=utf8mb4', 
         #设置数据库表的数据集
         '--collation-server=utf8mb4_unicode_ci', 
         #设置mysql数据库的 时区问题!!!! 而不是设置容器的时区问题!!!!
         '--default-time-zone=+8:00'                    
    ]
    volumes:
      - ../log/mysql:/var/log/mysql
      - ../data/mysql:/var/lib/mysql
      - ../conf/mysql:/etc/mysql/conf.d
      - ../init/sql:/docker-entrypoint-initdb.
    networks:
      - server_net
    entrypoint:
      - docker-entrypoint.sh

  redis:
    # 镜像名
    image: redis:6.2.11
    # 容器名
    container_name: redis
    restart: always
    # 指定容器中的主机名
    hostname: redis
    logging:
      driver: "json-file"
      options:
        max-size: "500m"
    ports:
      - 9010:6379
    command: redis-server /usr/local/etc/redis/redis.conf
    volumes:
     - ../data/redis:/data
     - ../conf/redis/redis.conf:/usr/local/etc/redis/redis.conf
     - ../log/redis:/usr/local/redis/log
    networks:
      - server_net
      
#配置External网络
networks:
  server_net:
    external: true

3.文件说明

除了manage.tar属于自己项目镜像,其他.tar文件都可拉取官方镜像

附上nginx -> manage-nginx.conf文件, networks加入同一个网段的作用就是可通过容器名代替IP的配置方式,如果不配置ports,只配置expose那么就只能通过容器访问,这样就可以做到无法通过ip端口直接访问到容器,必须走nginx才行安全性更高

server {
    listen      80;
    server_name manage;
    
    location /manage {
		proxy_pass http://manage:9007/manage;
		proxy_set_header Host $host;
		proxy_set_header X-Real-IP $remote_addr;
		proxy_set_header REMOTE-HOST $remote_addr;
		proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

	}
}

4.编写一键安装脚本

配置install-ubantu.sh一键部署脚本

  • 恢复镜像文件(tar文件)
  • 对文件授权并且执行docker-compose命令构建容器
#!/bin/bash

#切换到docker 目录
curPath=$(readlink -f "$(dirname "$0")")
echo "当前路径:$curPath"

#安装docker
dpkg -i $curPath/docker/ubantu/containerd.io_1.4.6-1_amd64.deb
dpkg -i $curPath/docker/ubantu/docker-ce-cli_20.10.6_3-0_ubuntu-xenial_amd64.deb
dpkg -i $curPath/docker/ubantu/docker-ce_20.10.6_3-0_ubuntu-xenial_amd64.deb

#启动docker镜像
sudo systemctl start docker

#重命名
sudo cp $curPath/docker/ubantu/docker-compose-Linux-x86_64   $curPath/docker/ubantu/docker-compose

#移动位置
sudo cp  $curPath/docker/ubantu/docker-compose   /usr/local/bin/
sudo chmod  +x  /usr/local/bin/docker-compose   #添加可执行权限

#创建docker网络
sudo docker network create simplev_net

#安装jdk镜像
sudo docker load -i $curPath/docker/image/jdk.tar
echo "加载jdk镜像"

# 安装mysql
sudo docker load -i $curPath/docker/image/mysql.tar
echo "加载mysql镜像"

#安装nginx镜像
sudo docker load -i $curPath/docker/image/nginx.tar
echo " 加载nginx 镜像"

#安装redis镜像
sudo docker load -i $curPath/docker/image/redis.tar
echo " 加载redis镜像"

#授权
sudo chmod +x $curPath/bin/*.sh

#启动mysql 和业务应用
sudo docker-compose -f $curPath/docker/docker-compose.yml  up -d --build

#把普通用户加到docker组
sudo gpasswd -a $USER docker

#docker自启动
sudo systemctl enable docker

docker load命令加载镜像,docker-compose命令构建镜像和容器

5.启动脚本

sh install-ubantu.sh
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值