在公司做后台开发那会儿,每次上线新功能都像打仗。ref="/tag/414/" style="color:#EB6E00;font-weight:bold;">服务器环境不一样,本地跑得好好的,一上生产就报错。后来用了Docker,整个流程顺滑多了。现在自己在家折腾NAS、博客、甚至小项目,全都靠它。
为什么用Docker部署
传统部署得手动装依赖、配环境、改配置文件,容易出错还难复现。Docker把应用和依赖打包成镜像,哪台机器都能跑,一致性拉满。比如你写了个Python Flask接口,别人不用管你装了什么库,直接run容器就行。
基本部署流程走一遍
假设你要部署一个简单的Node.js应用,先写个Dockerfile:
FROM node:16-alpine
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 3000
CMD ["npm", "start"]
然后构建镜像:
docker build -t my-node-app .
启动容器:
docker run -d -p 3000:3000 --name myapp my-node-app
这时候访问localhost:3000就能看到页面了。加-d是后台运行,-p映射端口,名字也起好了,管理起来方便。
实际场景:部署一个WordPress博客
很多人想搭博客又怕配置PHP+MySQL麻烦。用Docker三两下搞定。写个docker-compose.yml:
version: '3.8'
services:
db:
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: example
MYSQL_DATABASE: wordpress
volumes:
- db-data:/var/lib/mysql
wordpress:
image: wordpress:latest
ports:
- "8080:80"
environment:
WORDPRESS_DB_HOST: db
WORDPRESS_DB_USER: root
WORDPRESS_DB_PASSWORD: example
depends_on:
- db
volumes:
- wp-content:/var/www/html/wp-content
volumes:
db-data:
wp-content:
执行命令:
docker-compose up -d
等一会儿,打开浏览器输入localhost:8080,WordPress安装页面就出来了。数据库、应用、持久化全在配置里写好了,换台机器照样一键启动。
镜像推送与远程部署
本地测试完要上云服务器?先把镜像推到仓库。比如用Docker Hub:
docker tag my-node-app username/my-node-app:latest
docker push username/my-node-app:latest
然后去服务器拉取并运行:
docker pull username/my-node-app:latest
docker run -d -p 3000:3000 username/my-node-app
自动化的话,配合GitHub Actions或者Jenkins,代码一提交自动构建发布,完全不用人盯着。
日常维护小技巧
查日志别进容器,直接用命令:
docker logs myapp
看资源占用:
docker stats
更新服务时,先停旧的再起新的,避免端口冲突:
docker stop myapp
docker rm myapp
docker run -d -p 3000:3000 --name myapp new-image