准备工作

1、将代码文件复制到Linux根目录并创建ilsgame文件夹

安装环境

1、安装docker环境

# 更新yum源
yum update
# 安装docker(设置阿里yum源)
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# 可以查看所有仓库中所有docker版本,并选择特定版本安装
yum list docker-ce --showduplicates | sort -r
# 由于repo中默认只开启stable仓库,故这里安装的是最新稳定版
sudo yum install docker-ce
# 查看docker运行状态
service docker status
# 自启动
sudo systemctl enable docker
# 启动docker
service docker start

2、使用docker安装MySQL环境,执行docker_install_mysql.sh脚本即可(代码如下)

#!/bin/bash
# 拉镜像
docker pull mysql:8.0.35
# 其中localmysql是要分配给容器的名称,a.123456是要为 MySQL root 用户设置的密码,8.0.35是指定所需 MySQL 版本的标签。请参阅上面的列表以获取相关标签。
# 根目录mysqldata文件夹挂载MySQL容器内/var/lib/mysql数据库文件
docker run --name localmysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=a.123456 -d -v /mysqldata:/var/lib/mysql mysql:8.0.35
# 查看端口是否开启
firewall-cmd --zone=public --query-port=3306/tcp
# 开启端口
firewall-cmd --zone=public --add-port=3306/tcp --permanent
# 刷新防火墙
firewall-cmd --reload

3、查看对应镜像和容器是否正常运行

docker image ls
docker ps
# -a代表包括停止的容器
# docker ps -a

4、输入以下命令启用远程访问MySQL服务器

# 进入容器并登录,然后输入密码
docker exec -it localmysql mysql -u root -p
# 授权远程访问
GRANT ALL ON *.* TO 'root'@'%';
# 刷新权限
flush privileges;

5、根目录下有一个mysqldata文件夹是容器内数据库的挂载目录

SQL脚本导入

1、使用Navicat连接MySQL,密码为a.123456(docker_install_mysql.sh脚本内部定义)

2、在Navicat中执行ilsgame_dev.sql脚本文件

生成后台代码镜像文件

1、执行代码根目录的build.sh脚本生成docker镜像(代码如下)

#!/bin/bash
# 输出一提示的话
echo "Successfully^_^ ......................................................................................"
# 输出当前地址,可以在日志中看到当前路径,检查一些路径问题
pwd
# 停止容器
docker stop ilsgame-admin
# 删除容器
docker rm ilsgame-admin
# 构建镜像命令
docker build -t ilsgame .
# 更新镜像
docker push ilsgame
# 从镜像运行容器
# --name ilsgame-admin是容器名称
# ilsgame是绑定的镜像名称
# 5000是对外暴露的端口
# 80是docker内部绑定的端口
# -e TZ=Asia/Shanghai是将容器内部时间设置为上海时间

# 启动命令
# docker run -e TZ=Asia/Shanghai -d -p 5000:80 --restart=always --name ilsgame-admin ilsgame
# 启动+挂载,宿主机为home平级目录的uploadFile文件夹,app为容器内目录
docker run -e TZ=Asia/Shanghai -d -p 5000:80 --restart=always -v /uploadFiles:/app/wwwroot/uploadFiles --name ilsgame-admin ilsgame

2、Linux本机调用5000端口(端口在build.sh内部定义)

安装Nginx

1、执行docker_install_nginx.sh脚本安装Nginx(代码如下)

# 拉镜像
docker pull nginx
# 停止容器
docker stop mynginx
# 删除容器
docker rm mynginx
# 删除挂载目录,否则每次更新路径会错乱
rm -rf /ilsgame/mynginx
# 创建挂载目录
mkdir /ilsgame/mynginx -p
# 映射两个端口,需要配置两个站点
docker run --name mynginx -p 80:80 -p 8080:8080 -d --restart=always nginx:latest
# 从容器内拷贝映射文件到本地
docker cp mynginx:/var/log/nginx /ilsgame/mynginx/log

docker cp mynginx:/etc/nginx /ilsgame/mynginx/nginx

docker cp mynginx:/usr/share/nginx/html /ilsgame/mynginx/html
# 停止容器
docker stop mynginx
# 删除容器
docker rm mynginx
# 重新生成容器并挂载到宿主机,原因如下
docker run --name mynginx -p 80:80 -p 8080:8080 -d --restart=always -v /ilsgame/mynginx/log:/var/log/nginx -v /ilsgame/mynginx/nginx:/etc/nginx -v /ilsgame/mynginx/html:/usr/share/nginx/html nginx:latest

# 参考:https://www.cnblogs.com/cyx714/p/16749191.html
# 大概意思就是,要给nginx挂载卷,要先有一个配置文件才能挂载,具体做法就是先以不挂载卷的形式正常启动一个nginx容器,然后从中cp拷贝一份配置文件,删除这个容器,再重新以挂载卷的形式启动一个新容器。
# 所以需要先开容器,然后复制配置文件到本地,然后删除容器重新运行挂载
# 进入容器
# docker exec -it mynginx /bin/bash

# 查看容器的ip地址
# docker inspect ilsgame-admin

2、查看对应生成的镜像和容器

3、将前端静态文件复制到Linux下的/ilsgame/mynginx/html文件夹内

4、如果没有图片文件则略过,有图片文件可以将Banner文件夹复制到Linux根目录下的uploadFiles文件夹内

5、修改/ilsgame/mynginx/nginx/conf.d文件夹下的default.conf

# 后台代理配置加在最后
server {
    listen       8080;
    listen  [::]:8080;
    server_name  localhost;
    # 设置请求大小避免上传图片出现413错误
    client_max_body_size 100m;
    #access_log  /var/log/nginx/host.access.log  main;

    location / {
        # 映射到docker容器
        # 查看docker容器内的ip地址
        # docker inspect ilsgame-admin
        # 端口为映射命令的内部端口,例如以下命令容器内部端口为80,外部宿主机命令为5000
        # docker run -e TZ=Asia/Shanghai -d -p 5000:80 --restart=always -v /uploadFiles:/app/wwwroot/uploadFiles --name ilsgame-admin ilsgame
        # 80端口可以省略
        proxy_pass   http://172.17.0.4;
    }
}

6、重启nginx容器输入docker restart mynginx

7、最后查看80以及8080端口是否正常

注意事项:(sh脚本为执行脚本,md文件需要按步骤手动执行)

1、需要注意修改代码前端配置文件const.js以及后台appsetting.json中的跨域和配置

2、default.conf文件中proxy_pass字段使用的是docker容器内部的ip地址和端口

3、假设你的命令是:

docker run -e TZ=Asia/Shanghai -d -p 5000:80 --restart=always -v /uploadFiles:/app/wwwroot/uploadFiles --name ilsgame-admin ilsgame

那么端口就是80,可以忽略

然后输入以下命令查看容器内部ip地址

docker inspect ilsgame-admin

取Networks下的IPAddress字段

最后proxy_pass就等于http://172.17.0.4;

扩展命令

# 进入容器内
docker exec -it localmysql /bin/bash
# 复制配置文件,可不进入容器内直接拷贝
docker cp localmysql:/etc/my.cnf /mysqldata/my.cnf
# 修改之后拷贝回去
docker cp /mysqldata/my.cnf localmysql:/etc/my.cnf
# 重启
docker restart localmysql
# MySQL查询是否区分大小写
show Variables like '%table_names'
# 在 MySQL 中,lower_case_table_names 有三个可能的取值:

# 0: 表名和数据库名区分大小写。
# 1: 表名和数据库名不区分大小写。
# 2: 表名区分大小写,数据库名不区分大小写。

# 安装vim和gdi
docker exec -it ilsgame-admin /bin/bash
apt-get update
apt-get install vim
apt-get install -y libgdiplus && apt-get clean && ln -s /usr/lib/libgdiplus.so /usr/lib/gdiplus.dll

被这风吹散的人说Ta爱的不深,被这雨淋湿的人说Ta不会冷