赞
踩
Docker是一种开源的容器化平台,用于构建、交付和运行应用程序。它提供了一种轻量级的容器化技术,可以将应用程序及其依赖项打包成一个独立的可执行单元,称为Docker容器。每个容器都运行在一个隔离的环境中,共享主机操作系统的内核,从而实现了高效、可移植和可扩展的应用程序部署。
以下是一些关键概念和组件,以帮助理解Docker的工作原理:
Docker镜像(Image):Docker镜像是一个只读的模板,包含了运行应用程序所需的文件系统、代码、运行时环境、库和配置等。镜像可以被用来创建Docker容器。
Docker容器(Container):Docker容器是从Docker镜像创建的运行实例。每个容器都是独立、隔离的运行环境,可以在其中运行应用程序。容器可以被启动、停止、删除等操作。
Docker注册表(Registry):Docker注册表是用于存储和分发Docker镜像的中央仓库。Docker Hub是一个公共的Docker注册表,提供了大量的官方和社区维护的镜像。此外,你也可以搭建私有的Docker注册表来存储自己的镜像。
Dockerfile:Dockerfile是一个文本文件,用于定义Docker镜像的构建过程。它包含了一系列的指令和配置,用于从基础镜像构建、配置和定制镜像。
Docker Compose:Docker Compose是一个用于定义和管理多个Docker容器的工具。它使用一个YAML文件来描述应用程序的服务、网络和卷等配置,使得多个容器的编排和管理变得更加简单。
Docker的优势包括:
通过使用Docker,开发人员可以更加轻松地构建、交付和部署应用程序,同时运维人员也可以更好地管理和扩展应用程序的部署。
镜像(Image)和容器(Container)是Docker中的两个重要概念,它们之间的关系可以用下面的形象例子来说明:
想象一下你有一个应用程序,比如一个网站。镜像可以看作是该应用程序的软件打包,类似于一个装有应用程序及其依赖项的盒子。镜像包含了运行应用程序所需的文件系统、代码、运行时环境、库和配置等。
使用这个镜像,你可以创建多个相互独立的容器,每个容器都是一个运行实例,就像在现实世界中从一个盒子中取出一个独立的容器。每个容器都是独立的、隔离的运行环境,具有自己的文件系统、进程空间和网络接口。
类比到网站的例子,你可以将镜像看作是网站的源代码、静态文件和配置文件的打包,而容器则是在不同的服务器上运行这个网站的实例。你可以使用同一个镜像创建多个容器,每个容器都有自己的资源和运行环境,可以独立地提供网站服务。
假设你有一个名为"my-website"的镜像,它包含了你的网站代码和所需的依赖项。你可以通过运行以下命令创建一个容器:
docker run --name my-container -d my-website
这将使用"my-website"镜像创建一个名为"my-container"的容器,并在后台运行。现在你可以使用多个类似的命令创建多个容器,每个容器都是独立运行的网站实例。
通过这个例子,你可以理解镜像是容器的基础,容器则是镜像的运行实例。镜像提供了应用程序运行所需的所有文件和设置,而容器是基于镜像创建的、独立的运行环境。这种镜像和容器的关系使得应用程序的交付和部署变得更加简单、可靠和可扩展。
Docker守护进程(Docker daemon)是Docker引擎的核心组件之一。它是一个在后台运行的持续进程,负责管理Docker容器和镜像的创建、运行和销毁。
Docker守护进程在启动时会监听Docker客户端的请求,并根据客户端发送的命令执行相应的操作。它与Docker客户端通过Docker API进行通信,接收来自客户端的指令,并将其转化为实际的容器和镜像操作。
Docker守护进程具有以下功能:
镜像管理:Docker守护进程负责从Docker Hub或其他镜像仓库下载、创建、存储和管理Docker镜像。它可以拉取、推送和删除镜像,以及构建自定义的镜像。
容器管理:Docker守护进程负责创建、运行、停止和删除Docker容器。它可以根据定义的容器配置启动新容器,监控容器的运行状态,并根据需要进行扩展或缩减。
资源管理:Docker守护进程管理宿主机的资源分配和限制,包括CPU、内存、存储等。它可以在容器之间进行资源隔离和分配,以确保容器之间的互相独立性和性能稳定性。
网络管理:Docker守护进程负责管理Docker容器的网络连接和通信。它可以为容器分配IP地址,创建和管理网络接口,实现容器之间和容器与外部网络的通信。
日志记录:Docker守护进程负责收集和管理Docker容器和守护进程本身的日志信息。它可以将容器的标准输出和错误输出重定向到日志文件,以便用户进行故障排除和监控。
总之,Docker守护进程是Docker引擎的核心组件,它在后台运行并负责管理Docker容器和镜像的创建、运行和销毁。通过与Docker客户端的通信,它提供了一组功能丰富的API,使用户能够轻松地使用和管理Docker化的应用程序。
在WSL中安装Docker需要以下步骤:
打开WSL终端:在Windows 10中,可以通过在开始菜单中搜索并打开"WSL"或直接运行WSL发行版(如Ubuntu)来打开WSL终端。
更新系统:在WSL终端中运行以下命令,确保系统为最新版本:
sudo apt update
sudo apt upgrade
安装Docker的依赖项:运行以下命令以安装Docker所需的依赖项:
sudo apt install apt-transport-https ca-certificates curl software-properties-common
apt-transport-https
是一个 apt
的插件,允许 apt
使用 HTTPS 协议来下载软件包和更新。HTTPS 是一种安全的通信协议,可以防止数据在传输过程中被篡改。ca-certificates
是一个用于管理和更新操作系统上的证书颁发机构(Certificate Authorities,简称CA)证书的软件包。它包含了一组信任的根证书,用于验证 HTTPS 连接和其他安全通信。curl
是一个命令行工具,用于发送 HTTP 请求并显示响应。在这个命令中,curl
主要用于下载和获取软件包。software-properties-common
是一个软件包,提供了 add-apt-repository
命令,用于添加软件仓库源。通过它,可以向系统添加第三方软件源,并使用 apt
来安装来自这些源的软件包。添加Docker的官方GPG密钥:运行以下命令以添加Docker官方的GPG密钥:
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
curl
是一个用于发送 HTTP 请求并显示响应的命令行工具。在这个命令中,curl
被用来从指定的 URL 下载文件。-fsSL
: 这是 curl
命令的一些选项标志。具体解释如下:
-f
: 如果服务器返回的 HTTP 状态码表示请求失败,curl
不会显示错误信息。-s
: 静默模式,不显示进度或错误信息。-S
: 如果发生错误,则显示错误信息。https://download.docker.com/linux/ubuntu/gpg
: 这是要下载的文件的 URL,它指向 Docker 在 Ubuntu 上的官方 GPG 密钥文件。GPG 密钥用于验证下载的 Docker 软件包的完整性和真实性。|
: 这是管道操作符,将 curl
的输出通过管道传递给后面的命令。sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
: 这是通过管道接收来自 curl
的数据,并使用 gpg
工具进行处理的命令。具体解释如下:
gpg
是一个用于加密、解密和签名文件的命令行工具。在这个命令中,gpg
用于解析通过管道传递的 GPG 密钥文件,并将其解密成可读的二进制格式。--dearmor
: 这是 gpg
命令的选项,用于将 GPG 密钥文件解析为二进制格式。-o /usr/share/keyrings/docker-archive-keyring.gpg
: 这是 gpg
命令的选项,用于将解析后的密钥输出到指定的文件路径。在这个命令中,密钥将被输出到 /usr/share/keyrings/docker-archive-keyring.gpg
文件中。综上所述,该命令的作用是通过 curl
下载 Docker 的官方 GPG 密钥文件,并使用 gpg
解析和解密该密钥,并将其输出到 /usr/share/keyrings/docker-archive-keyring.gpg
文件中。这是为了后续在 Ubuntu 系统上安装 Docker 软件包时使用该密钥进行验证。由于操作涉及到系统文件,因此需要使用 sudo
命令以管理员权限执行。
echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
echo
是一个命令行工具,用于打印(输出)指定的文本或字符串。在这个命令中,echo
用于输出 Docker 软件源的信息。"deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
: 这是要输出的文本或字符串。它是一个包含 Docker 软件源信息的字符串,具体解释如下:
deb
: 这是 APT 软件源的条目类型之一,表示二进制软件包。[arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg]
: 这是对 Docker 软件源条目的描述,指定了要使用的体系结构(amd64)和签名文件的位置。https://download.docker.com/linux/ubuntu
: 这是 Docker 软件源的 URL,指向 Docker 在 Ubuntu 上的软件包仓库。$(lsb_release -cs)
: 这是一个命令替换,用于获取当前 Ubuntu 系统的发行版代号。lsb_release -cs
命令将返回当前系统的代号(如 “bionic”、“focal” 等),用于构建正确的软件源 URL。stable
: 这是 Docker 软件源的分支或版本,指定了要使用的稳定版本的软件包。|
: 这是管道操作符,将 echo
的输出通过管道传递给后面的命令。sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
: 这是通过管道接收来自 echo
的数据,并使用 tee
命令将数据写入文件的命令。具体解释如下:
tee
是一个命令行工具,用于从标准输入接收数据,并将其写入一个或多个文件,同时也将数据输出到标准输出。在这个命令中,tee
用于将来自管道的数据写入文件。/etc/apt/sources.list.d/docker.list
: 这是要写入的文件路径,它位于 /etc/apt/sources.list.d/
目录下,用于存储用户自定义的软件源列表。在这个命令中,Docker 软件源的条目将被写入到该文件中。> /dev/null
: 这是重定向符号,将 tee
命令的标准输出重定向到 /dev/null
,表示将输出丢弃,不显示在终端上。综上所述,该命令的作用是将 Docker 软件源的条目信息写入到 /etc/apt/sources.list.d/docker.list
文件中,以便在后续使用 apt
命令时能够使用该软件源。由于操作涉及到系统文件,因此需要使用 sudo
命令以管理员权限执行。/dev/null
部分表示不显示 tee
命令的输出。
sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io`sudo apt update
: 这个命令用于更新系统的软件包列表。sudo apt install docker-ce docker-ce-cli containerd.io
: 这个命令用于安装 Docker 容器引擎及其相关组件。具体解析如下:
docker-ce
是 Docker Community Edition(社区版)的缩写,是 Docker 容器引擎的核心软件包。docker-ce-cli
是 Docker Community Edition Command Line Interface(命令行界面)的缩写,是 Docker 容器引擎的命令行工具软件包。containerd.io
是一个用于管理容器运行时的开源项目,它是 Docker 容器引擎的一部分,负责管理容器的生命周期。综上所述,该命令的作用是使用 apt
安装 Docker 容器引擎及其相关组件。这将安装 Docker Community Edition(社区版)的核心软件包 docker-ce
、命令行工具软件包 docker-ce-cli
,以及容器运行时管理工具 containerd.io
。
执行这两个命令将使系统更新软件包列表,并安装 Docker 容器引擎,从而使用户能够在系统上运行和管理 Docker 容器。
sudo docker run hello-world
docker
是 Docker 容器引擎的命令行工具。在这个命令中,docker
用于与 Docker 容器引擎进行交互。run
是 docker
命令的一个参数,用于运行一个容器。hello-world
是一个示例容器镜像的名称。Docker 容器镜像是一个包含完整的运行时环境的独立软件包。在这个命令中,hello-world
是一个简单的示例容器镜像,用于测试 Docker 安装和配置是否正确。综上所述,该命令的作用是在 Docker 容器引擎中运行一个名为 hello-world
的示例容器镜像。执行该命令后,Docker 将下载 hello-world
容器镜像(如果本地不存在),并在容器中运行该镜像。镜像运行后将输出一些信息,表示 Docker 已经正确安装并正常工作。
注意:由于该命令需要与 Docker 容器引擎进行交互,因此需要使用 sudo
命令以管理员权限执行。
如果一切顺利,你将看到一个简单的Docker容器运行并输出"Hello from Docker!"的消息。如果输出docker: Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?.See 'docker run --help'
说明未启动docker守护进程,先运行sudo service docker start
,然后再运行 一次sudo docker run hello-world
,就成功了。
现在你已经成功在WSL中安装了Docker。你可以使用Docker命令行工具来管理和运行容器,构建和发布镜像等。请注意,WSL中运行的Docker实际上是在Windows系统上运行的Docker守护进程,因此你可以使用Windows上的Docker工具和GUI进行交互。
在WSL中安装Docker后,你可以使用命令行工具来管理Docker容器和镜像。下面是一些常用的Docker命令:
启动Docker服务:在WSL终端中,运行以下命令来启动Docker守护进程:
sudo service docker start
或者使用以下命令来启动Docker服务并设置开机自启动:
sudo systemctl enable --now docker
验证Docker安装:运行以下命令来验证Docker是否正确安装并正在运行:
sudo docker run hello-world
如果一切顺利,你将看到一个简单的Docker容器运行并输出"Hello from Docker!"的消息。
Docker镜像操作:
拉取镜像:运行以下命令来拉取一个Docker镜像:
sudo docker pull image_name:tag
列出镜像:运行以下命令来列出已下载的Docker镜像:
sudo docker images
删除镜像:运行以下命令来删除一个Docker镜像:
sudo docker rmi image_name:tag
Docker容器操作:
创建容器:运行以下命令来创建一个Docker容器:
sudo docker create --name container_name image_name:tag
启动容器:运行以下命令来启动一个Docker容器:
sudo docker start container_name
停止容器:运行以下命令来停止一个运行中的Docker容器:
sudo docker stop container_name
列出容器:运行以下命令来列出正在运行的Docker容器:
sudo docker ps
删除容器:运行以下命令来删除一个Docker容器:
sudo docker rm container_name
这只是Docker命令的一小部分,你可以通过运行sudo docker --help
或查阅Docker文档来了解更多命令和选项。使用这些命令,你可以管理Docker容器和镜像,构建自定义镜像,设置容器网络等。
在 Docker 中删除镜像的前提是该镜像不在使用中,没有基于该镜像运行的容器实例。
Docker 镜像是容器的基础,如果有容器正在使用该镜像,那么镜像将被视为被使用中,不可直接删除。因此,在删除镜像之前,需要确保没有正在运行的容器使用该镜像。
要删除镜像,可以按照以下步骤进行操作:
使用 docker ps -a
命令查看所有容器的列表,包括运行中和已停止的容器。确认没有基于要删除的镜像运行的容器。
如果存在正在运行的容器使用了要删除的镜像,需要停止这些容器。可以使用 docker stop <容器ID>
命令停止容器。多个容器可以通过逐个指定容器ID来停止,或者使用通配符等方式进行批量停止。
确认所有使用要删除镜像的容器都已停止后,可以使用 docker rmi <镜像ID>
命令删除镜像。可以通过 docker images
命令查看当前系统中的镜像列表,获取要删除的镜像的ID。
请注意,删除镜像是一个不可逆的操作,删除后无法恢复。确保在删除之前进行了必要的备份和确认操作。
本文简单介绍了Docker以及在WSL中安装使用docker,通过网上查阅资料和自己的笔记整理并成功实践于PC,最终上传分享给大家,供大家参考,希望能够帮到勤奋学习的诸位,有不合理的地方,欢迎各位大佬指正评论,创作不易,不喜勿喷,谢谢!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。