Volumes概念
Mysql
通过 Docker Desktop 查询下 MySQL 的镜像:(需要科学上网),pull下来后
这里端口 3306 就是 client 连接 mysql 的端口。
(另一个 33060 端口是 mysql8 新加的管理 mysql server 的端口,这里用不到)
指定 Volumes,用本地目录作为数据卷挂载到容器的 /var/lib/mysql 目录,这个是 mysql 保存数据的目录。在 windows 下就是 D://xxx/xx 的形式
------
为什么Volumes下的container path 是/var/lib/mysql ?
在 mysql 镜像的 dockerfile 里可以看到这个 volume 声明
为什么Envionment variables是MYSQL_ROOT_PASSWORD?
如果我们不加这个环境变量,直接运行容器,会发现容器会这样提示,还是要你输入这个变量值
使用 MYSQL_ROOT_PASSWORD
环境变量可以确保在容器启动时设置 root 用户的密码,以提高数据库的安全性。
如果要设置 用户名 和 密码 可以配置
MYSQL_USER=<用户名> -e MYSQL_PASSWORD=<密码> (未实验)
Redis
创建redis容器
MongoDB
DockerFile
Docker Compose
Docker 通讯
Docker 重启策略
mongodb 的 terminal 可执行的命令是基于这个文件夹
前端Dockerfile文件配置
曾经遇到的一个坑, 没有copy lock文件到容器, 使用npm i 安装导致线下线上库版本不一致问题。
FROM node:16 as builder
WORKDIR /app
COPY package.json ./
COPY pnpm-lock.yaml .
RUN npx pnpm install --registry=http://registry.npmmirror.com
## Storing node modules on a separate layer will prevent unnecessary npm installs at each build
COPY . .
## Build the angular app in production mode and store the artifacts in dist folder
RUN npm run build:test
FROM nginx:1.21.6-alpine
## Copy our default nginx config
COPY nginx/default.conf /etc/nginx/conf.d/
## Remove default nginx website
RUN rm -rf /usr/share/nginx/html/*
## From 'builder' stage copy over the artifacts in dist folder to default nginx public folder
COPY --from=builder /app/dist /usr/share/nginx/html
CMD ["nginx", "-g", "daemon off;"]