1. 程式人生 > 實用技巧 >製作docker映象

製作docker映象

編寫Dockerfile

# 使用哪個映象為基礎
FROM nginx

# 安裝apt-get後清理垃圾檔案
RUN apt-get update && apt-get install -y curl && rm -rf /var/lib/apt/lists/*

# 複製檔案
COPY index.html /usr/share/nginx/html/index.html

# 宣告這個容器對外使用的埠
EXPOSE 80 443

# 開啟健康檢查
HEALTHCHECK --interval=5s --timeout=3s \
  CMD curl -fs http://localhost/ || exit 1

# 新增作者資訊(鍵值對)
LABEL maintainer="liuyalong"
LABEL documentation="https://baidu.com"

編寫忽略檔案.dockerignore

build的時候,會忽略的檔案,不會copy到映象中

.git/
node_modules/
*.bak
test*/
test*

執行

  • 使用docker build -t mynginx:v1 .建立映象

    • -t name:tag 給這個映象打個標籤xxx
    • . 最後有個點,指定映象的上下文為當前的目錄路徑,相當於指定了根目錄路徑,在Dockerfile中的路徑就以此路徑為根路徑
  • 使用docker images 檢視所有映象

  • 使用docker inspect imageidxxxx可以檢視到映象的詳細資訊

  • 使用docker run -itd -p 80:80 --name mynginx mynginx:v1

    用剛才做的映象啟動一個容器,並命名為mynginx,埠對映為80

  • 使用docker container ls 檢視所有啟動的容器

  • 使用docker rm xxx 刪除容器

  • 使用docker rmi xxx 刪除映象,必須先停止容器才可以刪除

注意事項

  • docker build 預設找名字為Dockerfile的檔案,忽略檔案找.dockerignore
  • FROM的映象選最小的
  • Dockerfile中每一個指令都會建立一層,在其上執行這些命令,執行結束後,commit這一層的修改
  • RUN執行多個命令用&&連線,應保證層級最少,把不經常變化的層級放到最前面,這樣可以最大程度使用映象快取,因為當某一層改變後,之後的幾層就需要重新在這層的基礎上構建.
  • EXPOSE 只是宣告使用哪些埠,具體使用不受這個影響,通過-p命令指定內外埠
  • RUN命令是在打包成映象的時候就執行了
  • CMDENTRYPOINT 區別可以看這個文章