docker基本知识及常用命令汇总

docker简介

Docker是一种开源的容器化平台,用于开发、部署和运行应用程序。它通过容器技术将应用程序及其依赖项打包在一起,确保在不同环境中运行的一致性。

核心概念

容器(Container)

轻量级、可执行的软件包,包含运行应用程序所需的代码、运行时、库和配置。容器共享主机操作系统内核,但彼此隔离。

镜像(Image)

容器的静态模板,包含创建容器所需的文件系统和配置。镜像通过分层存储实现高效复用。

仓库(Registry)

存储和分发镜像的服务,如Docker Hub。用户可以从仓库拉取公共镜像或推送私有镜像。

主要优势

环境一致性

消除"在我机器上能运行"的问题,确保开发、测试和生产环境一致。

资源高效

容器共享主机OS内核,启动快且占用资源少,比虚拟机更轻量。

快速部署与扩展

支持秒级启动和停止,适合微服务架构和动态扩缩容场景。

docker desktop

Docker 最初是为 Linux 设计的,因为其核心依赖于 Linux 内核的容器化技术(如命名空间和控制组)。Windows 原生不支持这些技术,因此需要 Docker Desktop 来提供兼容性。

Docker Desktop 概述

Docker Desktop 是一款适用于开发者的桌面应用程序,支持在 Windows 和 macOS 系统上快速构建、测试和部署容器化应用。它集成了 Docker Engine、Kubernetes 和开发者工具链,提供图形化界面(GUI)与命令行(CLI)的双重操作方式。

核心功能

  • 本地容器环境:内置 Docker Engine,支持创建和管理容器,无需额外配置。
  • Kubernetes 集成:一键启用单机版 Kubernetes 集群,便于本地开发与测试。
  • 跨平台兼容:通过 WSL 2(Windows)或 HyperKit(macOS)实现高效虚拟化。
  • 镜像管理:可视化操作镜像的拉取、构建和推送至 Docker Hub 或其他仓库。
  • 开发工具集成:支持与 VS Code、IntelliJ 等 IDE 深度协作。

Docker Desktop 在 Windows 上的作用包括:

  • 提供 Linux 内核模拟:通过内置的轻量级虚拟机(如 WSL2 或 Hyper-V)运行 Linux 环境,使容器能够正常工作。
  • 简化管理工具:集成图形界面和命令行工具,降低用户操作复杂度。
  • 文件系统与网络适配:解决 Windows 和 Linux 文件系统差异,优化网络桥接和端口映射。

docker常用命令

容器管理

启动容器

复制代码
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]

常用选项:

  • -d:后台运行(守护进程模式)
  • -p:端口映射(格式:主机端口:容器端口
  • -v:卷挂载(格式:主机目录:容器目录
  • --name:指定容器名称
  • -e:设置环境变量

查看容器

复制代码
docker ps [OPTIONS]

常用选项:

  • -a:显示所有容器(包括已停止的)
  • -q:仅显示容器ID
  • --filter:按条件过滤(如status=exited

停止/启动容器

复制代码
docker stop CONTAINER
docker start CONTAINER
docker restart CONTAINER

删除容器

复制代码
docker rm [OPTIONS] CONTAINER

常用选项:

  • -f:强制删除运行中的容器
  • -v:同时删除关联的卷

镜像管理

拉取镜像

复制代码
docker pull [OPTIONS] NAME[:TAG]

列出镜像

复制代码
docker images [OPTIONS]

常用选项:

  • -a:显示所有镜像(包括中间层)
  • --digests:显示摘要信息
  • --filter:按条件过滤

删除镜像

复制代码
docker rmi [OPTIONS] IMAGE

常用选项:

  • -f:强制删除

构建镜像

复制代码
docker build [OPTIONS] PATH

常用选项:

  • -t:指定镜像名称和标签
  • --no-cache:禁用缓存构建

日志与监控

查看日志

复制代码
docker logs [OPTIONS] CONTAINER

常用选项:

  • -f:实时跟踪日志
  • --tail:显示最后N行
  • -t:显示时间戳

资源监控

复制代码
docker stats [OPTIONS] [CONTAINER...]

显示实时资源使用统计(CPU、内存等)

网络管理

列出网络

复制代码
docker network ls

创建网络

复制代码
docker network create [OPTIONS] NETWORK

连接容器到网络

复制代码
docker network connect [OPTIONS] NETWORK CONTAINER

数据管理

创建卷

复制代码
docker volume create [OPTIONS] VOLUME

列出卷

复制代码
docker volume ls

删除卷

复制代码
docker volume rm VOLUME

其他实用命令

执行命令

复制代码
docker exec [OPTIONS] CONTAINER COMMAND [ARG...]

常用选项:

  • -it:交互式终端(通常与/bin/bash配合使用)

复制文件

复制代码
docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH
docker cp [OPTIONS] SRC_PATH CONTAINER:DEST_PATH

查看信息

复制代码
docker info

显示Docker系统信息

查看版本

复制代码
docker version

Docker run 与 Docker start 的区别

docker run 用于从镜像创建并启动一个新容器。

该命令会执行以下操作:检查本地是否存在指定镜像,若不存在则从远程仓库拉取;基于镜像创建新的容器文件系统层;分配网络和存储资源;执行启动命令(如 CMD 或 ENTRYPOINT)。每次运行都会生成一个全新的容器实例。

示例命令:

bash 复制代码
docker run -d --name my_container nginx

docker start 用于重新启动已存在的停止状态容器。该命令不会创建新容器,而是复用现有容器的文件系统层和配置,仅触发容器内进程的重新启动。适用于暂停或退出的容器恢复运行。

示例命令:

bash 复制代码
docker start my_container

核心差异总结

创建行为
docker run 每次调用均生成新容器(即使同名也会因冲突失败需先删除旧容器)。docker start 仅操作已创建的容器,无法修改原始配置(如端口映射或环境变量)。

资源分配
docker run 涉及完整的资源分配流程(IP、存储卷等)。docker start 复用现有资源,启动速度更快。

日志与状态
docker run 产生新的独立日志流。docker start 延续原有容器的日志文件,状态信息(如容器ID)保持不变。

典型使用场景

  • 初始化部署 :需使用 docker run 创建容器并设置参数(如 -p 8080:80)。
  • 故障恢复 :容器意外停止后,用 docker start 快速重启服务。
  • 调试测试docker run 适合隔离测试环境;docker start 适合延续之前的工作状态。

Docker 与 Docker-Compose 的核心区别

Docker 是一个容器化平台,用于构建、运行和管理单个容器。它通过 Dockerfile 定义容器镜像的构建步骤,并通过 docker run 命令启动容器。适用于单容器应用的开发和部署。

Docker-Compose 是一个工具,用于定义和运行多容器应用。通过 docker-compose.yml 文件配置多个服务(容器)、网络和卷,实现一键启动复杂应用栈。适用于微服务或多组件应用的编排。


功能对比

Docker

  • 操作对象:单容器
  • 配置文件:Dockerfile
  • 典型命令:docker build, docker run
  • 适用场景:构建镜像或运行独立容器

Docker-Compose

  • 操作对象:多容器组成的服务
  • 配置文件:docker-compose.yml
  • 典型命令:docker-compose up, docker-compose down
  • 适用场景:定义前后端、数据库等关联容器的协同部署

配置示例对比

Docker 单容器启动

通过命令行参数配置:

bash 复制代码
docker run -d --name nginx -p 80:80 -v /data:/usr/share/nginx/html nginx

Docker-Compose 多服务编排

通过 YAML 文件配置:

yaml 复制代码
version: '3'
services:
  web:
    image: nginx
    ports: ["80:80"]
    volumes: ["./data:/usr/share/nginx/html"]
  db:
    image: postgres
    environment:
      POSTGRES_PASSWORD: example

网络与依赖管理差异

Docker

需手动创建网络并连接容器:

bash 复制代码
docker network create app_net
docker run -d --net=app_net --name mysql mysql
docker run -d --net=app_net --link mysql -p 8080:8080 my_app

Docker-Compose

自动处理容器间网络和依赖:

yaml 复制代码
services:
  app:
    depends_on: [db]
  db:
    image: mysql

适用场景建议

  • 开发测试环境:优先使用 Docker-Compose 快速搭建完整服务栈
  • 生产环境:结合 Docker Swarm/Kubernetes 进行集群编排
  • 简单工具容器:直接使用 Docker 命令更高效

docker-compose常用命令

启动服务

docker-compose up 启动所有服务,默认在前台运行。添加 -d 参数可后台运行:

bash 复制代码
docker-compose up -d
停止服务

docker-compose down 停止并移除所有容器、网络、镜像(默认保留数据卷)。添加 -v 参数可同时删除数据卷:

bash 复制代码
docker-compose down -v
查看服务状态

docker-compose ps 列出所有容器的运行状态,包括端口映射:

bash 复制代码
docker-compose ps
查看日志

docker-compose logs 查看服务的日志输出。添加 -f 参数可实时跟踪日志:

bash 复制代码
docker-compose logs -f [服务名]
构建或重新构建服务

docker-compose build 重新构建服务的镜像,适用于Dockerfile有变更时:

bash 复制代码
docker-compose build
启动/停止/重启服务
  • 启动已存在的服务容器:

    bash 复制代码
    docker-compose start
  • 停止运行中的服务容器:

    bash 复制代码
    docker-compose stop
  • 重启服务容器:

    bash 复制代码
    docker-compose restart
进入容器

docker-compose exec 在运行中的容器内执行命令,常用于调试:

bash 复制代码
docker-compose exec [服务名] /bin/bash
查看服务依赖

docker-compose config 验证并查看最终的compose文件配置:

bash 复制代码
docker-compose config
扩展服务实例

docker-compose scale 扩展指定服务的容器数量(需结合up使用):

bash 复制代码
docker-compose up -d --scale [服务名]=3
环境变量管理
  • 通过.env文件定义环境变量,或在命令中直接指定:

    bash 复制代码
    docker-compose --env-file .env up
清理资源
  • 删除未使用的资源(镜像、网络等):

    bash 复制代码
    docker-compose down --rmi all
命令组合示例
  • 重新构建并启动服务:

    bash 复制代码
    docker-compose up -d --build
  • 强制重新创建容器(忽略缓存):

    bash 复制代码
    docker-compose up -d --force-recreate

注意:以上命令需在包含docker-compose.yml文件的目录中执行。部分命令可能需要Docker Compose V2以上版本支持。

相关推荐
小白跃升坊21 小时前
基于1Panel的AI运维
linux·运维·人工智能·ai大模型·教学·ai agent
杨江1 天前
seafile docker安装说明
运维
好好沉淀1 天前
Docker开发笔记(详解)
运维·docker·容器
zmjjdank1ng1 天前
Linux 输出重定向
linux·运维
路由侠内网穿透.1 天前
本地部署智能家居集成解决方案 ESPHome 并实现外部访问( Linux 版本)
linux·运维·服务器·网络协议·智能家居
树℡独1 天前
ns-3仿真之应用层(三)
运维·服务器·ns3
VekiSon1 天前
Linux内核驱动——基础概念与开发环境搭建
linux·运维·服务器·c语言·arm开发
禅口魔心1 天前
Win10 + WSL2 + Docker:K510(DongshanPI-Vision)开发环境从踩坑到跑通全记录(交叉编译 + 上板运行)
docker·嵌入式开发·wsl2·k510
Ankie Wan1 天前
cgroup(Control Group)是 Linux 内核提供的一种机制,用来“控制、限制、隔离、统计”进程对系统资源的使用。
linux·容器·cgroup·lxc
skywalk81631 天前
尝试在openi启智社区的dcu环境安装ollama最新版0.15.2(失败)
linux·运维·服务器·ollama