学用 Docker 容器:一个新手从镜像到容器的入门学习笔记与踩坑实录

一、为什么我想学 Docker 容器

最早接触“Docker 容器”这个词,是在我把一个 Python 小工具部署到服务器的时候。本地明明跑得好好的脚本,一到别的机器就各种缺环境、版本不对:这台是 Python 3.9,那台是 3.11;这个库装了,那个库版本冲突。我反复在“能不能跑”上耗掉大把时间。后来才知道,Docker 容器入门正是为了解决“在我电脑上能跑”这个经典难题而存在的。它把应用和它的运行环境打包成一个隔离的盒子,搬到哪儿都能一模一样地跑。对于像我这样爱折腾又常踩环境坑的人来说,学会用容器,等于多了一把省心的钥匙。

二、镜像和容器到底是什么关系

刚上手时最绕的就是Docker 镜像和容器区别。打个比方:镜像(image)像是一个做好的“模具”或者安装包,里面写好了系统、依赖和运行命令;而容器(container)则是用这个模具真正“倒出来”、正在运行的实例。同一个镜像可以同时跑出好几个互相独立的容器。理解这一点后,很多命令就顺了:pull 是下载镜像,run 是用镜像启动容器,ps 是看正在跑的容器。

镜像从哪来,又怎么分层

最常见的是从官方镜像仓库拉取,比如 python:3.11、nginx:stable。也可以自己写一份 Dockerfile,把“装什么、怎么配”全记下来,再用 build 打成专属镜像。这份 Dockerfile 本身就是一个值得好好保存的学习笔记。要说明的是,镜像是分层存储的:每一条指令生成一层,相同的层会被缓存复用。所以把不常变的步骤(装依赖)写在前面、常变的步骤(拷代码)写在后面,能大幅加快二次构建。这个细节让我少等了无数分钟。

三、从安装到跑起第一个容器

在 Linux 上装好 Docker 引擎后,第一句几乎人人都跑:docker run hello-world。它会在本地没有镜像时自动去拉取,然后启动、打印一段问候就退出。别小看这一步,它验证了你的安装、网络和服务都在正常工作。接着可以试 docker run -it ubuntu bash,进到一个真实的 Ubuntu 容器里敲命令,关掉终端容器也就停了。

常用参数要记牢

-d 让容器后台运行,-p 把容器端口映射到本机(比如 -p 8080:80),-v 把本机目录挂进容器做数据持久化,–rm 让容器停止后自动清理。这几个参数几乎天天用,建议直接写进笔记里反复看。当服务一多,手动敲一堆参数就乱了,这时可以用 docker-compose:写一个 yaml,把镜像、端口、卷、环境变量都声明好,一条 docker compose up -d 就把一组容器全拉起来,停也只用一条命令。

四、把我的 Python 小脚本装进容器

真正有成就感的,是把之前写的自动化脚本搬进容器。我参考了零基础学 Python 自动化里那个小脚本的思路,写了一份 Dockerfile:基于 python:3.11-slim,把 requirements.txt 拷进去 pip 安装,再把代码 COPY 进来,最后 CMD 指定启动命令。build 之后,无论换到哪台机器,只要装了 Docker,一条 run 就能跑起来,再也不用担心“缺这个库、版本不对”。容器一旦跑起来,它对外表现就是一个稳定的运行环境,和宿主机的杂乱彻底隔离。

五、新手最容易踩的 5 个坑

这部分是我踩过的真实Docker 新手常见踩坑,写出来给后来的自己提个醒。

1. 权限问题:在 Linux 上直接跑 docker 常被提示权限不足,需要把用户加到 docker 组,或用 sudo。别忘了改完组要重新登录,否则当前 shell 还是不生效。

2. 容器里改了东西,一重启就没了:容器本身是临时的,想留存数据必须用 -v 挂卷,否则删掉容器改动全丢。数据库、配置文件尤其要走卷。

3. 端口没映射就访问不通:容器内部端口和本机不是一回事,不写 -p,外面根本连不进来。排查“服务起来了却打不开”时,先确认端口映射对没对。

4. 镜像越积越大:随手 build 很多层又不清理,磁盘很快吃满。定期 docker system prune 很有必要,但注意它会清掉未被使用的资源,生产环境要谨慎。

5. 把 secrets 写进镜像:密码、token 千万别 bake 进 Dockerfile,应该用环境变量或挂载文件传入,避免镜像被别人拉走就泄露凭证。

六、用 Git 管好自己的 Dockerfile

Dockerfile 和脚本一样,值得纳入版本管理。我按照从零学 Git 版本控制里的方法,把 Dockerfile、docker-compose.yml 和说明一起提交,每次改动都有记录,回滚也方便。多人协作时这点尤其重要,谁改了基础镜像、为什么加了这个端口,历史里一目了然。

七、顺手部署到我的小网站

学会了容器,最自然的下一步就是部署。我把一个静态服务用容器跑起来,再配合从零搭建个人网站的学习笔记里搭好的环境,整个发布流程顺了很多:构建镜像、上传、run 起来、用反向代理接域名,一气呵成。这也是我眼中完整的Docker 容器化部署教程的最小闭环。相比以前手动在服务器上装环境,现在只要镜像对,部署几乎零意外。

八、我的学习笔记是怎么记的

回头看,学 Docker 的效率和我是怎么用学习笔记把知识真正记牢的里总结的方法分不开:概念用一句话比喻先记住,命令按“场景—参数”建表,踩过的坑单独开一页。等下次忘了,翻笔记比翻搜索引擎快得多,也更贴合自己的真实环境。

结语

Docker 容器入门并不难,难的是动手那一刻。与其收藏一堆教程,不如现在就 run 一个 hello-world,从镜像到容器走通一遍。踩坑不可怕,把坑记成笔记,它们就是你下次更快的原因。等这套流程跑熟了,你会发现“换个机器也能跑”不再是奢望,而是日常。

© 版权声明
THE END
喜欢就支持一下吧
点赞7赞赏 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容