需求:进入Nginx容器,修改HTML文件内容,添加“传智教育欢迎您”
提示:进入容器要用到 docker exec
命令。
步骤:
一、进入容器
进入我们刚刚创建的nginx容器的命令为:
docker exec -it mn bash
命令解读:
-
docker exec :进入容器内部,执行一个命令
-
-it : 给当前进入的容器创建一个标准输入、输出终端(利用键盘的一种录入 / 控制台的一种输入,实现一种交互),这里是允许我们与容器交互
-
mn :要进入的容器的名称
-
bash:进入容器后执行的命令模式,bash是一个linux终端交互命令
例如我们之前学习的很多Shell命令,如cd、rm、mv等,这些Shell命令其实都是bash命令当中的一部分
通过上面的命令,一旦进入容器内部,就可以修改文件了。容器的内部会有自己的一套文件系统,看起来跟Linux的文件目录一样,但其实它是一个阉割版的,这里只有nginx它自己需要的。
二、进入nginx的HTML所在目录 /usr/share/nginx/html
之前我们讲过,容器的内部会有自己的一套文件系统。
如下图,使用ls查看当前根目录下的文件,可以看见容器内部会模拟一个独立的Linux文件系统,看起来如同一个linux服务器一样,但其实它是一个阉割版的系统,这里只有Nginx运行自己需要的。
而且可以发现这个服务器的名字和容器的ID是完全一样的:
nginx的环境、配置、运行文件全部都在这个文件系统中,包括我们要修改的html文件。
接下来我们就要去找Nginx在哪个目录,只有Nginx镜像的作者才知道它在创建镜像的过程中,他指定的是哪个安装目录。
查看DockerHub网站中的nginx页面,可以知道nginx的html目录位置在/usr/share/nginx/html
我们执行命令,进入该目录:
cd /usr/share/nginx/html
查看目录下文件:index.html就是我们需要修改的首页
三、修改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,即可看到结果:
四、验证
使用 exit
退出容器
使用 docker stop 容器名称
停掉该容器。然后再使用 docker ps
查看运行中的容器。 docker ps
默认只能查看运行中的容器。使用-a参数查看所有容器。
使用 docker start 容器名称
重新启动容器。
使用 docker rm 容器名称
删除该容器。此时会报错:不能删除运行中的容器
方法一:需要先停止,然后再删除。
方法二:查看帮助文档,-f 强制删除运行中的容器
此时发现,已经完全删除。
PS:在容器里修改文件是不推荐的:
1、不方便。通过刚才的案例我们可以发现,我们进行修改的时候连命令都没有,太麻烦了!
2、在容器里做的修改其实是没有记录的,就是任何人都不知道,包括你自己。你现在可能知道,但你随着时间的推移,过了几个月,你之前修改过什么,还有影响吗?
而且如果你改的东西多了,就更容易忘掉了,将来我们又创建了一个容器,我让你给我改成跟这个一样,你还会改吗?
所以我们并不推荐在容器内修改。