一 为什么用Docker
传统部署软件环境不一致
部署太慢
虚拟机太笨重,资源浪费
迁移复制超级麻烦
docker的优势:
环境统一:打包带越,在哪运行都一样
部署极速:几分钟部署一套完整环境
轻量高效:比虚拟机小几十倍,秒级启动
迁移方便:打包好的盒子,直接复制到任何服务器
二 什么是Docker
简单来讲,docker就是容器化打包技术。它可以把我们的软件、运行需要的系统环境、所有依赖、配置文件,全部打包成一个独立的小盒子。这个盒子,放到任何一台服务器,不用安装、不用配置,打开直接就能运行。在哪运行都一样,秒级启动,占用资源极少。
Docker=软件环境一键打包
三 docker核心概念
1 镜像(Image)
镜像(Image),这是Docker的"基础模板"。
它是一个只读的模板文件,里面包含了我们运行软件所需要的一切:操作系统、软件本身、依赖包、配置文件,所有东西都打包好,一次性做好,不能修改。
例如:我们需要部署MySQL,就下载一个"MySQL镜像",这个镜像就是做好的"模板",直接拿来用就行,是Docker运行的基础。
核心特点
只读:不能修改,一旦做好,就固定不变;
可复制:一个镜像,可以复制出无数个可以运行的"实例";
体积小:比虚拟机镜像小很多,下载速度快。
镜像=软件环境的"模板"
2 容器(Container)
它是镜像运行起来的"实例",也是我们真正使用的"外卖便当"。基于镜像启动的、可运行的实例---我们下载好镜像(模板)后,通过一条命令,就能把镜像"启动"起来,启动后就变成了容器,容器是可以运行、可以操作、可以停止的,相当于"活的"软件。
以Mysql为例:下载Mysql镜像(模板),启动镜像后,就得到了一个Mysql容器,这个容器,就
是正在运行的Mysql服务,我们可以访问它、停止它、重启它。
核心特点
可运行:容器是"活的",可以启动、停止、重启、删除;
可修改:容器运行后,里面的内容可以修改(比如在容器里创建文件);
相互隔离:多个容器之间相互独立,互不影响;
依赖镜像:没有镜像,就不能创建容器,容器是镜像的"分身"。
容器=运行的镜像=活的模板
3 仓库(Registry)
它存放镜像的"地方",相当于我们下载软件的"应用商店"仓库,就是专门存放Docker镜像的"服务器",我们需要什么镜像,就从仓库里"下载"(专业说法叫"拉取"),下载到本地后,再启动成容器。就像我们手机下载APP,要去应用商店;我们下载Docker 镜像,就要去Docker 仓库。核心作用就是:存放镜像、供我们下载镜像。
企业常用仓库
Docker 官方仓库(Docker Hub):全球最大的镜像仓库,里面有各种常用的镜像(MySQL,PHP等),但下载速度可能较慢;国内仓库(阿里云、腾讯云镜像仓库):国内企业最常用,下载速度快,和官方仓库内容基本一致,
仓库=镜像的"应用商店"=存放模板的地方,
四 Docker安装
1.更新系统基础环境
先更新系统软件包,补齐基础依赖,避免后续安装、运行报错,这是我们运维部署服务前的固定习惯。
dnf update -Y
dnf install wget curl -y
2.一键安装 Docker
直接使用欧拉自带的dnf包管理器,一行命令完成安装,操作简单高效。
dnf install docker -y
3.启动Docker并设置开机自启
Docker安装完成后,不会自动运行,我们手动启动,同时配置开机自启,服务器重启后自动生效,符合企业运维规范。
systemctl start docker
systemctl enable docker
4.验证Docker安装成功
docker -v
五 Docker常用命令
镜像操作命令
1. 拉取镜像
# 拉取最新nginx
docker pull nginx
# 指定版本
docker pull nginx:1.25-alpine
2. 查看本地镜像
docker images
# 精简列表
docker images -q
3. 删除镜像
# 指定镜像ID/名称删除
docker rmi nginx:1.25-alpine
# 强制删除
docker rmi -f 镜像ID
# 清理所有悬空无用镜像
docker image prune -y
4. 镜像导出 / 导入(离线迁移)
# 导出本地镜像
docker save -o nginx.tar nginx:1.25-alpine
# 导入镜像
docker load -i nginx.tar
5. 构建自定义镜像(Dockerfile)
docker build -t my-web:v1 .
容器生命周期(run/start/stop/restart/rm)
1. 新建并启动容器(最核心)
# 基础:后台运行nginx,映射主机8080→容器80端口
docker run -d -p 8080:80 --name my-nginx nginx
# 常用完整参数解释
# -d 后台守护运行
# -p 宿主机端口:容器端口 端口映射
# --name 自定义容器名
# --restart always 开机自启
# -v 挂载数据卷
docker run -d \
-p 8080:80 \
--name my-nginx \
--restart always \
nginx
2. 启停、重启容器
# 停止
docker stop my-nginx
# 启动已存在容器
docker start my-nginx
# 重启
docker restart my-nginx
# 强制杀掉
docker kill my-nginx
3. 删除容器
# 删除停止状态容器
docker rm my-nginx
# 强制删除运行中容器
docker rm -f my-nginx
# 一次性清理所有停止的容器
docker container prune -y
查看容器列表
# 正在运行的容器
docker ps
# 所有容器(含已停止)
docker ps -a
# 只输出容器ID
docker ps -aq
进入容器内部操作
# 交互式进入nginx容器
docker exec -it my-nginx /bin/bash
# alpine镜像无bash,用sh
docker exec -it my-nginx sh
# 退出容器终端:exit
文件拷贝(宿主机 ↔ 容器)
# 宿主机文件 → 容器内
docker cp /root/index.html my-nginx:/usr/share/nginx/html/
# 容器内文件 → 宿主机
docker cp my-nginx:/etc/nginx/nginx.conf /root/
日志排查
# 实时滚动看日志
docker logs -f my-nginx
# 只看最后100行
docker logs --tail 100 my-nginx
# 带时间戳
docker logs -tf my-nginx
数据挂载 volume(持久化)
1. 绑定宿主机目录(常用)
# 宿主机/nginx/html挂载到容器网页目录
docker run -d -p 8080:80 --name nginx-v \
-v /data/nginx/html:/usr/share/nginx/html \
nginx
2. Docker 管理卷
# 创建卷
docker volume create nginx-data
# 使用卷启动容器
docker run -d -p 8080:80 -v nginx-data:/usr/share/nginx/html nginx
# 查看卷列表
docker volume ls
# 删除无用卷
docker volume prune -y
端口、IP、详情查看
# 查看容器端口映射
docker port my-nginx
# 查看容器完整元数据(JSON)
docker inspect my-nginx
# 单独提取容器IP
docker inspect -f '{{.NetworkSettings.IPAddress}}' my-nginx
镜像打包提交(不推荐生产,临时测试用)
# 修改容器后,提交为新镜像
docker commit my-nginx my-nginx-new:v1
系统全局清理命令(常备)
# 一键清理:停止容器、无用镜像、无用卷、网络
docker system prune -a -y
docker-compose 常用(多容器编排)
# 前台启动
docker-compose up
# 后台启动
docker-compose up -d
# 停止
docker-compose down
# 重启
docker-compose restart
# 查看日志
docker-compose logs -f
测试验证全套示例(一键跑通)
# 1. 拉取nginx
docker pull nginx
# 2. 启动
docker run -d -p 8090:80 --name test-nginx --restart always nginx
# 3. 查看是否运行
docker ps
# 4. 浏览器访问 服务器IP:8090 看到nginx欢迎页即成功