安装docker
参考此文章:developer.aliyun.com/article/145…
1、启动docker服务命令
sudo systemctl start docker
sudo systemctl enable docker
2、配置docker镜像服务
参考此文章:blog.csdn.net/2301_798493…
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": [
"https://do.nark.eu.org",
"https://dc.j8.work",
"https://docker.m.daocloud.io",
"https://dockerproxy.com",
"https://docker.mirrors.ustc.edu.cn",
"https://docker.nju.edu.cn"
]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
docker安装nginx
参考此文章blog.csdn.net/BThinker/ar…
1、下载nginx
docker pull nginx
2、创建三个文件,方便后续在创建的时候分别将docker的相对目录映射到主机
mkdir -p /usr/local/clintproject/
mkdir -p /home/nginx/conf/nginx
mkdir -p /home/nginx/log
3、创建一个nginx容器并且将配置文件复制到主机
参考此文章blog.csdn.net/BThinker/ar…
4、创建docker进程
docker run -itd --name nginx -p 80:80 -p 8081:8081 -v /usr/local/clintproject/:/var/www/html -v /home/nginx/conf/nginx:/etc/nginx -v /home/nginx/log/:/var/log/nginx nginx
指令说明
- -p 80:80:将本机的 80 端口映射到容器的 80 端口。
- -p 8081:8081: 将本机的 8081 端口映射到容器的 8081 端口(你可以根据实际情况调整)。
- -v /usr/local/clintproject/:/var/www/html:将本机的 /usr/local/clintproject/ 目录挂载到容器的 /var/www/html 目录。
- -v /home/nginx/conf/nginx:/etc/nginx:将本机的 /home/nginx/conf/nginx 目录挂载到容器的 /etc/nginx 目录。
- -v /home/nginx/log/:/var/log/nginx:将本机的 /home/nginx/log/ 目录挂载到容器的 /var/log/nginx 目录。
nginx配置文件
/home/nginx/conf/nginx
server {
listen 80;
listen [::]:80;
server_name localhost;
# 添加 API 路径的处理
location /api/ {
# 修正后的后端地址(移除了多余的冒号和斜杠)
proxy_pass http://117.72.54.140:8000/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# 允许所有请求方法
proxy_method $request_method;
}
# 前端静态文件
location /01edumanage {
alias /var/www/html/01edumanage/;
index index.html index.htm;
try_files $uri $uri/ /01edumanage/index.html;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}
4、将前端打包项目静态资源丢在nginx指向的目录,此处ng指向了/var/www/html/01edumanage/,但是这是docker的地址,实际的映射地址是创建ng服务时候的/usr/local/clintproject/
通过http://ip/01edumanage 查看是否可以访问
dccker安装mysq
1、创建文件
#创建mysql需要的几个文件
mkdir -p /home/mysql/conf/conf.d
mkdir -p /home/mysql/conf/mysql.conf.d
2、运行mysql进程
docker run -p 3306:3306 --name mysql -v /home/mysql/log:/var/log/mysql -v /home/mysql/data:/var/lib/mysql -v /home/mysql/conf:/etc/mysql -e MYSQL_ROOT_PASSWORD=root -d mysql:5.7
docker进入某个容器:
docker exec -it mysql bash
docker构建应用
1、通过dockerfile文件来构建镜像
#构建镜像
docker build -t 01edumanage .
2、启动应用
docker run -d --name 01edumanage --link mysql:mysql -p 8000:8000 01edumanage
Dockerfile文件(egg.js项目为例)
# 使用官方 Node.js 运行时作为父镜像
FROM node:18-alpine
# 设置工作目录
WORKDIR /usr/src/app
# 复制 package.json 和 package-lock.json
COPY package*.json ./
# 安装项目依赖
RUN npm install --production
# 复制项目源代码
COPY . .
# Add file execution permissions
RUN chmod +x /usr/src/app
RUN chmod +x node_modules/.bin/egg-scripts
# 暴露端口
EXPOSE 8000
# 安装 egg-scripts 全局依赖
RUN npm install -g egg-scripts
# 添加 egg-scripts 执行权限
RUN chmod +x /usr/local/bin/egg-scripts
# 启动应用
CMD [ "npm", "start" ]
总结:
- 跨域问题由nginx来处理
- 数据库在连接的时候需要打开防火墙让本地电脑连接调试
- nginx可以同时映射多个端口,实现一个容器部署多个服务
- 如果需要像我一样在项目前面加一个前缀,那前端项目打包需要加一个相应的前缀