场景
若依前后端分离版手把手教你本地搭建环境并运行项目:
上面在搭建起来前后端分离版的项目后。
如果想通过Dockerfile的方式部署项目可以参考如下。
Docker中使用Dockerfile的方式部署SpringBoot+Vue前后端分离的项目(若依前后端分离框架为例):
Docker中使用Dockerfile的方式部署SpringBoot+Vue前后端分离的项目(若依前后端分离框架为例)
除此之外,还可以使用docker-compose的方式去编排部署各个服务。
docker-compose
简介
Overview | Docker Documentation
docker-compose是基于docker的开源项目,托管于github上,由python实现,
调用 docker服务的API负责实现对docker容器集群的快速编排,即通过一个单独的yaml文件,
来定义一组相关的容器来为一个项目服务。
Compose 项目是 Docker 官方的开源项目,负责实现对 Docker 容器集群的快速编排。从功能上看,跟 OpenStack 中的 Heat 十分类似。
快速编排:站在项目角度将一组相关联容器整合在一起,对这组容器按照指定顺序进行启动。
Compose 允许用户通过一个单独的 docker-compose.yml 模板文件(YAML格式)来定义一组相关联的应用容器为一个项目(project)。这里涉及2个重要的概念:
服务(service):一个应用的容器,实际上可以包括若干运行相同镜像的容器实例。
项目(project):由一组关联的应用容器组成的一个完整业务单元,在docker-compose.yml文件中定义。
Compose 的默认管理对象是项目,通过子命令对项目中的一组容器进行便捷地生命周期管理。
项目名称
Compose 用项目名称来隔离不同的环境,在没有设置项目名称的情况下,
Compose 会用 docker-compose.yml 文件所在根目录名称做为项目名称。
每个项目有自己的 Docker network,不同项目的 Docker network 彼此不通。
在单个主机上建立多个隔离环境,Compose 使用项目名称将环境彼此隔离。
您可以在多个不同的上下文中使用此项目名称。默认项目名称是项目目录的基本名称。
您可以使用-p 命令行选项或 COMPOSE_PROJECT_NAME 环境变量设置自定义项目名称 。
默认项目目录是 Compose 文件的基本目录。可以使用–project-directory 命令行选项自定义项目目录。
Compose与Docker的兼容性
实现
1、确保服务器已经安装Docker以及Compose,可通过
docker --version
docker-compose --version
2、在服务器上新建如下目录
首先新建fzysShow目录,作为项目所在目录以及项目名称,然后进入该目录,创建如下目录以及文件
docker-compose.yml文件
java目录,目录下存放后台服务fzys.jar包
mysql目录,目录下新建data目录,作为数据挂载目录
nginx目录,目录下新建config目录,config目录下新建nginx.conf配置文件;新建font目录,目录下存放dist前端打的包;新建log目录,映射挂载日志目录。
redis目录,目录下新建data目录和redis.conf配置文件。
3、修改docker-compose.yml的内容为
version: "3.8"
services:
redis:
image: redis:latest
restart: always
ports:
- "36379:6379"
volumes:
- ./redis/redis.conf:/etc/redis/redis.conf
- ./redis/data:/data
command: redis-server /etc/redis/redis.conf
mysql:
image: mysql:latest
restart: always
ports:
- "33306:3306"
command: --lower_case_table_names=1
environment:
MYSQL_DATABASE: fzys-show
MYSQL_ROOT_PASSWORD: Fzys@123!
MYSQL_ROOT_HOST: '%'
TZ: Asia/Shanghai
volumes:
- ./mysql/data:/var/lib/mysql
kkfileview:
image: zjblovewl/kkfile:4.9
ports:
- "38012:8012"
nginx:
image: nginx:latest
ports:
- "390:390"
volumes:
- ./nginx/font/dist:/usr/share/nginx/dist
- ./nginx/log:/var/log/nginx
- ./nginx/config/nginx.conf:/etc/nginx/nginx.conf
java:
image: openjdk:8u342-oracle
restart: always
volumes:
- ./java:/home
working_dir: /home/
ports:
- "39090:39090"
- "38901:8901"
environment:
TZ: Asia/Shanghai
depends_on:
- redis
- mysql
command: [
'java',
'-jar',
'/home/fzys.jar'
]
配置讲解:
首先声明compose的版本为3.8
然后声明各服务
redis服务:
镜像为redis:latest,端口映射宿主机36379映射到容器6379,数据卷挂载宿主机当前目录下./redis/redis.conf
映射到容器内/etc/redis/redis.conf的配置文件以及数据data目录挂载。执行命令redis-server /etc/redis/redis.conf
使redis通过读取配置文件的方式启动。这里需要注意redis的版本与redis.conf配置文件的版本对应问题,以及
需要赋予宿主机./redis/redis.conf的权限问题。进入到./redis目录下执行
chmod -R 777 redis.conf
DockerCompose编排Redis6.2.6以及遇到的那些坑:
DockerCompose编排Redis6.2.6以及遇到的那些坑_霸道流氓气质的博客-CSDN博客
mysql服务:
这里mysql为版本8,所以需要执行command使其忽略表名大小写。然后配置初始化需要的库以及root用户密码和限制访问的
ip等相关环境变量。
kkfileview服务:
这个为系统中用到的文件预览服务,如果用不到可以去掉这个。
nginx服务:
端口映射以及数据卷映射。映射宿主机当前目录下./nginx/font/dist至容器内usr/share/nginx/dist目录,这个就是用来存放前端包的;映射配置文件./nginx/config/nginx.conf:/etc/nginx/nginx.conf。
修改配置文件nginx.conf的内容为:
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
server {
listen 390;
server_name localhost;
client_max_body_size 300M;
location / {
root /usr/share/nginx/dist;
try_files $uri $uri/ /index.html;
index index.html index.htm;
}
location /prod-api/ {
proxy_set_header Host $http_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;
proxy_pass http://你的服务器ip:39090/;
}
location /websocket/ {
proxy_pass_header Server;
proxy_set_header Host $http_host;
proxy_redirect off;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Scheme $scheme;
proxy_pass http://你的服务器ip:39090;
proxy_http_version 1.1;
proxy_set_header Upgrade "websocket";
proxy_set_header Connection "Upgrade";
proxy_read_timeout 5s;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
注意:
这里在配置文件中添加了websockt的代理的相关配置,如果不需要可以去掉,只关注反向代理的部分。
注意这里映射的目录,前端是容器内的/usr/share/nginx/dist目录,已经在yml中将其映射到宿主机
./nginx/font/dist目录,所以需要将前端项目打包,并上传至宿主机./nginx/font/dist,注意dist目录就是打包后
的目录,不要在dist下再有一层dist目录。
可通过本地dist压缩并上传至服务器解压的方式。
java服务:
这里用的jdk的镜像,映射当前目录下./java到容器内home目录下。然后将当前工作目录切换至home目录下,这里端口映射
根据自己的后台服务需要的接口进行映射。depends_on指定java需要依赖redis和mysql这两个服务,避免启动顺序问题。然后
command执行命令,启动jar包。
所以需要将后台jar包上传至宿主机java目录下。
4、yml文件编排完成,需要启动项目并查看日志
来到docker-compose.yml所在的目录下,输入
docker-compose up
启动项目,不加-d参数可以使其不要后台启动,可以直接查看各服务的日志。
此时mysql只是初始化了库并没有导入sql,所以后台java会进行包括,可以先忽略,待mysql启动成功之后
使用客户端工具,将需要的表进行同步结构和数据到服务器上即可。
当然mysql还可以通过dockerfile以及脚本的方式导入sql文件,但是这里需要将部分表的接口以及部分表的数据
同步到服务器上,所以没有初始化sql,而是选择手动传输数据库表和数据的方式。
同步完数据库之后,按ctrl+c可以结束所有服务,停掉整个项目,再输入一遍
docker-compose up
此时后台不再报错,各服务均启动正常。
也可以单独针对一个项目中某个服务进行重启,比如需要更新前端dist包,只要将原来宿主机下
./nginx/font/dist的dist删除并上传最新的dist包,然后重启nginx服务。
docker-compose restart nginx
5、docker-compose常用命令
docker compose ps
可以列出「当前项目」下所有的服务
docker compose build
格式:docker compose build [SERVICE…] 构建 docker-compose.yml文件中的服务,生成镜像。
docker compose up
启动的容器都在前台,控制台将实时打印所有容器的输出信息(以不同的颜色标识不同的服务),
可以很方便进行调试。当按下 Ctrl+C 时,所有容器都会被停止。
如果使用 docker compose up -d,则所有服务将在后台启动。
docker compose stop
停止项目中的所有服务容器。
docker compose start
启动项目中的所有服务容器。
docker compose restart
重启项目中的所有服务容器。
注意上面的启动、停止、重启都可以后面跟具体的服务名,进而对单个服务进行操作。
docker compose down
此命令将会『停止并删除』docker-compose.yml中定义的所有服务容器和网络,但保留数据卷。
docker compose logs
查看当前项目下所有服务容器的日志输出。也可跟具体服务名。
6、查看当前项目服务运行状态是否正常
状态均为Up,各服务启动成功
然后访问服务器的390端口,显示系统页面并出现验证码,则部署成功。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/135844.html