2021-1-3 day01-markdown練習
阿新 • • 發佈:2021-01-09
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>