指标:应用 Docker 部署商城 (Mysql + Redis + Java 后端 + Vue 前端)
以下部署以开源商城 mall4j
为例子,链接见:
- gitee: https://gitee.com/gz-yami/mall4j
- github: https://github.com/gz-yami/mall4j
试验环境:Linux Centos7
0: 零碎筹备
筹备一个洁净的零碎(防止被其余因素影响),零碎应用以下 ISO(自行装置,装置过程略):
http://mirrors.163.com/centos…
1:装置 Docker
参考资料:https://docs.docker.com/engin…
卸载旧版本残留
sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
装置 docker
sudo yum install -y yum-utils
sudo yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
sudo yum install -y docker-ce docker-ce-cli containerd.io
启动 docker 服务
sudo systemctl start docker
设置 docker 开机自启动
sudo systemctl enable docker
2: 镜像减速
(这一步选做)因为默认镜像仓库在国外,速度较慢,咱们能够应用阿里云的镜像减速服务:
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{"registry-mirrors": ["https://xxxxx.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
咱们能够输出 docker info 查看是否胜利批改默认镜像地址:
sudo docker info
3:上传文件到服务器
mysql:
本地编辑好 mysql 配置文件
data 文件夹是数据长久化(一开始没数据,容器运行后才会产生数据,所以是空文件夹),my.cnf 是配置文件,initdb 文件夹是初始化数据
my.cnf 内容如下:
[client]
default-character-set = utf8mb4
[mysql]
# 设置 mysql 客户端默认字符集
default-character-set = utf8mb4
[mysqld]
# 设置 3306 端口
port = 3306
# 服务端应用的字符集默认为 latin1
character-set-server = utf8mb4
# 创立新表时将应用的默认存储引擎
default-storage-engine = INNODB
# 让 MySQL 不辨别大小写
lower_case_table_names=1
java 后端
java 的 admin 的 dockerfile 文件内容如下:
FROM anapsix/alpine-java:8_server-jre_unlimited
RUN mkdir -p /opt/projects/yami-shops
WORKDIR /opt/projects/yami-shops
COPY ./yami-shop-admin-0.0.1-SNAPSHOT.jar ./
EXPOSE 8111
CMD java -jar -Xms1024m -Xmx1024m -Xss256k -XX:SurvivorRatio=8 -Dspring.profiles.active=docker,quartz yami-shop-admin-0.0.1-SNAPSHOT.jar
java 的 api 的 dockerfile 文件内容如下:
FROM anapsix/alpine-java:8_server-jre_unlimited
RUN mkdir -p /opt/projects/yami-shops
WORKDIR /opt/projects/yami-shops
COPY ./yami-shop-api-0.0.1-SNAPSHOT.jar ./
EXPOSE 8086
CMD java -jar -Xms1024m -Xmx1024m -Xss256k -XX:SurvivorRatio=8 -Dspring.profiles.active=docker yami-shop-api-0.0.1-SNAPSHOT.jar
nginx
配置文件内容如下:
server {
listen 80;
server_name 192.168.1.26;
location / {root /usr/share/nginx/html/mall4j-admin;}
location /apis {rewrite ^/apis/(.*)$ /$1 break;
proxy_pass http://mall4j-admin:8111;
}
error_page 404 /404.html;
location = /404-light.html { }
error_page 500 502 503 504 /50x.html;
location = /50x.html {}}
应用 winscp 上传到服务器
4:创立并启动容器
先创立一个自定义的 docker 网络(用于容器之间互通):
docker network create mall4j-network
创立并运行 mysql 容器
docker run --name mall4j-mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root --restart=always -v /root/mall4j/mysql/my.cnf:/etc/mysql/my.cnf -v /root/mall4j/mysql/initdb:/docker-entrypoint-initdb.d -v /root/mall4j/mysql/data:/var/lib/mysql --network mall4j-network -d mysql:5.7.33
解释一下以下参数:
–name mall4j-mysql 指定容器名称
-p 映射容器端口到宿主机端口
-e 环境变量
MYSQL_ROOT_PASSWORD=root 设置默认明码为 root
–restart=always 重启 docker 时主动启动容器
-v 挂载宿主机目录或文件
–network mall4j-network 连贯到指定的自定义网络
-d 容器放弃后盾运行
创立并运行 redis 容器
docker run --name mall4j-redis -p 6379:6379 --restart=always --network mall4j-network -d redis:5.0.10
进入 admin 文件夹
cd /root/mall4j/yami-shop-admin
构建镜像 (不要漏了最初的小数点)
docker build -t yami-shop-admin:0.0.1 .
创立并运行 java 容器(应用 - e 环境变量来指定数据库 url 等参数)
docker run --name mall4j-admin -e TZ=Asia/Shanghai -e MYSQL_HOST=mall4j-mysql -e MYSQL_PORT=3306 -e MYSQL_DATABASE=yami_shops -e MYSQL_USERNAME=root -e MYSQL_PASSWORD=root -e REDIS_HOST=mall4j-redis -e REDIS_PORT=6379 -e REDIS_DATABASE=0 -e REDIS_PASSWORD= -p 8111:8111 -v /root/mall4j/yami-shop-admin/log:/opt/projects/mall4j/log --restart=always --network mall4j-network -d yami-shop-admin:0.0.1
进入 api 文件夹
cd /root/mall4j/yami-shop-api
构建镜像 (不要漏了最初的小数点)
docker build -t yami-shop-api:0.0.1 .
创立并运行 java 容器(应用 - e 环境变量来指定数据库 url 等参数)
docker run --name mall4j-api -e TZ=Asia/Shanghai -e MYSQL_HOST=mall4j-mysql -e MYSQL_PORT=3306 -e MYSQL_DATABASE=yami_shops -e MYSQL_USERNAME=root -e MYSQL_PASSWORD=root -e REDIS_HOST=mall4j-redis -e REDIS_PORT=6379 -e REDIS_DATABASE=0 -e REDIS_PASSWORD= -p 8086:8086 -v /root/mall4j/yami-shop-api/log:/opt/projects/mall4j/log --restart=always --network mall4j-network -d yami-shop-api:0.0.1
创立并运行 nginx 容器
docker run --name mall4j-nginx -p 80:80 -v /root/mall4j/nginx/conf.d:/etc/nginx/conf.d -v /root/mall4j/nginx//html:/usr/share/nginx/html --restart=always --network mall4j-network -d nginx:1.18.0
5:拜访网站
因为验证码是从 java 后端获取的,如果关上页面能获取验证码,阐明试验胜利,默认账号密码 admin 123456