1. 初始docker

  • Docker 是一个开源的容器化平台,用于开发、部署和运行应用程序。它通过“容器”技术,将应用及其依赖环境打包成一个轻量级、可移植的单元,实现**“一次构建,到处运行”**

  • 核心概念

    • 容器

      • 轻量化的独立运行环境,包含应用代码、运行时、系统工具和库。

      • 共享主机操作系统内核,无需完整的操作系统,启动快、资源占用少。

      • 与虚拟机相比,容器更轻便、性能更高。

    • 镜像

      • 容器的“模板”,定义了运行环境和应用文件

      • 镜像分层的结构使得重复部分可以复用,节省存储空间。

    • Dockerfile

      • 文本文件,用于定义镜像的构建步骤(如安装依赖、复制文件等)。
    • Docker Hub

      • 公共镜像仓库,可以分享和获取官方或社区制作的镜像。

2. linux下 安装docker-ce版

2.1 系统更新

sudo yum update -y

2.2 安装docker必要的工具

# 1. 安装必要的工具
sudo yum install -y yum-utils device-mapper-persistent-data lvm2

2.3 添加阿里云的Docker CE YUM源

sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

2.4 安装Docker CE

sudo yum install -y docker-ce docker-ce-cli containerd.io

2.5 启动Docker并设置开机自启

sudo systemctl start docker
sudo systemctl enable docker

至此 docker 安装完成

3. docker的常用指令

3.1关于镜像的常用命令

操作类别指令主要参数/示例作用与说明
🔍 查看镜像docker imagesdocker images列出本地所有镜像(仓库名、标签、ID、大小)。
docker image lsdocker image ls同上,为更现代的命令格式。
docker image inspectdocker image inspect nginx:latest显示镜像的详细信息(元数据、层、配置)。
⬇️ 拉取镜像docker pulldocker pull ubuntu:20.04从仓库(默认Docker Hub)下载镜像到本地。
🏷️ 标记镜像docker tagdocker tag nginx myrepo/nginx:v1为镜像创建一个新标签(常用于推送到私有仓库)。
⬆️ 推送镜像docker pushdocker push myrepo/nginx:v1将本地镜像推送到远程仓库。
🐳 运行镜像docker rundocker run -it --rm ubuntu bash从镜像创建并启动一个新容器。
🧹 删除镜像docker rmidocker rmi old_image删除本地一个或多个镜像(需无容器依赖)。
docker image prunedocker image prune -a清理所有未被使用的悬虚镜像(无标签)或全部无用镜像。
📦 保存与加载docker savedocker save -o nginx.tar nginx将镜像保存为离线tar包(完整镜像)。
docker loaddocker load -i nginx.tar从tar包加载镜像到本地。
🔄 导出与导入docker exportdocker export -o cont.tar 容器ID容器当前状态导出为文件系统快照(非完整镜像)。
docker importdocker import cont.tar new_image从容器快照文件导入为新镜像
🔎 搜索镜像docker searchdocker search mysql在Docker Hub中搜索镜像。

3.2 常用指令详解与场景

1. 镜像拉取与运行 (pull & run)

这是最核心的组合操作。最佳实践是始终指定标签,以确保环境一致。

# 拉取官方MySQL 8.0镜像
docker pull mysql:8.0
# 以后台模式运行MySQL容器,并设置环境变量
docker run -d --name my_mysql -e MYSQL_ROOT_PASSWORD=123456 mysql:8.0
2. 镜像清理 (prune)

随着使用,系统中会产生很多名为 <none> 的中间层镜像(称为“悬虚镜像”),定期清理可以释放磁盘空间。

# 交互式安全清理(推荐新手)
docker image prune
# 强制清理所有悬虚镜像
docker image prune -f
# 清理所有未被任何容器引用的镜像(危险,但彻底)
docker image prune -a

区别说明docker image prune 只清理 <none> 的中间镜像。-a 会额外清理那些未被任何容器使用的、但有标签的镜像,使用前请确认。

3. 镜像保存与加载 (save & load)

适用于离线环境迁移完整备份

# 将镜像打包成文件
docker save -o my_nginx_backup.tar nginx:alpine
# 将tar文件复制到另一台机器后,加载镜像
docker load -i my_nginx_backup.tar

核心区别

  • save/load 针对的是“镜像”:保留完整的历史和元数据,是镜像的完整克隆。
  • export/import 针对的是“容器”:只保存容器当时的文件系统快照,会丢弃历史记录和部分元数据,生成的镜像更小,但不可逆。

3.3 容器常用指令

操作类别指令主要参数/示例作用与说明
🚀 创建与运行docker rundocker run -d -p 80:80 --name my_nginx nginx核心指令:从镜像创建并启动新容器。-d后台运行,-p端口映射。
docker createdocker create --name temp_nginx nginx只创建容器但不启动,用于预先配置。
📋 查看列表docker psdocker ps -a列出容器(-a包含已停止的)。
⏯️ 启停与重启docker startdocker start my_nginx | 容器ID启动一个已停止的容器。
docker stopdocker stop my_nginx | 容器ID优雅停止容器(发送SIGTERM信号)。
docker restartdocker restart my_nginx | 容器ID重启容器。
docker pause/unpausedocker pause my_nginx | 容器ID暂停/恢复容器内所有进程。
🔌 进入与执行docker execdocker exec -it my_nginx | 容器ID bash重要:在运行中的容器内执行新命令。-it进入交互式终端。
docker attachdocker attach my_nginx附加到容器的主进程(退出可能导致容器停止)。
📤 输入输出docker logsdocker logs -f --tail 10 my_nginx查看容器日志(-f实时跟踪)。
docker cpdocker cp file.txt my_nginx:/path/在容器和宿主机间复制文件。
💾 提交与检查docker commitdocker commit my_nginx my_image:v1将容器的当前状态保存为新镜像(慎用)。
docker inspectdocker inspect my_nginx查看容器的详细配置和状态(JSON格式)。
🧹 删除容器docker rmdocker rm -f my_nginx删除已停止的容器(-f强制删除运行中的)。
docker container prunedocker container prune一键删除所有已停止的容器。
📊 资源监控docker statsdocker stats实时显示所有容器的资源占用(CPU、内存)。
docker topdocker top my_nginx显示容器内运行的进程列表。

典型场景:Web服务

# 1. 创建并后台运行一个Nginx容器,映射宿主机的8080端口到容器的80端口
docker run -d --name my_web -p 8080:80 nginx:alpine

# 2. 查看容器是否运行
docker ps

# 3. 优雅停止容器
docker stop my_web

# 4. 重新启动
docker start my_web

# 5. 当不再需要时,停止并删除容器
docker stop my_web && docker rm my_web
# 或者使用强制删除(不推荐用于生产)
docker rm -f my_web
2. 容器交互与调试 (exec & logs)
# 1. 进入运行中的容器,启动一个bash shell进行调试(最常用)
docker exec -it my_web /bin/bash  # 或 /bin/sh(Alpine镜像)

# 2. 在容器内执行单条命令,例如查看配置文件
docker exec my_web cat /etc/nginx/nginx.conf

# 3. 实时查看日志,常用于调试应用输出
docker logs -f --tail 50 my_web

# 4. 从容器复制日志文件到宿主机分析
docker cp my_web:/var/log/nginx/error.log ./nginx_error.log

注意docker attach 会连接到容器的主进程(如Nginx)。如果该进程是交互式的(如bash),你才能输入命令;退出(按Ctrl+CCtrl+P Ctrl+Q)可能会终止容器。因此,docker exec 是更安全、更常用的进入方式

3. 容器维护与清理 (prune)

定期清理已停止的容器可以释放资源。

# 交互式删除所有已停止的容器(安全)
docker container prune
# 或直接强制删除
docker container prune -f

4. 配置关于docker 加速问题

由于docker hub 停止了国内的访问,镜像文件我们无法pull到,这里我配置的方式是毫秒镜像 https://1ms.run/

  • 注册毫秒镜像,因为需要登录才能pull到镜像文件

  • 登录毫秒镜像看他官方文档 https://1ms.run/docs/1ms.run/docker-login/linux

  • 登录成功后就可正常拉起镜像啦

5. 安装DPanel社区版来可视化管理操作docker

如果是新手小白,可以通过安装DPanel来管理和操作docker,既方便又快捷

  • 安装命令

    • lite 版
      docker run -d --name dpanel --restart=always \
       -p 8807:8080 -e APP_NAME=dpanel \
       -v /var/run/docker.sock:/var/run/docker.sock -v dpanel:/dpanel \
       dpanel/dpanel:lite
      
    • 标准版
      docker run -d --name dpanel --restart=always \
       -p 80:80 -p 443:443 -p 8807:8080 -e APP_NAME=dpanel \
       -v /var/run/docker.sock:/var/run/docker.sock -v dpanel:/dpanel \
       dpanel/dpanel:latest 
      

安装成功即可通过ip:8807端口访问到管理页面

官方安装教程: https://github.com/donknap/dpanel

docker、DPanel一件安装脚本教程 使用安装脚本

更多推荐