学习使用 Docker
摘自stegriff.co.uk 上的“学习如何使用 Docker”
您是否曾有过这样的恐慌感:未来即将到来,而您却被抛在后面?
好吧,每次我读到有关 Docker 和 Kubernetes 的文章时我就会有这种感觉,所以我认为我已经开始这段旅程了!
Docker是一种获取某些软件及其所有依赖项并在某种隔离的环境中运行该软件的方法。
无论如何,这是我的简短定义。
可以从注册表中获取图像,通常是 Docker Hub( https://hub.docker.com/)或 Microsoft Container Registry。
镜像类似于软件安装程序或软件包。您可以将其用作计算机上的容器。容器可以处于运行或停止状态。您可以拥有多个基于同一镜像的容器,每个容器具有不同的设置。每个容器都可以独立启动和停止。create
书面上看起来有点笨重,但实际操作起来却非常酷。只需几个命令,你就可以启动并运行像 MongoDB 或 Ghost 这样的复杂软件包。首先,这可以让你测试一项新技术是否合适,而无需进行繁琐的设置。在生产环境中,容器构成了可重复、与硬件无关的服务和微服务设置的基础。
在 Windows 上设置
要在 Windows 上安装 Docker,请访问https://hub.docker.com/并点击“Docker Desktop”的下载链接。我记得它以前被称为“Docker for Windows”。在撰写本文时,下载操作是一个大横幅,位于登录页面的正中央。
首次设置 Docker Desktop 时,会有一个复选框供您选择使用 Linux 容器模式还是 Windows 模式。取消勾选则使用 Linux 模式。您可以随时轻松更改此设置,并在 Linux/Windows 模式之间切换。
一些命令
打开一个终端,无论是 cmd、PowerShell 还是 git bash……你都可以直接运行docker
它来查看帮助文本,其中包含命令列表。以下是我的一些相关示例的剧本。
图片
以下是一些用于查找和管理计算机上的映像的命令。每个命令行前面都有注释,用于解释其用途:
# Search docker hub for an image
docker search nginx
# Download an image (doesn't create a container)
docker pull nginx
# List the images that you have on the machine
docker images
# Remove the downloaded nginx image
# (all running containers of that image have to be stopped first)
docker rmi nginx
容器
容器创建后,您可以使用其全名或其ID 的明确片段来识别它,以便将来的命令能够识别它。这些 ID 看起来像 git 提交哈希值。如果您没有为容器指定名称,它将获得一个基于[adjective]_[scientist]
!的随机名称。
# Create a container based on the nginx image
# Called 'my-server' (optional)
# Mapping container port 80 to host port 8080
docker create --name my-server -p 8080:80 nginx
# Start the container
# Detached by default, use -it for interactive terminal
docker start my-server
docker start -it my-server
# Stop a container
docker stop my-server
# List all running containers
docker ps
# List all containers, running and stopped
docker ps -a
# Delete a container
# Doesn't affect the image or any other containers of the same image
docker rm my-server
注意这个ps
命令,它的名字来源于 Unix 中ps
用于列出正在运行的进程的命令。令人困惑的是,ps -a
这个命令实际上是用来获取所有现有容器的列表,无论它们是否正在运行。
对于docker start
,是和标志-it
的组合。-i
-t
一体机
docker run nginx
是一个简写命令,它将:
- 如果镜像不存在则下载(即 nginx)
- 根据镜像创建新的容器
- 启动容器
因此,您可以将其他命令中的许多参数提供给docker run
,例如用于端口的--name
和-p
。运行docker run --help
以获取完整列表。
请注意,这docker run
将始终创建一个新容器。因此,如果您对同一镜像重复使用它,最终将得到许多运行相同软件的不同容器!我发现这ps -a
对于保持领先地位至关重要。
好的一面是,一旦你的机器上有了指定版本的基础镜像,Docker 就会使用本地副本,而不是重新下载软件。当latest
版本号增加时,大概docker run
会下载并运行新版本吧?这需要事实核查!
我可以用正在运行的容器做什么?
到目前为止,我与这些容器交互的主要方式是让它们将其关键功能(网站、数据库等)公开到主机(我的电脑)上的端口。
然后,我可以使用此连接在浏览器中使用正在运行的软件,或者通过将应用程序连接到正在运行的数据库来使用。
虽然运行的软件是基于 Linux 发行版(通常是 Alpine),但我还没有尝试过远程访问 Linux 系统来捣鼓。归档于“L”(代表“稍后”)。
有关容器的更多信息
因此,容器实际上在您的网络上具有虚拟存在!
你可以用 找到(太多了)关于容器的信息docker inspect container-name
。该命令的长 JSON 结果底部附近有一个 IP 地址。我还没学到太多关于这个命令能做什么。
我知道在使用 Docker Swarm 和 Kubernetes 的多容器设置中,这些虚拟网络 IP 用于容器间通信。归类于“L”(代表“懒惰”)。
抑制你的热情
无论容器是否代表“未来”(对很多人来说,它们代表“现在”),我认为我们都需要认真理解这个范式。所以我正在努力!感谢您阅读到这里,希望您能从我的新手笔记中有所收获。
文章来源:https://dev.to/stegriff/learning-to-use-docker-2gp8