目录
[# 概念](# 概念)
[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包,启动了这个项目。
- 重点:
- 常用docker命令。
- 容器。
- 镜像。
- DockerFile文件。
- Docker网络。
1. Docker常见问题
-
出现问题就重启systemctl restart docker;
-
首次进入docker时需要登录到root用户,输入
su root
密码是root; -
Error response from daemon: Container:
-
docker容器开启问题。查看所有容器docker ps -a 开启容器docker start 容器id;
-
vi命令用不了(说明没有这个命令需要下载这个命令)
-
方式一:apt-get update
-
方式一:apt-get update
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技术中的两个核心概念,它们之间有以下区别:
- 镜像(Image):镜像是一个只读的模板,包含了运行Docker容器所需的文件系统、代码和依赖。镜像是构建容器的基础,可以理解为一个软件包或者一个软件的快照。镜像可以从Docker Hub等仓库中获取,也可以通过Dockerfile自定义构建。
- 获取的方式(1.从远程仓库下载镜像、2.拷贝别人的镜像、3.自己制作一个镜像DockerFile)
- 容器(Container):容器是镜像的运行实例,是一个独立运行的应用程序。容器通过镜像创建,可以启动、停止、删除和重启。容器是轻量级的,独立于宿主机的进程隔离环境,可以快速启动和停止。
2.5 容器概念图
- 传统虚拟机:虚拟出一条硬件,运行一个完整的操作系统,然后在这个系统上安装和运行软件。
- 容器内的应用是直接运行在宿主机的内容,容器没有自己的内核,也没有虚拟我们的硬件,非常轻便。
- 且每个容器之间是相互隔离,每个容器都有一个属于自己的文件系统,互不影响。
docker容器:
对比原始的虚拟机技术:
2.6 docker核心技术
镜像(Image)、容器(Container)、仓库(Repository)是 Docker 技术的核心概念。它们一起构成了构建、分发和运行容器化应用程序的基础;
2.6.1 镜像 (Image)
概述
- 定义:镜像是一个轻量级、不可变的二进制包,包含了运行应用程序所需的所有文件、配置和依赖。镜像是创建容器的基础。
- 特性 :
- 不可变:一旦创建,镜像内容不会改变。
- 分层存储:每个镜像由多个层组成,每一层表示一个文件系统快照,可以共享和复用。
- 便携性:镜像可以从一个环境转移到另一个环境,而不会影响应用的运行。
- 用途 :
- 应用交付:镜像用于打包应用及其环境,确保一致性。
- 版本控制:镜像可以使用标签来标记不同的版本。
- 基础镜像 :可作为其他镜像的基础(如
alpine
、ubuntu
等)。
关系
- 与容器:镜像是容器的蓝图,容器是镜像的运行实例。
- 与仓库:镜像可以存储在仓库中,以便分发和共享。
示例
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 pull ,docker build |
容器 | 镜像的运行实例,提供隔离的操作环境。 | 轻量级、可移植、隔离性、短暂性。 | 从镜像创建并运行,使用仓库中的镜像。 | docker run ,docker stop |
仓库 | 存储和分发 Docker 镜像的地方。 | 镜像存储、共享、权限控制。 | 存储镜像,供创建容器使用。 | docker push ,docker pull |
2.6.5 总结
- 镜像 是应用程序的模板,通过分层文件系统构建,提供了可移植性和版本控制。
- 容器 是运行镜像的实例,确保应用在隔离的环境中一致地执行,轻量且高效。
- 仓库 提供镜像的存储和分发功能,支持应用的共享和分发。
2.7 docker开始(安装)
- 确认系统版本
确保系统是 CentOS 7 或以上版本。
- yum安装gcc相关环境
bash
yum -y install gcc
yum -y install gcc-c++
- 卸载旧版本 Docker
bash
yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
- 安装必要的软件包
bash
yum install -y yum-utils
- 设置 Docker 镜像仓库
推荐使用国内镜像,例如阿里云的镜像:
bash
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
在docker安装成功后配置一下阿里云的加速:
- 去自己的阿里云中寻找镜像加速
- 更新 Yum 软件包索引
bash
yum makecache fast
- 安装 Docker CE
bash
yum install docker-ce docker-ce-cli containerd.io
- 启动 Docker
bash
systemctl start docker
- 设置 Docker 开机自启
bash
systemctl enable docker
- 验证 Docker 安装
-
检查 Docker 版本:
docker version
-
运行一个测试容器:
docker run hello-world
-
查看已安装Docker镜像:
docker images
- 卸载 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快?
- Docker有着比虚拟机更少的抽象层;
- Docker利用的是宿主机的内核,vm需要是Cuest OS;
2.8.1 docker中run的流程
图流程:
Docker 的 docker run 命令是用来创建并启动一个新的容器实例的主要命令,它涉及到多个步骤和参数配置。以下是 Docker run 命令的流程和关键步骤:
- 检查本地是否存在指定的镜像
- 如果本地没有指定的镜像,Docker 会尝试从默认的镜像仓库(如 Docker Hub)拉取。
- 创建新的容器实例
- Docker 使用指定的镜像来创建一个新的容器实例。在这个过程中,Docker 会分配一个唯一的容器 ID。
- 配置容器运行时参数
- Docker 根据
docker run
命令中指定的参数(如端口映射、环境变量、挂载的数据卷等)来配置容器的运行时环境。
- Docker 根据
- 启动容器
- Docker 启动容器实例,并在容器内部执行指定的启动命令(如容器启动时运行的应用程序)。
- 监控容器运行状态
- Docker 后台持续监控容器的运行状态,确保容器持续运行,并处理容器可能的异常退出或其他问题。
- 输出容器日志
- 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
- Docker 检查本地是否有
nginx
镜像,如果没有则从默认仓库拉取。 - Docker 使用
nginx
镜像创建一个新的容器实例,分配一个唯一的容器 ID。 - Docker 配置容器运行时参数:
-d
让容器在后台运行。--name mynginx
指定容器名称为mynginx
。-p 8080:80
将容器内部的 80 端口映射到宿主机的 8080 端口。
- Docker 启动
nginx
容器,并开始监听端口。 - 用户可以访问 http://localhost:8080 来访问宿主机上运行的
nginx
服务。
这样,docker run
命令完成了从镜像创建到容器运行的整个流程,使得用户可以方便地启动和管理 Docker 容器。
2.9 docker工作流程
以下是Docker的工作流程及其关键步骤的表格表示:
步骤 | 说明 |
---|---|
1. 镜像管理 | Docker 使用镜像来打包和分发应用程序及其所有依赖。 |
2. 容器生命周期管理 | Docker 容器是镜像的运行实例,提供应用程序的隔离运行环境。容器的生命周期包括创建、启动、停止、删除等过程。 |
3. 网络管理 | Docker 管理容器之间的网络通信,以及容器与宿主机之间的网络通信。默认情况下,Docker 为容器创建一个虚拟网络,容器可以通过桥接、主机模式、Overlay 等网络模式进行通信。 |
4. 存储管理 | Docker 使用数据卷(Volumes)和绑定挂载(Bind Mounts)来持久化容器中的数据。数据卷可以在容器之间共享数据,并且数据卷中的数据在容器删除后不会被自动清空。 |