Docker 入门:从「它是什么」到「跑起来」只要 10 分钟
我第一次接触 Docker 的时候,内心是崩溃的。
什么镜像、容器、仓库、Dockerfile、docker-compose……一堆名词砸过来,感觉像在学一门新语言。但后来真正用上了,才发现:Docker 其实没那么难,而且一旦用了就回不去了。
今天这篇文章,我尽量用人话把 Docker 讲清楚。如果你是后端开发、运维、或者对部署感兴趣的前端,这篇适合你。
Docker 到底解决了什么问题?
你有没有遇到过这种场景:
代码在你电脑上跑得好好的,部署到服务器就挂了 同事说「我这里没问题啊」,但你的环境就是跑不起来 装一个 MySQL 要配半天,还跟系统里已有的版本冲突
Docker 就是来解决这些「环境不一致」问题的。
简单理解:Docker 把你的应用 + 运行环境打包成一个箱子(容器),在任何地方打开这个箱子,结果都一模一样。

本文图片来源于网络,如有侵权请联系删除
3 个核心概念,搞懂就入门了
1. 镜像(Image)——应用的模板
镜像就像一个「安装包」,里面包含了运行应用所需的一切:操作系统、依赖库、配置文件、应用代码。
镜像是只读的,你不能直接修改它,只能基于它创建容器。
2. 容器(Container)——运行中的实例
容器是镜像的「运行态」。你可以把镜像想象成一个 Class,容器就是 new 出来的实例。
一个镜像可以同时跑 N 个容器,互不干扰。
3. 仓库(Registry)——镜像的仓库
Docker Hub 就是最大的公共仓库,类似 GitHub 之于代码。你可以从上面 pull 别人做好的镜像,也可以 push 自己的。
实战:5 分钟跑起你的第一个容器
Step 1:安装 Docker
# macOS(推荐 Docker Desktop)
brew install --cask docker
# Ubuntu
curl -fsSL https://get.docker.com | sh
安装完验证一下:
docker --version
# Docker version 24.0.7, build afdd53b
Step 2:拉取并运行 Nginx
# 拉取 nginx 官方镜像
docker pull nginx
# 启动容器,映射 8080 端口
docker run -d -p 8080:80 --name my-nginx nginx
打开浏览器访问 http://localhost:8080,你会看到 Nginx 的欢迎页面。
恭喜,你的第一个容器跑起来了。整个过程不超过 2 分钟。
Step 3:常用命令速查
docker ps # 查看运行中的容器
docker ps -a # 查看所有容器(包括已停止的)
docker stop my-nginx # 停止容器
docker rm my-nginx # 删除容器
docker images # 查看本地镜像
docker rmi nginx # 删除镜像
写一个 Dockerfile
说到这个我想起来,很多人看到 Dockerfile 就犯怵。其实它就是一个「食谱」,告诉 Docker 怎么一步步构建你的镜像。
来个最简单的 Node.js 应用 Dockerfile:
# 基础镜像
FROM node:18-alpine
# 设置工作目录
WORKDIR /app
# 先复制 package.json(利用缓存)
COPY package*.json ./
RUN npm install
# 复制应用代码
COPY . .
# 暴露端口
EXPOSE 3000
# 启动命令
CMD ["node", "index.js"]
然后构建和运行:
docker build -t my-node-app .
docker run -d -p 3000:3000 my-node-app
就这么简单。

本文图片来源于网络,如有侵权请联系删除
Docker Compose:管理多个容器
实际项目中,你的应用可能需要多个服务配合:Web 服务器 + 数据库 + 缓存。Docker Compose 就是用来一键管理多个容器的。
一个典型的 docker-compose.yml:
version: '3.8'
services:
web:
build: .
ports:
- "3000:3000"
depends_on:
- db
- redis
db:
image: postgres:15
environment:
POSTGRES_PASSWORD: mysecret
volumes:
- pgdata:/var/lib/postgresql/data
redis:
image: redis:7-alpine
volumes:
pgdata:
一个命令全部启动:
docker compose up -d
新手常踩的 3 个坑
端口冲突: -p 8080:80左边是宿主机端口,右边是容器端口。如果 8080 被占用,换一个就行数据丢失:容器删了,里面的数据就没了。用 -v挂载 volume 做持久化镜像太大:用 alpine版本的基础镜像(如node:18-alpine),体积能小 10 倍
说真的,Docker 是我这几年学到的最值的技术之一。不管你是前端、后端还是全栈,学会容器化部署,简历上都能加分。
有什么 Docker 相关的问题,评论区聊 👇
全平台搜索「奥创ultra」,获取更多实用技术干货。
更多推荐

所有评论(0)