上篇说了我拿 2014 款 Mac mini 装了 Ubuntu 24.04 当服务器,上了 Docker 全家桶。有朋友私信说:"你讲得爽,我连 Docker 是啥都没搞明白,能不能先讲讲基础?"
行,这篇就专门给小白讲 Docker 入门。不扯虚的,看完你就能自己跑起第一个容器。
Docker 到底是啥
我打个比方:以前装软件,就像搬家——得先把家具(依赖库)、水电(环境配置)都弄好,才能住进去。换个房子(换台机器)又得重来一遍。
Docker 就是"集装箱房"——软件连同它需要的环境,整个打包成一个标准集装箱(镜像),拉到哪儿都能直接住(跑起来),不用重新装修。
几个名词先记住:
- 镜像(Image):打包好的"集装箱房",是个只读模板
- 容器(Container):镜像跑起来之后的"实例",你可以往里放东西(数据)
- 仓库(Registry):存放镜像的地方,默认是 Docker Hub,全球最大的"集装箱仓库"
- Compose:一个配置文件管多个容器,全家桶必备
装 Docker,三步
我上篇写过完整命令(用官方源),这篇给个精简版:
curl -fsSL https://get.docker.com | sh
对,就这一行。官方的一键脚本,Ubuntu/Debian/CentOS 通用,装完自动配好源和开机自启。
装完验证:
docker version
能看到 Client 和 Server 两个版本号就成功了。注意 Server 那行,如果报错说找不到,多半是 Docker 服务没起来:
sudo systemctl enable --now docker
第一个容器:跑个 Nginx 网页
空跑没意思,直接来实战。我要在服务器上跑一个 Nginx(一个网页服务器软件),看它怎么工作的:
docker run -d --name myweb -p 8088:80 nginx
一行命令拆开看:
docker run:创建并启动容器-d:后台运行(detach,不然会一直占着终端)--name myweb:给容器起个名字-p 8088:80:端口映射,把服务器的 8088 端口映射到容器内的 80 端口nginx:用的镜像名
跑起来之后,浏览器打开 http://你的服务器IP:8088,就能看到 Nginx 的欢迎页——你的第一个容器活了。
这背后发生了什么?Docker 发现本地没有 nginx 镜像,自动去 Docker Hub 拉了一个下来,然后启动容器。全程不用你装任何依赖。
常用命令,记住这几个就够了
| 命令 | 作用 |
|---|---|
| docker ps | 查看正在运行的容器 |
| docker ps -a | 查看所有容器(含已停止) |
| docker images | 查看本地镜像 |
| docker logs 容器名 | 看容器日志(排错第一招) |
| docker stop 容器名 | 停止容器 |
| docker start 容器名 | 启动容器 |
| docker rm 容器名 | 删除容器(要先 stop) |
| docker exec -it 容器名 bash | 进入容器内部命令行 |
实战一遍:我改了网页内容想让它生效,先看看容器状态:
docker ps
想进容器里看看:
docker exec -it myweb bash
进去之后 ls /usr/share/nginx/html 就能看到网页文件。不想玩了:
docker stop myweb && docker rm myweb
容器删了,系统干干净净,一点残留都没有——这就是 Docker 的好处。
数据要放外面:卷(Volume)
有个坑必须提前讲:容器是"一次性"的,删了就没了,里面的数据也跟着没。
比如你往 Nginx 里放了个网页,容器删了,网页也没了。那怎么办?把数据放"外面"——用卷(Volume)或者目录映射。
docker run -d --name myweb \
-p 8088:80 \
-v /opt/myweb:/usr/share/nginx/html \
nginx
-v /opt/myweb:/usr/share/nginx/html 意思是:把服务器的 /opt/myweb 目录,映射成容器内的网页目录。你在服务器上直接编辑 /opt/myweb/index.html,网页就变了;容器删了重建,数据还在。
记住这条铁律:一切要保留的数据,都放卷里,别放容器里。 后面全家桶全是这个思路。
进阶:docker-compose 管多个容器
一个容器还好,三五个就要乱。这时候用 Compose——一个 YAML 文件管所有容器。
建个目录,写配置文件:
version: "3.8"
services:
web:
image: nginx:latest
ports:
- "8088:80"
volumes:
- /opt/myweb:/usr/share/nginx/html
restart: unless-stopped
保存为 docker-compose.yml,然后:
docker compose up -d
全家桶就是这么管理的。以后要加新服务,往 YAML 里加一个 block,再跑一次 up -d 就行。
几个 Compose 高频操作:
docker compose up -d # 启动(新增/修改配置后也用它)
docker compose down # 停止并移除容器
docker compose ps # 查看状态
docker compose logs -f 服务名 # 看某个服务日志
结尾
到这,你已经能跑起第一个容器,知道数据怎么放,会用 Compose 管多个容器了。Docker 入门就这么点东西,剩下的都是遇到问题查文档。
我 Mac mini 上那套全家桶,就是靠这一套东西搭起来的。后面还有 Alist 挂网盘、Jellyfin 影视库、qBittorrent 下载器这些实战篇,都更新在 moxiaoa.com,想继续学的关注一下。
有问题加我微信 lige0552,备注"Docker",我看到就回。