一、先给结论
- Docker 把应用和它的运行环境打包在一起,换个机器也能一键跑起来;
- 入门只需要掌握 6 个命令:pull、run、ps、logs、exec、stop;
- 部署一个应用的标准姿势:写 Dockerfile → 构建镜像 → 跑容器 → 挂数据卷 → 映射端口;
- 新手最大的两个坑:容器一重启数据就丢、端口被占用起不来——本文都会讲到;
- 有服务器后装个 Docker,个人博客、笔记、图床这类小应用都能用它托管。
二、Docker 到底解决了什么问题
传统部署流程是这样的:买服务器 → 装环境(Python/Node/数据库)→ 传代码 → 手动启动。环境装一半、版本对不上、换台机器重来一遍,是家常便饭。
Docker 的思路是:把"代码 + 运行环境"打包成一个镜像,镜像启动就是容器。容器里的环境和开发时完全一致,换机器也只是"拉镜像 → 跑起来"两步。
一句话类比:以前搬家要重新装修,Docker 是连家具一起搬。
三、安装 Docker(三步)
以常见的 Linux 服务器为例(CentOS / Ubuntu 通用逻辑):
能看到 client 和 server 两段版本号,说明安装成功。server 段有输出才是真的装好了,只有 client 说明服务没起来,先 sudo systemctl start docker。
国内服务器拉镜像慢是正常现象,可配置镜像加速器(各云厂商控制台都有说明,或参考 Docker 官方文档的 registry mirrors 配置)。
四、6 个必会的命令
| docker pull <镜像名> | 拉取镜像 | docker pull nginx |
| docker run -d –name web -p 8080:80 nginx | 后台启动容器 | 把容器 80 端口映射到主机 8080 |
| docker ps | 查看运行中的容器 | 加 -a 看所有(含已停止) |
| docker logs -f web | 看容器日志 | 排查启动失败首选 |
| docker exec -it web bash | 进容器内部 | 相当于"远程进到容器里" |
| docker stop web | 停止容器 | 删掉用 docker rm web |
记不住没关系,把上面 6 个打印出来贴显示器旁边,前两周够用了。
五、部署第一个应用:完整流程
用一个静态网站(Nginx)做例子,走通"镜像 → 容器 → 端口"全链路:
第 1 步:拉镜像
docker pull nginx
第 2 步:写一个最简单的页面
新建 index.html:
<h1>Hello Docker</h1>
第 3 步:用 Dockerfile 告诉 Docker 怎么打包
同目录新建 Dockerfile:
FROM nginx
COPY index.html /usr/share/nginx/html/
两行就够了:基于 nginx 镜像,把页面拷进它默认的站点目录。
第 4 步:构建镜像
docker build -t my-site .
-t my-site 是给镜像起名,最后的 . 表示用当前目录的 Dockerfile。
第 5 步:启动容器
docker run -d –name my-site -p 8080:80 my-site
访问 http://服务器IP:8080,能看到 Hello Docker,第一个应用就上线了。
六、新手必踩的两个坑(提前避开)
坑 1:容器一停,数据全没了
容器是"用完即弃"的设计,你写进容器里的文件,容器一删就没了。解决方案是挂数据卷:
docker run -d –name my-site -p 8080:80 \\
-v /data/my-site:/usr/share/nginx/html \\
my-site
-v 主机目录:容器目录 把主机的 /data/my-site 目录映射进容器,文件写在主机上,容器删了数据还在。任何有状态的应用(数据库、博客、笔记)都要挂数据卷,这是最重要的一个习惯。
坑 2:端口被占用
docker run 报 port is already allocated,说明 8080 被别的进程占了。先查占用:
sudo lsof -i :8080
换一个端口(比如 9090),或者停掉占用它的进程再重来。
七、部署带数据库的应用(进阶模板)
静态站只是热身,多数应用是"应用 + 数据库"两个容器。以常见的"笔记类 / 博客类"应用为例,标准姿势是用 docker-compose 一次拉起两个服务:
# docker-compose.yml
services:
app:
image: my–app
ports:
– "8080:80"
volumes:
– ./app–data:/app/data
db:
image: mysql:8
environment:
MYSQL_ROOT_PASSWORD: yourpassword
volumes:
– ./db–data:/var/lib/mysql
启动:
docker compose up -d
两个容器一起起来,数据分别落在 app-data 和 db-data 两个主机目录,备份 = 拷贝这两个目录,换机器 = 把目录和配置带过去重新 up -d。
八、常见问题速查
| docker ps 没有容器但明明启动了 | 容器秒退了 | docker logs 容器名 看报错 |
| 访问 IP:端口 打不开 | 端口没映射 / 防火墙没放行 | 检查 -p 参数;放行对应端口 |
| 拉镜像超时 | 网络到官方源慢 | 配镜像加速器 |
| Permission denied | 当前用户不在 docker 组 | sudo usermod -aG docker 你的用户名 后重登 |
九、行动清单
说明:本文为 Docker 技术科普,命令与配置以 Docker 官方文档当期版本为准;具体服务器环境差异请以你的系统发行版文档为准。
网硕互联帮助中心




评论前必须登录!
注册