dockerfile參數

Docker 鏡像使用node

當運行容器時,使用的鏡像若是在本地中不存在,docker就會自動從 docker鏡像倉庫中下載,默認是從Docker Hub公共鏡像源下載。linux

使用docker images來列出本地主機上的鏡像。nginx

[root@test01 ~]# docker imagesweb

REPOSITORY                    TAG                 IMAGE ID            CREATED             SIZEdocker

centos7.3-jdk                 latest              63667b92c4d8        11 minutes ago      1.537 GBshell

192.168.20.199:5000/centos7   latest              b12c7cf69db2        30 hours ago        1.161 GB數據庫

各個選項說明:npm

REPOSTITORY:表示鏡像的倉庫源json

TAG:鏡像的標籤ubuntu

IMAGE ID:鏡像ID

CREATED:鏡像建立時間

SIZE:鏡像大小

同一倉庫源能夠有多個 TAG,表明這個倉庫源的不一樣的版本,如ubuntu倉庫源裏,有15.十、14.04等多個不一樣的版本,咱們使用 REPOSTITORY:TAG 來定義不一樣的鏡像。

因此,咱們若是要使用版本爲15.10的ubuntu系統鏡像來運行容器時,命令以下:

runoob@runoob:~$ docker run -t -i ubuntu:15.10 /bin/bash

root@d77ccb2e5cca:/#

獲取一個新的鏡像

當咱們在本地主機上使用一個不存在的鏡像時 Docker 就會自動下載這個鏡像。

若是咱們想預先下載這個鏡像,咱們能夠使用 docker pull 命令來下載它。

Crunoob@runoob:~$ docker pull ubuntu:13.10

下載完成後,咱們能夠直接使用這個鏡像來運行容器。

查找鏡像

咱們能夠從 Docker Hub 網站來搜索鏡像,Docker Hub 網址爲: https://hub.docker.com/

咱們也能夠使用 docker search 命令來搜索鏡像。好比咱們須要一個httpd的鏡像來做爲咱們的web服務。咱們能夠經過 docker search 命令搜索 httpd 來尋找適合咱們的鏡像。

NAME:鏡像倉庫源的名稱

DESCRIPTION:鏡像的描述

OFFICIAL:是否docker官方發佈

拖取鏡像

咱們決定使用上圖中的httpd 官方版本的鏡像,使用命令 docker pull 來下載鏡像。

runoob@runoob:~$ docker pull 

建立鏡像

當咱們從docker鏡像倉庫中下載的鏡像不能知足咱們的需求時,咱們能夠經過如下兩種方式對鏡像進行更改。

1.從已經建立的容器中更新鏡像,而且提交這個鏡像

2.使用 Dockerfile 指令來建立一個新的鏡像

更新鏡像

更新鏡像以前,咱們須要使用鏡像來建立一個容器。

runoob@runoob:~$ docker run --i ubuntu:15.10 /bin/bash

root@e218edb10161:/#

在運行的容器內使用 apt-get update 命令進行更新。

在完成操做以後,輸入 exit命令來退出這個容器。

此時ID爲e218edb10161的容器,是按咱們的需求更改的容器。咱們能夠經過命令 docker commit來提交容器副本。

runoob@runoob:~$ docker commit -m="has update" -a="runoob" e218edb10161 runoob/ubuntu:v2

sha256:70bf1840fd7c0d2d8ef0a42a817eb29f854c1af8f7c59fc03ac7bdee9545aff8

各個參數說明:

-m:提交的描述信息

-a:指定鏡像做者

e218edb10161:容器ID

runoob/ubuntu:v2:指定要建立的目標鏡像名

咱們能夠使用 docker images 命令來查看咱們的新鏡像 runoob/ubuntu:v2

使用咱們的新鏡像 runoob/ubuntu 來啓動一個容器

runoob@runoob:~$ docker run -t -i runoob/ubuntu:v2 /bin/bash

root@1a9fbdeb5da3:/#


構建鏡像

咱們使用命令 docker build , 從零開始來建立一個新的鏡像。

咱們須要建立一個 dockerfile 文件文件名必須是dockerfile),其中包含一組指令來告訴 Docker 如何構建咱們的鏡像。

[root@test01 ~]# cat dockerfile

FROM    10.10.7.30:5000/jdk-uat01

COPY    im   /opt/app/im

WORKDIR /opt/app/im

ADD     node-v6.10.2-linux-x64.tar /usr/local/

RUN     mv /usr/local/node-v6.10.2-linux-x64  /usr/local/node

ENV     PATH  /usr/local/node/bin:$PATH

RUN     npm install -g cnpm --registry=https://registry.npm.taobao.org \

        && cnpm install -g pm2 \

        && cd /opt/app/im \

        && cnpm install

EXPOSE  3000

CMD     ["pm2-docker","start","runBizpowerIm.json"]

若是要 <command> 沒有shell 狀況下運行,則必須將該命令表示爲JSON數組,並提供可執行文件的完整路徑 此數組形式是首選格式CMD任何其餘參數必須在數組中單獨表示爲字符串:

FROM ubuntu

CMD ["/usr/bin/wc","--help"]

每個指令都會在鏡像上建立一個新的層,每個指令的前綴都必須是大寫的。

FROM:指定使用哪一個鏡像源,第一條指令必須爲FROM指令,而且,若是在同一個Dockerfile中建立多個鏡像時,能夠使用多個FROM指令(每一個鏡像一次)。

MAINTAINET:指定維護者的信息

RUN:指令告訴docker 在鏡像內執行命令,安裝了什麼。每條指令將在當前鏡像基礎上執行,並提交爲新的鏡像。(能夠用「\」換行)

ADD:複製指定的<src>到容器的<dest>中,<src>能夠是Dockerfile所在的目錄的一個相對路徑;能夠是URL,也能夠是tar.gz(自動解壓,並自動刪除源文件包

COPY:複製本地主機的 <src> ( 爲 Dockerfile 所在目錄的相對路徑)到容器中的 <dest> (當使用本地目錄爲源目錄時,推薦使用 COPY)

CMD:指定啓動容器時執行的命令,每一個Dockerfile只能有一條CMD指令,若是指定了多條指令,則最後一條執行。(會被啓動時指定的命令覆蓋)

格式:CMD ["","",""]

EXPOSE:告訴Docker服務端暴露端口,在容器啓動時須要經過 -p 作端口映射

ENV:指定環境變量,會被RUN指令使用,並在容器運行時保存

ENTRYPOINT:配置容器啓動後執行的命令,而且不可被 docker run 提供的參數覆蓋。(每一個 Dockerfile 中只能有一個 ENTRYPOINT ,當指定多個時,只有最後一個起效)

格式:ENTRYPOINT ["","",""]

VOLUME: 是在container中建立一個掛載點,咱們能夠將本地的一個文件卷掛載在container中的/data下面,這樣咱們在container的data目錄下的操做就和在本地卷的操做是同樣的。

USER:指定運行容器時的用戶名或 UID,後續的 RUN 也會使用指定用戶。

WORKDIR:爲後續的 RUN 、 CMD 、 ENTRYPOINT 指令配置工做目錄。(能夠使用多個 WORKDIR 指令,後續命令若是參數是相對路徑, 則會基於以前命令指定的路徑)

ONBUILD:配置當所建立的鏡像做爲其它新建立鏡像的基礎鏡像時,所執行的操做指令

而後,咱們使用 dockerfile 文件,經過 docker build 命令來構建一個鏡像。

[root@test01 ~]# docker build -t  centos7.3-jdk  .(. 表示當前路徑)

參數說明:

  • -t :指定要建立的目標鏡像名

  • . :dockerfile 文件所在目錄,能夠指定dockerfile的絕對路徑


dockerfile 安裝nginx的時候報錯:

緣由是應該使用一個RUN來執行更多的命令來減小層數,由於每一個instruction(指令)都會生成一個新的層。

https://stackoverflow.com/questions/44451696/bin-sh-1-configure-not-found-dockerfile

構建鏡像時,有時候提示我

Rpmdb checksum is invalid: dCDPT(pkg checksums): dracut.x86_64 0:033-502.el7_4.1 - u

解決辦法以下:

是rpm數據庫損壞須要重建。所以須要在 「yum install …」 前使用 「rpm –rebuilddb」 重建數據庫。好比:

RUN rpm --rebuilddb && yum install -y sudo ...

在個人環境中發現有時候若是有多條 「RUN yum install -y …」 指令,須要在每條以前都加上 「rpm –rebuilddb」。

咱們能夠使用新的鏡像來建立容器

runoob@runoob:~$ docker run -t -i runoob/centos:6.7 /bin/bash

設置鏡像標籤

咱們能夠使用 docker tag 命令,爲鏡像添加一個新的標籤。

runoob@runoob:~$ docker tag 860c279d2fec runoob/centos:dev

docker tag 鏡像ID,這裏是 860c279d2fec ,用戶名稱、鏡像源名(repository name)和新的標籤名(tag)。

使用 docker images 命令能夠看到,ID爲860c279d2fec的鏡像多一個標籤。

刪除本地鏡像

docker rmi  `docker images -q`

相關文章
相關標籤/搜索