在Docker容器内运行 vi 编辑器 | Baeldung


在本教程中,我们将学习如何在Docker容器中使用vi命令。要完全理解本教程,需要对 Linux 和 Docker 有基本的了解。我们将研究四种类型的 Linux 发行版,即 Ubuntu、Debian、CentOS 和 Fedora。
Docker 是一个容器化平台,允许将我们的应用程序及其依赖项打包到一个单元中。
作为最佳实践,我们应该保持 Docker 镜像的大小较小。因此,我们只在 Docker 容器中安装那些运行我们的应用程序所必需的包。
 
Ubuntu/Debian
Ubuntu 和 Debian 的官方 Docker 镜像不包含vim包。现在,让我们在容器内手动安装vim包:

$ docker exec -it ubuntu bash -c "apt-get update && apt-get install -y vim"

在这里,首先,我们使用命令apt-get update 更新包,然后使用命令apt-get install -y vim安装vim包:

$ docker exec -it ubuntu bash -c "apt list --installed | grep vim"

WARNING: apt does not have a stable CLI interface. Use with caution in scripts.

vim-common/focal,now 2:8.1.2269-1ubuntu5 all [installed,automatic]
vim-runtime/focal,now 2:8.1.2269-1ubuntu5 all [installed,automatic]
vim/focal,now 2:8.1.2269-1ubuntu5 amd64 [installed]

所有这些命令也适用于 Debian Docker 容器。
 
 CentOS/Fedora
CentOS 和 Fedora 的官方 Docker 映像包括vim 包的最小安装, 它能够执行所有基本的文件编辑操作。
现在让我们使用最新的 Docker 镜像启动一个 centos Docker 容器。同样,我们将使用命令rpm -qa |验证容器内的vim包是否可用。

$ docker run -itd --name centos centos:latest
0a6b12547c61ce6859f48f56180d758692bf481dd854412f29c94f0cb1a3d0ca
$ docker exec -it centos bash -c "rpm -qa | grep vim"
vim-minimal-8.0.1763-15.el8.x86_64

如果需要,我们可以安装完整的vim包:

$ docker exec -it centos bash -c "yum update -y && yum install -y vim"

更新命令将更新包到他们的最新版本。最后,我们将使用yum install -y vim安装vim包。这两个命令都将在 Docker 容器内执行。
同样,让我们​​验证安装在容器内的所有vim包:
$ docker exec -it centos bash -c "rpm -qa | grep vim"
vim-filesystem-8.0.1763-15.el8.noarch
vim-minimal-8.0.1763-15.el8.x86_64
vim-common-8.0.1763-15.el8.x86_64
vim-enhanced-8.0.1763-15.el8.x86_64

本节中讨论的所有命令也适用于 Fedora Docker 容器。
 

使用vi编辑器创建或编辑文件
现在我们已经在 Docker 容器中安装了vim包,我们可以使用vi命令来创建和编辑文件:

$ docker exec -it centos bash
$ vi /baeldung.txt

在这里,我们在 Docker 容器中启动一个交互式 Bash shell,然后在/目录中创建baeldung.txt文件。如果baeldung.txt文件已经存在,它将在vi编辑器中打开该文件。
在这个例子中,我们应该注意到控制将保留在 Docker 容器内。在此之后执行的任何操作都将在 Docker 容器内执行。
让我们看看使用单个命令执行相同操作的另一种方法:
$ docker exec -it centos bash -c "vi /baeldung.txt"
这一次,控制权将保留在主机上。在此之后执行的任何操作都将在主机上执行。
 
应该避免在 Docker 镜像中使用像vim这样用于编辑文件的包。
即使出于任何原因,我们想要编辑 Docker 容器内的任何文件,我们也应该使用Docker 卷
使用 Docker 卷,我们可以将源代码目录挂载到主机上的特定目录。这样,主机上存在的文件内所做的任何更改都将反映 Docker 容器内的更改。
或者使用nano/vim-tiny:该VIM包需要大约50 MB用于安装的磁盘空间。作为替代方案,我们还可以使用nano或vim-tiny(仅在 Ubuntu 中可用)之类的软件包进行文件编辑。这些软件包只需要几 KB 的磁盘空间。因此,我们的 Docker 镜像大小会很小。