在这篇文章中,将探讨Docker的基础知识和常用命令。Docker是一个容器化平台,它允许开发者和系统管理员轻松地部署、扩展和管理应用程序。将从安装Docker开始,逐步学习如何从Docker Hub拉取镜像,并在Docker中运行Linux机器。
在部署应用程序、机器学习模型或数据库时,经常需要一些库和依赖项。处理多个应用程序时,不同版本的依赖项可能会导致依赖冲突。使用单独的机器或将所有依赖项与应用程序一起打包可以解决这个问题。Docker提供了另一种解决方案,它通过容器化技术来隔离应用程序及其依赖项,从而避免了依赖冲突。
Docker是一个容器化和管理工具,它允许应用程序在任何操作系统和环境中“开发、分发、运行”。Docker创建了一个隔离的空间,应用程序在这个空间中使用系统资源运行。在本文中,将容器称为“胶囊”。
Docker为应用程序迁移提供了一个完整的解决方案,具有以下特点:
Docker由三个主要部分组成,每个部分负责不同的任务,从构建、运行到创建胶囊。
Docker架构由构成Docker的单元组成,这些单元负责它们自己的预定义任务。
2015年之后,Docker根据标准化重新设计了自己,并确保支持运行时规范和镜像规范。运行时规范定义了胶囊技术的生命周期。早期,Docker Daemon负责Docker中的所有进程,但在标准化之后,runc(容器运行时)负责启动镜像。在Kubernetes等容器编排工具中,只需要安装容器运行时就可以在其Pod上启动容器。
Docker的安装复杂性取决于操作系统。可以使用这个在系统中安装Docker。本文将以Linux机器上的Docker为例。安装后,通过输入以下代码来验证Docker是否已安装:
$ docker --version
获取Docker-Engine的状态,检查它是否正在运行。
$ systemctl status docker
如果Docker引擎正在运行并且处于活动状态,可以通过以下命令轻松停止它:
# 停止Docker引擎
$ systemctl stop docker
# 启动Docker引擎
$ systemctl start docker
如果Docker服务遇到错误,可以以调试模式启动Docker:
$ sudo dockerd --debug
Docker镜像包含了运行应用程序所需的所有依赖项、源文件和工具。Docker镜像是创建胶囊的源文件。胶囊是由Docker镜像创建的运行实例。
Docker hello-world是一个镜像文件,它创建一个Docker胶囊并打印“hello world”。
docker run hello-world
它首先会在本地注册表中检查hello-world镜像文件。如果没有找到,它会从Docker Hub(默认的公共注册表)拉取镜像文件并运行胶囊。
列出所有正在运行的胶囊:
docker ps
列出所有Docker胶囊:
docker ps -a
黄色高亮部分是胶囊ID/容器ID,当想要选择特定的胶囊时,可以使用它的容器ID。注意:如果容器ID是唯一的,只需要提供它的前几个字符。
docker rm 70
此命令将删除容器ID以70开头的胶囊。
此命令列出本地注册表中所有可用的Docker镜像。
docker images
从本地仓库中删除镜像,需要执行以下命令。
docker image rm ID_OF_CONTAINER
或者:
docker image rm Image_Name
任何在Docker Hub或其他来源上可用的镜像文件都可以使用pull命令拉取到本地Docker注册表。
docker pull
命令只下载镜像文件;它不会使用镜像文件创建任何胶囊,除非要求Docker这样做。
Docker inspect是一个强大的命令,允许检查容器的信息、暴露的端口和网络属性。Inspect命令可以用来检查镜像文件或胶囊。
# 检查Docker镜像
docker image inspect IMAGE_ID
# Docker容器检查
docker container inspect ID_OF_CONTAINER
或者:
docker inspect ID_OF_CONTAINER
要在Docker中运行Linux,首先需要拉取ubuntu镜像文件。
docker pull ubuntu
docker images
现在有了ubuntu镜像文件在本地注册表中。是时候使用镜像文件启动胶囊了。
docker run -it ubuntu
-it表示希望胶囊以交互模式运行。它将等待反应。
现在可以运行Linux命令来检查Linux胶囊是否正在运行。Ubuntu使用命令“/bin/bash”进入胶囊。可以使用命令“bin/bash”在旋转的ubuntu胶囊中使用ubuntu的终端。
docker exec
此命令在已经旋转的胶囊中运行新命令。
docker stop ID_OF_CONTAINER