运行 Docker 镜像作为容器
Docker 允许您使用 Docker 镜像创建名为 Docker 容器的容器化、打包和隔离的环境。在这些 Docker 容器内,您可以构建、测试甚至部署您的应用程序。这使您可以轻松地与其他开发者共享您的应用程序运行时环境。所有这一切都归功于一个名为 Docker 镜像的只读模板。
您可以直接从任何 Docker 注册表(例如 Dockerhub)拉取 Docker 镜像,或者在 Dockerfile 中使用基础镜像来构建您自己的自定义镜像。然后,您可以使用 Docker build 命令构建您的 Docker 镜像。准备好 Docker 镜像后,您可以使用 Docker run 命令创建一个与该镜像关联的容器。然后,您可以通过容器的 bash 访问应用程序的运行时环境。
所有这些都可以使用简单的 Docker 命令完成。让我们讨论所有与将 Docker 镜像作为容器运行相关的命令。
运行 Docker 镜像作为容器
要运行与镜像关联的容器,您需要在您的机器上已经存在一个镜像。创建镜像有两种不同的方法。
- 直接从 Dockerhub 拉取镜像。
- 使用 Dockerfile 创建镜像。
首先,让我们尝试直接从 Dockerhub 注册表拉取镜像。我们将尝试使用 Docker pull 命令拉取最新版本的 Ubuntu 镜像。为此,请执行以下命令。
$ docker pull ubuntu:latest
如果您的机器上不存在具有相同摘要的镜像,守护进程将尝试从 Dockerhub 拉取它。如果您已经拥有类似的镜像,它不会拉取新的镜像,而只是创建一个现有镜像的副本。
要检查拉取是否成功,您可以列出所有镜像。
$ docker images
您会发现镜像已成功拉取。
现在您已经准备好了 ubuntu 镜像,让我们使用 Docker run 命令运行与该镜像关联的容器。
$ docker run -it --name=ubuntucontainer ubuntu bash
在上面的命令中,我们使用了交互式和伪终端选项,这将允许我们通过终端驱动程序与容器进行交互式交互。我们使用了 name 选项为容器命名。最后,我们指定了镜像的名称和容器启动后需要运行的命令。在这里,命令是 bash,它将使我们能够访问容器的 bash。
执行此命令后,您应该可以访问容器内的 Ubuntu 环境。您可以像使用 Ubuntu 机器一样与容器进行交互。要检查容器的状态,您可以使用以下命令。
$ docker ps
此命令用于列出所有活动容器。
$ docker ps -a
此命令用于列出机器中所有存在的容器。
另一种方法是使用 Dockerfile 创建镜像。请考虑以下 Dockerfile。
FROM ubuntu:latest WORKDIR /app
在上面的 Dockerfile 中,我们使用了 FROM 指令,这将允许我们使用 ubuntu:latest 镜像作为我们的基础镜像。我们使用了 WORKDIR 指令将 /app 目录设置为默认工作目录。现在,您可以使用 Docker build 命令构建与该 Dockerfile 关联的镜像。
$ docker build -t myubuntu:latest .
在这里,我们使用了 -t 选项,这将允许我们为镜像指定名称和标签。末尾的点指定了 Dockerfile 的路径,即当前目录。执行此命令后,您可以通过列出镜像来检查镜像的创建情况。
$ docker images
现在,您可以再次使用 Docker run 命令运行与该镜像关联的容器。
$ docker run -it --name=ubuntucontainer myubuntu:latest bash
即使您的机器上不存在镜像,您也可以直接使用 Docker run 命令。假设您想创建一个与 centos 镜像关联的容器。您可以直接使用以下命令。
$ docker run -it --name=centosinstance centos:latest bash
执行 Docker run 命令时,守护进程首先会检查系统上是否存在 centos 镜像。如果找不到,它将在后台执行 Docker pull 命令来拉取 centos 镜像。完成后,它将执行 Docker start 命令在后台启动与 centos 镜像关联的容器。之后,它将使用 Docker run 命令运行容器。所有这些都在后台进行。
总而言之,您可以直接使用 Docker run 命令运行与镜像关联的 Docker 容器,即使您没有镜像也可以。或者,您可以先拉取或构建 Docker 镜像,然后使用 Docker run 命令创建容器。
数据结构
网络
关系数据库管理系统 (RDBMS)
操作系统
Java
iOS
HTML
CSS
Android
Python
C 编程
C++
C#
MongoDB
MySQL
Javascript
PHP