Docker部署
# 一、安装docker
提示
- docker镜像默认从官方仓库获取,如果下载慢,可以配置为国内的镜像仓库,参考教程 (opens new window)
- 安装桌面端,已经包含docker引擎和docker compose。服务器一般单独安装docker engine和docker compose
# Linux安装docker
# Windows安装docker桌面端
- 参考教程(推荐安装WSL子系统和Windows Terminal,然后安装Docker)
- docker安装教程
# Mac安装docker桌面端
# 二、docker介绍
docker 是一个开源的应用容器引擎,可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的镜像中,然后发布到任何流行的 Linux 或 Windows 操作系统机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。
# docker常用命令
docker -v # 查看docker版本,检查是否安装成功
docker ps # 查看运行的容器
docker ps -a # 查看所有容器
docker images # 查看本地镜像
docker info # 查看docker的系统级信息
docker pull [image] # 拉取镜像
docker run [image] # 运行容器
docker restart [container] # 重启容器
docker stop [container] # 停止容器
docker stats [container] # 查看容器资源使用情况
docker inspect [container] # 查看容器元数据
docker logs -n 1000 [container] # 查看容器的前1000条日志信息
docker exec -it [container] /bin/bash # 进入运行中的容器内部
docker-compose up -d # 后台方式运行docker-compose.yml中容器
docker-compose down # 停止docker-compose.yml中容器
docker network create -d bridge fastbee-bridge # 创建一个新的网络,命名为fastbee-bridge
docker network ls # 显示所有网络
docker network connect fastbee-bridge test # test容器加入到自定义网络
docker inspect fastbee-bridge # 查看fastbee-bridge网络里的容器
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# docker网络模式
docker中有5中网络模式,可以通过--net=***指定容器的网络模式。
bridge模式 # 默认,外界访问容器内的服务时,需要访问宿主机的 IP 以及宿主机的端口 port
host模式 # 容器的IP地址即为宿主机的IP地址
container模式 # 容器会共享其他容器的网络环境
overlay模式 # 跨主机通讯
none模式 # 不为容器构造任何网络环境,容器只能使用127.0.0.1的本机网络
1
2
3
4
5
2
3
4
5
# 创建网桥
网桥用于各个容器间通讯,如果各个容器是单独运行的,需要使用下面命令先创建网桥
docker network create -d bridge fastbee-bridge
1
# docker-compose常用命令
docker-compose -v # 查看docker-compose版本,检查是否安装成功
docker-compose up -d # 构建并启动服务中容器
docker-compose down # 停止并删除服务中容器
docker-compose ps # 列出服务中所有容器
docker-compose start # 启动服务中的容器
docker-compose stop # 停止服务中正在运行的容器
docker-compose restart # 重启服务中的容器
docker-compose logs # 查看服务中容器的输出
docker-compose pull # 拉取服务中依赖的镜像
docker-compose config # 验证并查看compose文件配置
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
# 三、docker-compose安装系统
提示
- 通过
docker-compose -v
,检查是否已安装docker-compose - 以后重新部署项目,只需替换
server.jar
文件和html
目录 - 使用Emqx5.0版本,不需要启用插件 ,
emqx.conf文件
中配置控制台账号为admin admin123
docker-compose把项目依赖的应用和环境一起安装到服务器或本地,执行以下步骤完成安装:
- 先把项目中的 docker/data/ 文件夹上传到服务器或本地的
/var/
目录下,商业版本需要重新打包后端jar包 - 进入服务器或本地的
/var/data/
目录执行:docker-compose up -d
等待执行后完成部署 - 部署包含emqx,可以通过18083端口,访问EMQX控制台,默认账号密码
admin admin123
# 可先拉取服务中镜像,时间取决于网络情况,可配置docker采用国内镜像源
docker-compose pull
# 构建并启动服务中容器
docker-compose up -d
# 停止并删除服务中容器
docker-compose down
# 创建data文件夹
mkdir /var/data
# 文件夹分配读写可执行权限
sudo chmod 777 /var/data
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
# 四、docker安装系统
提示
- 运行容器前,请先创建网桥,用于容器间通讯:
docker network create -d bridge fastbee-bridge
- 前后端部署直接在宿主机替换文件,通过volume映射到容器内部。volume参数用于把容器数据保存到宿主机,是docker容器数据持久化保存的一种方式。
- 后端部署替换宿主机
/var/data/java/server.jar
文件,前端部署替换/var/data/nginx/html
目录下文件
# 安装Redis7.0
执行下面命令安装,其中requirepass 是访问密码
docker run \
--name redis \
--publish 6379:6379 \
--volume /var/data/redis:/usr/local/etc/redis \
--volume /var/data/redis/data:/data \
--network fastbee-bridge \
--restart unless-stopped \
--detach \
redis:7.0.0 \
--requirepass "fastbee" \
--appendonly yes
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
# 安装Mysql5.7
提示
- 官方的Mysql镜像默认采用latin编码,不支持中文,改为utf8编码,同时设置了时区和大小写敏感
- MYSQL_ROOT_PASSWORD 是root用户密码
- 执行命令安装Mysql
docker run \
--name mysql \
--publish 3306:3306 \
--env TZ=Asia/Shanghai \
--env MYSQL_DATABASE="fastbee" \
--env MYSQL_ROOT_PASSWORD=fastbee \
--volume /var/data/mysql/mysql:/var/lib/mysql \
--network fastbee-bridge \
--restart unless-stopped \
--detach \
mysql:5.7 \
--character-set-server=utf8 \
--collation-server=utf8_unicode_ci \
--lower-case-table-names=1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
进入容器内部,执行命令:
docker exec -it mysql /bin/bash
修改编码,直接复制进去执行,exit用于退出容器
tee /etc/mysql/conf.d/mysql.cnf <<-'EOF'
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
EOF
exit
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
- 使用Mysql管理工具(例如 Navcat),打开fastbee数据库,导入项目中的
springboot/sql/fastbee.sql
脚本。
# 安装JDK1.8
提示
后端已有打包好的文件,可直接上传到服务器或本地的 /var/data/java
目录下,查看 >>
后端打包好的fastbee-admin.jar文件,改为server.jar上传到 /var/data/java/ 目录下,然后执行以下命令
docker run \
--name java \
--publish 8080:8080 \
--volume /var/data/java/server.jar:/server.jar \
--volume /var/data/java/uploadPath:/uploadPath \
--volume /var/data/java/logs:/logs \
--volume /etc/localtime:/etc/localtime \
--env "TZ=Asia/Shanghai" \
--network fastbee-bridge \
--restart unless-stopped \
--detach \
openjdk:8-jre \
java -jar /server.jar
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
# 安装Nginx
提示
前端已有打包好的文件,可直接上传到服务器或本地的 /var/data/nginx
目录下,查看 >>
- 前端打包后,dist文件夹中内容上传到
/var/data/nginx/html
目录下,然后执行以下命令
docker run \
--name nginx \
--volume /var/data/nginx/html:/usr/share/nginx/html \
--publish 80:80 \
--network fastbee-bridge \
--restart unless-stopped \
--detach \
nginx:stable
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
进入容器内部,执行命令:
docker exec -it nginx /bin/sh
修改配置文件,直接复制进去执行,exit用于退出容器
tee /etc/nginx/nginx.conf <<-'EOF'
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
gzip on;
gzip_min_length 1k;
gzip_buffers 16 64K;
gzip_http_version 1.1;
gzip_comp_level 5;
gzip_types text/plain application/javascript application/x-javascript text/javascript text/css application/xml;
gzip_vary on;
gzip_proxied expired no-cache no-store private auth;
gzip_disable "MSIE [1-6]\.";
server {
listen 80;
server_name localhost;
charset utf-8;
location / {
root /usr/share/nginx/html;
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://java:8080/;
}
location /api/v4/ {
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://emqx:8081/api/v4/;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
EOF
exit
1
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
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
- 重启容器,使配置生效:
docker restart nginx
# 安装Emqx5(可选)
提示
Emqx作为系统的mqtt消息服务器,集成需要配置Http认证和Webhook, 配置教程参考>>
docker run \
--name emqx \
--publish 1883:1883 \
--publish 8083:8083 \
--publish 8883:8883 \
--publish 8084:8084 \
--publish 18083:18083 \
--env TimeZone=Asia/Shanghai \
--volume /etc/localtime:/etc/localtime \
--restart unless-stopped \
--detach \
emqx:5.1
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
# 安装TDengin(可选)
执行下面命令安装,设置hostname用户客户端连接,详细说明
docker run -d \
--name tdengine \
--hostname="fastbee" \
--volume /var/data/taos/log:/var/log/taos \
--volume /var/data/taos/data:/var/lib/taos \
--publish 6030-6049:6030-6049 \
--publish 6030-6049:6030-6049/udp \
--restart unless-stopped \
--volume /etc/localtime:/etc/localtime \
--env "TZ=Asia/Shanghai" \
tdengine/tdengine:2.6.0.12
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
上次更新: 2024/05/30, 00:20:58