paas架構之docker——鏡像管理

1. 鏡像管理

1.1. 列出鏡像

  Sudo docker imageshtml

   

1.2. 查看鏡像

  Sudo docker images xxxxmysql

  

1.3. 拉取鏡像

  Sudo docker pull ubuntunginx

   

1.4. 查找鏡像

  Sudo docker search mysqlgit

  

1.5. 刪除鏡像

  sudo docker rmi xxxxx (force)github

  

1.6. 構建鏡像

1.6.1. Docker commit

  不推薦,建議使用docker build+ docker fileweb

1.6.2. Docker Build + Dockerfile

  建立static_web目錄sql

  建立Dockerfile配置文件:docker

  

  Build:ubuntu

  

1.6.3. 從git倉庫構建鏡像

  1)  git建立dockerfile緩存

   輸入文件內容:

  # vesion: 0.0.1

  FROM ubuntu:14.04

  MAINTAINER Jay Zhan "zhanchenjin.2008@163.com"

  RUN apt-get install -y nginx

  RUN echo 'Hi, I am in you container' > /usr/share/nginx/html/index.html

  EXPOSE 8090

  

 

  2)  獲取github中dockerfile文件的raw連接

  https://raw.githubusercontent.com/duruo850/docker/master/test.dockerfile

  簡寫

  https://rawgit.com/duruo850/docker/master/test.dockerfile

 

  3)  使用該連接build

  sudo docker build -t="jay/web_from_git" \

  https://rawgit.com/duruo850/docker/master/test.dockerfile

  

  

 

  4)  查看鏡像

   

  5) 緩存鏡像

  Docker的每一次構建都會緩存一個本地的鏡像,因此從哪一步出錯,就進入前鏡像輸入該命令便可知道什麼問題;

  若是構建過程都是同樣的,將採用同一個鏡像

   

  若是不想使用緩存,好比apt-get update命令,將不會刷新apt包緩存,這時候須要不使用緩存

  sudo docker build –no-cache -t="jay/web_from_git" .

 

  6)  從鏡像啓動容器

  sudo docker run -i -t -p 10080:80 --name static_web2 jay/static_web nginx -g "daemon off;"

  使用宿主機的10080端口映射虛擬機的80端口

 

  查看宿主機的10080端口效果:

  

  

  和咱們nginx的index.html的輸出內容一致

 

  7)  將鏡像推送到docker hub

  報錯:unauthorized: access to the requested resource is not authorized

  解決:須要使用docker login先登錄

   

  只能上傳到docker hub帳戶對應的倉庫(docker hub 帳戶/xxxxxx),不能夠上傳到root倉庫(xxxxx),

   

  

  

   去docker hub帳戶查看倉庫:

  

1.6.4. 自動構建

  源代碼託管於github

  Github代碼有變化時,dockerhub自動獲取Dockerfile,自動構建docker容器

  Github

  Github代碼的根目錄須要提供Dockerfile配置文件

  

  DockerHub

  

  

  

  

  

  

 

1.6.5. Dockerfile指令

  • CMD命令

  CMD指令指定一個容器啓動時要運行的命令。和RUN命令有些相似,只是RUN命令是構建是要運行的命令。RUN命令能夠覆蓋CMD命令

 

  新建dockerfile:

   

  構建鏡像:

   

  啓動鏡像:

   

  RUN命令覆蓋:

  Ls命令覆蓋了/bin/bash命令

  • ENTRYPOINT命令

  ENTRYPOINT和CMD命令惟一區別就是不會被RUN命令覆蓋

  RUN的命令行的參數會被當作參數再次傳遞給ENTRYPOINT命令

  RUN可使用—entrypoint標誌覆蓋該命令

  • WORKDIR命令

  建立鏡像構建新容器時,在容器內部設置一個工做目錄,ENTRYPOINT和/或者CMD命令都會在此目錄下執行

  RUN可使用-W標誌覆蓋該命令

  • ENV命令

  在鏡像構建過程當中設置環境變量

  環境變量會持久保存到鏡像構建的任何容器中

  RUN可使用-e標誌來傳遞環境變量,這些變量將只會在運行時有效

  • USER命令

  用來指定該鏡像的運行用戶

  RUN可使用-u標誌來覆蓋該變量

  若是不指定用戶組,默認用戶組爲root

  • VOLUME命令

  用來向基於鏡像構建的容器添加捲,數據共享功能

  • ADD命令

  用來將構建環境下的文件和目錄複製到鏡像中,

  能夠添加構建環境的任何文件

  會將一些歸檔文件(gzip,tar,xz,bzip2)等解開,而後再放到目標目錄

  若是目錄位置不存在的話,Docker將會爲咱們建立這個全路徑,

  ADD命令使得構建緩存變得無效

  • COPY命令

  與ADD命令相似,不過COPY不會像ADD那樣去提取和解開歸檔文件

  只能複製構建目錄下的文件,和Dockerfile處於同一個目錄

  若是目錄位置不存在的話,Docker將會爲咱們建立這個全路徑,

  • ONBUILD命令

  爲鏡像添加觸發器,當一個鏡像被當作其餘鏡像的基礎鏡像時,該鏡像的觸發器將會執行

 

  爲了防止遞歸調用,這些命令不能用在ONBUILD中:FROM, ONBUILD, MAINTAINER等

相關文章
相關標籤/搜索