用 Docker 跑通第一个 Linux 开发环境:新人避坑指南
如果你刚接触云上开发,最常见的卡点不是写代码,而是「环境不一致」:本机能跑、服务器跑不了,或者同事机器上一套依赖、你这边全缺。Docker 把操作系统、运行时和依赖打成可复现的镜像,正好解决这件事。下面用最小步骤,帮你在 Linux 上跑通第一个容器化环境。
为什么先学 Docker,而不是直接装一堆软件
传统做法是 apt install / yum install 一长串包,版本容易漂。容器的思路不同:应用和它依赖的库一起封进镜像,启动时只关心端口和数据卷。好处有三点:
- 可复现:同一份 Dockerfile,在笔记本和云主机上行为接近。
- 隔离:多个项目互不污染系统 Python、Node 全局环境。
- 好迁移:以后上华为云 ECS、CCE,镜像思路可以直接复用。
最小可用示例:Nginx 静态站点
假设系统已安装 Docker(未安装可按发行版官方文档安装)。验证:
docker version
拉一个官方镜像并跑起来:
docker run -d --name hello-web -p 8080:80 nginx:alpine
浏览器打开 服务器公网IP:8080 ,能看到 Nginx 欢迎页就说明端口映射正常。记得在安全组放行 8080。
把本地文件挂进容器(适合改静态页):
mkdir -p ~/web && echo '<h1>Hello from Docker</h1>' > ~/web/index.html
docker rm -f hello-web
docker run -d --name hello-web -p 8080:80 -v ~/web:/usr/share/nginx/html:ro nginx:alpine
刷新页面应看到自己的标题。-v 把宿主机目录映射进容器,改文件不用重建镜像。
用 Dockerfile 固化自己的环境
临时 docker run 适合试错;要固化就写 Dockerfile。例如一个极简 Python 脚本环境:
FROM python:3.12-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
CMD ["python", "main.py"]
构建与运行:
docker build -t my-app:dev .
docker run --rm my-app:dev
要点:
- 基础镜像尽量选官方 slim/alpine,体积更小、攻击面更小。
- COPY 顺序让依赖层可缓存:先拷依赖清单再装包,再拷源码。
- 不要把密钥写进镜像;用环境变量或云侧密钥管理。
三个常见坑
坑 1:端口通了但页面打不开
先在机器上 curl -I 127.0.0.1:8080 ,本机通、外网不通,多半是安全组或防火墙。本机不通,看容器是否在跑:docker ps,以及日志:docker logs hello-web。
坑 2:权限与用户
挂载目录后出现 Permission denied,常见于容器内进程用户与宿主机目录属主不一致。开发阶段可先理清属主;生产环境更建议用非 root 用户跑进程。
坑 3:把数据写进容器可写层
容器删了数据就没了。数据库、上传文件请挂卷或用云硬盘/对象存储。开发阶段至少 -v 持久化重要目录。
和云开发怎么衔接
在华为云上,你可以先在单台 ECS 用 Docker 验证业务,再逐步:
- 用镜像仓库托管自己的镜像;
- 需要编排时再考虑容器服务;
- 本地与云上共用同一套 Dockerfile,减少「环境漂移」。
不必一上来就上完整微服务。先让「一个进程、一个端口、一份镜像」跑稳,比堆概念更有用。
今日小结
- 用 docker run 快速验证端口与挂载;
- 用 Dockerfile 固化依赖;
- 排查时按「容器是否运行 → 本机 curl → 安全组」顺序;
- 数据与密钥不要塞进镜像。
下一步可以尝试:给自己的小工具写一份 Dockerfile,推到镜像仓库,再在云主机上一键拉起。把环境问题从「人肉对齐」变成「镜像对齐」,后面学 AI 工具链、CI/CD 都会轻松很多。
- 点赞
- 收藏
- 关注作者
评论(0)