手上闲置了一台腾讯云轻量应用服务器,最近打算用docker部署一套轻量化的devops流程,用于测试自己的个人项目。
腾讯云双十一轻量应用服务器特惠:https://curl.zijiebao.com/W9pLemIl
安装环境
安装 Docker CE
查看环境
代码语言:javascript复制cat /etc/redhat-release
// CentOS Linux release 7.6.1810 (Core)
安装所需软件包
代码语言:javascript复制sudo yum install -y yum-utils
device-mapper-persistent-data
lvm2
设置稳定的存储库
代码语言:javascript复制sudo yum-config-manager
--add-repo
https://download.docker.com/linux/centos/docker-ce.repo
安装 docker CE
代码语言:javascript复制sudo yum install docker-ce docker-ce-cli containerd.io
启动 docker
代码语言:javascript复制// 启动 docker 服务
sudo systemctl start docker
or
sudo systemctl start docker.service
// 设置docker 自启动
sudo systemctl enable docker.service
// 关闭 docker 服务
sudo systemctl stop docker.service
// 查看 docker 服务状态
sudo systemctl status docker.service
运行 hello world
代码语言:javascript复制sudo docker run hello-world
docker 常用指令
代码语言:javascript复制-i:容器的标准输入保持打开
-t:让docker分配一个伪终端并绑定到容器的标准输入上
-p : 端口映射 格式为[主机端口:容器端口]
-d : 后台模式运行
-name : 给容器的起一个名字
-v:挂载主机的目录
#删除指定名称镜像
docker rmi hello-world
#删除所有镜像
docker rmi -f $(docker images)
创建docker网络
代码语言:javascript复制// 不指定网络驱动时默认创建的bridge网络
docker network create default_network
// 查看网络内部信息
docker network inspect default_network
// 列所有列表的网络
docker network ls
// 移除指定的网络
docker network rm default_network
安装 MongoDB
从 docker hub 下载 mongodb 官方镜像
代码语言:javascript复制docker pull mongo
创建 mongodb 容器
代码语言:javascript复制docker run --name my-mongo -p 27017:27017 -d mongo --auth
// 如果加需要验证就加--auth,不需要验证,就去掉。默认mongodb是不使用用户认证
查看 mongo 的容器 id
代码语言:javascript复制docker ps -a
进入容器设置用户
代码语言:javascript复制// 逐行执行
docker exec -it 容器id /bin/bash
mongo
use admin
db.createUser({user:"root",pwd:"root",roles:[{role:'root',db:'admin'}]})
exit
创建成功,后续操作都需要用户认证
代码语言:javascript复制Successfully added user: {
"user" : "root",
"roles" : [
{
"role" : "root",
"db" : "admin"
}
]
}
测试 mongo
代码语言:javascript复制mongo 宿主机ip/admin -utest -p
指定 mongodb 配置文件
代码语言:javascript复制docker run --name some-mongo -d mongo --configsvr
使用 navicat 连接数据库
安装 NodeJS
启动 docker 服务
代码语言:javascript复制systemctl start docker
拉取 node 镜像
代码语言:javascript复制docker pull node
确认下 node 是否拉取成功
代码语言:javascript复制docker images
OK
启动镜像
代码语言:javascript复制docker run -i -t node /bin/bash
将 docker 的 3000 端口映射到 tcp 的 3000 并分配给 node
代码语言:javascript复制docker run --name node-app -idt -p 3000:3000 node /bin/bash
映射本地目录到 docker
代码语言:javascript复制docker run -it -p 3000:3000 -v /home/unishop:/home/unishop --privileged=true node /bin/bash
docker run -it -d -p 3000:3000 -p 3001:3001 -v /home/code:/home/code --privileged=true --name node node /bin/bash
docker run --name node --network main-net -it -d -p 3000:4000 -v /home/node:/home/node --privileged=true node /bin/bash
查看 node 版本号
代码语言:javascript复制node -v
// v18.17.1
安装 pm2
代码语言:javascript复制npm i pm2 -g
// pm2@5.3.0
安装 Nginx
查找 nginx 镜像
代码语言:javascript复制docker search nginx
拉取官方镜像
代码语言:javascript复制docker pull nginx
nginx 常用指令
代码语言:javascript复制// 启动 nginx 容器
docker run -d --name nginx nginx
// 查看 nginx 实例进程
docker top nginx
// 进入 nginx 容器
docker exec -it nginx bash
// 杀死 nginx 容器实例
docker kill -s KILL
// 重启 nginx 容器实例
docker restart nginx
// 移除 nginx 容器实例
docker rm -f -v 容器id
基于 docker run -d --name nginx nginx 方法启动 nginx 后,docker 容器并没有对外暴露访问 nginx 的端口,即无法通过当前主机外部浏览器器访问 nginx。使用如下命令来指定 docker 容器中 nginx 实例对外开放的端口。
代码语言:javascript复制docker run --name nginx -d -p 80:80 nginx
测试 nginx
安装Git
代码语言:javascript复制yum install git
验证
代码语言:javascript复制git --version
git version 1.8.3.1
配置
升级脚本
首先在项目根目录创建rebuild.sh文件,映射容器目录,指定node版本、源和命令。在项目创建devops目录。
代码语言:javascript复制git pull
docker run --rm -v /likemusic/likemusic_h5:/likemusic_h5 -w /likemusic_h5 node:16.13.0 npm --registry https://registry.npm.taobao.org install
docker run --rm -v /likemusic/likemusic_h5:/likemusic_h5 -w /likemusic_h5 node:16.13.0 npm run build
cd /likemusic/likemusic/devops
docker-compose restart
更新代码
使用git将代码拉至服务器。
代码语言:javascript复制git pull xxx
docker-compose
创建docker-compose目录配置文件。
代码语言:javascript复制version: '2'
services:
web:
image: openjdk
restart: always
ports:
- 8080:8080
container_name: likemusic-h5
volumes:
- ../:/likemusic
working_dir: /likemusic
command: java --add-opens java.base/java.lang=ALL-UNNAMED -jar ./ruoyi-admin/target/ruoyi-admin.jar
environment:
TZ: Asia/Shanghai
browser:
image: nginx
restart: always
ports:
- 80:80
- 443:443
container_name: likemusic-nginx
volumes:
- ./nginx.conf:/etc/nginx/nginx.conf
- ./certs:/etc/nginx/certs
- /likemusic/likemusic/ruoyi-ui/dist:/usr/share/nginx/html/likemusic/
- /likemusic/likemusic_h5/dist:/usr/share/nginx/html/likemusic_pc/
- /likemusic/like_music_mini_web/dist:/usr/share/nginx/html/like_music_mini_web/
- /likemusic/likemusic/wechat-file/TMOTc54Vrs.txt:/usr/share/nginx/html/wechat-file/TMOTc54Vrs.txt
nginx
创建nginx配置文件。
代码语言:text复制worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
client_max_body_size 100m;
gzip_static on;
gzip_proxied any;
server {
listen 80;
location / {
alias /usr/share/nginx/html/likemusic_pc/;
try_files $uri $uri/ /likemusic_pc/index.html /index.html;
index index.html index.htm;
autoindex on;
}
location /likemusic-manager {
alias /usr/share/nginx/html/likemusic/;
try_files $uri $uri/ /likemusic/index.html /index.html;
index index.html index.htm;
autoindex on;
}
location /like_music_mini_web {
alias /usr/share/nginx/html/like_music_mini_web/;
try_files $uri $uri/ /like_music_mini_web/index.html /index.html;
index index.html index.htm;
autoindex on;
}
location /likemusic-prod-api/ {
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header REMOTE-HOST $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass https://tingdong.cn:8080/;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
location /TMOTc54Vrs.txt {
alias /usr/share/nginx/html/wechat-file/TMOTc54Vrs.txt;
try_files $uri $uri/ /index.html;
index index.html index.htm;
autoindex on;
}
}
server {
server_name manager.tingdong.cn;
listen 80;
location / {
alias /usr/share/nginx/html/likemusic/;
try_files $uri $uri/ /likemusic/index.html /index.html;
index index.html index.htm;
autoindex on;
}
location /likemusic-prod-api/ {
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header REMOTE-HOST $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://172.27.226.102:8080/;
}
location = /50x.html {
root html;
}
}
}
执行
只需要一行代码即可执行部署。
代码语言:javascript复制./rebuild-h5.sh
执行成功。