“Docker入门指南:概念与安装详解“

目录

[# 概念](# 概念)

[1. Docker常见问题](#1. Docker常见问题)

[2. docker概念和安装](#2. docker概念和安装)

[2.1 Docker的组成](#2.1 Docker的组成)

[2.2 Docker 组件及关系表](#2.2 Docker 组件及关系表)

[2.3 docker核心思想](#2.3 docker核心思想)

[2.4 docker镜像与容器两个核心概念](#2.4 docker镜像与容器两个核心概念)

[2.5 容器概念图](#2.5 容器概念图)

[2.6 docker核心技术](#2.6 docker核心技术)

[2.6.1 镜像 (Image)](#2.6.1 镜像 (Image))

概述

关系

示例

[2.6.2 容器 (Container)](#2.6.2 容器 (Container))

概述

关系

示例

[2.6.3 仓库 (Repository)](#2.6.3 仓库 (Repository))

概述

关系

示例

[2.6.4 对比与关系图表](#2.6.4 对比与关系图表)

[2.6.5 总结](#2.6.5 总结)

[2.7 docker开始(安装)](#2.7 docker开始(安装))

[2.8 docker中Run的流程和Docker原理](#2.8 docker中Run的流程和Docker原理)

[2.8.1 docker中run的流程](#2.8.1 docker中run的流程)

[2.8.2 docker run 命令的关键参数和配置](#2.8.2 docker run 命令的关键参数和配置)

[2.8.3 示例](#2.8.3 示例)

[2.9 docker工作流程](#2.9 docker工作流程)


# 概念

  • 个人理解介绍docker:
    • 有了docker后,我可以把自己写的项目上传到linux虚拟机上(需要参考如何上传以及上传内容),根据dockerfile构建镜像文件,并且创建docker容器来访问这个项目,所有的docker镜像也可以发布到阿里云上,或者发布到DockerHub上面,非常的方便。我启动这个容器就相当于启动了这个jar包,启动了这个项目。
  • 重点:
    1. 常用docker命令。
    2. 容器。
    3. 镜像。
    4. DockerFile文件。
    5. Docker网络。

1. Docker常见问题

2. docker概念和安装

  • 场景:(是在VMware中的linux系统里操作的)

  • Docker容器与镜像(docker的每一个容器在创建时都会指定使用的镜像)

    一个容器只能使用一个镜像。容器是基于镜像创建的,镜像是容器的基础。每个容器都是基于一个特定的镜像运行的,它包含了该镜像的文件系统和应用程序。

    在Docker中,每个容器都是相互隔离的,并且具有自己的文件系统、进程空间和网络接口。因此,一个容器只能使用一个镜像来构建其环境和运行应用程序。

    如果你需要在一个容器中运行多个应用程序,可以在镜像中预先配置好这些应用程序,或者在容器中安装和运行额外的应用程序。但是这些应用程序仍然是基于同一个镜像运行的,容器本身仍然只能使用一个镜像。

2.1 Docker的组成

(镜像images、容器containers、构建docker镜像文件Dockerfile、将镜像打包下载Tar files、仓库Registry)其余的都是当前板块使用的命令

2.2 Docker 组件及关系表

组件类别 组件名称 说明 关系
Docker 引擎 Docker CLI 命令行界面,用户通过它与 Docker Daemon 交互。 与 Docker Daemon 通信。
Docker Daemon 核心服务,处理容器的构建、运行和管理。 - 与 Docker CLI 通信。
- 使用 Containerd 管理容器。
- 直接管理容器、镜像、卷和网络。
Containerd 高效的容器运行时,管理容器生命周期。 被 Docker Daemon 使用。
RunC 执行容器的 CLI 工具,符合 OCI 标准。 被 Containerd 使用。
容器管理 容器 (Container) 容器化的应用实例。 由 Docker Daemon 管理。
镜像 (Image) 容器运行所需的文件系统和元数据。 由 Docker Daemon 管理。
卷 (Volume) 持久化数据存储,供容器使用。 由 Docker Daemon 管理。
网络 (Network) 容器之间和外部的网络配置。 由 Docker Daemon 管理。
Docker 生态系统 Docker Compose 用于定义和运行多容器应用的工具。 使用 Docker CLI 与 Docker Daemon 通信。
Docker Swarm Docker 的集群管理和编排工具。 编排 Docker Daemon。
Kubernetes 开源的容器编排平台,管理和调度容器。 编排 Docker Daemon

2.3 docker核心思想

  • docker核心思想,打包装箱,每个箱子都是互相隔离的。
  • Docker:容器思想,省去了我们部署环境的复杂性,好比发布项目的时候需要redis环境、jdk环境、MySQL环境及ES环境等等,每次部署这些环境的时候都非常复杂耗时,这时候有了docker帮我们省去了部署环境的耗时性,方便实用。docker容器,可以将这些环境都包含在内。
  • 容器/s的速度比虚拟机/min的速度快了很多。

2.4 docker镜像与容器两个核心概念

Docker容器和镜像是Docker技术中的两个核心概念,它们之间有以下区别:

  1. 镜像(Image):镜像是一个只读的模板,包含了运行Docker容器所需的文件系统、代码和依赖。镜像是构建容器的基础,可以理解为一个软件包或者一个软件的快照。镜像可以从Docker Hub等仓库中获取,也可以通过Dockerfile自定义构建。
    1. 获取的方式(1.从远程仓库下载镜像、2.拷贝别人的镜像、3.自己制作一个镜像DockerFile)
  2. 容器(Container):容器是镜像的运行实例,是一个独立运行的应用程序。容器通过镜像创建,可以启动、停止、删除和重启。容器是轻量级的,独立于宿主机的进程隔离环境,可以快速启动和停止。

2.5 容器概念图

  • 传统虚拟机:虚拟出一条硬件,运行一个完整的操作系统,然后在这个系统上安装和运行软件。
  • 容器内的应用是直接运行在宿主机的内容,容器没有自己的内核,也没有虚拟我们的硬件,非常轻便。
  • 且每个容器之间是相互隔离,每个容器都有一个属于自己的文件系统,互不影响

docker容器:

对比原始的虚拟机技术:

2.6 docker核心技术

镜像(Image)、容器(Container)、仓库(Repository)是 Docker 技术的核心概念。它们一起构成了构建、分发和运行容器化应用程序的基础;

2.6.1 镜像 (Image)
概述
  • 定义:镜像是一个轻量级、不可变的二进制包,包含了运行应用程序所需的所有文件、配置和依赖。镜像是创建容器的基础。
  • 特性
    • 不可变:一旦创建,镜像内容不会改变。
    • 分层存储:每个镜像由多个层组成,每一层表示一个文件系统快照,可以共享和复用。
    • 便携性:镜像可以从一个环境转移到另一个环境,而不会影响应用的运行。
  • 用途
    • 应用交付:镜像用于打包应用及其环境,确保一致性。
    • 版本控制:镜像可以使用标签来标记不同的版本。
    • 基础镜像 :可作为其他镜像的基础(如 alpineubuntu 等)。
关系
  • 与容器:镜像是容器的蓝图,容器是镜像的运行实例。
  • 与仓库:镜像可以存储在仓库中,以便分发和共享。
示例
bash 复制代码
docker pull nginx
docker run -d nginx
  • docker pull nginx:从仓库中拉取 nginx 镜像。
  • docker run -d nginx:基于 nginx 镜像创建并运行一个容器。
2.6.2 容器 (Container)
概述
  • 定义:容器是镜像的运行实例,提供隔离的操作环境,确保应用程序在任何环境中都能一致地运行。
  • 特性
    • 轻量级:比传统虚拟机更轻量,没有独立的操作系统内核。
    • 可移植性:运行在任何支持 Docker 的主机上。
    • 隔离性:每个容器都有独立的文件系统、网络和进程空间。
    • 短暂性:容器可以快速启动、停止、销毁,适合短暂任务或微服务架构。
  • 用途
    • 应用运行:容器运行应用和其所有依赖环境。
    • 开发测试:开发者可以在容器中进行开发和测试,确保环境一致。
    • 部署:容器用于部署到生产环境,保证应用的可预测性。
关系
  • 与镜像:容器是从镜像创建的。
  • 与仓库:容器使用从仓库中拉取的镜像创建和运行。
示例
docker run -it --name mycontainer ubuntu /bin/bash
  • 运行一个基于 ubuntu 镜像的容器,并启动一个 Bash 终端。
2.6.3 仓库 (Repository)
概述
  • 定义:仓库是存储和分发 Docker 镜像的地方,可以在本地或远程服务器上。官方公共仓库是 Docker Hub。
  • 特性
    • 镜像存储:仓库中可以包含多个镜像,每个镜像可以有多个版本标签。
    • 共享:用户可以将镜像推送到公共或私有仓库,以便共享和分发。
    • 权限控制:私有仓库可以配置权限,限制访问。
  • 用途
    • 镜像分发:仓库是分发和共享镜像的主要手段。
    • 持续集成:开发和部署流程中,可以自动推送和拉取镜像。
    • 版本管理:管理和维护镜像的不同版本。
关系
  • 与镜像:仓库中存储的内容是 Docker 镜像。
  • 与容器:容器使用仓库中的镜像来创建。
示例
docker push myrepo/myimage:latest
docker pull myrepo/myimage:latest
  • docker push myrepo/myimage:latest:将镜像推送到 myrepo 仓库。
  • docker pull myrepo/myimage:latest:从 myrepo 仓库中拉取镜像。
2.6.4 对比与关系图表
概念 定义 特性 关系 示例
镜像 轻量级、不可变的二进制包,包含运行应用所需的文件和依赖。 不可变、分层存储、便携性、可版本控制。 创建容器的基础,存储在仓库中。 docker pulldocker build
容器 镜像的运行实例,提供隔离的操作环境。 轻量级、可移植、隔离性、短暂性。 从镜像创建并运行,使用仓库中的镜像。 docker rundocker stop
仓库 存储和分发 Docker 镜像的地方。 镜像存储、共享、权限控制。 存储镜像,供创建容器使用。 docker pushdocker pull
2.6.5 总结
  • 镜像 是应用程序的模板,通过分层文件系统构建,提供了可移植性和版本控制。
  • 容器 是运行镜像的实例,确保应用在隔离的环境中一致地执行,轻量且高效。
  • 仓库 提供镜像的存储和分发功能,支持应用的共享和分发。

2.7 docker开始(安装)

  1. 确认系统版本

确保系统是 CentOS 7 或以上版本。

  1. yum安装gcc相关环境
bash 复制代码
yum -y install gcc
yum -y install gcc-c++
  1. 卸载旧版本 Docker
bash 复制代码
yum remove docker \
  docker-client \
  docker-client-latest \
  docker-common \
  docker-latest \
  docker-latest-logrotate \
  docker-logrotate \
  docker-engine
  1. 安装必要的软件包
bash 复制代码
yum install -y yum-utils
  1. 设置 Docker 镜像仓库

推荐使用国内镜像,例如阿里云的镜像:

bash 复制代码
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

在docker安装成功后配置一下阿里云的加速:

  • 去自己的阿里云中寻找镜像加速
  1. 更新 Yum 软件包索引
bash 复制代码
yum makecache fast
  1. 安装 Docker CE
bash 复制代码
yum install docker-ce docker-ce-cli containerd.io
  1. 启动 Docker
bash 复制代码
systemctl start docker
  1. 设置 Docker 开机自启
bash 复制代码
systemctl enable docker
  1. 验证 Docker 安装
  • 检查 Docker 版本:

    docker version

  • 运行一个测试容器:

    docker run hello-world

  • 查看已安装Docker镜像:

    docker images

  1. 卸载 Docker
  • 停止 Docker 服务:

    systemctl stop docker

  • 移除 Docker 相关包:

    yum -y remove docker-ce docker-ce-cli containerd.io

  • 清理 Docker 数据:

    rm -rf /var/lib/docker

以上步骤整理了在 CentOS 系统上安装和管理 Docker CE 的流程;

2.8 docker中Run的流程和Docker原理

(hello world是怎样运行的)

  • Docker为什么比vm快?
    1. Docker有着比虚拟机更少的抽象层;
    2. Docker利用的是宿主机的内核,vm需要是Cuest OS;
2.8.1 docker中run的流程

图流程:

Docker 的 docker run 命令是用来创建并启动一个新的容器实例的主要命令,它涉及到多个步骤和参数配置。以下是 Docker run 命令的流程和关键步骤:

  1. 检查本地是否存在指定的镜像
    • 如果本地没有指定的镜像,Docker 会尝试从默认的镜像仓库(如 Docker Hub)拉取。
  2. 创建新的容器实例
    • Docker 使用指定的镜像来创建一个新的容器实例。在这个过程中,Docker 会分配一个唯一的容器 ID。
  3. 配置容器运行时参数
    • Docker 根据 docker run 命令中指定的参数(如端口映射、环境变量、挂载的数据卷等)来配置容器的运行时环境。
  4. 启动容器
    • Docker 启动容器实例,并在容器内部执行指定的启动命令(如容器启动时运行的应用程序)。
  5. 监控容器运行状态
    • Docker 后台持续监控容器的运行状态,确保容器持续运行,并处理容器可能的异常退出或其他问题。
  6. 输出容器日志
    • Docker 将容器的标准输出和标准错误输出(日志)连接到宿主机上,以便用户可以查看容器运行时产生的输出信息。
2.8.2 docker run 命令的关键参数和配置
  • -d:后台运行容器。
  • -it:交互式终端,通常与 -d 配合使用。
  • --name:指定容器的名称。
  • -p:端口映射,将容器内部的端口映射到宿主机上的端口。
  • -e:设置环境变量。
  • -v:挂载数据卷,与宿主机共享数据。
  • --network:指定容器使用的网络模式。
  • --rm:容器停止后自动删除。
2.8.3 示例

以下是一个示例 docker run 命令及其流程:

bash 复制代码
docker run -d --name mynginx -p 8080:80 nginx
  1. Docker 检查本地是否有 nginx 镜像,如果没有则从默认仓库拉取。
  2. Docker 使用 nginx 镜像创建一个新的容器实例,分配一个唯一的容器 ID。
  3. Docker 配置容器运行时参数:
    • -d 让容器在后台运行。
    • --name mynginx 指定容器名称为 mynginx
    • -p 8080:80 将容器内部的 80 端口映射到宿主机的 8080 端口。
  4. Docker 启动 nginx 容器,并开始监听端口。
  5. 用户可以访问 http://localhost:8080 来访问宿主机上运行的 nginx 服务。

这样,docker run 命令完成了从镜像创建到容器运行的整个流程,使得用户可以方便地启动和管理 Docker 容器。

2.9 docker工作流程

以下是Docker的工作流程及其关键步骤的表格表示:

步骤 说明
1. 镜像管理 Docker 使用镜像来打包和分发应用程序及其所有依赖。
2. 容器生命周期管理 Docker 容器是镜像的运行实例,提供应用程序的隔离运行环境。容器的生命周期包括创建、启动、停止、删除等过程。
3. 网络管理 Docker 管理容器之间的网络通信,以及容器与宿主机之间的网络通信。默认情况下,Docker 为容器创建一个虚拟网络,容器可以通过桥接、主机模式、Overlay 等网络模式进行通信。
4. 存储管理 Docker 使用数据卷(Volumes)和绑定挂载(Bind Mounts)来持久化容器中的数据。数据卷可以在容器之间共享数据,并且数据卷中的数据在容器删除后不会被自动清空。
相关推荐
会掉头发4 分钟前
Linux进程通信之共享内存
linux·运维·共享内存·进程通信
我言秋日胜春朝★7 分钟前
【Linux】冯诺依曼体系、再谈操作系统
linux·运维·服务器
全能全知者29 分钟前
docker快速安装与配置mongoDB
mongodb·docker·容器
饮啦冰美式38 分钟前
22.04Ubuntu---ROS2使用rclcpp编写节点
linux·运维·ubuntu
wowocpp38 分钟前
ubuntu 22.04 server 安装 和 初始化 LTS
linux·运维·ubuntu
Lign1731444 分钟前
ubuntu unrar解压 中文文件名异常问题解决
linux·运维·ubuntu
大霞上仙1 小时前
Ubuntu系统电脑没有WiFi适配器
linux·运维·电脑
Karoku0662 小时前
【企业级分布式系统】Zabbix监控系统与部署安装
运维·服务器·数据库·redis·mysql·zabbix
为什么这亚子2 小时前
九、Go语言快速入门之map
运维·开发语言·后端·算法·云原生·golang·云计算
布值倒区什么name2 小时前
bug日常记录responded with a status of 413 (Request Entity Too Large)
运维·服务器·bug