Docker的使用及核心命令

文章目录

  • Docker基础概念
  • 镜像管理命令
    • 镜像查看和搜索
    • 镜像下载和删除
    • 镜像构建
  • 容器生命周期管理
    • 创建和启动容器
    • 容器控制命令
    • 容器清理
  • 容器交互和调试
    • 进入容器
    • 文件操作
    • 日志和监控
  • 数据管理
    • 数据卷(Volume)
    • 绑定挂载
  • 网络管理
    • 网络基础操作
    • 端口映射
  • Dockerfile和Docker Compose的作用说明
    • Dockerfile的作用
    • Docker Compose的作用
  • 两者的关系
  • 总结

Docker基础概念

在深入命令之前,先理解几个关键概念:

  • 镜像(Image):应用的只读模板,包含运行应用所需的所有内容
  • 容器(Container):镜像的运行实例,是应用的实际运行环境
  • 仓库(Repository):存储和分发镜像的地方,如Docker Hub

简单类比:镜像就像是"类",容器就是"类的实例对象"。

镜像管理命令

镜像查看和搜索

# 查看本地镜像列表
docker images
docker image ls# 搜索Docker Hub上的镜像
docker search nginx
docker search --limit 5 mysql  # 限制搜索结果数量

镜像下载和删除

# 下载镜像
docker pull nginx                    # 下载最新版本
docker pull nginx:1.20              # 下载指定版本
docker pull mysql:8.0               # 下载MySQL 8.0# 删除镜像
docker rmi nginx:latest              # 删除指定镜像
docker rmi $(docker images -q)      # 删除所有镜像(慎用)
docker image prune                   # 删除悬空镜像(推荐)

镜像构建

# 从Dockerfile构建镜像
docker build -t myapp:v1.0 .        # 构建并打标签
docker build -t myapp:latest --no-cache .  # 不使用缓存构建# 从容器创建镜像(不推荐,但有时有用)
docker commit container_name new_image:tag

容器生命周期管理

创建和启动容器

# 运行容器的基本命令
docker run hello-world               # 运行测试容器# 常用参数组合
docker run -d --name mynginx -p 8080:80 nginx
# -d: 后台运行
# --name: 指定容器名称
# -p: 端口映射 (主机端口:容器端口)# 交互式运行
docker run -it ubuntu:20.04 /bin/bash
# -i: 交互模式
# -t: 分配伪终端# 挂载数据卷
docker run -d --name myapp -v /host/path:/container/path nginx
docker run -d --name mydb -v myvolume:/var/lib/mysql mysql:8.0

容器控制命令

# 查看容器状态
docker ps                           # 查看运行中的容器
docker ps -a                        # 查看所有容器(包括停止的)
docker ps -q                        # 只显示容器ID# 启动和停止容器
docker start container_name          # 启动已停止的容器
docker stop container_name           # 优雅停止容器
docker kill container_name           # 强制停止容器
docker restart container_name        # 重启容器# 暂停和恢复容器
docker pause container_name          # 暂停容器
docker unpause container_name        # 恢复容器

容器清理

# 删除容器
docker rm container_name             # 删除已停止的容器
docker rm -f container_name          # 强制删除运行中的容器
docker rm $(docker ps -aq)          # 删除所有容器# 自动清理
docker container prune               # 删除所有停止的容器
docker system prune                  # 清理未使用的镜像、容器、网络
docker system prune -a               # 更彻底的清理(包括未使用的镜像)

容器交互和调试

进入容器

# 在运行的容器中执行命令
docker exec -it container_name /bin/bash    # 进入容器交互终端
docker exec container_name ls /app          # 在容器中执行单条命令
docker exec -u root container_name /bin/bash # 以root用户身份进入

文件操作

# 容器和主机之间复制文件
docker cp file.txt container_name:/app/     # 从主机复制到容器
docker cp container_name:/app/file.txt ./   # 从容器复制到主机# 查看容器文件系统变化
docker diff container_name

日志和监控

# 查看容器日志
docker logs container_name           # 查看容器日志
docker logs -f container_name        # 实时跟踪日志
docker logs --tail 100 container_name # 查看最后100行日志
docker logs -t container_name        # 显示时间戳# 查看容器详细信息
docker inspect container_name        # 查看容器详细配置
docker stats                        # 实时查看所有容器资源使用情况
docker stats container_name         # 查看指定容器资源使用

数据管理

数据卷(Volume)

# 创建和管理数据卷
docker volume create myvolume        # 创建数据卷
docker volume ls                     # 列出所有数据卷
docker volume inspect myvolume      # 查看数据卷详情
docker volume rm myvolume           # 删除数据卷# 使用数据卷
docker run -d --name webapp -v myvolume:/app/data nginx

绑定挂载

# 挂载主机目录到容器
docker run -d --name dev-env -v $(pwd):/workspace node:14
docker run -d --name logs -v /var/log:/container/logs nginx# 只读挂载
docker run -d --name readonly-app -v /host/config:/app/config:ro nginx

网络管理

网络基础操作

# 网络管理
docker network ls                    # 列出所有网络
docker network create mynetwork     # 创建自定义网络
docker network inspect mynetwork    # 查看网络详情
docker network rm mynetwork         # 删除网络# 容器连接到网络
docker run -d --name app1 --network mynetwork nginx
docker network connect mynetwork container_name    # 将已存在容器连接到网络
docker network disconnect mynetwork container_name # 断开网络连接

端口映射

# 各种端口映射方式
docker run -d -p 8080:80 nginx              # 映射到指定端口
docker run -d -p 127.0.0.1:8080:80 nginx    # 映射到指定IP
docker run -d -P nginx                       # 随机映射所有暴露端口# 查看端口映射
docker port container_name

Dockerfile和Docker Compose的作用说明

Dockerfile的作用

Dockerfile是什么?
Dockerfile是一个文本文件,包含了一系列指令,用来自动化构建Docker镜像。它就像是"镜像的制作配方"。

主要作用:

  1. 标准化环境构建:确保每次构建的环境完全一致,让团队成员使用相同的运行环境。

  2. 自动化镜像制作

    FROM node:16             # 选择基础环境
    WORKDIR /app             # 设置工作目录
    COPY package.json ./     # 复制依赖文件
    RUN npm install          # 安装依赖
    COPY . .                 # 复制源代码
    CMD ["npm", "start"]     # 设置启动命令
    

Docker Compose的作用

Docker Compose是什么?
Docker Compose是用来定义和管理多容器应用的工具,通过一个YAML文件描述整个应用的架构。

主要作用:

  1. 多容器编排管理

    services:web:        # Web服务image: nginxdb:         # 数据库服务image: mysqlcache:      # 缓存服务image: redis
    
  2. 简化复杂应用部署:只用一个命令启动整个应用栈、自动处理容器间依赖关系和统一管理网络和数据卷。

  3. 服务间通信管理:自动创建内部网络、服务间可通过服务名直接通信、统一管理端口映射。

两者的关系

协作关系:

  • Dockerfile负责"如何制作镜像"
  • Docker Compose负责"如何编排容器"
  • 通常在docker-compose.yml中引用Dockerfile

使用场景:

场景使用工具原因
单个应用容器化Dockerfile只需要构建一个镜像
微服务架构部署Dockerfile + Docker Compose需要编排多个服务
开发环境搭建Docker Compose需要数据库、缓存等多个服务
CI/CD流水线主要用Dockerfile构建和推送镜像

总结

  • Dockerfile = “制作配方”:告诉Docker如何一步步构建你的应用镜像
  • Docker Compose = “指挥家”:协调多个容器协同工作,形成完整的应用系统

两者结合使用,能够实现从单个应用的容器化到复杂系统的自动化部署,是现代软件开发中不可或缺的工具组合。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/96803.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/96803.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

考研408计算机网络第36题真题解析(2021-2023)

(2023.36)在使用 CSMA/CD 协议的环境中,使用截断二进制指数退避算法,来选择重传时机,算法 有如下规定: (1)基本的退避时间为争用期 2τ,假设某网络具体的争用期为 51.2us…

Asio C++ Library是用来做什么的

hriskohlhoff/asio 是由 Chris Kohlhoff 主导维护的开源 C 库,专注于提供高效、跨平台的异步 I/O 支持,广泛应用于网络编程、并发控制和高性能系统开发。 📘 项目概述 项目名称:Asio C Library 下载地址:https://down…

ac791的按键ad_channel

每次ad_channel这个参数都要给我一定的迷惑性,让我以为这是通道的数量

机器人巡检与巡逻的区别进行详细讲解和对比

机器人巡检与巡逻的区别进行详细讲解和对比 尽管这两个词经常被混用,但在技术和应用层面上,它们有着本质的区别。核心区别在于:巡检是“深度体检”,而巡逻是“治安巡查”。 以下将从多个维度进行详细讲解和对比。 一、核心概念与目…

先进电机拓扑及控制算法介绍(3)——以“数据”驱动电机实现真正的无模型

1. 背景介绍 之前已经介绍过“无模型预测控制(Model-Free Predictive Control/MFPC)”中的“无模型预测电流控制(Model-Free Predictive Current Control/MFPCC)”,可参考下面知乎。 https://zhuanlan.zhihu.com/p/6…

C primer plus (第六版)第十一章 编程练习第5,6题

题目:5.设计并测试⼀个函数,搜索第1个函数形参指定的字符串,在其中查找第2个函数形参指定的字符⾸次出现的位置。如果成功,该函数返指向该字符的指针,如果在字符串中未找到指定字符,则返回空指针…

Altium Designer(AD)PCB丝印批量修改

目录 1 Altium Designer(AD)PCB丝印的字体批量修改 1.1选中所有丝印 1.1.1选中一个丝印:鼠标左键点击 1.1.2查找相似对象:鼠标右键或快捷键N 1.1.3如下图所示丝印被全部选中 1.2丝印字体信息修改 1.2.1打开属性面板——>位置/属性/字体修改 1.2.2丝印字体修改 1.2.…

AI+华为HarmonyOS开发工具DevEco Studio详细安装指南

作者:长江支流 日期:2025-09-13 第一部分:AI工具使用 一、如何使用DeepSeek帮助自己的工作? (一)提示词 为了与时俱进,充分利用最新技术、提高效率,采用AI生成部分材料&#xf…

【Ambari监控】— API请求逻辑梳理

附录:完整内容和源代码下载请参照 https://doc.janettr.com/ 一、前序章节回忆 我们在前面章节拆解了 Collector 的启动过程,并定位了控制器 TimelineWebServices。 本节聚焦 Collector 对外暴露的 REST 服务,搭建「接口全景图」。 二、接口…

论文阅读 2025-9-13 论文阅读随心记

随便记录一下最近阅读的几篇论文 1. Does DINOv3 Set a New Medical Vision Standard? 第一章 动机 (Motivation) 自然图像领域的成功范式:大型语言模型(LLMs)和视觉基础模型(如 DINO 系列)证明,通过自监督…

Avalonia 基础导航实现:从页面切换到响应式交互全指南

在 Avalonia 开发中,导航功能是构建多页面应用的核心需求。Avalonia 无需依赖第三方库,仅通过内置控件与 MVVM 模式即可实现灵活的页面切换。本文将以 “基础导航” 为核心,从 ViewModel 与 View 设计、导航逻辑实现,到样式美化与…

UniApp 分包异步化配置及组件引用解决方案

具体参考微信小程序文档基础能力 / 分包加载 / 分包异步化 一、分包页面组件配置 在 UniApp 的pages.json中,为分包页面(或主包如 tabbar 页面)配置异步组件时,需同时设置usingComponents和componentPlaceholder: {&…

系统核心解析:深入操作系统内部机制——进程管理与控制指南(一)【进程/PCB】

♥♥♥~~~~~~欢迎光临知星小度博客空间~~~~~~♥♥♥ ♥♥♥零星地变得优秀~也能拼凑出星河~♥♥♥ ♥♥♥我们一起努力成为更好的自己~♥♥♥ ♥♥♥如果这一篇博客对你有帮助~别忘了点赞分享哦~♥♥♥ ♥♥♥如果有什么问题可以评论区留言或者私信我哦~♥♥♥ ✨✨✨✨✨✨个人…

微论-神经网络特征空间的动态聚集,对抗灾难性遗忘的新范式

这是一个非常有趣且富有想象力的理论构想。受陀螺仪启发,我将陀螺仪的“定轴性”与“进动性”原理引入神经网络的特征空间,探讨一种对抗灾难性遗忘的新范式。---### **基于陀螺仪原理的神经网络记忆巩固理论探讨**#### **引言:记忆的流失与稳…

鸿蒙审核问题——折叠屏展开态切换时,输入框内容丢失

文章目录背景解决历程1、无意中发现了眉目2、确定问题原因3、解决办法4、官方文档5、总结背景 奇葩的事情年年有啊,今年特别多。这不今天又遇到了一个奇葩的问题。鸿蒙NextAPP上架AppGallery市场,审核拒了,说是折叠屏手机展开态切换时&#…

前后端分离架构中,Node.js的底层实现原理与线程池饥饿问题解析

在VueJava/.NET的前后端分离架构中,Node.js的底层实现原理与线程池饥饿问题解析 一、架构概述:Node.js的定位与角色 在现代Web开发中,Vue.js作为前端框架与Java/.NET后端结合的架构非常流行。在这种架构中,Node.js通常扮演着两个关…

Django ModelForm:快速构建数据库表单

Django 中的 forms.ModelForm —— 它是 Django 表单系统和 ORM 的一个“桥梁”,能帮助你快速基于 数据库模型(Model) 自动生成表单,极大减少重复代码。1. 什么是 ModelForm 普通 Form (forms.Form):完全手写字段&…

补 json的作用

:“我开车直接拧钥匙就能走,为什么还要看仪表盘和用中控台?”直接点击“运行”,就像是汽车的自动驾驶模式。它能帮你开起来,但你不知道它走的是哪条路,油门踩多深。使用 launch.json 配置,就像是…

apache详细讲解(apache介绍+apache配置实验+apache实现https网站)

1.apache HTTP server介绍httpd项目地址:https://httpd.apache.org/ 在Apache2中有三种工作模式,使用者可以根据不同的业务场景来进行选择(1)prefork模式prefork模式是一种老而稳的模式:一个主进程管理者多个子进程,每个子进程单独处理用户请求&#xf…

jajajajajajajava

线程1 线程概念进程:进程指正在内存中运行的程序。进程具有一定的独立性。线程:线程是进程中的一个执行单元。负责当前进程中程序的执行。一个进程中至少有一个线程。如果一个进程中有多个线程,称之为多线程程序。java中的线程采用的是抢占式调度,如果线…