【Docker 从入门到实战全攻略(一):核心概念 + 命令详解 + 部署案例】

article/2025/7/22 2:40:18

1. 是什么

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

2. Docker与虚拟机

2.1 Docker(容器化)

容器化是一种轻量级的虚拟化技术,它将应用程序及其依赖项打包成独立的容器,确保应用在不同环境中一致运行。与传统虚拟机相比,容器共享宿主操作系统的内核,因此更轻量、更高效。

  • 核心技术:Linux 的 namespaces(隔离进程、网络等)和 cgroups(限制资源使用)。
  • 工作方式:容器直接运行在宿主机的内核上,共享操作系统,仅封装应用的用户空间。
  • 优点:资源效率高、启动快、部署简单。
  • 缺点:隔离性较弱(共享内核),不适用于需要完全隔离内核的场景。

2.2 虚拟机(VM)

  • 核心技术:Hypervisor(如 VMware、VirtualBox、KVM)模拟硬件资源。
  • 工作方式:每个 VM 包含独立的操作系统、驱动程序和应用,通过 Hypervisor 访问物理硬件。
  • 优点:完全隔离,安全性高,适用于不同操作系统或需要隔离内核的场景。
  • 缺点:资源消耗大,启动慢,管理复杂。
    暂时无法在飞书文档外展示此内容

2.3 对比

对比项Docker(容器化)虚拟机(VM)
底层依赖共享宿主机的操作系统内核,仅封装应用和依赖库每个 VM 包含完整的操作系统(内核 + 应用)
隔离级别进程级隔离(轻量级)硬件级隔离(重量级)
资源利用率高(无需额外操作系统开销)低(每个 VM 需要独立的操作系统资源)
启动速度秒级(直接启动应用进程)分钟级(需要启动完整的操作系统)

3. 核心概念

[图片]

3.1 镜像(Image)

  • 只读的模板,包含应用代码、依赖库、环境变量等,类似 “应用的快照”。类似于“菜谱”
  • 例如:cr2.fit2cloud.com/1panel/maxkb 就是一个镜像

3.2 容器(Container)

  • 镜像的运行实例,可被启动、停止、删除。类似于按菜谱做出的菜
  • 容器间相互隔离,共享宿主机的操作系统内核

3.3 仓库(Repository)镜像源

  • 存储镜像的地方,分为公有仓库(如 Docker Hub)和私有仓库(如 cr2.fit2cloud.com)。类似于菜谱分享平台
    [图片]

4 Docker常用命令

4.1 帮助命令

  • docker verision # 显示版本信息
  • docker info # 显示系统信息
  • docker 命令 --help # 帮助命令
    官方帮助文档:https://docs.docker.com/reference/cli/docker/

4.2 镜像命令

4.2.1 docker images 查看所有镜像

docker images [选项] [镜像名[:版本标签TAG]]
在这里插入图片描述

  • 常用选项
    -a, --all #列出所有镜像
    -q,--quiet #只显示镜像的id

4.2.2 docker search 搜索镜像

docker search [选项] TERM

4.2.3 docker pull 拉取镜像

docker pull [选项] 镜像名[:版本标签|@DIGEST]

4.2.4 docker rmi 删除镜像

docker rmi [选项] IMAGE [IMAGE...]

  • docker rmi -f 镜像id 镜像id #删除指定的镜像
  • docker rmi -f $(docker images -aq) #删除全部的镜像

4.2.5 docker commit 保存镜像

docker commit [选项] 容器ID或名称 [新镜像名[:标签]]

  • 容器转镜像工具:将单个容器的当前状态保存为新镜像,
  • 常用选项
    -a, --author 指定镜像作者信息 --author="John Doe <john@example.com>"
    -m, --message 添加提交信息 --message="Installed Apache"
    -p, --pause 提交时暂停容器(默认开启) --pause=false(不暂停容器)
  • docker commit abc123 my-ubuntu-python:v1

4.3 容器命令

  • 有了镜像才可以创建容器
    docker pull centos:7 #需指定下载版本,若直接pull centos ,CentOS 官方已 移除 latest 标签,或镜像源中未同步 latest 版本,会导致拉取失败

4.3.1 docker run 新建容器并启动

docker run [参数] image

  • 常用选项
    --name="Name" #为容器命名,用来区分容器
    -d #以后台方式运行
    -it #使用交互方式运行,进入容器查看内容
    -p 主机端口:容器端口 #指定容器的端口
  • 示例:启动并进入
    在这里插入图片描述

4.3.2 exit 从容器退回到主机

exit # 停止容器并退回到主机
Ctrl +P + Q # 容器不停止退回到主机

4.3.3 docker ps 或 docker top查看服务器进程

docker ps [选项]

  • 常用选项
    (默认) # 列出当前正在运行的容器
    -a #列出当前正在运行以及历史运行过的容器
    -n=1 #显示最近1次创建的容器
    -q #只显示容器编号

docker top 容器id

4.3.4 docker rm 删除容器

docker rm [选项,] 容器id [容器id...]

  • docker rm 容器id #删除指定容器,但无法删除正在运行的容器
  • docker rm -f $(docker ps -aq) #删除所有容器
  • docker ps -a -q | xargs docker rm #删除所有容器
  • docker rm $(docker ps -a -q) #删除所有停止的容器

4.3.5 启动和停止容器

docker start 容器id #启动容器
docker restart 容器id #重启容器
docker stop 容器id #停止当前正在运行的容器
docker kill 容器id #停止当前正在运行的容器

4.4 常用其它命令

4.4.1 docker run -d 后台启动容器

docker run -d 镜像名
在这里插入图片描述

  • docker 容器使用后台运行,必须要有一个前台进程,若 docker 发现没有应用,就会自动停止

4.4.2 docker logs 查看日志

docker logs [选项] 容器

  • 常用选项
    -tf #显示带时间戳的日志
    --tail 1 #显示1条日志

#没有日志可以自己编写一段 shell 脚本
docker run -d centos /bin/sh -c "while true;do echo ronghaha;sleep 1;done" #每隔一秒输出一次 ronghaha
#再进行日志的查看
在这里插入图片描述

4.4.3 docker inspect查看源数据

docker inspect 容器id

[{"Id": "4d9c107c8975344c1188cd5d27351bbcca812f5ecf6600e9cc975dcfab805415","Created": "2025-05-23T10:03:37.047169586Z","Path": "/bin/sh","Args": ["-c","while true;do echo ronghaha;sleep 1;done"],-----------------------后续内容省略----------------------

4.4.4 docker exec 或 docker attach进入当前正在运行的容器

我们通常容器都是使用后台方式运行的,需要进入容器,修改一些配置

  • 方式一:docker exec 进入容器后开启一个新终端,可进行操作(常用)
    docker exec -it 容器id bash
  • 方式二:docker attach 进入容器正在执行的终端,不会启动新的进程
    docker attach 容器id

4.4.5 docker cp从容器拷贝文件至主机

docker cp [选项] 容器id:文件路径 拷贝文件路径
在这里插入图片描述

4.5 练习

4.5.1 部署nginx

  • Step1: docker search nginx或者直接去 dockerhub 上查找对应版本和使用手册
  • Step2: 下拉镜像:pull
    docker pull nginx:1.27
  • Step3: 运行测试
    docker run -d -p 3344:80 nginx:1.27 #-d后台运行 -p宿主机端口:容器内部端口,将容器的 80 端口映射到主机的 3344 端口
    [图片]
    curl localhost:3344 #测试本地网络连接和服务可用性
 curl localhost:3344
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
html { color-scheme: light dark; }
body { width: 35em; margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif; }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p><p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p><p><em>Thank you for using nginx.</em></p>
</body>
</html>

看到Welcome to nginx!证明测试成功

  • Step4: 进入容器
→~ docker exec -it df8d23b39485 /bin/bash`                    
root@df8d23b39485:/# whereis nginx
nginx: /usr/sbin/nginx /usr/lib/nginx /etc/nginx /usr/share/nginx

4.5.2 部署tomcat

  • 官方的下载:--rm 一般用来测试,用完删除
    docker run -it --rm tomcat:9.0

  • 下载再启动
    docker pull tomcat:11.0 #拉取镜像
    docker run -d -p 3355:8080 --name tomcat:11.0 tomcat:11.0

  • 测试访问无问题
    在这里插入图片描述

  • 进入容器
    docker exec -it tomcat /bin/bash

创作不易,点个赞支持一下ヾ(✿゚▽゚)ノ


http://www.hkcw.cn/article/xGmLMAxKYt.shtml

相关文章

rm删除到回收站

rm删除到回收站 背景安装trash-clipip安装包管理器安装 将trash-put别名设为rm设置回收站文件过期时间 trash基本用法删除文件删除后文件去了哪里 查看回收站从回收站中恢复文件恢复文件到指定路径 删除回收站中的指定文件 背景 在Linux命令行下操作的时候会不小心误删文件或目…

DDP与FSDP:分布式训练技术全解析

DDP与FSDP:分布式训练技术全解析 DDP(Distributed Data Parallel)和 FSDP(Fully Sharded Data Parallel)均为用于深度学习模型训练的分布式训练技术,二者借助多 GPU 或多节点来提升训练速度。 1. DDP(Distributed Data Parallel) 实现原理 数据并行:把相同的模型复…

数据采集是什么?一文讲清数据采集系统的模式!

目录 一、数据采集是什么&#xff1f; 二、为什么要进行数据采集 1. 为企业决策提供依据 2. 推动科学研究的发展 3. 提升生产效率和质量 三、数据采集系统的模式 1. 实时采集模式 2. 定时采集模式 3. 事件驱动采集模式 四、不同模式的应用场景及选择考虑因素 1. 应用…

python学习day33

知识点回顾&#xff1a; 1.PyTorch和cuda的安装 2.查看显卡信息的命令行命令&#xff08;cmd中使用&#xff09; 3.cuda的检查 4.简单神经网络的流程 a.数据预处理&#xff08;归一化、转换成张量&#xff09; b.模型的定义 i.继承nn.Module类 ii.定义每一个层 iii.定义前向传播…

Python中的变量、赋值及函数的参数传递概要

Python中的变量、赋值及函数的参数传递概要 python中的变量、赋值 python中的变量不是盒子。 python中的变量无法用“变量是盒子”做解释。图说明了在 Python 中为什么不能使用盒子比喻&#xff0c;而便利贴则指出了变量的正确工作方式。 如果把变量想象为盒子&#xff0c;那…

如何优化微信小程序中渲染带有图片的列表(二进制流存储方式的图片存在本地数据库)

方法一&#xff1a;对列表的获取进行分页处理 实现方法&#xff1a; 前端请求&#xff08;需要向后端传两个参数&#xff0c;pageIndex是获取第几页是从0开始&#xff0c;pageSize是这一页需要获取多少个数据&#xff09; 后端接口实现&#xff08;因为这里是通过参数拼接请求…

电磁器件的“折纸革命“:牛津《Sci. Reports》发布剪纸超材料

01 前沿速递&#xff1a;顶尖团队破解行业难题 近日&#xff0c;牛津大学工程科学系杨云芳、Andrea Vallecchi、Ekaterina Shamonina、Christopher Stevens及游忠教授团队在《Scientific Reports》发表突破性研究&#xff0c;提出一类基于剪纸&#xff08;Kirigami&#xff0…

【Java学习笔记】接口

接口 应用场景引出 一、接口的介绍 1. 接口的基本结构 interface 接口名{属性抽象方法 }引出关键字&#xff1a;implements 2. 子类实现接口 class a implements 接口名{}3. 接口中的属性说明&#xff1a;属性默认是public static final修饰的 &#xff08;1&#xff09;f…

02 APP 自动化-Appium 运行原理详解

环境搭建见 01 APP 自动化-环境搭建 文章目录 一、Appium及Appium自动化测试原理二、Appium 自动化配置项三、常见 ADB 命令四、第一个 app 自动化脚本 一、Appium及Appium自动化测试原理 Appium 跨平台、开源的 app 自动化测试框架&#xff0c;用来测试 app 应用程序&#x…

(1)pytest简介和环境准备

1. pytest简介 pytest是python的一种单元测试框架&#xff0c;与python自带的unittest测试框架类似&#xff0c;但是比unittest框架使用起来更简洁&#xff0c;效率更高。根据pytest的官方网站介绍&#xff0c;它具有如下特点&#xff1a; 非常容易上手&#xff0c;入门简单&a…

同元软控、核动力研究院与华北电力大学产学研联合实训室正式揭牌

2025年5月27日&#xff0c;华北电力大学、苏州同元软控信息技术有限公司&#xff08;以下简称“同元软控”&#xff09;、中国核动力研究设计院&#xff08;以下简称“核动力研究院”&#xff09;联合实训室揭牌授权仪式暨座谈交流会在华北电力大学召开。华北电力大学教务处处长…

PyTorch中nn.Module详解

直接print(dir(nn.Module))&#xff0c;得到如下内容&#xff1a; 一、模型结构与参数 parameters() 用途&#xff1a;返回模块的所有可训练参数&#xff08;如权重、偏置&#xff09;。示例&#xff1a;for param in model.parameters():print(param.shape)named_parameters…

若依项目天气模块

在若依项目里添加了一个天气模块&#xff0c;记录一下过程。 一、功能结构与组件布局 天气模块以卡片形式&#xff08;el-card&#xff09;展示&#xff0c;包含以下核心功能&#xff1a; 实时天气&#xff1a;显示当前城市、温度、天气状况&#xff08;如晴、多云&#xff…

APM32芯得 EP.06 | APM32F407移植uC/OS-III实时操作系统经验分享

《APM32芯得》系列内容为用户使用APM32系列产品的经验总结&#xff0c;均转载自21ic论坛极海半导体专区&#xff0c;全文未作任何修改&#xff0c;未经原文作者授权禁止转载。 最近我开始学习 uC/OS-III 实时操作系统&#xff0c;并着手将其移植到APM32F407 开发板上。在这个过…

图解gpt之注意力机制原理与应用

大家有没有注意到&#xff0c;当序列变长时&#xff0c;比如翻译一篇长文章&#xff0c;或者处理一个长句子&#xff0c;RNN这种编码器就有点力不从心了。它把整个序列信息压缩到一个固定大小的向量里&#xff0c;信息丢失严重&#xff0c;而且很难记住前面的细节&#xff0c;特…

更新密码--二阶注入攻击的原理

1.原理知识&#xff1a; 二阶SQL注入攻击&#xff08;Second-Order SQL Injection&#xff09;原理详解 一、基本概念 二阶注入是一种"存储型"SQL注入&#xff0c;攻击流程分为两个阶段&#xff1a; ​​首次输入​​&#xff1a;攻击者将恶意SQL片段存入数据库​…

RFID技术助力托盘运输线革新

RFID技术助力托盘运输线革新 湖北某工厂托盘运输线使用上存在的问题&#xff1a; 1、托盘在运输线上受信息录入时间等问题影响&#xff0c;导致效率低下&#xff1b; 2、原先托盘上粘贴的条码容易污损&#xff0c;并且时常需要更新更换&#xff0c;导致信息录入、出入库等步…

EasyRTC嵌入式音视频通信SDK助力1v1实时音视频通话全场景应用

一、方案概述​ 在数字化通信需求日益增长的今天&#xff0c;EasyRTC作为一款全平台互通的实时视频通话方案&#xff0c;实现了设备与平台间的跨端连接。它支持微信小程序、APP、PC客户端等多端协同&#xff0c;开发者通过该方案可快速搭建1v1实时音视频通信系统&#xff0c;适…

java.io.IOException: ZIP entry size is too large or invalid

java.io.IOException: ZIP entry size is too large or invalid 解决方案&#xff1a;pom.xml添加<nonFilteredFileExtension>xlsx</nonFilteredFileExtension>

vue3 项目配置多语言支持,如何从服务端拿多语言配置

在 Vue3 项目中实现多语言支持并从服务端获取配置&#xff0c;可以使用 Vue I18n 库。在初始化阶段可以发送请求获取多语言配置或者通过本地文件加载json文件的方式&#xff0c;都可以实现。我这里是tauri项目&#xff0c;所以使用的是invoke从tauri端拿到配置文件&#xff0c;…