docker - Dockerfile常用指令

FROM

指定 base images

FROM centos:7.4.1708

MAINTAINER

設置鏡像的作者

MAINTAINER [email protected]

我們設置了鏡像的作者後,可以通過 docker inspect 命令查看鏡像的信息,裏面包含有作者信息。

[root@localhost dockerfile-instruction]# docker inspect c89334650819
[
    {
       
        "DockerVersion": "18.03.1-ce",
        "Author": "[email protected]",
        ...忽略其它信息
        "Metadata": {
            "LastTagTime": "2018-11-12T22:05:51.772312473+08:00"
        }
    }
]

COPY

複製本地主機的 src到容器中的 dest ,src必須在上下文中,一般情況下,將本地主機的一個包含Dockerfile的目錄中的所有內容作爲上下文,如docker/install。當使用本地目錄爲源目錄時,推薦使用 COPY 。

下面的/root/dockerfile-instruction是build context

COPY /root/dockerfile-instruction/install /app/install

ADD

與 COPY 類似,不同的是,如果src的文件是identity, gzip, bzip2,xz,tar.gz,tgz等類型的文件將被添加tar -x命令,進行解壓

 

EXPOSE

向外界暴露端口。這樣就可以通過容器的ip地址+port訪問到容器

在這裏,我們不得不提docker run命令中的 -p 參數。docker run中的-p參數是對容器中的端口映射到host端口中,這樣我們既可以通過容器的ip地址+port訪問,也可以通過host的IP+端口訪問到容器中的服務。

舉個例子:

有一個helloworld的springboot服務,寫了一個dockerfile文件,暴露了8080端口

FROM openjdk:8u181-jdk-alpine
VOLUME /app/springboot-docker
ADD springboot-docker-1.0.jar /app/springboot-docker/app.jar
EXPOSE 8080
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app/springboot-docker/app.jar"]

當我們通過dockerfile構建鏡像並通過命令運行後

docker run -d --name springboot-docker springboot-docker

我們可以通過以下命令獲取到容器的IP地址

docker inspect springboot-docker

這時,我們可以通過下面的命令訪問到服務,172.17.0.2是該容器的IP

curl 172.17.0.2:8080/home

 

CMD

容器啓動時運行指定的命令,CMD指令支持的格式

  • CMD ["executable","param1","param2"] 。推薦格式 
  • CMD ["param1","param2"] 。爲ENTRYPOINT指令提供參數,此時的 ENTRYPOINT 指令需要使用 Exec 格式。其用途是爲ENTRYPOINT 指令設置默認的參數
  • CMD command param1 param2 。執行shell內部命令

每個Dockerfile最多只能有一條 CMD 命令。如果指定了多條命令,只有最後一條會被執行。如果用戶通過dcoker run命令啓動容器,將會覆蓋掉 CMD 指定的參數代替。

下面以格式(1)距離說明,格式(2)將在 ENTRYPOINT 指令中舉栗子。

Dockerfile如下,最後一行加入了CMD命令

FROM centos:7.4.1708
MAINTAINER [email protected]
CMD ["/bin/bash","-c","echo hello,docker"]

當我們運行該容器時,它會馬上運行最後的命令。

[root@localhost dockerfile-instruction]# docker run -it dockerfile-instruction
hello,docker

如果通過下面的命令運行docker,則CMD參數會被替代

[root@localhost dockerfile-instruction]# docker run -it dockerfile-instruction echo bye
bye

 

ENV

設置環境變量,它可作用的其它指令:

  • ADD
  • COPY
  • ENV
  • EXPOSE
  • FROM
  • LABEL
  • STOPSIGNAL
  • USER
  • VOLUME
  • WORKDIR

也就是說,在這些指令中,可以通過 ${ENV_VALUE}替換

WORKDIR

設置工作目錄,設置了工作目錄,它將會作用於該指令後面的RUNCMDENTRYPOINTCOPY , ADD 指令。

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章