Docker基础
概述
Docker 是一个开源的容器化平台,将应用及其依赖打包为轻量级容器,实现开发、交付和部署的标准化。本文档涵盖 Docker 的核心概念、安装配置、常用命令和磁盘清理等基础操作。
核心概念
| 概念 | 定义 | 类比 |
|---|---|---|
| 镜像(Image) | 应用的“安装包”,包含代码、依赖、环境配置 | 面向对象中的类 |
| 容器(Container) | 镜像的“运行实例”,独立可执行环境 | 面向对象中的实例 |
| 仓库(Repository) | 存放镜像的仓库(官方为 Docker Hub) | GitHub 代码仓库 |
Docker 安装
CentOS 7 安装
# 1. 卸载旧版本
yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine
# 2. 安装依赖包
yum install -y yum-utils device-mapper-persistent-data lvm2
# 3. 设置 Docker 仓库(阿里云镜像)
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# 4. 安装 Docker CE
yum install -y docker-ce docker-ce-cli containerd.io
# 5. 启动并设置开机自启
systemctl start docker
systemctl enable docker
# 6. 验证安装
docker --versionUbuntu/Debian 安装
# 1. 更新包索引
apt update
# 2. 安装依赖包
apt install -y ca-certificates curl gnupg lsb-release
# 3. 添加 Docker 官方 GPG 密钥
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
# 4. 添加 Docker 仓库(阿里云镜像)
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null
# 5. 安装 Docker
apt update
apt install -y docker-ce docker-ce-cli containerd.io
# 6. 启动并验证
systemctl start docker
systemctl enable docker
docker --version配置国内镜像加速
# 1. 创建配置目录
mkdir -p /etc/docker
# 2. 配置镜像加速地址
cat > /etc/docker/daemon.json <<EOF
{
"registry-mirrors": [
"https://docker.1ms.run",
"https://docker.m.ixdev.cn",
"http://docker.m.daocloud.io",
"https://dockerproxy.net"
],
"log-opts": {
"max-size": "100m",
"max-file": "10"
}
}
EOF
# 3. 重启 Docker
systemctl daemon-reload
systemctl restart docker
# 4. 验证加速是否生效
docker info | grep "Registry Mirrors"核心命令速查
镜像管理
| 命令 | 说明 | 示例 |
|---|---|---|
docker pull |
拉取镜像 | docker pull nginx:1.24 |
docker images |
查看本地镜像 | docker images |
docker rmi |
删除镜像 | docker rmi nginx:1.24 |
docker search |
搜索镜像 | docker search mysql |
docker save |
导出镜像为文件 | docker save -o nginx.tar nginx:1.24 |
docker load |
从文件导入镜像 | docker load -i nginx.tar |
容器管理
| 命令 | 说明 | 示例 |
|---|---|---|
docker ps |
查看运行中容器 | docker ps -a(查看所有) |
docker run |
创建并启动容器 | docker run -d --name nginx nginx |
docker start |
启动已停止容器 | docker start nginx |
docker stop |
停止容器 | docker stop nginx |
docker restart |
重启容器 | docker restart nginx |
docker exec |
进入容器执行命令 | docker exec -it nginx /bin/bash |
docker logs |
查看容器日志 | docker logs -f nginx |
docker rm |
删除容器 | docker rm nginx |
docker inspect |
查看容器详情 | docker inspect nginx |
常用运行示例
# 运行 Nginx 容器(后台运行,端口映射)
docker run -d --name nginx -p 80:80 nginx
# 运行 MySQL 容器(带环境变量)
docker run -d --name mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
-e MYSQL_DATABASE=app \
-p 3306:3306 \
mysql:8.0
# 运行 Redis 容器(带密码)
docker run -d --name redis \
--restart always \
-p 6379:6379 \
redis --requirepass 123456
# 运行 Ubuntu 容器(交互式,退出即销毁)
docker run -it --rm ubuntu /bin/bash
# 运行容器并挂载卷
docker run -d --name app \
-v /data/app:/app \
-p 8080:8080 \
my-app:latestDocker Compose 基础
# 启动所有服务
docker compose up -d
# 停止所有服务
docker compose stop
# 查看服务状态
docker compose ps
# 查看日志
docker compose logs -f
# 停止并删除所有资源
docker compose down
# 停止并删除卷
docker compose down -v清理磁盘空间
# 清理停止的容器
docker container prune
# 清理无用镜像
docker image prune -a
# 清理无用数据卷
docker volume prune
# 清理无用网络
docker network prune
# 一键清理所有无用资源
docker system prune -af
# 查看磁盘使用情况
docker system df常见问题与注意事项
拉取镜像失败
- 确认镜像加速地址配置正确
- 检查网络连接
- 尝试更换镜像源
端口被占用
# 查看端口占用
netstat -tlnp | grep 8080
# 修改映射端口
docker run -p 8081:80 nginx容器无法停止
# 强制停止
docker kill <容器名>
# 强制删除
docker rm -f <容器名>磁盘空间不足
# 查看 Docker 磁盘使用
docker system df
# 清理无用资源
docker system prune -af
# 清理镜像构建缓存
docker builder prune -a免 sudo 执行 Docker
# 将当前用户加入 docker 组
sudo usermod -aG docker $USER
# 重新登录生效
newgrp docker