docker基础知识

目录

1.什么Docker

2.Docker与虚拟机有何不同

3.Docker核心概念

(1)​镜像(Image)​

(2)容器(Container)​

(3)​仓库(Registry)​

4.DockerFile中最常见的指定是什么?

5、DockerFile中的命令COPY和ADD命令有什么区别?

6.Docker的常用命令?

7.容器与主机之间的数据拷贝命令?

8.启动nginx容器(随机端口映射),并挂载本地文件目录到容器html的命令?

[9.如何使用 Docker 技术创建与环境无关的容器系统?](#9.如何使用 Docker 技术创建与环境无关的容器系统?)

[10.有什么方法确定一个 Docker 容器运行状态](#10.有什么方法确定一个 Docker 容器运行状态)

[11. Docker Image 和 Docker Layer (层) 有什么不同](#11. Docker Image 和 Docker Layer (层) 有什么不同)

12.如何停止所有正在运行的容器?

13.如何清理批量后台停止的容器?

14.如何临时退出一个正在交互的容器的终端,而不终止它?

[15.Docker 群(Swarm)是什么](#15.Docker 群(Swarm)是什么)

[16.在使用 Docker 技术的产品中如何监控其运行](#16.在使用 Docker 技术的产品中如何监控其运行)

17.什么是孤儿卷及如何删除它?

[18.在 Windows 系统上可以运行原生的 Docker 容器吗?](#18.在 Windows 系统上可以运行原生的 Docker 容器吗?)

结语


前言

该文章仅介绍了一些关于Docker的基础知识

1.什么Docker

Docker 是一种开源的容器化平台,允许开发者将应用程序及其依赖项打包到一个轻量级、可移植的容器中,实现应用在不同环境(开发、测试、生产)中的一致运行。与传统虚拟机不同,Docker 容器共享主机操作系统内核,资源占用更少、启动速度更快,且具备更强的可移植性和隔离性

核心优势:

  • 轻量高效:容器仅包含应用运行所需的最小依赖,无需模拟完整操作系统
  • 环境一致性:解决"在我机器上能跑"的难题,确保开发与生产环境行为一致
  • 快速部署与扩展:支持秒级启动和动态扩缩容,适合微服务架构

2.Docker与虚拟机有何不同

Docker不是虚拟化方法。它依赖于实际实现基于容器的虚拟化或操作系统级虚拟化的其他工具。为此,Docker最初使用LXC驱动程序,然后移动到libcontainer现在重命名为runc。Docker主要专注于在应用程序容器内自动部署应用程序。

应用程序容器旨在打包和运行单个服务,而系统容器则设计为运行多个进程,如虚拟机。因此,Docker被视为容器化系统上的容器管理或应用程序部署工具。

A 容器不需要引导操作系统内核,因此可以在不到一秒的时间内创建容器。此功能使基于容器的虚拟化比其他虚拟化方法更加独特和可取。

B 由于基于容器的虚拟化为主机增加了很少或没有开销,因此基于容器的虚拟化具有接近本机的性能。

C 对于基于容器的虚拟化,与其他虚拟化不同,不需要其他软件。

D 主机上的所有容器共享主机的调度程序,从而节省了额外资源的需求。

E 与虚拟机映像相比,容器状态(Docker或LXC映像)的大小很小,因此容器映像很容易分发。

F 容器中的资源管理是通过cgroup实现的。

Cgroups不允许容器消耗比分配给它们更多的资源。虽然主机的所有资源都在虚拟机中可见,但无法使用。这可以通过在容器和主机上同时运行top或htop来实现。所有环境的输出看起来都很相似。

3.Docker核心概念

(1)​镜像(Image)​
  • 定义:只读模板,包含应用代码、依赖库、环境变量等,是容器的基础
  • 分层结构:镜像由多层文件系统组成,复用公共层以节省存储空间
(2)容器(Container)​
  • 定义:镜像的运行实例,是一个隔离的沙箱环境,拥有独立文件系统、网络和进程空间
  • 生命周期 :通过 docker run 创建、docker stop 停止、docker rm 删除
  • **四种状态:**运行、已暂停、重新启动、已退出
(3)仓库(Registry)​
  • 公共仓库:如 Docker Hub,提供海量开源镜像(如 Nginx、Python)
  • 私有仓库:企业可自建仓库存储内部镜像,保障安全性

4.DockerFile中最常见的指定是什么?

指令 备注
FROM 指定基础镜像
LABEL 功能为镜像指定标签
RUN 运行指定命令
CMD 容器启动时要运行的命令

5、DockerFile中的命令COPY和ADD命令有什么区别?

COPY和ADD的区别是COPY的SRC只能是本地文件,其他用法一致。

6.Docker的常用命令?

命令 备注
docker pull 拉去或更新指定的镜像
docker push 将镜像推送到远程仓库
docker rm 删除容器
docker rmi 删除镜像
docker images 列出所有镜像
docker ps 列出所有容器

7.容器与主机之间的数据拷贝命令?

Docker cp命令用于对应与主机之间的数据拷贝

bash 复制代码
# 从主机拷贝到容器
docker cp <主机路径> <容器名或ID>:<容器内目标路径>

# 从容器拷贝到主机
docker cp <容器名或ID>:<容器内路径> <主机目标路径>

示例

  1. 将主机的 app.conf 拷贝到名为 web-server 的容器中:

    复制代码
    docker cp ~/app.conf web-server:/etc/nginx/
  2. 从容器 /var/log/ 目录导出日志到主机:

    复制代码
    docker cp web-server:/var/log/ /host/logs/

8.启动nginx容器(随机端口映射),并挂载本地文件目录到容器html的命令?

bash 复制代码
Docker run -d -p --name nginx2 -v /home/nginx:/usr/share/nginx/html nginx

9.如何使用 Docker 技术创建与环境无关的容器系统?

Docker 技术有三中主要的技术途径辅助完成此需求:

  • 存储卷(Volumes)

  • 环境变量(Environment variable)注入

  • 只读(Read-only)文件系统

10.有什么方法确定一个 Docker 容器运行状态

使用如下命令行命令确定一个 Docker 容器的运行状态

bash 复制代码
$ docker ps --a

这将列表形式输出运行在主机上的所有 Docker 容器及其运行状态。从这个列表中很容易找到想要的容器及其运行状态。

11. Docker Image 和 Docker Layer (层) 有什么不同

Image :一个 Docker Image 是由一系列 Docker 只读层(read-only Layer) 创建出来的。 Layer: 在 Dockerfile 配置文件中完成的一条配置指令,即表示一个 Docker 层(Layer)。 如下 Dockerfile 文件包含 4 条指令,每条指令创建一个层(Layer)。

bash 复制代码
FROM ubuntu:15.04
COPY . /app
RUN make /app
CMD python /app/app.py

重点,每层只对其前一层进行一(某)些进化。

12.如何停止所有正在运行的容器?

使用docker kill $(sudo docker ps -q)

13.如何清理批量后台停止的容器?

使用docker rm $(sudo docker ps -a -q)

14.如何临时退出一个正在交互的容器的终端,而不终止它?

按Ctrl+p,后按Ctrl+q,如果按Ctrl+c会使容器内的应用进程终止,进而会使容器终止。

15.Docker 群(Swarm)是什么

Docker Swarm -- Docker 群 -- 是原生的 Docker 集群服务工具。它将一群 Docker 主机集成为单一一个虚拟 Docker 主机。利用一个 Docker 守护进程,通过标准的 Docker API 和任何完善的通讯工具,Docker Swarm 提供透明地将 Docker 主机扩散到多台主机上的服务。

详情可自行搜索

16.在使用 Docker 技术的产品中如何监控其运行

Docker 在产品中提供如运行统计和 Docker 事件的工具。可以通过这些工具命令获取 Docker 运行状况的统计信息或报告。

Docker stats : 通过指定的容器 id 获取其运行统计信息,可获得容器对 CPU,内存使用情况等的统计信息,类似 Linux 系统中的 top 命令。 Docker events :Docker 事件是一个命令,用于观察显示运行中的 Docker 一系列的行为活动。 一般的 Docker 事件有:attach(关联),commit(提交),die(僵死),detach(取消关联),rename(改名),destory(销毁)等。也可使用多个选项对事件记录筛选找到想要的事件信息。

17.什么是孤儿卷及如何删除它?

孤儿卷是 Docker 中未被任何容器关联或使用的数据卷。

这类卷通常因以下场景产生:

  1. 容器被删除时未使用 -v 参数同步清理关联卷;
  2. 手动创建了数据卷但未挂载到容器;
  3. 容器意外终止或配置错误导致卷未被正确释放。

孤儿卷会持续占用宿主机存储空间,若未及时清理可能引发资源浪费。

删除方法:

方法一:手动删除单个体积

复制代码
docker volume rm <孤儿卷名称>  

方法二:批量清理所有未使用卷

bash 复制代码
docker volume prune  

注:此命令会删除所有未被任何容器或服务引用的孤儿卷,操作前会要求用户确认

18.在 Windows 系统上可以运行原生的 Docker 容器吗?

可原生运行,但仅支持 Windows 特定镜像

限制

  • 系统版本:仅支持 Windows 10/11 专业版、企业版或 Windows Server 2016 及以上版本
  • 镜像兼容性:需使用专为 Windows 构建的镜像,无法直接运行 Linux 应用

结语

该篇文章仅介绍了一些关于Docker的基础知识,具体如何使用以及其中详细细节会在后边文章再进行总结

相关推荐
Wwwilling9 分钟前
docker中怎么把docker中的python package转成conda,目前还没有conda
python·docker·conda
struggle202542 分钟前
AWS Bedrock 多代理蓝图存储库使用 CDK、Streamlit 和 LangFuse 运行 AWS Bedrock 多代理 AI 协作的蓝图
运维·人工智能·自动化·云计算·aws
IEVEl1 小时前
CentOS 7 安装 EMQX (MQTT)
linux·运维·centos
vortex51 小时前
深入理解 Linux 文件权限:从 ACL 到扩展属性,解剖底层技术细节与命令应用
linux·运维·服务器
BTU_YC2 小时前
Cannot find a valid baseurl for repo: centos-sclo-sclo/x86_64
linux·运维·centos·php
大王10242 小时前
在 CentOS 系统中开机自动执行 Shell 脚本
linux·运维·centos
IT小馋猫2 小时前
CentOS 7 宝塔部署
linux·运维·centos
FIT2CLOUD飞致云2 小时前
1Panel MCP Server发布,开启AI对话式运维新时代!
运维·开源
古希腊掌握嵌入式的神3 小时前
[Linux]解决虚拟机 ubantu系统下网络的问题
linux·运维·服务器
未来之窗软件服务3 小时前
系统安全——文件监控-FileMonitor
运维·服务器·数据库·系统安全