Docker 筆記 連環境也一起打包工具

whale.jpg



將環境打包成image並直接運行,由於打包的關係,所以互不影響




  • image是打包好的映象檔

  • container是映像檔被執行後產稱的一堆檔案



基本套路: 寫好Dockerfile然後build,他就會照你的Dockerfile建立出image檔




  • docker run 執行 from imageI

  • docker exec 執行 from container

  • docker logs <container ID> 查log

  • --rm 當container變成Exited時,自動移除container

  • -d 背景執行

  • docker rm -f 強制移除container,可省略stop

  • -p port映射

  • -e key=value 設定到環境變數

  • $pwd 神奇變數: 當下的目錄

  • -w 進入container後預設在哪個目錄下執行指令



volume 倉庫



原本container玩自己的,但是你指定他的一些玩具只能在倉庫(volume)中玩,於是你就可以透過存取倉庫,在container以外的地方備份或存取資料了



參考




  • -v [/host]:[/container][param] 將volume掛載到container上(將/host目錄 Mapping到 /container目錄),param可以設定讀寫權限

  • --volumes-from [container] 直接使用某個container現在的volume



Network 網路



讓很多container加入倒network裡面,就可以利用container name來互相呼叫與使用 (像是-link)




  • $docker netowrk create my-net 建立network

  • $docker run --network my-net 加入倒my-net的network



Dockerfile




  • $docker build . 拆解Dockerfile並一一執行

  • -t=[image]:[version] 指定tag,使用的image與產出image的版本號

  • --no-cache 不快取

  • 檔案.dockerignore 像是.gitignore,用來避開在build的時候不要的檔案

  • FROM 從哪個image為基底開始

  • WORKDIR $path 切換到某個目錄

  • COPY $host $container 複製本機某個目錄到容器的某個目錄

  • RUN ... 執行指令(會產生commit,所以通常是建置過程中會使用到的指令)

  • CMD ... 執行指令(不會產生commit,所以通常為建置完後的預設指令),後面的指令會覆蓋前面的 docker run $image [CMD] 此CMD就會覆蓋

  • ENTRYPOINT 與CMD一樣的功能,但是與CMD分開,執行順序在CMD之前,一樣會有後面指令覆蓋前面的特性



Multi-stage Build 利用多個 FROM 搭配AS來區別生產與開發環境



留言

這個網誌中的熱門文章

成人剪舌繫帶聽過嗎?我剪了!!

Scp - ssh 的遠端檔案傳輸指令

睡覺使你更有效率