Docker 是一个轻量级的容器化工具 ,能把应用 + 依赖库 + 配置 打包成一个独立 "集装箱"(容器),在任何 Linux/Windows 上一模一样地运行,解决 "我电脑上能跑、服务器上不行" 的问题。
Docker 是 C/S 架构:即后台跑一个 **Docker 服务端,**守护进程 = 后台默默一直运行的服务程序
Docker 三要素
- **镜像(Image)**只读模板,相当于 "安装包 / 系统盘"。
- **容器(Container)**镜像运行起来的实例,相当于 "正在运行的系统 / 程序"。
- **仓库(Repository)**存放、下载镜像的地方(如 Docker Hub)。
Docker 会打包什么
打包一个应用能独立运行所需的一切:
- 应用代码、可执行程序
- 运行依赖库、环境(Python/Java/Node/CUDA 等)
- 系统配置、环境变量
- 必要的系统文件(最小化 Linux 环境)
Docker 为什么比虚拟机快
VM 是虚拟一整台电脑;Docker 只虚拟一个运行环境,共用宿主机的 Linux 内核,不虚拟硬件,不跑完整系统,只是隔离进程、文件、网络---秒级启动,内存占用极低
windows安装docker
首先必须启用 WSL 2, 然后下载 Desktop:Docker Desktop: The #1 Containerization Tool for Developers | Docker
安装完成 → 重启电脑 →PowerShell输入docker --version验证是否安装成功
Linux安装docker
curl -fsSL https://get.docker.com -o get-docker.sh #下载 Docker 官方自动安装脚本
sudo sh get-docker.sh #用管理员权限运行安装脚本
sudo usermod -aG docker $USER #把当前用户加入 docker 组(免 sudo)
常用命令
docker --help #类似于linux的man,帮助命令
docker run --rm xxxname#运行一个容器+运行完自动删除容器+镜像名字
- 先找本地有没有
- 本地没有 → 自动去云端(Docker Hub)下载
- 下载完 → 自动运行
镜像相关
docker images# 查看本地所有镜像
docker images -aq #显示所有镜像(包括中间层缓存镜像),只显示镜像 ID
docker images --no-trunc #显示完整镜像 ID(不截断)
docker images -f "dangling=true" #-f过滤镜像
docker pull 镜像名# 只下载镜像,不运行
docker rmi 镜像ID/名 # 删除本地镜像
docker rmi $(docker images -f "dangling=true" -q) #批量删除虚悬镜像,拉取新版镜像时,旧版被顶替,就是虚悬镜像
docker search 关键词 # 在Docker Hub搜索镜像 Docker Hub Container Image Library | App Containerization
docker build -t my-python-app:v1 .#构建自己的镜像(会自动找Dockerfile)
容器命令
docker run -d xxx#后台运行容器(守护式)
docker run -it xxx #交互式终端(进入容器内部敲命令,会分配伪终端)
docker run -p 8080:80 xxx #端口映射(宿主机端口:容器端口),让外部能访问容器
docker run --name mynginx xxx #给容器起名字
docker run -e MYSQL_ROOT_PASSWORD=123456 mysql #设置环境变量
docker ps #查看有几个容器在运行
exit#退出当前容器,容器会停止运行
先按
Ctrl + P,松开再按Ctrl + Q #后台退出(容器继续跑)docker exec -it 容器名/ID bash#进入正在运行的容器,打开容器内部的命令行
docker start xxx #启动一个已经存在、但停止了的旧容器docker restart xxx#重启
docker stop xxx#停止一个容器 kill是强制停止
docker rm xxx #删除容器,如果容器在运行,会提示,需要的话加-f
docker system prune # 清理无用镜像、容器、缓存
**docker commit #**把一个正在修改过的容器,打包成一个新的镜像docker commit 容器ID或名字 新镜像名字:版本号
commit 会把容器当前所有内容打包进去,不会包含挂载的目录(-v 挂载的内容不会进镜像)
服务管理
systemctl start docker # 启动Docker服务
systemctl stop docker # 停止Docker服务
systemctl restart docker # 重启Docker
systemctl enable docker # 开机自启
systemctl status docker # 查看Docker状态
docker logs 容器ID # 查看容器日志
docker inspect 容器/镜像 # 查看详细信息
容器数据卷
容器数据卷 = 容器与宿主机之间的 "共享文件夹",用来让数据持久化、不丢失。
容器删了 → 里面的数据也一起删了
但像 MySQL、Redis、你的业务文件,不能丢 。所以要用 数据卷 把数据保存在宿主机上,跟容器生命周期分开。
docker run -v /宿主机目录:/容器目录 镜像名
上述命令让宿主机的某个目录 → 直接映射到容器内部
Dockerfile
Dockerfile 就是一个 "构建镜像的脚本 / 说明书",Docker 按照这份说明书,自动构建出一个镜像。