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
4. 退出mysql终端
exit
docker redis的使用
1. 拉取docker redis镜像
docker pull redis
docker desktop 搜索框搜索 redis,点击 run,把 redis 官方镜像下载并跑起来
2. 创建redis容器
3. docker desktop进入redis终端
redis-cli
在 terminal 输入 redis-cli,进入交互模式
docker nginx的使用
1. 创建nginx容器
搜索 nginx ,点击 run:
输入容器名和要映射的端口:
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 插件。