docker鏡像管理和dockerfile詳解(8)

docker鏡像加速html

docker-io
先到 https://cr.console.aliyun.com/ 註冊一下,登陸成功後,在控制檯,看左側,有一個加速器按鈕,點開找到本身的專屬加速連接,個人是 https://olxmv577.mirror.aliyuncs.com (hotlight2010 https://45colej5.mirror.aliyuncs.com 個人) 而後vi /etc/sysconfig/docker 最下面增長一行: other_args="--registry-mirror=https://olxmv577.mirror.aliyuncs.com" #centos6用這個 other_args="--registry-mirror=http://db411c61.m.daocloud.io" #centos7用這個 而後就是重啓一下docker就ok了,測試發現速度槓槓的。

docker1.13
1.方法1

在 daocloud.io 免費註冊一個用戶。
賬號:xgmxgmxm 密碼:xxxxxxx(與郵箱密碼同樣) 郵箱:xgmxgmxm@163.compython

 
  

登陸後,點擊頂部菜單「加速器」
copy 「加速器」命令並在 host 中執行(你的命令可能跟個人會稍有不一樣)。
curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://db411c61.m.daocloud.io  #執行這個
該腳本能夠將 --registry-mirror 加入到你的 Docker 配置文件 /etc/docker/daemon.json 中。適用於 Ubuntu14.0四、Debian、CentOS6 、CentOS七、Fedora、Arch Linux、openSUSE Leap 42.1,其餘版本可能有細微不一樣mysql

2.方法2 linux

/etc/sysconfig/docker
更改OPTIONS的內容設置爲:
OPTIONS='--selinux-enabled=false --insecure-registry gcr.io'nginx

OPTIONS='--selinux-enabled=false --insecure-registry daocloud.io'git

 

 

docker鏡像經常使用命令sql

docker images  //查看本地都有哪些鏡像
docker tag centos aming123:123456(tag名) // 建立鏡像 基於centos鏡像
docker search (image-name)   //從docker倉庫搜索docker鏡像後面是關鍵詞
docker rmi centos  //用來刪除指定鏡像
docker pull centos  //下載鏡像
docker commit -m "install httpd" -a "Aming" 2c74d574293f aming/centos  #建立鏡像基於容器-m 描述 -a 做者 docker-id 鏡像名 docker export container_id > file.tar  // 導出容器能夠遷移到其餘機器上須要導入
cat centos-5-x86.tar.gz |docker import - centos-5-x86 #本地模塊導入 cat file.tar |docker import - aming_test   //這樣會生成aming_test的鏡像
 docker history a6c10b1a3c7c #查看dockerfile建立的鏡像的執行過程。 a6c10b1a3c7c是鏡像Id

 鏡像下載地址docker

鏡像下載地址 https://hub.docker.com/u/kubeguide/
https://hub.daocloud.io
https://hub.docker.com/
https://dev.aliyun.com/search.html
https://hub.tenxcloud.com/search?q=jimmy&source=tenxcloud #時速雲

 dockerfile建立鏡像shell

Dockerfile 分爲四部分: 基礎鏡像信息、維護者信息、鏡像操做指令、容器啓動時執行命令。 Dockerfile語法 1. FROM 格式 FROM 或者 FROM : 好比 FROM centos FROM centos:latest 2. MAINTAINER 格式 MAINTAIN 好比 MAINTAINER aming aming@aminglinux.com 3. RUN 格式爲 RUN   或者 RUN ["executable", "param1", "param2"] 好比 RUN yum install httpd RUN ["/bin/bash", "-c", "echo hello"] 4. CMD 三種格式: CMD ["executable", "param1", "param2"] CMD command param1 param2 CMD ["param1", "param2"] RUN和CMD看起來挺像,可是CMD用來指定容器啓動時用到的命令,只能有一條。好比 CMD ["/bin/bash", "/usr/local/nginx/sbin/nginx", "-c", "/usr/local/nginx/conf/nginx.conf"] 5. EXPOSE 格式爲 EXPOSE [...] 好比 EXPOSE 22 80 8443 這個用來指定要映射出去的端口,好比容器內部咱們啓動了sshd和nginx,因此咱們須要把22和80端口暴漏出去。這個須要配合-P(大寫)來工做,也就是說在啓動容器時,須要加上-P,讓它自動分配。若是想指定具體的端口,也可使用-p(小寫)來指定。 6. ENV 格式 ENV 好比 ENV PATH /usr/local/mysql/bin:$PATH 它主要是爲後續的RUN指令提供一個環境變量,咱們也能夠定義一些自定義的變量 ENV MYSQL_version 5.6
例子:
   ENV MY_VERSION 1.3
   RUN apt-get install -y mypackage=$MY_VERSION
7. ADD 格式 add 
將本地的一個文件或目錄拷貝到容器的某個目錄裏。 其中src爲Dockerfile所在目錄的相對路徑,它也能夠是一個url。好比
ADD /local/nginx/conf /   [若是 src 是歸檔文件(tar, zip, tgz, xz 等),文件會被自動解壓到 dest]
8. COPY  格式同add
COPY src dest 使用方法和add同樣,不一樣的是,它不支持url
須要注意: src路徑是以Dockerfile爲相對路徑的 dest 目錄不存在會被建立,可是/aaa這樣的目錄是建立不了的。/home/aaa 這是能夠被建立的
9. ENTRYPOINT 格式相似CMD 表示容器啓動時要執行的命令,它和CMD很像,也是隻有一條生效,若是寫多個只有最後一條有效。和CMD不一樣是: CMD 是能夠被 docker run 指令覆蓋的,而ENTRYPOINT不能覆蓋。好比,容器名字爲aming CMD [「/bin/echo」, 「test 」] 而咱們啓動容器的命令是 docker run aming 這樣會輸出 test 假如啓動容器的命令是 docker run -it aming /bin/bash 什麼都不會輸出 ENTRYPOINT不會被覆蓋,並且會比CMD或者docker run指定的命令要靠前執行 ENTRYPOINT ["echo", "test"] docker run -it aming 123 則會輸入 test 123 ,這至關於要執行命令 echo test 123

10.WORKDIR
爲後面的 RUN, CMD, ENTRYPOINT, ADD 或 COPY 指令設置鏡像中的當前工做目錄。
若是 WORKDIR 不存在,Docker 會自動爲咱們建立。
例子:
  WORKDIR /data

11.VOLUME /var/lib/mysql
至關於 docker run -tid -v /var/lib/mysql #數據存在host 容器刪掉不影響數據。 的做用與  等效 Dockerfile 示例:(搭建nginx鏡像) 先下載nginx的配置文件 wget http:
//www.apelearn.com/study_v2/.nginx_conf vim Dockerfile //內容以下 ############################################################ # Dockerfile to build Nginx Installed Containers # Based on CentOS ############################################################ # Set the base image to CentOS FROM centos # File Author / Maintainer MAINTAINER aming aming@aminglinux.com # Install necessary tools RUN yum install -y pcre-devel wget net-tools gcc RUN yum install -y zlib zlib-devel make RUN yum install -y openssl-devel # Install Nginx ADD http://nginx.org/download/nginx-1.8.0.tar.gz . RUN tar zxvf nginx-1.8.0.tar.gz RUN mkdir -p /usr/local/nginx RUN cd nginx-1.8.0 && ./configure --prefix=/usr/local/nginx && make && make install RUN rm -fv /usr/local/nginx/conf/nginx.conf COPY .nginx_conf /usr/local/nginx/conf/nginx.conf # Expose ports EXPOSE 80 # Set the default command to execute # when creating a new container CMD /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf && tail -f #有cmd命令的 docker run -tid xgm_mysql ,須要加-ti參數才能啓動 建立鏡像: docker build -t centos_nginx .
VOLUME-v

   若是執行 docker build 時沒有指定 tag,會使用默認值 latest。其效果至關於:json

  docker build -t ubuntu-with-vi:latest .

 docker images 能夠看到咱們新建的鏡像 #啓動鏡像和服務注意: docker run -tid d32f /bin/bash -c "/usr/local/nginx/sbin/nginx && tail -f" 像啓動nginx. 由於nginx是後臺的服務。docker默認認爲沒有啓動,因此docker會自殺掉,致使容器啓動不起來。

 RUN、CMD 和 ENTRYPOINT

 

簡單的說: 1.RUN 執行命令並建立新的鏡像層,RUN 常常用於安裝軟件包。 2.CMD 設置容器啓動後默認執行的命令及其參數,但 CMD 可以被 docker run 後面跟的命令行參數替換。 3.ENTRYPOINT 配置容器啓動時運行的命令。 下面咱們詳細分析。 Shell 和 Exec 格式 咱們可用兩種方式指定 RUN、CMD 和 ENTRYPOINT 要運行的命令:Shell 格式和 Exec 格式,兩者在使用上有細微的區別。 Shell 格式 <instruction> <command> 例如: RUN apt-get install python3 CMD echo "Hello world" ENTRYPOINT echo "Hello world" 當指令執行時,shell 格式底層會調用 /bin/sh -c <command> 。 例以下面的 Dockerfile 片斷: ENV name Cloud Man ENTRYPOINT echo "Hello, $name" 執行 docker run <image> 將輸出: Hello, Cloud Man 注意環境變量 name 已經被值 Cloud Man 替換。 下面來看 Exec 格式。 Exec 格式 <instruction> ["executable", "param1", "param2", ...] 例如: RUN ["apt-get", "install", "python3"] CMD ["/bin/echo", "Hello world"] ENTRYPOINT ["/bin/echo", "Hello world"] 當指令執行時,會直接調用 <command>,不會被 shell 解析。 例以下面的 Dockerfile 片斷: ENV name Cloud Man ENTRYPOINT ["/bin/echo", "Hello, $name"] 運行容器將輸出: Hello, $name 注意環境變量「name」沒有被替換。 若是但願使用環境變量,照以下修改 ENV name Cloud Man ENTRYPOINT ["/bin/sh", "-c", "echo Hello, $name"] 運行容器將輸出: Hello, Cloud Man CMD 和 ENTRYPOINT 推薦使用 Exec 格式,由於指令可讀性更強,更容易理解。RUN 則兩種格式均可以。 RUN RUN 指令一般用於安裝應用和軟件包。 RUN 在當前鏡像的頂部執行命令,並經過建立新的鏡像層。Dockerfile 中經常包含多個 RUN 指令。 RUN 有兩種格式: 1. Shell 格式:RUN 2. Exec 格式:RUN ["executable", "param1", "param2"] 下面是使用 RUN 安裝多個包的例子: RUN apt-get update && apt-get install -y \ bzr \ cvs \ git \ mercurial \ subversion 注意:apt-get update 和 apt-get install 被放在一個 RUN 指令中執行,這樣可以保證每次安裝的是最新的包。若是 apt-get install 在單獨的 RUN 中執行,則會使用 apt-get update 建立的鏡像層,而這一層多是好久之前緩存的。 CMD CMD 指令容許用戶指定容器的默認執行的命令。 此命令會在容器啓動且 docker run 沒有指定其餘命令時運行。 1. 若是 docker run 指定了其餘命令,CMD 指定的默認命令將被忽略。 2. 若是 Dockerfile 中有多個 CMD 指令,只有最後一個 CMD 有效。 CMD 有三種格式: 1. Exec 格式:CMD ["executable","param1","param2"] 這是 CMD 的推薦格式。 2. CMD ["param1","param2"] 爲 ENTRYPOINT 提供額外的參數,此時 ENTRYPOINT 必須使用 Exec 格式。 3. Shell 格式:CMD command param1 param2 Exec 和 Shell 格式前面已經介紹過了。 第二種格式 CMD ["param1","param2"] 要與 Exec 格式 的 ENTRYPOINT 指令配合使用,其用途是爲 ENTRYPOINT 設置默認的參數。咱們將在後面討論 ENTRYPOINT 時舉例說明。 下面看看 CMD 是如何工做的。Dockerfile 片斷以下: CMD echo "Hello world" 運行容器 docker run -it [image] 將輸出: Hello world 但當後面加上一個命令,好比 docker run -it [image] /bin/bash,CMD 會被忽略掉,命令 bash 將被執行: root@10a32dc7d3d3:/# ENTRYPOINT ENTRYPOINT 指令可以讓容器以應用程序或者服務的形式運行。 ENTRYPOINT 看上去與 CMD 很像,它們均可以指定要執行的命令及其參數。不一樣的地方在於 ENTRYPOINT 不會被忽略,必定會被執行,即便運行 docker run 時指定了其餘命令。 ENTRYPOINT 有兩種格式: 1. Exec 格式:ENTRYPOINT ["executable", "param1", "param2"] 這是 ENTRYPOINT 的推薦格式。 2. Shell 格式:ENTRYPOINT command param1 param2 在爲 ENTRYPOINT 選擇格式時必須當心,由於這兩種格式的效果差異很大。 Exec 格式 ENTRYPOINT 的 Exec 格式用於設置要執行的命令及其參數,同時可經過 CMD 提供額外的參數。 ENTRYPOINT 中的參數始終會被使用,而 CMD 的額外參數能夠在容器啓動時動態替換掉。 好比下面的 Dockerfile 片斷: ENTRYPOINT ["/bin/echo", "Hello"] CMD ["world"] 當容器經過 docker run -it [image] 啓動時,輸出爲: Hello world 而若是經過 docker run -it [image] CloudMan 啓動,則輸出爲: Hello CloudMan Shell 格式 ENTRYPOINT 的 Shell 格式會忽略任何 CMD 或 docker run 提供的參數。 最佳實踐 1. 使用 RUN 指令安裝應用和軟件包,構建鏡像。 2. 若是 Docker 鏡像的用途是運行應用程序或服務,好比運行一個 MySQL,應該優先使用 Exec 格式的 ENTRYPOINT 指令。CMD 可爲 ENTRYPOINT 提供額外的默認參數,同時可利用 docker run 命令行替換默認參數。 3. 若是想爲容器設置默認的啓動命令,可以使用 CMD 指令。用戶可在 docker run 命令行中替換此默認命令。 到這裏,咱們已經具有編寫 Dockerfile 的能力了。若是你們還以爲沒把握,推薦一個快速掌握 Dockerfile 的方法:去 Docker Hub 上參考那些官方鏡像的 Dockerfile。
相關文章
相關標籤/搜索