Docker

一 为什么用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欢迎页即成功
相关推荐
程序员老赵5 小时前
服务器没有桌面?Docker 跑个 Chrome,浏览器就能远程用
docker·容器·devops
難釋懷5 小时前
Nginx反向代理中的容错机制
运维·nginx
杨浦老苏5 小时前
轻量级Docker仪表板Servedash
运维·docker·监控·群晖·仪表板
正经教主5 小时前
【docker基础】 第八周:容器监控与应用更新策略
运维·docker·容器
志栋智能5 小时前
超自动化巡检:如何选择适合你的起点?
运维·自动化
bloglin999995 小时前
Nginx高危漏洞CVE-2021-23017及配置样例
运维·nginx
qeen875 小时前
【Linux】Linux简单介绍与基本指令(上)
linux·运维·服务器·学习
kiros_wang5 小时前
Docker 使用完整指南
运维·docker·容器
Yana.nice6 小时前
history 显示时间戳操作(Bash)
运维
正经教主6 小时前
【docker基础】第九周:Docker安全与镜像优化
运维·docker·容器