1. 程式人生 > >Dockerfile用法和引數詳解

Dockerfile用法和引數詳解

Dockerfile建立映象 – Dockerfile格式,對應的引數

  1. FROM //指定基於哪個基礎映象
    格式 FROM 或者 FROM :, 比如
    FROM centos
    FROM centos:latest
    1. MAINTAINER //指定作者資訊
      格式 MAINTAIN ,比如
      MAINTAINER aming [email protected]
    2. RUN //映象操作指令
      格式為 RUN 或者 RUN [“executable”, “param1”, “param2”],比如
      RUN yum install httpd
      RUN [“/bin/bash”, “-c”, “echo hello”]
  2. 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”]
    1. EXPOSE
      格式為 EXPOSE […] , 比如
      EXPOSE 22 80 8443
      這個用來指定要映射出去的埠,比如容器內部我們啟動了sshd和nginx,所以我們需要把22和80埠暴漏出去。這個需要配合-P(大寫)來工作,也就是說在啟動容器時,需要加上-P,讓它自動分配。如果想指定具體的埠,也可以使用-p(小寫)來指定。
    2. ENV
      格式 ENV , 比如
      ENV PATH /usr/local/mysql/bin:$PATH
      它主要是為後續的RUN指令提供一個環境變數,我們也可以定義一些自定義的變數
      ENV MYSQL_version 5.6
    3. ADD 格式 add
      將本地的一個檔案或目錄拷貝到容器的某個目錄裡。 其中src為Dockerfile所在目錄的相對路徑,它也可以是一個url。比如
      ADD

Dockerfile建立映象 – Dockerfile示例(安裝nginx)

mkdir /root/docker && cd /root/docker

在當地路徑建立一個測試檔案:
[

[email protected] docker]# vim index.html

<h1>This docker test page!</h1>

vim Dockerfile (Dockerfile檔名為官方指定,不可更改名字)

FROM centos

#維護者資訊
MAINTAINER liaochao [email protected].com

#相關的操作

RUN rpm -ivh https://mirrors.aliyun.com/centos/7.5.1804/extras/x86_64/Packages/epel-release-7-9.noarch.rpm
RUN yum install nginx -y

##新增檔案,預設跟dockerfile同級目錄
ADD index.html /usr/share/nginx/html/index.html

#修改引數
RUN echo "daemon off;" >> /etc/nginx/nginx.conf

#設定開放埠
EXPOSE 80
#執行命令
CMD ["nginx"]

此時我們寫完了開始進行bulid

 docker build -t chao/nginx:v1 /root/docker/

耐心等待執行完成,

[root@es1 docker]# docker images
REPOSITORY                                      TAG                 IMAGE ID            CREATED              SIZE
chao/nginx                                      v1                  664da2f4b97d        About a minute ago   417MB

我們建立一個容器進行測試

[root@es1 docker]# docker run -itd --rm --name test chao/nginx:v1
4a91a0081fdae992cba2279573c86ac7d01f895d4240f3c2ff4cb16d7db4c92c
[root@es1 docker]# curl 172.17.0.2
<h1>This docker test page!</h1>

此時可以看見我們定義的測試檔案正常打印出來。