Docker常用命令--鏡像


1、刪除鏡像image:
docker rmi -f name|imageId
$ docker rmi -f 7d9495d03763
$ docker rmi-fdocker-whale
 
2、將本地鏡像推送到hub.docker.com上
首先找到你要推送的iamge_id,可以通過  docker images查看全部鏡像
之后使用  docker tag 7d9495d03763 maryatdocker/docker-whale  會產生一個maryatdocker/docker-whale的鏡像
使用docker login 登陸到遠程hub.docker.com上,加上用戶驗證信息登陸
登陸成功之后 : docker push maryatdocker/docker-whale  將鏡像推送到服務器上
 
3、從服務器上拉取鏡像
首先刪除本地存在名字相同的鏡像
docker pull 鏡像名稱  拉取鏡像
docker run maryatdocker/docker-whale 下載並運行鏡像
 
4、查看鏡像:本地鏡像
查看本地所有鏡像  : docker images 
根據名稱查看某一個鏡像: docker images 鏡像名稱
查看鏡像的詳細信息: docker inspect jametur01/apche2:webserver
 
5、查找鏡像:從docker hub上查找鏡像
docker search 鏡像名稱
 
7、構建鏡像
前提: 登陸賬號在docker hub上
兩種方式:
1) docker commit 命令
     首先創建一個容器,並在容器中進行修改,最后在將修改提交為一個新鏡像
     創建一個容器: sudo docker run -t -i ubuntu /bin/bash 
     對容器進行修改: 如安裝apche
                    apt-get -ypp update
                    apt-get -y install apache2
     提交新修改的鏡像: sudo docker commit 容器Id 目標鏡像倉庫和鏡像名稱
          也可以增加其他詳細的信息: -m =A new customer images""  --author="James B"
2) docker build 和 Dockerfile文件(推薦使用)
     使用基於DSL語法的指令來構建一個Docker鏡像,之后使用docker build 命令基於Dockerfile中的指令構建一個新的鏡像
·    創建基本目錄:
          mkdir static_web  ===============該目錄為構建環境,docker中稱該目錄為上下文或是構建上下文
          cd static_web
          touch Dockerfile
     編寫Dockerfile文件:
              Dockerfile文件:
                    FROM ubuntu:14.04   ===========指定一個已經存在的鏡像當作基礎鏡像
                    MAINTAINER James Turnbull "james@example.com"  ===告訴鏡像的作者是誰
                    RUN apt-get update   =====RUN 運行你指定的命令,每條RUN都會創建一個新的鏡像層,執行成功提交鏡像層
                    RUN apt-get install -y nginx    ==========默認情況下RUN是在shell里使用/bin/sh -c執行,若是在不支持shell可以使用exec格式
                    exec: RUN ["apt-get","install","-y","nginx"]
                    RUN echo 'hi, i am in you container' \>/usr/share/nginx/html/index.html
                    EXPOSE 80                  =============指定應用程序使用的端口號,可以使用多個EXPOSE指令向外部公開多個端口號
          Dockerfile中的指令按照順序往下執行
               執行流程: Docker從基礎鏡像運行一個容器;執行每一條指令,對容器進行修改;執行類似docker commit的操作,提交一個新的鏡像層;docker再基於剛提交的鏡像運行一個新的容器;執行Dockfile中的下一條指令,直到所有指令都執行完畢
     構建新鏡像:
          cd static_web
          sudo docker build -t="jamtur01/static_web:v1" .
                   -t 為新鏡像指定倉庫和名稱,也可以制定標簽v1,若是沒有指定標簽,docker會自動為鏡像設置一個latest標簽
       構建鏡像粗壯乃構建緩存,若是想要去掉構建緩存需要添加參數: --no-cache,構建緩存的好處是可以實現簡單的Dockerfile模板
 
 
8、Dockerfile指令:
    。CMD :
          用於指定一個容器啟動時要運行的命令,類似於RUN,只不過RUN是在鏡像構建時要運行的命令,而CMD是在容器啟動時需要運行的命令,這和docker run啟動容器時指定要運行的參數非常相似:
          docker run -i -t jamtur01/statis_web /bin/true
          CMD ["/bin/true"], 也可以指定參數 CMD p["bin/bash","-1"]
      注: docker run中運行的命令會覆蓋Dockerfile的CMD中的命令
     。ENTRYPOINT:
          和CMD的命令用法相同,作用相似,區別是,ENTRYPOINT指令提供的命令不容易在啟動時被覆蓋。實際上,docker run 命令行中指定的任何參數都會被當作參數再次傳給ENTRYPOINT指令中指定的命令。如果確實需要覆蓋ENTRYPOINT命令,可以通過docker run --entrypiont標志覆蓋
            ENTRYPOINT ["/usr/sbin/nginx","-g","daemon off;"]
          可以通過CMD和ENTRYPOINT一起用的方式使鏡像既可以運行一個默認的命令,也可以通過docker run使指定可覆蓋的選項或是標志
               如:ENTRYPOINT ["/usr/sbin/nginx"]
                   CMD ["-h"]
 
     。WORKDIR:
          用來在從鏡像創建一個容器時,在容器內部設置一個工作目錄,ENTRYPOINT 或是CMD的命令會在該目錄下執行。
              WORKDIR /opt/webapp/ab
              RUN bundle install
              WORKDIR /opt/webapp
              ENTRYPOINT ["rackup"]
           docker run中使用 -w 覆蓋工作目錄
     。ENV :
          用來在鏡像構建過程中設置環境變量,
               ENV  RVM_PATH /home/rvm
     。USER :
          指定該鏡像一什么樣的用戶去運行
     。VOLUME :
          向基於鏡像創建的容器添加卷,一個卷是可以存在於一個或多個容器內的特定的目錄,這個目錄可以繞過聯合文件系統,並提供如下共享數據或是對數據進行持久化的功能。
               。卷可以在容器間共享和重用
               。一個容器可以不是必須和其他容器共享卷
               。對卷的修改是立時生效的
               。對卷的修改不會對更新鏡像產生影響
               。卷會一直存在直到沒有任何容器在使用它
          如: VOLUME ["/opt/project"] 將會為基於此鏡像創建的任何容器創建一個名為/opt/project的掛載點,
               VOLUME ["/opt/project","/data"]指定多個卷
     。ADD :
          用來將構建環境下的文件和目錄復制到鏡像中。形式:ASS fromWhere  towhere 。 目的地址若是末尾/,則是文件夾,無/則是文件。文件源也可是URL格式
          如: ADD software.lic /opt/application/software.lic
          ADD在處理本地歸檔文件時,如gzip,bzip2,xz為源文件,則會自動對其進行unpack
          ADD latest.tar.gz /var/ww/  =============會將文件解壓到/var/ww/目錄下,若是該文件夾下已經存在該文件,不會進行覆蓋操作
          注:ADD命令會使構建緩存失效,若是使用ADD向鏡像添加文件夾或是文件,那么后續的命令就不能用之前的緩存
     。COPY :
          COPY命令類似於ADD命令,不同的是COPY命令只關心在構建上下文中復制本地文件,而不會去做文件提取和解壓的共作。
          COPY  conf.d/ /etc/apche2/ ==>使conf.d文件夾下的內容復制到/etc/apche2/下
          文件源路徑必須是一個與當前構建環境相對的文件或是目錄,本地文件都放到和Dockerfile同一個目錄下。不能復制該目錄之外的任何文件,因為構建環境將會上傳到Docker守護進程,而復制是在Docker守護進程中進行的。任何位於構建環境之外的東西都是不可用的。COPY指令的目的文職則必須是容器內部的一個絕對路徑。
          任何由該命令創建的文件或是目錄的GID和UID的值都為0.
     。ONBUILD 
          為鏡像添加觸發器trigger 。當一個鏡像被用作其他鏡像的基礎鏡像時觸發器會被執行
          觸發器會在構建過程中插入新指令,我們可以認為這些指令是緊跟在FROM之后指定的,觸發器可以是任何構造指令。
               如: ONBUILD ADD . /app/src
                                   ONBUILD RUN cd /app/s& make
           可以用docker inspect命令查看 ONBUILD命令


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM