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源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。

相關文章
相關標籤/搜索