1. 程式人生 > >Docker配置容器位置和小技巧

Docker配置容器位置和小技巧

Docker使用小技巧


  1. 清理全部停止的docker容器

    有時候我們會有很多已經停止的容器或者由於錯誤強制退出不能用的容器,那我們就需要刪除了,但是我們一個一個的rm刪除很麻煩,有多少容器就要rm多少次,我們可以根據docker ps -qa 查出所有容器的id,一次性全部刪除,不用擔心會刪除正在執行的容器,執行中的容器rm無法刪除,這樣我們就一次性把所有停止的容器刪除了

    # 只適用於Linux環境下
    docker rm $(docker ps -qa)
  2. 檢視映象中得環境變數

    當我們製作好一個映象或者獲取到一個映象之後如果我們想知道他的環境變數,我們首先想到的就是建立容器看看就知道了,其實不必,我們可以直接通過env檢視

    docker run nginx env

  3. Windows上和Linux的區別

    這兩種環境的區別主要原因還是docker的支援問題,我們都知道docker最開始是在Linux上發行的,依賴於Linux核心,但是Windows上沒有,那麼我們現在是怎麼用的呢,虛擬機器,如果是win10以下版本基本上裝的都是VirtualBox,win10的很多都會選擇桌面版的,使用的Hyper-V ,也是虛擬機器的一種。只有有了虛擬機器之後docker才能在windows上使用,到這裡我們應該知道兩種不同之處了

    在Linux上docker直接就在Linux系統上的,但是在windows上不同,windows系統上是虛擬機器,虛擬機器上才是docker

    Linux系統 << docker容器

    win系統 << 虛擬機器 << docker容器

    也就是這種原因,導致我們在使用的過程中有略微的不同,最常見的就是開埠的時候

    Linux系統:docker容器埠直接對映到Linux系統

    windows系統:docker容器埠對映到虛擬機器,再由虛擬機器對映到我們的windows

    注: 把我們虛擬機器中選擇網路的時候選擇網路地址轉換(NAT),這樣我們就不用考慮中間虛擬機器到windows這層的埠對映問題了

  4. 掛載

    在使用Docker的時候很多人都喜歡製作映象,把應用直接打包到映象中,直接啟動映象,一切OK,但是避免不了的是我們有時候會做一些細微的修改,特別是配置檔案或者是一些專案中微小的修改,這種時候我們還是要重新做映象嗎?答案是不需要的,沒有必要

    ​ 我們前端使用nginx映象部署,但是釋出之後發現有一點樣式需要微調,那麼我們是不是還需要重新制作一個映象呢,這樣我們會不會感覺很麻煩(至少我會感覺很麻煩),想想我們只需要把修改過的檔案把容器中的檔案覆蓋就行了,怎麼樣才能直接把修改過的檔案覆蓋容器中的檔案,兩種辦法:第一直接把檔案cp到容器中,這個過程我們還是要操作容器,怎麼才能不動容器呢?掛載 我們可以在啟動容器的時候直接把會在後面修改的東西掛載到宿主機上,這樣我們就不用動容器了,啟動的時候使用-v引數掛載宿主機檔案或目錄到容器

    docker run -d -p 80:80 -v /c/Users/SunArmy/Desktop/html:/usr/share/nginx/html nginx

我們隨便寫一個index.html裡面寫上welcome nginx

把這個檔案覆蓋/opt/docker/html/下的index.html

再訪問

重啟都不需要直接OK

為什麼不選擇直接cp到容器中

​ 有這樣一種情況,如果你需要修改的是配置檔案,這肯定是需要重啟的,但是在修改的時候不小心把配置檔案寫錯了,這個時候你的容器就起不來了,想要修改容器中的配置,那也做不到了(除非重新建立容器),換種做法,如果我們把配置檔案掛載在外面當你啟動不起來的時候你可以直接在宿主機上修改為正確配置重啟啟動即可,綜上,掛載的方式比cp到容器中的方式方便且安全

  1. jq工具

    最後介紹一個操作json的工具,這個是在檢視容器配置的時候用的,我們使用docker inspect ID檢視容器配置,往往會過濾出來一些我們關注的資訊,一般情況下我們會選擇docker inspect --format= 或者使用grep

    但是無論使用哪一種都沒有我們最熟悉的操作json的方式來過濾用著爽

    jq工具需要單獨安裝yum install jq

    使用jq過濾docker inspect 獲取地址

    docker inspect ac |jq -r .[0].NetworkSettings.IPAddress

    . 代表管道前面的輸出,之後的[0]就是陣列的第1個元素,後面的 . 就是類似於點出物件中的屬性一樣,跟我們平時使用json是一樣的,jq還能方便的格式化檢視json檔案,對於在命令列下檢視json檔案簡直是利器

  2. 修改Docker本地映象和容器的儲存位置

    很多人都是隻知道建立了容器,從來沒有關注過建立的容器在哪?本地映象在哪?

    但是,當你不得不關注的時候往往就是你的docker映象和容器把你的盤裝滿了

    檢視Docker映象和容器儲存的位置

    docker info |greo Docker

    預設位置就是:/var/lib/docker

    修改儲存位置的方法有兩種:

    一):通過建立軟連線,把/var/lib/docker 移動到其他地方,建立到這裡的軟連線

    # 停止docker
     service docker stop
    # 移動/var/lib/docker 到/usr/local/
     mv /var/lib/docker /usr/local/
    # 建立軟連線
     ln  -s /usr/local/docker /var/lib/docker
    # 啟動Docker
     service docker start

    這個時候我們已經修改了,但是檢視位置的時候看到的位置還是/var/lib/docker

    但是這是個連結,可以檢視大小發現是空的,真實的儲存位置已經成為了/usr/local/docker

    # 檢視/var/lib/docker目錄大小
     du -dh /var/lib/docker

    二):修改配置檔案

    預設配置檔案/etc/docker/daemon.json

    如果沒有的話就自己建立

    {
      "registry-mirrors": ["http://hub-mirror.c.163.com"],
      "graph":"/opt/docker"
    }

    直接修改 graph 的值為你的位置然後重啟,OK

    啟動

    service docker stop

    停止

    service docker start

    重啟

    service docker restart

    再檢視docker的儲存位置,已經修改成功