Docker:更简单的方法
[](https://res.cloudinary.com/practicaldev/image/fetch/s--TSd3INqC--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev- to-uploads.s3.amazonaws.com/i/bthrc0lorny0ib5f9fuh.png) 容器和软件 容器都是关
[](https://res.cloudinary.com/practicaldev/image/fetch/s--TSd3INqC--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev- to-uploads.s3.amazonaws.com/i/bthrc0lorny0ib5f9fuh.png)
容器和软件
容器都是关于软件的!
传统上,我们使用以下过程来运行软件:
-
查找软件,通常是独立网站。
-
下载软件,通常是 zip 文件或某种安装程序。
-
然后我们安装软件,通常解压 zip 文件或运行安装程序。
-
然后我们运行安装的软件。
通过将容器与上述过程相关联,您可以学到很多关于容器的知识。以下是使用容器运行软件的样子:
-
在 Docker Hub 上找到该软件。
-
使用 docker pull 下载软件,以 image 的形式出现,类似于 zip 文件或 msi 安装程序。图像是一种应用程序打包格式。
-
我们没有安装软件,而是创建了一个容器。因此,container--一个停止的容器--就像安装的软件。 Docker 将映像解压到计算机上,创建一个容器。注意:如果你只是想创建一个容器,你可以使用 docker create。
-
然后我们运行容器,就像运行一个exe一样。在被子下面是一样的!!!
-
我们经常使用 docker run 来编排所有这些步骤,一个命令,多么方便!
-
docker exec 可以被认为是运行我们已安装软件的另一个副本,就像我们两次启动可执行文件时一样。例如,两份 Microsoft Word。或者使用 MongoDB,我们可能会运行两个 mongo 客户端。创建并运行一个容器后,我们可以使用 docker exec 在容器内运行多个应用程序,或者同一个应用程序的多个副本。
为什么选择 Docker?
使用传统软件,我们面临着许多挑战,例如:
软件发现
问题:
-
从哪里获得软件?
-
应用商店
-
包管理器
-
独立网站
-
软件统计和元数据
-
信任与安全
-
下载可用性
-
付款和许可
解决方案:
- 地点:
使用 Docker,我们只有一个地方可以获取我们的软件:Dockerhub.com。在这里,您可以找到任何流行的软件存储库,其中包含您可以下载和使用的图像。
- 统计和元数据:
Docker Hub 提供下载统计数据和关于有多少人喜欢软件的数据。软件有文档和其他使用说明。也有来自图像用户的评论的规定。
- 信任和安全:
Dockerhub 有 Docker Inc 认证的所谓官方镜像。在这些图像的标签页面上,您可以找到对这些图像进行安全扫描的结果,显示发现的漏洞(如果有)。
- 下载可用性:
可以依靠 Docker Hub 来提供对您的软件映像的访问以供下载。无需在整个互联网上搜索一个简单的软件。
- 付款和许可:
DockerStore 是一种访问和支付商业镜像的新方式。
软件安装:
问题:
-
兼容吗?它是跨平台的吗?
-
它是什么格式?
-
如何安装?
-
它安装了什么?
-
更新/卸载
解决方法:
- 兼容性:
使用 Docker,您不再需要担心软件是否是跨平台的,因为您可以在 Windows 上运行 Linux 容器,反之亦然。
- 格式:
这一切都在图像中为您处理好了。您可以决定通过访问 Dockerhub 页面并检查 Dockerfile 来了解镜像是如何构建的。
- 安装:
没有更多关于如何安装软件的冗长说明。只是 Docker 运行。
- 安装了什么:
可以访问公开可用的 Dockerfile 以找出容器中究竟安装了什么。
- 更新/卸载
Docker remove 命令用于卸载软件。至于更新,您可以轻松下拉更新的图像。图像被标记,使其更新和版本控制一致,更易于理解和遵循。
所有其他问题,例如文档、安装位置、启动服务、停止应用程序、许可、安装依赖项和安全性,都由 docker 处理。 Docker run 启动所有需要的依赖项并执行所有需要的配置。
重大变化
这曾经是一个巨大的。过去,应用程序更新、操作系统补丁或共享库的升级意味着功能正常的软件的终结。不再。 Docker 也解决了这个问题。
安装
Docker 的安装非常简单。
-
访问:https://docs.docker.com/get-docker/
-
单击您的主机类型,Mac、Windows 或 Linux
-
按照简单的安装说明开始。
-
在 Ubuntu 上,安装可以像运行一样简单:
Sudo apt install docker.io
进入全屏模式 退出全屏模式
确保您的机器支持虚拟化。如果您运行的是 Windows 机器,请确保它具有 Hyper-V,因为这是 Docker 用来运行的技术。您可能必须在机器的 BIOS 中打开支持。
使用 Docker
常用命令
码头工人命令
安装后,使用以下命令检查该过程是否成功:
Docker 版本或 Docker 信息
启动容器
Docker 启动 <容器标识符>
要查看 docker 中所有正在运行的容器,请使用 Process Status 命令:
泊坞窗
查看所有容器是否运行:
码头工人ps -a
要查看所有图像,请使用:
Docker 镜像
要运行容器,请使用:
码头工人运行
启动容器
码头工人启动
要停止正在运行的容器:
码头工人停止
要卸载容器:
码头工人
要删除图像:
码头工人 rmi
要运行图像的另一个实例:
码头工人执行
创建容器
Docker 创建 <容器标识符>
搜索图像
码头工人搜索
查找有关容器或映像的所有详细信息
码头工人检查
Docker 揭秘
在终端中输入以下 docker 命令
docker 运行 msoap/ascii-art cowsay '你好'
如果您是第一次运行它,它将:
-
从Dockerhub的msoap仓库下载Ascii-art的软件镜像。
-
完成此过程后,它将提取刚刚下载的文件,
-
Docker 将创建一个容器并启动应用程序
-
Ascii-art 应用程序的“cowsay”参数采用将显示的字符串输入。
在 run 之后附加 “-rm” 标记,在容器运行完成时将其移除。
运行以下命令进行测试:
docker run --rm -it wernight/funbox asciiquarium
进入全屏模式 退出全屏模式
要关闭动画/容器,请按 Ctrl + C.
倒置学习
在您的终端中执行此操作:
Docker run -p 80:80 nginx
进入全屏模式 退出全屏模式
-p 标志指定 Docker 应该从它将启动的容器转发到主机中的哪个端口。
该命令分层拉下 Nginx 服务器。由于这是压缩形式以节省带宽,因此 docker 会提取它们以节省后续运行的时间。最后,docker 启动 Nginx 服务器并进行端口转发。
像安装和配置 Nginx 服务器这样的简单过程可能需要相当长的时间,并且需要一定程度的专业知识。使用 Docker,您所要做的就是运行一行命令并设置流程。这称为反向学习。
通过倒转学习,人们不需要了解一项技术即可使用它。使用上面的 Nginx 示例,只需一行代码,您就可以启动并运行 Nginx,即使不知道如何按照传统方式进行设置。
这使人们能够预览/使用软件并决定是否要投入时间来学习它,从而节省浪费的时间。
图像和容器
在 Windows 用语中,可以将图像比作 .zip 格式的下载软件。通过提取此软件,我们可以访问可用于安装软件的“.msi”或“.exe”。码头工人也是如此。要下载我们使用的软件:
Docker pull <image-name:tag>
进入全屏模式 退出全屏模式
这会将文件下载到我们的机器上。如果我们没有在图像标识符中指定标签,则会自动使用“最新”标签。 IE。 .
当我们执行:
Docker run <image-name>
进入全屏模式 退出全屏模式
docker 首先在本地查找指定的镜像,找到它后,它会提取它,创建一个容器并在其中运行应用程序镜像。
容器本质上是映像的运行实例,就像运行的应用程序是其安装程序文件的实例一样。传统上,我们无法在没有安装程序的情况下安装应用程序。在 docker 中,当我们使用镜像名称执行 run 命令时,docker 首先在我们的机器中本地搜索镜像,如果没有找到,它会继续搜索 Dockerhub。如果找到该映像,它将下载、提取、安装和运行该映像。
就像我们可以关闭正在运行的应用程序一样,我们也可以使用以下命令终止正在运行的容器:
Docker stop <container-name>
进入全屏模式 退出全屏模式
这不会删除容器,而只会停止其执行。要确认这一点,您可以使用以下命令:
Docker ps -a
进入全屏模式 退出全屏模式
这向您显示了所有已安装应用程序的 docker 等效项,包括正在运行和已终止的应用程序,并指定了它们的运行状态。
如果你想“卸载”一个容器,你可以使用:
Docker rm <container-identifier>
进入全屏模式 退出全屏模式
容器标识符可以是 ID 或名称。不需要提供完整的 ID,足以唯一标识容器就足够了。此命令的输出是受影响容器的回显。要删除所有容器,请考虑使用:
Docker rm $(docker ps -aq)
进入全屏模式 退出全屏模式
这会回显所有受影响的容器 ID。附加的 -q 标志确保仅将容器 ID 提供给 rm 命令。
正如在 Windows 中卸载软件不会删除其下载的安装程序一样,删除容器也不会删除其映像。要查看所有拉取的图像,请使用:
Docker images -a
进入全屏模式 退出全屏模式
要删除图像,请使用:
Docker rmi <image-identifier>
进入全屏模式 退出全屏模式
标识符可以是映像 ID 或存储库名称。运行这个命令会产生很多输出。这是因为图像通常是分层的,并且在删除它们时,必须删除每一层才能使图像消失。
隔离
容器将隔离提升到一个全新的水平,这是可以理解的。
让我们退后一步,检查一个正在运行的应用程序。一个正在运行的软件由以下层组成:
-
应用程序(带有支持的运行时和框架)
-
操作系统应用程序——cmd、powershell 等
-
库(依赖项等)
-
内核,驱动程序
-
硬件
当一个图像被拉下时,它会在用户空间中包含所需的文件。这是为了确保应用程序可以访问它需要的所有库、组件和依赖项。这就是使图像大部分时间变大的原因,因为它试图因过于小心而犯错。好吧,有时您永远不知道应用程序可能还需要什么,所以为什么不拥有它。
由于内核可以完全访问机器的计算资源,因此软件通过对内核的 API 调用来发出所有请求。内核负责告诉正在运行的容器它可以看到的所有进程、网络或文件。这种隔离使容器更加独立并且不会危及主机系统。它基本上是内核对容器说谎,以便为主机提供安全性。
所有容器都是主机系统中具有相同进程 ID 的进程。容器内的进程只能看到同一容器内的进程并与之交互。
驱动器安装
在 docker 中,有时我们需要一个容器来与主机中的文件进行交互。这可以是处理、访问或输出数据。为此,我们使用了 docker 的 Drive 挂载功能:
Docker run -v c:/users/folder_to_share:/data
进入全屏模式 退出全屏模式
由于 -v(volume)标志,此命令将 c:/users/folder 挂载到容器的 /data 文件夹。这样我们可以指定一些额外的命令来执行所需的操作。
Docker run –rm -v c:/Users/folder:/data alpine ls /data
进入全屏模式 退出全屏模式
挂载是添加对主机文件系统的引用以获得访问某些主机文件的权限的过程。
Docker 文档
您可以通过以下方式获取 docker 文档以供本地参考:
Docker run -p 4000:4000 -d docs/docker.github.io
进入全屏模式 退出全屏模式
-d 标志是让它在分离模式下运行。该过程完成后,您可以在浏览器中访问完整的 docker 文档,网址为http://0.0.0.0:4000
谢谢你的时间!
更多推荐
所有评论(0)