Docker 入门:理解镜像与容器的第一课
第一次接触 Docker 的人,常常被两个词绕晕:镜像和容器。它们到底是什么关系?这篇文章用最直白的方式把这层关系讲清楚,并带你动手跑起第一个容器。
一、Docker 到底解决了什么问题
想象你要把一个应用交给朋友运行。传统做法是附上一份长长的环境说明:装什么版本的操作系统、配哪些依赖、改哪些配置文件,稍有出入就跑不起来。Docker 的思路是:把应用和它依赖的全部环境打包成一个标准化的“箱子”,在任何装了 Docker 的机器上,这个箱子打开就能跑。这个“箱子”就是容器,而打包箱子的图纸,叫镜像。
二、镜像:容器的蓝图
镜像是一个只读的模板,里面包含了运行某个应用所需的一切:操作系统层、运行库、应用代码、配置文件。你可以把它理解成手机的系统安装包——安装包本身不能打电话,刷进手机才能用。
获取镜像很简单,公共仓库里有大量官方镜像:
docker pull nginx:latest
拉取之后用 docker images 就能看到本地有哪些镜像。镜像采用分层存储,每一层记录一次变更,这种设计让镜像的下载和复用非常高效:两个基于同一基础镜像的应用,只需要多存差异部分。
三、容器:运行中的实例
容器是镜像的运行实例。镜像是静态的,容器是动态的:
docker run -d -p 8080:80 --name my-nginx nginx:latest
这条命令做了三件事:以后台方式启动(-d),把宿主机的 8080 端口映射到容器的 80 端口(-p),并给容器取名 my-nginx。随后打开浏览器访问 http://localhost:8080,就能看到 Nginx 的欢迎页——你已经跑起了第一个容器。
docker ps 可以查看正在运行的容器,docker exec -it my-nginx bash 可以进入容器内部一探究竟,输入 exit 退出。停止容器用 docker stop,删除用 docker rm。
四、新手最容易踩的三个坑
第一,容器里的数据默认随容器删除而消失。重要的数据一定要用卷(-v)挂载到宿主机目录,否则容器一删,数据就没了。
第二,一个容器只做一件事。不要把数据库、应用、缓存全塞进一个容器,用多个容器协作才是正确姿势,docker compose 就是为此而生的工具。
第三,latest 标签不等于稳定版。生产环境尽量使用明确的版本号,避免某天拉取到不兼容的新版本导致服务异常。
五、常用命令速查
docker pull 拉取镜像;docker images 查看本地镜像;docker run 创建并启动容器;docker ps 查看运行中的容器;docker stop 与 docker start 停止和启动容器;docker logs 查看容器日志,排错时最常用;docker exec 进入运行中的容器;docker rm 与 docker rmi 删除容器与镜像。
结语
镜像是蓝图,容器是按蓝图盖起来的房子。理解了这一层关系,Docker 的大门就算推开了一半。接下来不妨试试自己写一个 Dockerfile,把你写的小项目打包成镜像——那是 Docker 真正好玩的地方。
- 点赞
- 收藏
- 关注作者
评论(0)