Docker部署项目
编辑器上传文件到服务器
Vsocde
贴一下我的配置,仅作记录
1
2
3
4
5
6
7
8
9
10{
"name": "My Server",
"host": "114.115...",
"protocol": "sftp",
"port": 22,
"username": "root",
"remotePath": "/opt/docker/nginx/html",
"context": "public",
"uploadOnSave": false
}
Idea
贴一下我的配置,仅作记录
之后可以直接 右键文件 –> 部署
启动服务
文件获取
创建文件目录
1 | |-- /opt/docker # 云服务器文件夹地址 |
运行服务
查看
Docker
网络桥段1
docker network ls
创建网络桥段
1
2# docker network create 桥段名
docker network create app删除网络桥段
1
docker network rm 桥段名
在
/opt/docker/
下创建docker-compose.yml
(根据个人需求添加代码)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
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85version: '3.8' # 对应 Docker 版本: https://docs.docker.com/compose/compose-file/compose-versioning/
services:
nginx:
restart: always # 重启策略
image: "nginx:latest" # 镜像名 (${image}:${tag}) 如果镜像在本地不存在,Compose将会尝试拉取镜像
container_name: "nginx" # 容器名 (自定义)
ports: # 端口号
- "80:80" # Http (宿主机:容器)
- "443:443" # Https (宿主机:容器)
volumes: # 数据卷
- /opt/docker/nginx/nginx.conf:/etc/nginx/nginx.conf # 配置文件 (宿主机:容器)
- /opt/docker/nginx/conf.d:/etc/nginx/conf.d # 配置文件夹 (宿主机:容器)
- /opt/docker/nginx/html:/usr/share/nginx/html # 前端打包文件 (宿主机:容器)
- /opt/docker/nginx/nginx:/var/log/nginx # 日志文件夹 (宿主机:容器)
# - /opt/docker/nginx/ssl/ # SSL证书地址 (自定义位置)
networks: # 网络桥段
- app # 指定在app网络桥段下网络互通
redis:
restart: always # 重启策略
image: "redis:latest" # 镜像名 (${image}:${tag})
container_name: "redis" # 容器名 (自定义)
ports:
- "6379:6379" # 端口号 (宿主机:容器)
volumes: # 数据卷
- /opt/docker/redis/redis.conf:/etc/redis/redis.conf # 配置文件 (宿主机:容器)
- /opt/docker/redis/data/:/data # 数据文件夹 (宿主机:容器)
command: [ "redis-server","/etc/redis/redis.conf" ] # 启动 redis 服务
networks: # 网络桥段
- app # 指定在app网络桥段下网络
mysql:
restart: always # 重启策略
image: "mysql:latest" # 镜像名 (${image}:${tag})
container_name: "mysql" # 容器名 (自定义)
ports:
- "3306:3306" # 端口号 (宿主机:容器)
volumes: # 数据卷
- /opt/docker/mysql/conf.d/:/etc/mysql/conf.d # 配置文件夹 (宿主机:容器)
- /opt/docker/mysql/data/:/var/lib/mysql # 数据文件夹 (宿主机:容器)
- /opt/docker/mysql/logs/:/logs # 日志文件夹 (宿主机:容器)
environment:
MYSQL_ROOT_PASSWORD: 123456 # root用户密码 (自定义)
TZ: Asia/Shanghai # mysql时区
command:
# MySQL8的密码验证方式默认是 caching_sha2_password,但是很多的连接工具还不支持该方式
# 就需要手动设置下mysql的密码认证方式为以前的 mysql_native_password 方式
--default-authentication-plugin=mysql_native_password
--character-set-server=utf8mb4
--collation-server=utf8mb4_general_ci
--explicit_defaults_for_timestamp=true
--lower_case_table_names=1 # 设置表名大小写不敏感
networks: # 网络桥段
- app # 指定在app网络桥段下网络
nacos:
restart: always # 重启策略
image: "nacos/nacos-server" # 镜像名 (${image}:${tag})
container_name: "nacos" # 容器名 (自定义)
ports: # 端口号
- "8848:8848"
environment:
MODE: standalone # 单机启动
networks: # 网络桥段
- app # 指定在app网络桥段下网络
rabbitmq:
restart: always # 重启策略
image: "rabbitmq" # 镜像名 (${image}:${tag})
container_name: "rabbitmq" # 容器名 (自定义)
ports: # 端口号
- "15672:15672"
environment:
TZ: Asia/Shanghai # 时区
RABBITMQ_DEFAULT_USER: root # 登录账号
RABBITMQ_DEFAULT_PASS: 123456 # 登录密码
RABBITMQ_DEFAULT_VHOST: / # 表示权限,谁能访问,/全部所有
networks: # 网络桥段
- app # 指定在app网络桥段下网络
networks:
app: # Use a custom driver
driver_opts:
com.docker.network.enable_ipv6: "true" # 开启IpV6访问启动服务
1
docker-compose -f /opt/docker/docker-compose.yml up -d
查看项目是否正常运行
1
docker-compose ps -a
启动
Rabbitmq
图形化界面(需要Rabbitmq
服务再开启)1
2
3
4
5
6
7
8
9
10
11# 进入容器内
docker exec -it rabbitmq bash
# 进入 rabbitmq 默认安装目录
cd /opt/rabbitmq/sbin
# 开启图形化管理
./rabbitmq-plugins enable rabbitmq_management
# 退出容器
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|-- /opt/docker # 云服务器文件夹地址
|-- backend # 项目存放的文件夹
|-- backend-0.0.1-SNAPSHOT.jar # jar包
|-- Dockerfile # 构建镜像文件
|-- nginx # Nginx 存放的文件夹
|-- conf.d
|-- default.conf # nginx 配置
|-- html # 前端打包后的文件放到这个文件夹
|-- 50x.html
|-- index.html
|-- nginx # nginx 日志文件夹
|-- access.log
|-- error.log
|-- nginx.conf # nginx 全局配置
|-- redis # Redis 存放的文件夹
|-- redis.conf # redis 配置
|-- data # 数据地址
|-- appendonly.aof # 持久化AOF文件
|-- dump.rdb # 数据文件
|-- mysql # Mysql 存放的文件夹
|-- conf.d
|-- docker.conf
|-- mysql.conf # mysql 配置
|-- mysql # 数据文件
|-- #innodb_temp
|-- sys
|-- ...
|-- logs # 日志文件
|-- docker-compose.yml # docker-compose 执行文件创建
docker
网络桥段1
docker network create app
在
/opt/docker/
下创建docker-compose.yml
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
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77version: '3.8' # 对应 Docker 版本: https://docs.docker.com/compose/compose-file/compose-versioning/
services:
backend:
build: # 构建
context: ./backend # 需要构建的文件路径 (可以是Dockerfile的文件路径,也可以是到链接到git仓库的url)
dockerfile: ./Dockerfile # 不能和image同时使用
container_name: "backend"
ports: # 端口号
- "8080:8080" # 端口号 (宿主机:容器)
depends_on: # 依赖项 (需等待 redis、mysql 先启动, backend 再启动)
- redis
- mysql
networks:
- app
# links: # 容器之间链接 (@host -> @容器别名) 即将被官方遗弃
# - "redis:redis" # 容器名:别名 (redis://user:password@127.0.0.1:6379/db -> redis://user:password@redis:6379/db)
# - "mysql:mysql" # 容器名:别名 (mysql://root:password@127.0.0.1:3306/db -> mysql://root:password@mysql:3306/db)
nginx:
restart: always # 重启策略
image: "nginx:latest" # 镜像名 (${image}:${tag})
container_name: "nginx" # 容器名 (自定义)
ports: # 端口号
- "80:80" # Http (宿主机:容器)
- "443:443" # Https (宿主机:容器)
volumes: # 数据卷
- /opt/docker/nginx/nginx.conf:/etc/nginx/nginx.conf # 配置文件 (宿主机:容器)
- /opt/docker/nginx/conf.d:/etc/nginx/conf.d # 配置文件夹 (宿主机:容器)
- /opt/docker/nginx/html:/usr/share/nginx/html # 前端打包文件 (宿主机:容器)
- /opt/docker/nginx/nginx:/var/log/nginx # 日志文件夹 (宿主机:容器)
# - /opt/docker/nginx/ssl/ # SSL证书地址 (自定义位置)
depends_on: # 依赖项
- backend
networks: # 网络桥段
- app # 指定在app网络桥段下网络互通
redis:
restart: always # 重启策略
image: "redis:latest" # 镜像名 (${image}:${tag})
container_name: "redis" # 容器名 (自定义)
ports:
- "6379:6379" # 端口号 (宿主机:容器)
volumes: # 数据卷
- /opt/docker/redis/redis.conf:/etc/redis/redis.conf # 配置文件 (宿主机:容器)
- /opt/docker/redis/data/:/data # 数据文件夹 (宿主机:容器)
command: [ "redis-server","/etc/redis/redis.conf" ] # 启动 redis 服务
networks: # 网络桥段
- app # 指定在app网络桥段下网络
mysql:
restart: always # 重启策略
image: "mysql:latest" # 镜像名 (${image}:${tag})
container_name: "mysql" # 容器名 (自定义)
ports:
- "3306:3306" # 端口号 (宿主机:容器)
volumes: # 数据卷
- /opt/docker/mysql/conf.d/:/etc/mysql/conf.d # 配置文件夹 (宿主机:容器)
- /opt/docker/mysql/data/:/var/lib/mysql # 数据文件夹 (宿主机:容器)
- /opt/docker/mysql/logs/:/logs # 日志文件夹 (宿主机:容器)
environment:
MYSQL_ROOT_PASSWORD: 123456 # root用户密码 (自定义)
TZ: Asia/Shanghai # mysql时区
command:
# MySQL8的密码验证方式默认是 caching_sha2_password,但是很多的连接工具还不支持该方式
# 就需要手动设置下mysql的密码认证方式为以前的 mysql_native_password 方式
--default-authentication-plugin=mysql_native_password
--character-set-server=utf8mb4
--collation-server=utf8mb4_general_ci
--explicit_defaults_for_timestamp=true
--lower_case_table_names=1 # 设置表名大小写不敏感
networks: # 网络桥段
- app # 指定在app网络桥段下网络
networks:
app: # 使用默认配置
name: app # 否则会多创建一个 docker_app 桥段 (可选)运行项目
1
docker-compose /opt/docker/docker-compose.yml up -d
注意点
后端项目使用的
Redis
和MySQL
地址要换成网络桥段1
2
3
4# host -> 容器别名
redis://user:password@127.0.0.1:6379/db -> redis://user:password@redis:6379/db
mysql://root:password@127.0.0.1:3306/db -> mysql://root:password@mysql:3306/db容器启动后,数据库并没有数据,需要导入数据库
防火墙一定要打开,否则访问不了
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 小四先生的云!
评论