首先一点需要的linux命令
启动防火墙
sudo ufw enable
查看防火墙端口状态
sudo ufw status
开放端口
sudo ufw allow 3000/tcp
禁用防火墙
sudo ufw disable
如果服务放在虚拟机中
Ubuntu访问地址为 通过命令:
ip addr show
打印出来的ens32路由下的inet 后面的地址
创建Docker文件
Docker也是一个虚拟机,所以是将项目放到了Docker虚拟机中,在运行的时候需要端口绑定到主机之类的操作
touch Dockerfile
在里面写入(官方文档的方案,不同的服务可以有不同的方案)
# syntax=docker/dockerfile:1
FROM node:18-alpine
WORKDIR /app
COPY . .
RUN yarn install --production
CMD ["node", "src/index.js"]
EXPOSE 3000
构建项目,最后的句点.代表从当前路径下查找项目
docker build -t 自己起的项目名 .
启动(第一种指定绑定的ip,第3种绑定所有ip)
第一个端口表示Docker容器内的端口
第二个端口表示绑定到主机上的端口
docker run -dp 127.0.0.1:3000:3000 项目名
docker run -dp 0.0.0.0:3000:3000 项目名
docker run -dp 3000:3000 项目名
查看容器ID
docker ps
关闭容器
docker stop <the-container-id>
删除
docker rm <the-container-id>
上传项目到 Docker Hub(类似git)
创建一个公共仓库
回到命令行窗口,登录
docker login -u 用户名
创建标签tag
docker tag 项目名 用户名/仓库名
docker tag getting-started YOUR-USER-NAME/getting-started
上传
docker push YOUR-USER-NAME/getting-started
具体代码可以在仓库右边看到
Volume数据库存储
随着容器一起,容器删除将会把数据库一起删除,并且容器之间不共享数据库
创建数据库(sqllite)
docker volume create (数据库名)todo-db
使用数据库
要使用数据库必须在运行一次,标明使用什么类型(type)的什么名字(src)的数据库放在什么位置(target)
docker run -dp 127.0.0.1:3000:3000
--mount type=volume,
src=todo-db,
target=/etc/todos getting-started
bind mounts绑定装载
热更新代码
使用文档中的代码文件可以正常运行以下代码,第一次会下载node18-alpine,第二次运行就正常
docker run -dp 127.0.0.1:3000:3000 \
-w /app --mount type=bind,src="$(pwd)",target=/app \
node:18-alpine \
sh -c "yarn install && yarn run dev"