Docker利用docker-compose 实现项目的一键部署(支持多项目部署)
安装 docker
- 在安装 Docker以及 docker-compose
- 可以进行在线安装和离线安装两种方式
- 在线安装方式
curl -sSL https://get.daocloud.io/docker | sh - 离线安装方式
- 下载 docker 压缩包:https://download.docker.com/linux/static/stable/x86_64/docker-20.10.23.tgz
- 上传tgz到服务器[/data/software],解压缩并迁移命令,上传的路径可以根据自己的实际情况来做,我是上传到/data/software 这个目录下,下面是执行命令
cp /data/software tar -zxvf docker-20.10.23.tgz cp -pf docker/* /usr/bin
- 将 docker 注册为系统服务
# vim /usr/lib/systemd/system/docker.service [Unit] Description=Docker Application Container Engine Documentation=http://docs.docker.com After=network.target docker.socket [Service] Type=notify EnvironmentFile=-/run/flannel/docker WorkingDirectory=/usr/local/bin ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:4243 -H unix:///var/run/docker.sock --selinux-enabled=false ExecReload=/bin/kill -s HUP $MAINPID # Having non-zero Limit*s causes performance problems due to accounting overhead # in the kernel. We recommend using cgroups to do container-local accounting. LimitNOFILE=infinity LimitNPROC=infinity LimitCORE=infinity # Uncomment TasksMax if your systemd version supports it. # Only systemd 226 and above support this version. #TasksMax=infinity TimeoutStartSec=0 # set delegate yes so that systemd does not reset the cgroups of docker containers Delegate=yes # kill only the docker process, not all processes in the cgroup KillMode=process Restart=on-failure [Install] WantedBy=multi-user.target
- 启动 docker
# systemctl daemon-reload # systemctl start docker # systemctl enable docker // 开机启动 # docker info
- 设置docker国内镜像加速、私服地址、镜像存储位置
# mkdir -p /data/docker/lib && mkdir /etc/docker # vim /etc/docker/daemon.json { "registry-mirrors": [ "https://hub-mirror.c.163.com/", "https://mirror.ccs.tencentyun.com", "https://mirror.baidubce.com" ], "insecure-registries": [ "你自己的 docker仓库地址" ], "data-root": "/data/docker/lib" #docker 镜像存放的位置,可以不用指定使用默认的也可以 }
- 在线安装方式
- 安装docker-compose[版本号:2.15.0]
- 离线安装
# cd /data/software //根据自己下载的文件名 重命名为 docker-compose # mv docker-compose-linux-aarch64 docker-compose 或者 mv docker-compose-linux-x86_64 docker-compose # cp docker-compose /usr/local/bin # chmod a+x /usr/local/bin/docker-compose # ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose # docker-compose --version #查看 docker-compose 的版本号
- 在线安装
# curl -L https://get.daocloud.io/docker/compose/releases/download/v2.15.0/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose chmod a+x /usr/local/bin/docker-compose # chmod a+x /usr/local/bin/docker-compose # ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose # docker-compose --version
- 离线安装
部署项目
- 准备工作
- 准备文件目录
# mkdir -p /data/docker/webapp docker-webapp目录中存放 docker-compose.yml,nginx,mysql 等文件 特别注意:文件夹里面有一个.env隐藏文件,一定要保证创建。 # mkdir -p /data/webapp/www 该目录存放前端静态文件.
- 确认要部署的项目版本
(1)修改1中的.env文件,来设置后端模块版本 demo1_version=1.0.0 demo2_version=1.0.0
- 部署环境配置
文件都在docker-webapp目录下- docker-compose 文件配置
- 准备文件目录
version: '3'
services:
#nginx
nginx:
image: nginx:1.23
container_name: nginx
restart: always
privileged: true
ports:
- "80:80"
- "443:443"
volumes:
- /data/module/nginx/logs:/var/log/nginx
- ./nginx/html:/usr/share/nginx/html
- ./nginx/proxy_params:/etc/nginx/proxy_params
- ./nginx/nginx.conf:/etc/nginx/nginx.conf
- ./nginx/conf.d:/etc/nginx/conf.d
- ./nginx/cert:/etc/nginx/cert
- /data/webapp:/dockerDir
networks:
- net_webapp # 项目之前通信的网桥
#mysql
mysql:
image: mysql:8
container_name: mysql
restart: always
#ports:
# - "3306:3306" #暴露给宿主机使用的端口,服务连接mysql使用mysql:3306
volumes:
- /data/module/mysql/logs:/var/log/mysql
- /data/module/mysql/data:/var/lib/mysql
- ./mysql/my.cnf:/etc/mysql/my.cnf #自定义my.cnf,主要修改字符集编码为utf8mb4
- ./mysql/sqls:/docker-entrypoint-initdb.d #初始化sql文件放这个目录下,自动执行
environment:
TZ: Asia/Shanghai
MYSQL_ROOT_PASSWORD: Platomix@mysql123
networks:
- net_webapp
#clickhouse
clickhouse:
image: docker.platomix.net:10000/module/clickhouse-server:23.3.5
container_name: ckserver
#ports:
# - "8123:8123"
ulimits:
nofile:
soft: 262144
hard: 262144
volumes:
- /data/module/clickhouse/data:/var/lib/clickhouse
- /data/module/clickhouse/logs:/var/log/clickhouse-server
- ./clickhouse/config.xml:/etc/clickhouse-server/config.xml
- ./clickhouse/users.xml:/etc/clickhouse-server/users.xml
#redis
redis:
image: redis:5.0
container_name: redis
restart: always
#ports:
# - "6379:6379"
command: redis-server /usr/local/etc/redis/redis.conf #使用配置文件方式
volumes:
- /data/module/redis:/data
- /data/module/redis/logs:/logs
- ./redis/redis.conf:/usr/local/etc/redis/redis.conf
networks:
- net_webapp
#demo1模块
project-demo1:
image: images名称:${demo1_version}
container_name: demo1
environment:
JAVA_OPTS: "-Xms512m -Xmx1g"
SPRINGBOOT_PARAMS: "--server.port=6969 --spring.profiles.active=docker --log.path=/dockerDir/logs/xxljob"
volumes:
- /data/webapp:/dockerDir
#ports:
# - "6969:6969"
networks:
- net_webapp
#demo2模块
project-demo2:
image: images名称:${demo2_version}
container_name: demo2
environment:
JAVA_OPTS: "-Xms2g -Xmx2g -XX:MetaspaceSize=128M -XX:MaxMetaspaceSize=256M -XX:MaxDirectMemorySize=256m -XX:+UseConcMarkSweepGC -XX:+DisableExplicitGC -XX:+CMSParallelRemarkEnabled -XX:CMSInitiatingOccupancyFraction=75 -XX:HeapDumpPath=/dockerDir/logs/bi/jvm.hprof -Xloggc:/dockerDir/logs/bi/gc.log"
SPRINGBOOT_PARAMS: "--server.port=6060 --spring.profiles.active=docker --blade.domain=http://localhost"
volumes:
- /data/webapp:/dockerDir
#ports:
# - "6060:6060"
networks:
- net_webapp
networks:
net_webapp:
external: true
- docker 镜像下载
- 内网环境
说明】:需要把镜像在本机保存为tar文件,上传到客户服务器再load进去- 本机导出 jar 文件
#docker save -o nginx_mysql_redis.tar nginx:1.23 mysql:8 redis:5.0
- 上传到服务器并依次导入镜像
#docker load < nginx_mysql_redis.tar
- 本机导出 jar 文件
- 联网环境
# docker login 私服地址 -u user -p password #登录私服 # cd /data/docker/webapp # docker-compose pull #拉取镜像
- 内网环境
- 启动项目
项目启动必须按照顺序:1、创建网桥 #docker network create net_webapp #docker network ls #查看网桥 2、启动mysql/redis # cd /data/docker/webapp # docker-compose up -d mysql redis 3、启动BI项目模块 # cd /data/docker/webapp # docker-compose up -d project-demo1 project-demo2 4、最后启动nginx # cd /data/docker/webapp # docker-compose up -d nginx
到此整个项目就部署完毕…