1. 程式人生 > 其它 >2021-1-3 day01-markdown練習

2021-1-3 day01-markdown練習

技術標籤:Dockerdockerlinux

Dockerfile

基本結構

  • Dockerfile 是一個文字格式的配置檔案,使用者可以使用 Dockerfile 快速建立自定義映象。
  • Dockerfile 由一行行命令語句組成,並且支援以 # 開頭的註釋行。
  • Dockerfile分為四部分:
    • 基礎映象資訊
    • 維護者資訊
    • 映象操作指令
    • 容器啟動時預設要執行的指令
//示例
#第一行必須指定基於的基礎映象
FROM centos

#維護人的資訊
LABEL MAINTAINER="CWT <[email protected]>"

#安裝httpd軟體包
RUN yum -y update  && \
    yum -y install httpd

#開啟80埠
EXPOSE 80

#複製網站首頁檔案至映象中web站點下
ADD index.html /var/www/html/index.html

#複製該指令碼至映象中,並修改其許可權
ADD httpd.sh /httpd.sh
RUN chmod 775 /httpd.sh

#當啟動容器時預設要執行的動作
CMD ["/httpd.sh"]

常用指令

  • 指令的一般格式為INSTRUCTION arguments,指令包括:
    • FROM
    • LABEL MAINTAINER
    • RUN
    • CMD
    • EXPOSE
    • ENV
    • ADD
    • COPY
    • ENTRYPOINT
    • VOLUME
    • USER
    • WORKDIR
    • ONBUILD

FROM

  • 第一條指令必須為FROM指令。並且,如果在同一個Dockerfile中建立多個映象時,可以使用多個FROM指令(每個映象一次)。
//語法格式:FROM <image>或FROM <imagge>:<tag>

LABEL MAINTAINER

//語法格式: MAINTAINER <name email_address>,指定維護者資訊

RUN

  • RUN指令將對映象執行跟隨的命令
//RUN指令的語法格式有兩種:

shell格式:(預設用/bin/sh -c來執行)
RUN <命令列命令>
# <命令列命令> 等同於,在終端操作的 shell 命令。

exec格式:
RUN ["可執行檔案", "引數1", "引數2"]
# 例如:
# RUN ["./test.php", "dev", "offline"] 等價於 RUN ./test.php dev offline

注意: 每執行一條RUN指令,映象新增新的一層,並提交,所以過多無意義的層,會造成映象膨脹過大。所以當命令較長時可以使用 \ 來換行


CMD

  • 指定啟動容器時預設執行的命令,即:如果docker run沒有指定任何的執行命令或者dockerfile裡面也沒有ENTRYPOINT,那麼就會使用執行CMD指定的預設的命令
  • 每個 Dockerfile 只能有一條 CMD 命令。如指定了多條,只有最後一條被執行
  • 如果使用者啟動容器時指定了執行的命令,如:docker run xxx /bin/bash,則/bin/bash 會覆蓋 CMD 指定的命令
//語法格式:
CMD ["executable","param1","param2"]使用exec執行,推薦方式
CMD command param1 param2在/bin/sh中執行,提供給需要互動的應用
CMD ["param1","param2"]提供給ENTRYPOINT的預設引數

建立映象

  • 編寫完成Dockerfile後,可以通過docker build命令來建立映象。
  • 基本的格式為docker build [選項] 路徑,該命令將讀取指定路徑下(包括子目錄)的Dockerfile,並將該路徑下所有內容傳送給Docker服務端,由服務端來建立映象。因此一般建議放置Dockerfile的目錄為空目錄。
  • 另外,可以通過 .dockerignore 檔案(每一行新增一條匹配模式)來讓Docker忽略路徑下的目錄和檔案。
  • 要指定映象的標籤資訊,可以通過-t選項。

案例

  • 通過dockerfile製作Nginx映象
[[email protected] ~]# mkdir -p /dockerfile/nginx
[[email protected] ~]# cd /dockerfile/nginx
[[email protected] nginx]# vim Dockerfile
FROM alpine
LABEL MAINTAINER="CWT <[email protected]>"
ADD repositories /etc/apk/repositories
RUN apk add --no-cache nginx && \
    echo "pid  /run/nginx/nginx.pid;" >> /etc/nginx/nginx.conf && \
    echo "daemon off;" >> /etc/nginx/nginx.conf && \
    mkdir /run/nginx
CMD ["nginx"]

[[email protected] nginx]# vim repositories
https://mirrors.ustc.edu.cn/alpine/v3.12/main/
https://mirrors.ustc.edu.cn/alpine/v3.12/community/

[[email protected] nginx]# docker build -t nginx:1.0 .
Sending build context to Docker daemon  3.072kB
Step 1/5 : FROM alpine
 ---> 389fef711851
Step 2/5 : LABEL MAINTAINER="CWT <[email protected]>"
 ---> Running in 616c88e77a88
Removing intermediate container 616c88e77a88
....

[[email protected] nginx]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED         SIZE
nginx        1.0       11f1cbbb5955   6 minutes ago   6.99MB
busybox      latest    a77dce18d0ec   12 days ago     1.24MB
alpine       latest    389fef711851   3 weeks ago     5.58MB

[[email protected] nginx]# docker run -d -p 80:80 11

[[email protected] nginx]# docker container ls
CONTAINER ID   IMAGE     COMMAND     CREATED          STATUS          PORTS                NAMES
45c0bb345627   11        "nginx"     5 minutes ago    Up 5 minutes    0.0.0.0:80->80/tcp   cool_zhukovsky

[[email protected] nginx]# curl 192.168.86.129				#預設配置會返回nginx的404頁面錯誤,標明服務已正常
<html>
<head><title>404 Not Found</title></head>
<body>
<center><h1>404 Not Found</h1></center>
<hr><center>nginx</center>
</body>
</html>