【NestJS】docker 里使用mysql 、redis和nginx

295 阅读2分钟

docker mysql的使用

1. 拉取docker mysql镜像

docker pull mysql:8.0.30

2. 创建mysql容器

docker run --name nest-mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root -d mysql:8.0.30
  • --name 容器名称
  • -p 访问端口
  • MYSQL_ROOT_PASSWORD=mysql密码

3. docker desktop进入mysql终端

mysql -u root -p

截屏2024-04-12 下午1.43.20.png

4. 退出mysql终端

exit

docker redis的使用

1. 拉取docker redis镜像

docker pull redis

docker desktop 搜索框搜索 redis,点击 run,把 redis 官方镜像下载并跑起来

2. 创建redis容器

截屏2024-04-15 下午5.10.20.png

3. docker desktop进入redis终端

redis-cli

在 terminal 输入 redis-cli,进入交互模式

截屏2024-04-15 下午5.12.50.png

docker nginx的使用

1. 创建nginx容器

搜索 nginx ,点击 run:

输入容器名和要映射的端口:

截屏2024-04-24 下午3.55.54.png

2. 浏览器无法访问 docker 容器端口

问题

设置port 为80/81,浏览器访问返回ERR_EMPTY_RESPONSE

原因

宿主机的 80/81 端口允许其它计算机访问, 但是不允许来自本机的 Docker 容器访问. 必须通过设置 firewalld 规则允许本机的 Docker 容器访问.

3. 在宿主机和容器之间复制文件和目录

把/nginx/html这个目录复制出来:

docker cp  nest-nginx:/usr/share/nginx/html ~/docker/nginx

把/docker/nginx这个目录再复制到容器里:

docker cp ~/docker/nginx nest-nginx:/usr/share/nginx/html

4. nginx 配置的location

修改 nginx 配置的 location,在 server 里配置路由,根据不同的 url 返回不同的静态文件。

共有 4 个 location 语法:

  • location = /aaa 是精确匹配 /aaa 的路由。

  • location /bbb 是前缀匹配 /bbb 的路由。

  • location ~ /ccc..html 是正则匹配。可以再加个 * 表示不区分大小写 location ~ /ccc.*.html

  • location ^~ /ddd 是前缀匹配,但是优先级更高。

这 4 种语法的优先级:

精确匹配(=) > 高优先级前缀匹配(^~) > 正则匹配(~ ~*) > 普通前缀匹配

5. 修改nginx 配置

主配置文
  • 主配置文件,里面一般做一些全局的配置,比如错误日志的目录等等。
docker cp  nest-nginx:/etc/nginx/nginx.conf ~/docker/nginx
子配置文件
  • include 引入的 /etc/nginx/conf.d/*.conf 配置。
  • 一般具体的路由配置都是在这些子配置文件里。
docker cp nest-nginx:/etc/nginx/conf.d ~/docker/nginx

修改后,复制到容器:

docker cp ~/docker/nginx nest-nginx:/etc/nginx/conf.d

然后在容器内的 terminal 执行:

nginx -s reload

重新加载配置文件。

6. 动态资源的反向代理

改下 nginx 配置,添加个路由:

location ^~ /api {
    proxy_pass http://192.168.1.6:3000;
}

这个路由是根据前缀匹配 /api 开头的 url, ^~ 是提高优先级用的。

然后复制到容器里,并 reload:

7. 负载均衡

有 4 种负载均衡策略:

  • 轮询:默认方式。
  • weight:在轮询基础上增加权重,也就是轮询到的几率不同。
  • ip_hash:按照 ip 的 hash 分配,保证每个访客的请求固定访问一个服务器,解决 session 问题。
  • fair:按照响应时间来分配,这个需要安装 nginx-upstream-fair 插件。