Docker修改容器文件的几种方法

点击蓝字 关注咱们node


 

前言:Docker容器一旦建立后对容器内文件配置和参数进行修改没有宿主机那么方便,本文提供了几种常见的容器内文件的修改方式,在使用过程当中能够根据状况灵活选择。python




 1 nginx

进入容器内修改web


容器建立docker

根据nginx镜像建立容器vim

[root@k8s-node2 ~]# docker run -itd -p 80:80 --name=nginx01 nginx:latest8be63cc8acf6dc466ab4bf722e92de425a27ec522eb2884c17a27c1f29e57553

修改文件
ruby

容器建立完成后咱们须要对nginx.conf配置进行修改,直接进入容器进行修改bash

[root@k8s-node2 ~]# docker psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES8be63cc8acf6        nginx:latest        "/docker-entrypoin..."   4 minutes ago       Up 4 minutes        0.0.0.0:80->80/tcp       nginx01[root@k8s-node2 ~]# docker exec -it 8be63cc8acf6 bashroot@8be63cc8acf6:/# cd /etc/nginx/root@8be63cc8acf6:/etc/nginx# lsconf.d fastcgi_params koi-utf koi-win mime.types modules nginx.conf scgi_params uwsgi_params win-utfroot@8be63cc8acf6:/etc/nginx# vim nginx.conf bash: vim: command not found

能够看到咱们使用vim命令修改的时候,提示vim命令没有找到,由于docker镜像在构建的时候,为了减小层级,遵循精简的原则,体积越小容器启动会越快,因此不少组件没有安装。
微信

安装vim命令app

可使用yum -y install vim或者apt-get install vim命令安装

root@8be63cc8acf6:/etc/nginx# apt-get install vimReading package lists... DoneBuilding dependency tree Reading state information... DoneE: Unable to locate package vim
root@8be63cc8acf6:/etc/nginx# apt-get install vimReading package lists... DoneBuilding dependency tree Reading state information... DoneThe following additional packages will be installed: libgpm2 vim-common vim-runtime xxdSuggested packages: gpm ctags vim-doc vim-scriptsThe following NEW packages will be installed: libgpm2 vim vim-common vim-runtime xxd0 upgraded, 5 newly installed, 0 to remove and 0 not upgraded.Need to get 7425 kB of archives.After this operation, 33.8 MB of additional disk space will be used.Do you want to continue? [Y/n] y....

当出现上面提示时,须要先apt-get update获取到最新的软件包,等更新完毕之后再敲命令:apt-get install vim命令便可

而后你就能够直接使用vim编辑nginx.conf配置文件了


 2

docker cp方式

Linux上可使用cp命令进行文件复制和备份,docker也可使用cp命令在宿主机和docker容器件进行文件的复制

命令格式docker cp 容器ID或名称:容器目录 物理机目录docker cp 物理机目录 容器ID或名称:容器目录
举例,如图当容器内没有vim命令的时候,咱们能够将容器内文件复制到物理机,修改后再复制回容器的方式,支持双向复制。
[root@k8s-node2 ~]# docker psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES8be63cc8acf6 nginx:latest "/docker-entrypoin..." About an hour ago Up About an hour 0.0.0.0:80->80/tcp nginx01fcd01514c5cc training/webapp "python app.py" 9 days ago Up 9 days 0.0.0.0:5000->5000/tcp cranky_darwin[root@k8s-node2 ~]# docker cp 8be63cc8acf6:/etc/nginx/nginx.conf /root[root@k8s-node2 ~]# lsanaconda-ks.cfg docker initial-setup-ks.cfg nginx.conf


 3

卷映射方式


Docker提供了数据持久化的方式,让docker内数据管理更加便利,容器建立的时候作好目录映射或者文件映射,直接修改物理机文件,容器内的文件会相应变化,这种方式的好处就是即便容器被删除了,物理机上的数据仍然不会丢失。


卷映射这种方式至关于,将物理机/etc/nginx/nginx.conf配置文件映射到容器内路径的nginx.conf,当时你也能够直接映射目录到容器内的目录。

[root@k8s-node2 nginx]# docker run -itd -p 8080:80 -v /etc/nginx/nginx.conf:/etc/nginx/nginx.conf --name=webtest nginx:latestd805df368a6f140de2f92384e2f53c1c503fe42a4d983363eb0fc44de54afb73[root@k8s-node2 nginx]# [root@k8s-node2 nginx]# docker psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMESd805df368a6f nginx:latest "/docker-entrypoin..." 22 seconds ago Up 21 seconds 0.0.0.0:8080->80/tcp webtest

如上经过命令-v建立容器,将宿主机nginx.conf文件映射到容器内部nginx服务/etc/nginx/目录下。

说明:

  • -v 本地目录:容器目录。挂载主机的本地目录:目录到容器的目录,本地目录的路径必须是绝对路径

  • 容器的路径若是不存在会自动建立


当咱们须要修改容器内的nginx.conf配置文件时,直接修改宿主机/etc/nginx/nginx.conf配置便可,如图,咱们在宿主机插入hello数据,进入容器内部检查,容器内数据也发生了变化,是否是很方便。

[root@k8s-node2 nginx]# echo hello >>nginx.conf [root@k8s-node2 nginx]# cat nginx.conf | grep hellohello
[root@k8s-node2 nginx]# docker psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMESd805df368a6f        nginx:latest        "/docker-entrypoin..."   14 minutes ago      Up 14 minutes       0.0.0.0:8080->80/tcp     webtest[root@k8s-node2 nginx]# docker exec -it d805df368a6f bashroot@d805df368a6f:/# cd /etc/nginx/root@d805df368a6f:/etc/nginx# cat nginx.conf | grep hellohello



往期精选

June  2020

文字:原创  

扫码关注咱们


微信号 : 等风来

公众号:运维之美

点个在看  你最好看

我知道你

在看

写留言






本文分享自微信公众号 - 运维之美(ywzm8976)。
若有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一块儿分享。

相关文章
相关标签/搜索