docker 部署博客项目
发现很久没有写文章了,等我的博客完成,我应该也会继续写的
- 连接远程服务器
ssh root@xxxxxx
- yum更新一下
yum update
用来解压zip压缩包
yum install unzip
安装相关的依赖
yum install -y yum-utils device-mapper-persistent-data lvm2
使用阿里镜像源
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
正式安装docker
yum install docker-ce docker-ce-cli container.io
docker启动服务
systemctl start docker 启动
systemctl enable docker 开机启动启动
查看版本
docker -v
修改镜像源(踩过坑这个)
rm -f /etc/docker 这一步很重要先删除
mkdir -p /etc/docker 创建文件
cd /etc/docker
vim /etc/docker/daemon.json
复制下面的代码修改为国内镜像
{ "registry-mirrors": [ "https://registry.docker-cn.com" ] }
保存并退出
重启服务和docker
systemctl daemon-reload
systemctl restart docker
安装mysql
docker pull daocloud.io/library/mysql:8.0.21
docker images 查看安装的mysql镜像
docker run -d -p 3306:3306 --name mysql -e MYSQL_ROOT_PASSWORD=abc123 mysql镜像id
docker ps 查看运行的镜像和容器,会有mysql
mysql这个容器会被运行起来
docker exec -it 容器id sh 进入mysql容器内部
mysql -uroot -p
然后出入密码 abc123
远程连接授权
grant all privileges on
*.*
to root@‘%’ with grant option;flush privileges; 刷新权限
ALTER USER ‘admin’@‘%’ IDENTIFIED WITH mysql_native_password BY ‘123456’; 更改密码
flush privileges;
exit 退出mysql
exit 退出容器
安装redis
docker pull redis 拉取镜像
docker run -di --name=redis -p 6379:6379 redis || 镜像id 运行镜像
docker exec -it redis /bin/bash 进入redis这个容器
docker exec -it 容器id sh 进入redis这个容器
安装nginx
docker pull nginx
用于nginx映射文件使用的
mkdir -p /home/nginx/conf
mkdir -p /home/nginx/log
mkdir -p /home/nginx/html
运行这个容器
docker run --name nginx -p 80:80 -d nginx
将容器的nginx.conf文件复制到宿主机
docker cp nginx:/etc/nginx/nginx.conf /home/nginx/conf/nginx.conf
docker cp nginx:/etc/nginx/conf.d /home/nginx/conf/conf.d
docker cp nginx:/usr/share/nginx/html /home/nginx/
删除这个容器
docker stop nginx
docker rm nginx
docker rm -f nginx 强制删除
运行这个容器,并映射我们创建的文件目录
docker run -p 80:80 --name nginx -v /home/nginx/conf/nginx.conf:/etc/nginx/nginx.conf -v /home/nginx/conf/conf.d:/etc/nginx/conf.d -v /home/nginx/log:/var/log/nginx -v /home/nginx/html:/usr/share/nginx/html -d nginx
docker restart nginx 重启nginx
存放前端代码
将打包好的前端代码放入 /home/nginx/html 这个目录下
后端项目,在根目录下,写Dockerfile 文件,写入下面代码, 安装node镜像,跑项目
这里踩过坑, pm2 和 cross-env 这些插件属于开发环境,
“prd”: “cross-env NODE_ENV=production pm2 start bin/www”, 错误写法
“prd”: " start bin/www", 正确写法
Dockerfile
# 使用node镜像
FROM daocloud.io/library/node:14.9.0
# 在容器中新建目录文件夹 koa2
RUN mkdir -p /koa2
# 将 /koa2设置为默认工作目录
WORKDIR /koa2
# 将 package.json 复制默认工作目录
COPY package.json /koa2/package.json
# 安装依赖
RUN yarn config set register https://registry.npm.taobao.org
RUN yarn --production 只安装生产环境的依赖
# 再copy代码至容器
COPY ./ /koa2
#3000端口
EXPOSE 3000
#等容器启动之后执行脚本
CMD yarn prd
把后端代码上传到服务器,打包 koa2.zip
放到 /root/koa2.zip
解压打包的文件
unzip -u -d server koa2.zip
docker运行后端代码 在根目录下运行
docker build -t koa2:v1.0 ./server
docker run -d -p 3000:3000 --name server 镜像id 运行容器
我的node 跑起来的端口是 3000
nginx配置 有配置history路由刷新,发送http请求的
user root;
worker_processes auto;
error_log /var/log/nginx/error.log notice;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
#tcp_nopush on;
keepalive_timeout 64;
#gzip on;
server {
listen 80;
server_name 39.99.232.239;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
try_files $uri $uri/ /index.html;
}
location ~ /api/ {
proxy_pass http://39.99.232.239:3000;
}
}
include /etc/nginx/conf.d/*.conf;
}