为什么要学 Docker
上课学了 Linux,装环境一直是噩梦——MySQL、Redis、Nginx,每个都要手动配置,卸载还不干净。Docker 解决的问题很简单:一次构建,到处运行。装个 Nginx 不用编译源码,一条命令就搞定。
安装 Docker
阿里云轻量应用服务器,系统是 Rocky Linux 8.x,全程用 root。
# 卸载旧版本 dnf remove docker docker-engine docker.io containerd runc # 安装依赖 dnf install -y yum-utils device-mapper-persistent-data lvm2 # 添加 Docker 官方源(国内用阿里云镜像) yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo # 安装 Docker dnf install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin # 启动并设置开机自启 systemctl start docker systemctl enable docker # 验证安装 docker --version
这里有个坑:Rocky Linux 的防火墙默认开启,拉镜像如果慢,配一下镜像加速器。
# 配置阿里云镜像加速
mkdir -p /etc/docker
tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://xxxxx.mirror.aliyuncs.com"]
}
EOF
systemctl daemon-reload
systemctl restart docker
运行第一个 Nginx 容器
# 拉取镜像 docker pull nginx:alpine # 运行容器(前台) docker run --name my-nginx -p 8080:80 nginx:alpine
-p 8080:80 把宿主机 8080 端口映射到容器内 80 端口。浏览器访问 http://服务器IP:8080,看到 Nginx 欢迎页就算成功了。
生产环境要后台运行,用 -d(detach):
docker run -d --name my-nginx -p 8080:80 nginx:alpine
常用命令速查
| 命令 | 作用 |
|---|---|
docker ps | 查看运行中的容器 |
docker ps -a | 查看所有容器(含已停止的) |
docker images | 查看本地镜像列表 |
docker stop <容器名> | 停止容器 |
docker start <容器名> | 启动已停止的容器 |
docker rm <容器名> | 删除容器(需先停止) |
docker rmi <镜像名> | 删除镜像 |
docker logs <容器名> | 查看容器日志 |
docker exec -it <容器名> sh | 进入容器内部(交互式) |
最常用的组合——进容器看文件:
docker exec -it my-nginx sh # 进去后可以 ls、cat 配置文件,调试完 exit 退出
个人体会
学 Docker 最关键的是理解镜像和容器的关系:镜像是模板(类比 Python 的类),容器是运行实例(类比对象)。刚开始容易混淆 docker rm 和 docker rmi,记法:rm 删容器(container),rmi 删镜像(image),多了一个 i。
下一阶段准备学 Docker Compose,把前后端和数据库一次编排起来。