在Docker容器中运行VI编辑器
1. 概述
在本教程中,我们将学习如何在Docker容器中使用*vi *命令。要完全理解本教程,需要对 Linux 和 Docker 有基本的了解。我们将研究四种类型的 Linux 发行版,即 Ubuntu、Debian、CentOS 和 Fedora。
Docker 是一个容器化平台,允许将我们的应用程序及其依赖项打包到一个单元中。
作为最佳实践,我们应该使 Docker 映像大小保持较小。因此,我们只在 Docker 容器中安装运行我们的应用程序所必需的那些包。
2. 对于 Ubuntu/Debian
**Ubuntu 和 Debian 的官方 Docker 镜像不包含vim包。**让我们快速验证一下:
$ docker run -itd --name ubuntu ubuntu:latest
dbfaa02b8c3c5bc434af84161571c3d481c370327063f807eb670c5ae3c441aa
$ 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.
首先,我们启动了一个带有最新 Docker 镜像的 Ubuntu Docker 容器。此外,apt list –installed | grep vim将验证vim包是否存在于容器中。由于输出为空(忽略警告),我们可以得出结论,容器中不存在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]
由于我们已经安装了上面的vim包,命令*apt list –installed |*的输出 grep vim这次不是空的。
所有这些命令也适用于 Debian Docker 容器。
3. 对于 CentOS/Fedora
CentOS 和 Fedora 的官方 Docker 镜像包括vim包的最小安装,它具有执行所有基本文件编辑操作的能力。
现在让我们使用最新的 Docker 镜像启动一个 centos Docker 容器。同样,我们将使用命令rpm -qa | grep 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 update命令会将软件包更新到最新版本。最后,我们将使用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 容器。
4. 使用vi编辑器创建或编辑文件
现在我们已经在 Docker 容器中安装了vim包,我们可以使用vi命令来创建和编辑文件:
$ docker exec -it centos bash
$ vi /blogdemo.txt
在这里,我们在 Docker 容器中启动一个交互式 Bash shell,然后在*/目录中创建blogdemo.txt文件。如果blogdemo.txt文件已经存在,它将在vi*编辑器中打开该文件。
在这个例子中,我们应该注意到控制权将保留在 Docker 容器内。在此之后执行的任何操作都将在 Docker 容器内执行。
让我们看一下使用单个命令执行相同操作的另一种方法:
$ docker exec -it centos bash -c "vi /blogdemo.txt"
这次,控件将保留在主机上。在此之后执行的任何操作都将在主机上执行。
要深入了解vi编辑器及其不同操作,强烈建议阅读我们的指南 。
5. 最佳实践
理想情况下,应用程序开发包括三个主要阶段,即开发、测试和部署。我们应该在部署之前彻底测试源代码。最后,我们使用 Docker 容器来部署我们的源代码。
在部署阶段,Docker 用于将应用程序源代码及其所有依赖项打包到一个实体中。部署应用程序后,我们不应更新源代码。所有更改都应仅在开发阶段完成。
因此,应该避免在 Docker 镜像中使用像vim这样用于编辑文件的包。
5.1. 使用 Docker 卷挂载
即使出于任何原因,我们想要编辑 Docker 容器内的任何文件,我们也应该使用Docker 卷。
使用 Docker 卷,我们可以将源代码目录挂载到主机上的特定目录中。这样,主机上存在的文件内所做的任何更改都将反映 Docker 容器内的更改。
5.2. 使用nano/vim-tiny
安装vim包需要大约 50 MB 的磁盘空间。作为替代方案,我们还可以使用nano 或vim-tiny(仅在 Ubuntu 中可用)等软件包进行文件编辑。**这些软件包只需要几 KB 的磁盘空间。因此,我们的 Docker 镜像大小会很小。