Bootstrap

【Docker】案例:进入容器,修改文件

需求:进入Nginx容器,修改HTML文件内容,添加“传智教育欢迎您”

提示:进入容器要用到 docker exec 命令。

步骤

一、进入容器

进入我们刚刚创建的nginx容器的命令为:

docker exec -it mn bash

命令解读:

  • docker exec :进入容器内部,执行一个命令

  • -it : 给当前进入的容器创建一个标准输入、输出终端(利用键盘的一种录入 / 控制台的一种输入,实现一种交互),这里是允许我们与容器交互

  • mn :要进入的容器的名称

  • bash:进入容器后执行的命令模式,bash是一个linux终端交互命令

    例如我们之前学习的很多Shell命令,如cd、rm、mv等,这些Shell命令其实都是bash命令当中的一部分

image-20231016195757991

通过上面的命令,一旦进入容器内部,就可以修改文件了。容器的内部会有自己的一套文件系统,看起来跟Linux的文件目录一样,但其实它是一个阉割版的,这里只有nginx它自己需要的。


二、进入nginx的HTML所在目录 /usr/share/nginx/html

之前我们讲过,容器的内部会有自己的一套文件系统。

如下图,使用ls查看当前根目录下的文件,可以看见容器内部会模拟一个独立的Linux文件系统,看起来如同一个linux服务器一样,但其实它是一个阉割版的系统,这里只有Nginx运行自己需要的。

而且可以发现这个服务器的名字和容器的ID是完全一样的:

image-20210731164159811

nginx的环境、配置、运行文件全部都在这个文件系统中,包括我们要修改的html文件。

接下来我们就要去找Nginx在哪个目录,只有Nginx镜像的作者才知道它在创建镜像的过程中,他指定的是哪个安装目录。

查看DockerHub网站中的nginx页面,可以知道nginx的html目录位置在/usr/share/nginx/html

image-20240321125510974

我们执行命令,进入该目录:

cd /usr/share/nginx/html

查看目录下文件:index.html就是我们需要修改的首页

image-20210731164455818


三、修改index.html的内容

PS:镜像封装时只有应用程序所需要的必备的函数库和一些命令,因此容器内没有vi命令,无法直接修改。

我们用下面的命令来修改:

sed命令是用于替换。第二条修改是为了让它支持中文

sed -i 's#Welcome to nginx#传智教育欢迎您#g' index.html
sed -i 's#<head>#<head><meta charset="utf-8">#g' index.html

在浏览器访问自己的虚拟机地址,例如我的是:http://192.168.150.101,即可看到结果:

image-20210731164717604


四、验证

使用 exit 退出容器

使用 docker stop 容器名称 停掉该容器。然后再使用 docker ps 查看运行中的容器。 docker ps 默认只能查看运行中的容器。使用-a参数查看所有容器。

image-20240321130507855

使用 docker start 容器名称 重新启动容器。

使用 docker rm 容器名称 删除该容器。此时会报错:不能删除运行中的容器

image-20240321131033218

方法一:需要先停止,然后再删除。

方法二:查看帮助文档,-f 强制删除运行中的容器

image-20240321131115033

此时发现,已经完全删除。

image-20240321131204257

PS:在容器里修改文件是不推荐的:

1、不方便。通过刚才的案例我们可以发现,我们进行修改的时候连命令都没有,太麻烦了!

2、在容器里做的修改其实是没有记录的,就是任何人都不知道,包括你自己。你现在可能知道,但你随着时间的推移,过了几个月,你之前修改过什么,还有影响吗?

而且如果你改的东西多了,就更容易忘掉了,将来我们又创建了一个容器,我让你给我改成跟这个一样,你还会改吗?

所以我们并不推荐在容器内修改。

;