Docker部署
Docker部署应用
涉及Docker命令
镜像操作
1 | 查看本地镜像 |
容器操作
1 | 列出运行中的容器 |
镜像运行到容器
1 | 镜像运行到容器 /bin/bash 指定容器内目录 |
日志
1 | docker logs [OPTIONS] CONTAINER |
部署应用
第一种:挨个部署
部署流程
- 购买服务器
- 安装docker
- 部署后端
- 准备后端基础运行环境
- jdk
- redis
- mysql
- 拉镜像
- 启动mysql
- 服务器开放对外mysql端口
- navicat连接服务器,执行初始化sql脚本
- 制作后端应用镜像
- maven install 打包
- 编写Docfile
- 两者都上传到服务器同一目录下
- 进入该目录,制作镜像
- 后端启动脚本
- 脚本内容
- 编写为应用启动脚本
- 启动后端应用
- 验证
- 查看启动日志
- 开放服务器端口号
- PostMan测试接口
- 关闭服务器端口号
- 准备后端基础运行环境
- 部署前端
- 前端基础运行环境
- 前端代码打包
- 配置nginx
- 启动nginx
部署后端
后端基础运行环境
jdk,redis,mysql
jdk
1
2
3
4
5
6
7docker search jdk
拉取openjdk最新镜像
docker pull openjdk
运行
docker run -d -it --name openjdk openjdk /bin/bash
验证
docker exec -it openjdk /bin/bashredis
1
2
3
4
5
6
7
8
9拉取redis最新镜像
docker pull redis:latest
运行到容器中
-p 6379:6379:映射容器服务的 6379 端口到宿主机的 6379 端口。外部可以直接通过宿主机ip:6379 访问到 Redis 的服务。
docker run -itd --name redis-hxr -p 6379:6379 redis
测试连接redis
docker exec -it redis-hxr /bin/bashmysql
拉取镜像并运行到容器
1
2
3
4
5
6
7
8
9查看mysql版本
看不到版本?
docker search mysql
拉取指定版本镜像
docker pull mysql:8.0.19
运行
docker run -itd --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=*** mysql:8.0.19
进入容器
docker exec -it mysql bash开放服务器端口
连接mysql
执行初始化SQL脚本
制作后端应用镜像
maven install 打包

编写Docfile
1
2
3
4
5FROM java:8
ARG JAR_FILE=./*.jar
COPY ${JAR_FILE} app.jar
ENV TZ=Asia/Shanghai
ENTRYPOINT ["java","-jar","/app.jar"]两者都上传到服务器同一目录下

制作镜像
1
docker build -t eladmin /home/eladmin
或者
1
2
3cd /home/eladmin
docker build -t eladmin . # .代表Docfile所在目录是当前目录
后端启动脚本
内容
1
2
3
4
5
6
7
8
9
10docker run -d \
--name eladmin \
--restart always \
-p 8000:8000 \
-e "TZ=Asia/Shanghai" \
-e DB_HOST=172.17.0.1 \
-e DB_PWD=*** \
-e REDIS_HOST=172.17.0.1 \
-v /home/data/:/home/eladmin/ \
eladmin1
2
3
4
5
6
7
8
9
10docker run -d \ # -d后台启动
--name eladmin \ # 镜像启动为容器的名称
--restart always \ # 随docker重启而重启;失败重启?
-p 8000:8000 \ # 指定端口映射
-e "TZ=Asia/Shanghai" \
-e DB_HOST=172.17.0.1 \ # mysql地址是docker地址 宿主机ifconfig查看
-e DB_PWD=*** \ # todo
-e REDIS_HOST=172.17.0.1 \ # redis地址是docker地址
-v /home/data/:/home/eladmin/ \ # docker内指定目录挂载到与宿主机
eladmin # 镜像名称脚本
编写
新建文件
start.sh1
2
3
4
5
6
7
8
9
10docker run -d \
--name eladmin \
--restart always \
-p 8000:8000 \
-e "TZ=Asia/Shanghai" \
-e DB_HOST=172.17.0.1 \
-e DB_PWD=*** \
-e REDIS_HOST=172.17.0.1 \
-v /home/data/:/home/eladmin/ \
eladmin添加执行权限
1
chmod +x start.sh
执行
1
/home/eladmin/start.sh
部署前端
前端运行环境
nginx
1
nginx
前端项目
检查生产配置

打包
1
npm run build:prod

上传
1
/home/nginx/html/eladmin

nginx配置
/home/nginx目录创建nginx.conf1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29user nginx;
worker_processes 1;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
#tcp_nopush on;
keepalive_timeout 65;
include /etc/nginx/conf.d/*.conf; # server单独配置
}/home/nginx/conf.d目录创建eladmin.conf,配置 server1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57server
{
listen 80;
server_name 域名/外网IP;
index index.html;
root /usr/share/nginx/html/eladmin/dist; #dist上传的路径
# 避免访问出现 404 错误
location / {
try_files $uri $uri/ @router;
index index.html;
}
location @router {
rewrite ^.*$ /index.html last;
}
# 接口
location /api {
proxy_pass http://172.17.0.1:8000;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Port $server_port;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
# 授权接口
location /auth {
proxy_pass http://172.17.0.1:8000;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Port $server_port;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
# WebSocket 服务
location /webSocket {
proxy_pass http://172.17.0.1:8000;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Port $server_port;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
# 头像
location /avatar {
proxy_pass http://172.17.0.1:8000;
}
# 文件
location /file {
proxy_pass http://172.17.0.1:8000;
}
}前端启动
1
2
3
4
5
6
7
8
9
10docker run -d \
--name nginx --restart always \
-p 80:80 -p 443:443 \
-e "TZ=Asia/Shanghai" \
-v /home/nginx/nginx.conf:/etc/nginx/nginx.conf \
-v /home/nginx/conf.d:/etc/nginx/conf.d \
-v /home/nginx/logs:/var/log/nginx \
-v /home/nginx/cert:/etc/nginx/cert \
-v /home/nginx/html:/usr/share/nginx/html \
nginx:alpine
第二种:componse编排
用配置文件一次编排应用所需所有镜像。