查阅各种资料终于成功部署项目,最后用的doccker-compose加载容器
1.拉去后端必要镜像mysql,redis
1.mysql
1.拉去镜像
docker pull mysql:5.7
2.创建挂载目录
mkdir -p /home/mysql/{log,data,conf.d}
3.添加my.cnf配置文件(可选)
vim /home/mysql/conf.d/my.cnf
# [client]配置
[client]
# 设置MySQL客户端默认字符集utf8mb4
default-character-set=utf8mb4
# 指定了MySQL服务器使用的Unix套接字文件路径
socket=/var/lib/mysql/mysql.sock#[mysql]配置
[mysql]
# 设置MySQL客户端默认字符集utf8mb4
default-character-set=utf8mb4
# 指定了MySQL服务器使用的Unix套接字文件路径
socket=/var/lib/mysql/mysql.sock#[mysqld]配置
[mysqld]
port=3306 # 端口号
user=root # 用户名
# 设置sql模式 sql_mode模式引起的分组查询出现*this is incompatible with sql_mode=only_full_group_by,这里最好剔除ONLY_FULL_GROUP_BY
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
server-id = 1# MySQL8 的密码认证插件 如果不设置低版本navicat无法连接
default_authentication_plugin=mysql_native_password# 禁用符号链接以防止各种安全风险
symbolic-links=0# 允许最大连接数
max_connections=1000# 服务端使用的字符集默认为8比特编码的latin1字符集
character-set-server=utf8mb4# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB# 表名存储在磁盘是小写的,但是比较的时候是不区分大小写
lower_case_table_names=0
max_allowed_packet=16M# 设置时区
default-time_zone='+8:00'
4、启动 mysql 容器(可选,最后用docker-compose统一启动)
docker run -p 3306:3306 --name mysql -v /home/mysql/logs:/logs -v /home/mysql/data:/mysql_data -e MYSQL_ROOT_PASSWORD=root -d mysql:5.7
--restart=always 代表开启启动
--privileged=true 代表进入容器内部为管理员身份
-d 表示后台运行容器 并返回容器 Id
-v 把 mysql 产生的数据同步到本地 防止数据丢失
-e 容器传参 设置 mysql 的初始密码
5.查看正在运行的容器
docker ps
6 .本地navicat测试数据库
2.redis
1.拉去redis(我用最新版本)
docker pull redis
2.创建挂载目录
mkdir -p /home/redis/data
mkdir -p /home/redis/logs
touch /home/redis/redis.conf
3.配置文件(下载redis.conf文件按redis版本下载)
sudo yum install curl
curl -o redis.conf https://raw.githubusercontent.com/redis/redis/7.2/redis.conf
修改 redis.conf中的requirepass
4.挂载容器(我用docker-compose挂载容器会导致redis无法连接,有大佬知道为什么吗)
docker run -p 6379:6379 --name redis -v /home/redis/redis.conf:/etc/redis/redis.conf -v /home/redis/data:/data -d redis redis-server /etc/redis/redis.conf --appendonly yes
总之就是先将项目所需的技术拉取镜像,最后用docker-compose统一挂载容器
2. 打包前后端代码
建议在服务器创建一个目录存放项目,二级目录为项目名,三级目录为前端和后端
1.前端代码打包镜像
1.前端代码打包将dist目录复制到服务器该项目前端目录
2.编写 default.conf 文件和 Dockerfile 文件
default.conf 配置(这个配置会复制到nginx的conf.d目录)
server {
listen 80;
server_name ip地址; # 修改为docker服务宿主机的iplocation / {
root /usr/share/nginx/html;
index index.html index.htm;
try_files $uri $uri/ /index.html =404;
}
location /api {
proxy_pass http://ip地址:端口号/;# 前端api路径会代理到后端地址
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}}
这是我的,可以参考一下前端代码一般都会配置
server { listen 80; server_name 1.94.130.33 ; # 修改为docker服务宿主机的ip location / { root /usr/share/nginx/html; index index.html index.htm; try_files $uri $uri/ /index.html =404; } location /api { proxy_pass http://1.94.130.29:9999/warehouse; } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } }
Dockerfile 配置
# 基础镜像使用Nginx
FROM nginx
# 作者
MAINTAINER htt
# 添加时区环境变量,亚洲,上海
ENV TimeZone=Asia/Shanghai
# 将前端dist文件中的内容复制到nginx目录
COPY dist /usr/share/nginx/html/
# 用本地的nginx配置文件覆盖镜像的Nginx配置
COPY default.conf /etc/nginx/conf.d
# 暴露端口 nginx的端口
EXPOSE 80
3、上传这三个文件到 Linux 服务器的同一个文件夹当中,务必放在一起!
4、构建镜像
docker build -t vue . #点千万别漏了,这里取名镜像为vue,可以随便取名!(项目名-vue)
2.后端代码打包成镜像
1、整合后端成 Jar 包并编写 Dockerfile 文件
修改application.propertise中mysql,redis的地址为服务器地址
2.Dockerfile 内容详解
FROM java:8 #工程java版本
COPY *.jar /app.jar #将所有的jar包整合为app.jar
EXPOSE port #暴露后端端口号
ENTRYPOINT ["java","-jar","app.jar"] #执行jar包
3.将文件上传到 Linux 服务器上面,必须放在同级目录一起!
4.构建镜像
docker build -t api . #点千万别漏了,这里取名镜像为api,可以随便取名!(项目名-api)
查看当前镜像
docker images
3.编写docker-compose.yal文件
1.进入docker-compose目录,编写docker-compose.yml文件
cd /usr/local/bin/
vim docker-compose.yml
version: "3" services: mysql: image: mysql:5.7 container_name: mysql volumes: - /home/mysql/conf:/etc/mysql/conf - /home/mysql/logs:/logs - /home/mysql/data:/var/lib/mysql - /etc/localtime:/etc/localtime:ro # 让容器的时钟与宿主机时钟同步,避免时间的问题,ro(read only),表示只读。 environment: MYSQL_ROOT_PASSWORD: root ports: - 3306:3306 restart: always redis: image: redis container_name: redis volumes: - /home/redis/redis.conf:/etc/redis/redis.conf:rw - /home/redis/data:/data:rw - /home/redis/logs:/logs:rw command: redis-server /etc/redis/redis.conf # 后端jar包镜像 api: image: warehouse-api container_name: warehouse-api ports: - 9999:9999 depends_on: - mysql - redis vue: image: nginx container_name: warehouse-vue ports: - 80:80 volumes: - /project/warehouse/before/nginx/html/dist:/usr/share/nginx/html - /project/warehouse/before/nginx/conf.d/default.conf:/etc/nginx/conf.d/default.conf
2. 启动容器
docker-compose -f docker-compose.yml up -d
第一次成功有点乱,可以参考一下,探讨一下避坑。