Docker 入门:第一次用容器跑一个 Hello World
第一次听说 Docker 的时候,我的第一反应是:它和虚拟机有什么区别?又为什么几乎所有教程都在讲它?直到我亲手跑起第一个容器,才发现它的思路其实很简单:把程序和它需要的环境打包在一起,走到哪里都能原样运行。
一、容器到底是什么
可以把容器想象成一个标准化的饭盒。饭菜就是你的程序,饭盒就是运行环境:系统库、依赖、配置文件都装在里面。饭盒盖上盖子,拿到任何一台装了 Docker 的电脑上打开,味道都不会变。虚拟机则是连厨房都搬过去,又重又慢;容器只搬饭盒,启动常常只要一秒钟。
二、安装之后先验证
装好 Docker 之后,先别急着写代码。打开终端,输入 docker version,看到客户端和服务端的信息都正常出现,说明它已经在工作了。再输入 docker info,可以看到当前镜像和容器的数量,刚开始都是零,这很正常。
三、跑起第一个 Hello World
在终端输入 docker run hello-world,然后回车。你会看到屏幕上滚动出几行字,最后出现一句问候:Hello from Docker! 这短短一行输出背后发生了三件事:Docker 先在本地找这个镜像,找不到就去仓库里下载,下载完再用它启动一个容器,容器里的程序打印出问候就退出了。第一次跑的时候因为要下载镜像,会多花一点时间,第二次就快多了。
四、看懂容器的生命周期
运行完之后,输入 docker ps -a,可以看到刚才那个容器还躺在列表里,状态是已退出。容器和镜像是两回事:镜像是只读的模板,容器是模板跑起来的实例。用 docker images 能看到下载下来的镜像,用 docker rm 可以删掉退出的容器,用 docker rmi 可以删掉不用的镜像。随手清理是个好习惯,镜像攒多了会悄悄占满磁盘。
五、一个能动手的小实验
只打印问候还不过瘾,可以试试运行一个真正会一直工作的容器:docker run -d --name my-first-web -p 8080:80 nginx。命令里的 -d 表示后台运行,--name 是给容器起名字,-p 8080:80 是把容器里的 80 端口映射到电脑的 8080 端口。跑起来之后打开浏览器访问本地的 8080 端口,就能看到一个欢迎页面。再输入 docker stop my-first-web,页面就打不开了;输入 docker start my-first-web,它又活了过来。
六、新手最容易踩的三个坑
第一个坑是端口冲突:8080 端口如果已经被别的程序占了,容器就起不来,换一个端口再试。第二个坑是把容器当成虚拟机,在里面改了文件却不保存,容器一删改动就没了,重要的东西要放在挂载的目录里。第三个坑是镜像名打错一个字母,下载失败就以为网络坏了,先核对名字再查网络。
七、接下来可以学什么
跑通 Hello World 只是起点。下一步可以学着写自己的 Dockerfile,把自己写的程序打包成镜像;再学 docker compose,一条命令拉起前后端两个服务;等这些都熟了,再去看容器的网络和数据卷,理解容器之间怎么互相说话,怎么把数据留下来。
对初学者来说,Docker 最友好的地方在于反馈很快:敲一行命令,马上就能看到结果。不用急着一次搞懂所有概念,先把 Hello World 跑起来,再让一个网页跑起来,容器这件事就入门了。
- 点赞
- 收藏
- 关注作者
评论(0)