Linux中Docker介绍与使用小白篇

Docker 是 Linux 上最主流的容器化引擎,基于 Linux 内核的 Namespace、Cgroup、UnionFS

实现轻量级隔离,能把应用与依赖打包成可移植容器,做到 "一次构建、随处运行"。

一、Docker 核心概念(Linux 环境)

镜像(Image):只读模板,包含应用 + 运行环境 + 依赖,分层存储(OverlayFS),可复用、可共享。

容器(Container):镜像的运行实例,有独立进程 / 网络 / 文件系统,轻量、秒级启动。

仓库(Registry):存储 / 分发镜像,如 Docker Hub、阿里云镜像仓库。

Docker Engine:Linux 后台守护进程(dockerd),负责管理镜像、容器、网络、存储。

二、Linux 安装 Docker(主流发行版)

  1. Ubuntu / Debian(推荐官方源)
bash 复制代码
# 1. 卸载旧版(如有)
sudo apt remove docker docker-engine docker.io containerd runc
# 2. 安装依赖
sudo apt update
sudo apt install -y ca-certificates curl gnupg lsb-release
# 3. 添加 GPG 密钥
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
# 4. 添加 Docker 源
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
# 5. 安装 Docker Engine
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin
# 6. 启动并开机自启
sudo systemctl enable --now docker
# 7. 验证
docker --version
docker run hello-world
  1. CentOS / RHEL / Rocky Linux
bash 复制代码
# 1. 卸载旧版
sudo yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine
# 2. 安装依赖
sudo yum install -y yum-utils
# 3. 添加 Docker 源
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
# 4. 安装
sudo yum install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin
# 5. 启动并开机自启
sudo systemctl enable --now docker
# 6. 验证
docker --version
docker run hello-world
  1. 一键脚本(快速安装)
bash 复制代码
# 官方脚本
curl -fsSL https://get.docker.com | sudo sh
# 国内可换阿里云脚本
curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/get-docker.sh | sudo sh

三、Linux 常用 Docker 命令

镜像操作

bash 复制代码
docker pull nginx          # 拉取镜像
docker images              # 查看本地镜像
docker rmi nginx           # 删除镜像
docker build -t myapp .    # 从 Dockerfile 构建镜像

容器操作

bash 复制代码
docker run -d -p 80:80 nginx  # 后台运行,端口映射
docker ps                     # 查看运行中容器
docker ps -a                  # 查看所有容器
docker stop <容器ID/名>       # 停止容器
docker start <容器ID/名>      # 启动容器
docker rm <容器ID/名>         # 删除容器
docker exec -it <容器ID> bash # 进入容器终端

系统与日志

bash 复制代码
docker system df             # 查看 Docker 磁盘占用
docker logs <容器ID>         # 查看容器日志
docker info                  # 查看 Docker 信息

四、Linux 下 Docker 核心原理

Namespace:隔离进程、网络、文件系统、用户、UTS、IPC,让容器像独立系统。

Cgroup:限制容器 CPU、内存、磁盘 IO、网络带宽,防止资源抢占。

UnionFS(OverlayFS):镜像分层,共享底层层、只写顶层,节省空间、加速启动。

C/S 架构:docker 客户端通过 API 与 dockerd 守护进程通信。

五、Linux 下 Docker 优势

轻量:比虚拟机小得多,秒级启动,资源占用低。

一致环境:开发 / 测试 / 生产环境完全一致,避免 "在我机器上能跑" 问题。

可移植:一次构建,在任何 Linux 主机 / 云服务器运行。

易扩展:适合微服务、CI/CD、快速扩容场景。

Docker 常用命令速查表(可直接复制)和实用 Dockerfile 编写示例,覆盖日常开发 / 运维高频场景,新手也能快速上手。

一、Docker 常用命令速查表(按场景分类)

bash 复制代码
# ==================== 1. 基础环境 & 系统信息 ====================
docker --version          # 查看 Docker 版本
docker info               # 查看 Docker 系统信息(镜像/容器数、驱动、内核等)
docker system df          # 查看 Docker 磁盘占用(镜像/容器/卷/构建缓存)
docker system prune       # 清理无用资源(停止的容器、悬空镜像、未使用网络)
docker system prune -a    # 深度清理(含未使用的镜像,谨慎使用)

# ==================== 2. 镜像操作 ====================
docker pull nginx:1.25    # 拉取指定版本镜像(不加版本默认latest)
docker pull registry.cn-hangzhou.aliyuncs.com/library/nginx  # 拉取国内镜像
docker images             # 列出本地所有镜像
docker images -q          # 只显示镜像ID(批量删除用)
docker rmi 镜像ID/镜像名   # 删除单个镜像
docker rmi $(docker images -q)  # 删除所有本地镜像(谨慎)
docker tag 原镜像名:版本 新镜像名:版本  # 给镜像打标签(推送仓库用)
docker push 镜像名:版本    # 推送镜像到仓库(需先登录)
docker save -o mynginx.tar nginx:1.25  # 导出镜像为tar包
docker load -i mynginx.tar             # 从tar包导入镜像

# ==================== 3. 容器操作(核心) ====================
# 启动容器(高频参数:-d后台 -p端口 -v挂载 -name命名 -it交互)
docker run -d -p 8080:80 --name mynginx -v /host/html:/usr/share/nginx/html nginx:1.25
# 参数说明:
# -d:后台运行   -p 主机端口:容器端口   --name:自定义容器名
# -v:主机目录:容器目录(数据持久化)   -it:交互式运行(如bash)

docker ps                 # 查看运行中的容器
docker ps -a              # 查看所有容器(含停止的)
docker ps -q              # 只显示运行中容器ID
docker stop 容器ID/容器名  # 停止容器(优雅关闭)
docker kill 容器ID/容器名  # 强制停止容器(快速终止)
docker start 容器ID/容器名 # 启动已停止的容器
docker restart 容器ID/容器名 # 重启容器
docker rm 容器ID/容器名    # 删除单个容器(需先停止)
docker rm $(docker ps -aq) # 删除所有容器(谨慎)
docker exec -it 容器ID bash # 进入容器终端(bash/sh)
docker exec -it 容器ID sh  # 轻量容器用sh(如alpine镜像)
docker cp 主机文件 容器ID:容器路径  # 主机文件复制到容器
docker cp 容器ID:容器路径 主机文件  # 容器文件复制到主机
docker logs 容器ID/容器名  # 查看容器日志
docker logs -f 容器ID      # 实时跟踪日志(类似tail -f)
docker logs --tail 100 容器ID # 查看最后100行日志
docker inspect 容器ID/镜像ID # 查看容器/镜像详细信息(JSON格式)

# ==================== 4. 网络操作 ====================
docker network ls         # 查看所有网络
docker network create mynet # 创建自定义桥接网络(容器间互通)
docker run -d --name app1 --network mynet nginx # 容器加入自定义网络
docker network connect mynet 容器ID # 已有容器加入自定义网络

# ==================== 5. 数据卷操作(持久化推荐) ====================
docker volume ls          # 查看所有数据卷
docker volume create myvol # 创建命名卷
docker run -d -v myvol:/data nginx # 挂载命名卷到容器
docker volume inspect myvol # 查看卷详情(存储路径)
docker volume rm myvol    # 删除数据卷

二、实用 Dockerfile 编写示例(覆盖 3 类常见场景)

Dockerfile 是构建镜像的 "脚本",以下示例可直接复制修改,适配你的业务场景。

示例 1:前端项目(Vue/React)打包部署(Nginx 镜像)

bash 复制代码
# 阶段1:构建前端项目
FROM node:18-alpine AS build-stage
WORKDIR /app
# 复制依赖文件并安装(利用缓存,修改代码不重新装依赖)
COPY package.json package-lock.json ./
RUN npm install --registry=https://registry.npmmirror.com
# 复制所有代码并打包
COPY . .
RUN npm run build

# 阶段2:部署到Nginx(精简镜像)
FROM nginx:1.25-alpine
# 复制构建好的前端文件到Nginx默认目录
COPY --from=build-stage /app/dist /usr/share/nginx/html
# 复制自定义Nginx配置(可选)
COPY nginx.conf /etc/nginx/conf.d/default.conf
# 暴露端口
EXPOSE 80
# 启动Nginx
CMD ["nginx", "-g", "daemon off;"]

示例 2:后端项目(Java SpringBoot)

bash 复制代码
# 基础镜像(精简版JRE,比JDK小)
FROM openjdk:17-jre-slim
# 维护者信息(可选)
LABEL maintainer="your@email.com"
# 设置工作目录
WORKDIR /app
# 复制打包好的jar包到容器(注意jar包名称替换成你的)
COPY target/your-app-1.0.0.jar app.jar
# 设置JVM参数(优化内存)
ENV JAVA_OPTS="-Xms512m -Xmx1024m"
# 暴露端口(对应SpringBoot配置的端口)
EXPOSE 8080
# 启动命令
ENTRYPOINT ["sh", "-c", "java $JAVA_OPTS -jar app.jar"]

示例 3:Python 项目(Flask/Django)

bash 复制代码
# 基础镜像
FROM python:3.11-alpine
# 避免pip缓存问题
ENV PIP_NO_CACHE_DIR=1
# 工作目录
WORKDIR /app
# 复制依赖文件并安装(国内源加速)
COPY requirements.txt .
RUN pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
# 复制项目代码
COPY . .
# 暴露端口
EXPOSE 5000
# 启动命令(Flask示例,Django替换为:python manage.py runserver 0.0.0.0:5000)
CMD ["python", "app.py"]

三、Dockerfile 构建 & 运行命令(配套示例)

bash 复制代码
# 进入Dockerfile所在目录
cd /path/to/your/project
# 构建镜像(-t 打标签,格式:名称:版本)
docker build -t my-frontend:v1 .
# 运行镜像(以前端示例为例)
docker run -d -p 80:80 --name my-frontend-app my-frontend:v1

总结

  1. 命令速查表:按「基础 / 镜像 / 容器 / 网络 / 数据卷」分类,覆盖 90% 日常操作,可直接复制使用; Dockerfile

  2. 示例:适配前端、Java、Python 三大主流场景,核心优化(如分层构建、国内源、内存优化)已内置; 关键技巧:Dockerfile

  3. 优先用 COPY 而非 ADD、用 alpine 精简镜像、分层构建减少镜像体积。

相关推荐
CAAS_IFR_zp4 小时前
vConTACT3: 机器学习实现可扩展和系统的病毒层级分类
linux·运维·服务器
一个人旅程~4 小时前
Linux Mint(Ubuntu)如何在没有网卡驱动情况下利用手机上网安装旧电脑网卡驱动程序指导书
linux·windows·经验分享·电脑
Lugas Luo4 小时前
DVR 存储工具深度分析报告 (测试与产品视角)
linux·嵌入式硬件·测试工具
杨云龙UP5 小时前
ODA-Oracle实践记录:通过Navicat导出导入表CSV文件并清理重复数据,处理OA待办延迟刷新问题_20260416
linux·运维·服务器·数据库·sql·mysql·oracle
Oliver_LaVine5 小时前
java项目启动报错:CreateProcess error=206, 文件名或扩展名太长
java·linux·jenkins
QC777LX5 小时前
传统电商专员转型AI电商运营师:选品到投放自动化流程
运维·人工智能·自动化
电商API_180079052475 小时前
电商数据采集实战:批量自动化获取淘宝、京东商品评论数据
大数据·运维·人工智能·数据挖掘·数据分析·自动化
D4c-lovetrain5 小时前
Linux个人心得27 (redis哨兵模式实战)
linux·redis·bootstrap
START_GAME5 小时前
SQL Server 还原 .bak 文件(SSMS 图形界面法)
运维·服务器·数据库
June5615 小时前
SSH 免密 + 主机指纹登录完整安装步骤(macOS)
运维·macos·ssh