目录
Docker究竟是什么?
Docker对作为开发人员的我的重要性是什么?
那么我们究竟如何使用Docker?
容器和Docker之间有什么区别?
容器的优点
容器和虚拟机
Docker引擎
安装Docker
演示:将ASP.NET应用程序作为容器运行
演示:安装MongoDB
传统的软件安装方式
将软件作为容器运行
屏幕背后会发生什么?
Docker命令
如何将镜像上传到Docker Hub?
Docker究竟是什么?每当我们必须安装软件时,我们必须处理很多事情。有许多不同版本的软件可用于不同的操作系统及其不同版本。您必须完成文档并根据需要选择最适合的文档,然后运行执行文件。即便在此之后,您可能需要先完成其他一些步骤才能使用该软件。Docker运行包含软件的容器以及软件运行所需的其他内容。所以,这意味着你只需要使用包含您要安装的镜像的名称的''docker run'命令,瞧,您的软件使用自己的资源在自己的容器中运行。您不必担心哪个版本的软件适合您的操作系统等。我将通过MongoDB安装示例来演示。
Docker对作为开发人员的我的重要性是什么?好吧,开发人员可以简单地编写代码,并创建一个镜像。该镜像将包含运行应用程序所需的所有工具。此镜像只需部署在没有安装任何软件的生产机器上,应用程序将与开发机器完全一样运行。
那么我们究竟如何使用Docker?一旦我们在我们的系统上安装了docker,我们就会转到Docker Hub或其他一些Registry。搜索要安装的软件。然后,您可以运行PowerShell命令docker run imageName并且该软件已准备好供我们使用。
容器和Docker之间有什么区别?是的,这两个术语可以互换使用。但它们意味着不同的东西。容器是自包含的进程,包括运行的软件及其依赖项等。容器已经存在于Linux中很长一段时间了,但它们并没有太多使用。根据Docker的官方网站 --Docker是'开发人员和系统管理员用平台开发,部署和运行应用程序的平台'。总而言之,dockers帮助我们维护容器,容器是运行应用程序的进程。
容器的优点如上所述,作为容器运行简化了运行软件和应用程序的过程。假设您有一个ASP.NET应用程序。开发人员可以创建工作应用程序的镜像。此镜像将包含应用程序,ASP.NET Framework等。现在,此镜像可以作为容器部署在prod机器上,而不需要安装其他任何东西。应用程序运行所需的任何内容都将出现在容器中。容器将在所有系统上运行相同的容器。因此,您将不再有像应用程序在dev上运行但在Prod上失败的问题。
容器和虚拟机容器和虚拟机看起来可能相同,但它们完全不同。容器将仅包含应用程序所需的工具,并将与其他容器共享主机操作系统内核。但另一方面,虚拟机将拥有自己完全独立的操作系统。由于容器没有自己的完整操作系统,因此它们比虚拟机更轻量。
Docker引擎docker官方网站用下图解释了Docker引擎:
docker引擎由客户端和服务器组成。我们的用户使用docker CLI(也是客户端)与服务器进行交互。客户端通过docker Rest API与服务器交互。服务器或docker守护程序负责运行容器。当用户从docker CLI输入命令时,例如 - ' docker run imagename' 命令,docker守护进程接收请求。守护程序将在本地搜索镜像,如果找到,它将作为容器运行。将镜像视为执行文件。如果在本地找不到镜像,守护程序将在Registry中搜索它,然后将其作为容器运行。
安装Docker现在,让我们开始实际探索docker。您需要具有至少4 GB RAM的Windows 10 专业版或企业版本才能安装Docker。由于我没有Windows 10 专业版,我在Azure中创建了一个虚拟机。以下是步骤:
转到Azure门户网站并单击虚拟机。
选择Windows 10专业机器。并非所有虚拟机都支持嵌套虚拟化。所以,我选择了一个大小为D2s_v3的虚拟机。选择支持嵌套虚拟化大小的虚拟机对于运行Docker非常重要。
另外,请确保在入站和出站端口规则中,允许所有连接通过RDP; 否则,您可能无法通过RDP连接。
如果您尝试从办公室访问Azure,则可能会遇到问题。您可能需要与系统管理员联系以打开这些端口。一旦我们的虚拟机启动并运行,我们需要安装Docker。转到这里来安装Docker for Windows。
安装上述软件后,系统将重新启动,Docker将要求您启用Hyper-V。单击“ 是,重新启动系统 ”。
默认情况下,将启用Linux容器。您可以通过单击下面的鲸鱼图标来切换容器。
转到PowerShell并键入“docker run hello-world”,然后按Enter键。您应该看到一条消息' Hello from Docker'表示您的docker已正确安装。
阅读上面屏幕截图中提到的步骤。这就是我们之前谈过的内容。
如果您尝试从工作场所运行Docker,可能会遇到一些与代理相关的问题。您可以通过导航到设置来设置代理。
演示:将ASP.NET应用程序作为容器运行在Visual Studio 2017中创建一个新的ASP.NET MVC Core项目。在创建时,请确保选中“ 启用Docker支持 ”选项。
我打电话给我的应用程序' aspnetapp'。启用docker支持后,将在Solution Explorer中创建名为dockerfile的文件。
使用以下代码替换此文件中的现有代码:
FROM microsoft/dotnet:sdk AS build-env
WORKDIR /app
# Copy csproj and restore as distinct layers
COPY *.csproj ./
RUN dotnet restore
# Copy everything else and build
COPY . ./
RUN dotnet publish -c Release -o out
# Build runtime image
FROM microsoft/dotnet:aspnetcore-runtime
WORKDIR /app
COPY --from=build-env /app/out .
ENTRYPOINT ["dotnet", "aspnetapp.dll"]
转到PowerShell并导航到项目目录。在那里,运行命令:
docker build -t aspnetapp .
构建项目后,运行以下命令:
docker run -d -p 8080:80 --name myaspnetapp aspnetapp
一旦成功,请转到localhost:8080以导航应用程序:
那么这里发生了什么?dockerfile提供了创建镜像所需的信息。例如,它表示应该使用基本镜像创建镜像作为Microsoft / dotnet:aspnetcore。运行build命令时会创建应用程序的镜像。如果在PowerShell中编写以下命令,则会看到列出的图像。
Docker images
当您使用' docker run'命令运行镜像时,它将此图像作为容器运行,其中' myaspnetapp'是容器名称,' aspnetapp'是镜像名称。该run命令指示它在端口8080上运行。因此,当您导航到时localhost:8080,您可以找到正在运行的容器化应用程序。您可以使用命令'docker ps' 查看所有正在运行的容器。
有关此演示的更多信息,请参阅此处的官方docker网站。
因此,开发人员可以创建他们的图像并将其上传到存储库。当应用程序需要实时生成时,可以在生产机器上简单地运行此镜像。
现在让我们看一下,我们如何将MongoDB作为容器运行。
演示:安装MongoDB 传统的软件安装方式现在让我们使用传统方法安装Mongo。如果我们转向其文档,它将列出安装MongoDB所需的步骤,包括运行执行程序,通过安装程序进行设置等。安装MongoDB是一个漫长的过程。
现在让我们看看docker如何简化这个过程。
将软件作为容器运行转到Docker Hub并搜索Mongo。
在我们运行命令之前,单击鲸鱼图标,转到设置 - >守护程序并将实验标志设置为true。
完成后,docker将重新启动。然后,您可以在PowerShell或命令提示符中键入以下命令。
docker run --name some-mongo -d mongo:4.1
这里,docker安装一个名为' some-mongo' 的容器。您可以随意提供其他名称。' Mongo'是镜像名称,' 4.1'是其版本或标记。
它说已经下载了更新的镜像。
让我们使用以下命令来运行下载的镜像:
docker run some-mongo
我们将收到一条消息' waiting for connections on port 27017'表示我们的服务器已启动并正在运行。
因此,打开另一个PowerShell实例并运行以下命令:
docker exec -it some-mongo mongo
然后输入命令:
show dbs
这表明我们的服务器中尚未创建任何数据库。我们现在可以在这里继续使用其他mongo db命令。
所以我们看到docker简化了安装软件的过程。
屏幕背后会发生什么?您的操作系统可分为两个主要部分:内核和用户空间。内核可以控制硬件,并且包含驱动程序等。除了内核之外的所有应用程序,操作系统应用程序和库等都属于用户空间。用户空间通过内核访问硬件。
传统上,当我们安装软件时,我们只需安装应用程序并使用驱动程序和用户空间中已存在的库。但现在使用容器化方法,在创建镜像时,它将包含应用程序以及运行所需的其他驱动程序。因此,应用程序将独立于操作系统提供的资源。
Docker命令docker run imagename
这将运行指定的镜像。这相当于在传统软件中运行执行程序。
docker -help
这将列出所有可用的docker命令。
docker ps
这将列出当前运行的容器。目前,如果我们在PowerShell中输入此命令,我们会得到以下输出:
docker ps -a
这将列出所有正在运行和已退出的容器。
docker stop containername
这将停止软件。'docker ps -a'将容器列为已停止,但'docker ps'将不会列出它。
docker rm containername
这将删除容器。这就像卸载传统意义上的软件一样。'docker ps -a'&' docker ps'都不会列出它,因为容器已被删除。
docker images
这将列出下载的镜像。就传统的软件安装方法而言,镜像就像高管一样。
有关更多docker命令,请访问此处。
如何将镜像上传到Docker Hub?在上面的第一个演示中,我们为本地存储的ASP.NET核心创建了一个镜像。我们现在来看看如何在Docker hub上传镜像。首先,您需要在docker hub上创建一个免费帐户。然后创建一个存储库。
从powershell登录如下:
docker login
然后运行以下命令:
在docker tag命令中,aspnetapp是镜像名称。然后是我的username/respository:tag。
一旦镜像被推送到dockerhub上后,您可以在那里登录,然后您就可以在浏览器中看到该镜像。
我希望这篇文章能让你更接近解开Docker的神秘面纱。如果您想进一步讨论,请随时与我联系。
原文地址:https://www.codeproject.com/Articles/1369926/Introduction-to-Dockers-Containers