Docker 筆記(5)
阿新 • • 發佈:2021-07-21
Docker 筆記(5)
dockerfile 構建
USER / WORKDIR 指令
cd /data/ mkdir dockerfile cd dockerfile/ vi Dockerfile # 命令全大寫,引數小寫 FROM 7ing/nginx:curl # 源映象 USER nginx # 主程序使用者名稱 WORKDIR /usr/share/nginx/html # 工作目錄 # . 指的構建本目錄下的 [root@localhost docker]# docker build . -t 7ing/nginx:workdir Sending build context to Docker daemon 2.048 kB Step 1/3 : FROM 7ing/nginx:curl ---> b3e0205e14f5 Step 2/3 : USER nginx ---> Running in f978a2c43200 ---> b766fa7efdf6 Removing intermediate container f978a2c43200 Step 3/3 : WORKDIR /usr/share/nginx/html ---> d3cc110734f6 Removing intermediate container c2cdbb20531d Successfully built d3cc110734f6 [root@localhost docker]# docker run --rm -ti --name nginx123 7ing/nginx:workdir /bin/bash nginx@d9687da6f719:/usr/share/nginx/html$ whoami nginx nginx@d9687da6f719:/usr/share/nginx/html$ pwd /usr/share/nginx/html nginx@d9687da6f719:/usr/share/nginx/html$
ADD / EXPOSE 指令
[root@localhost docker]# vim Dockerfile FROM 7ing/nginx:curl ADD index.html /usr/share/nginx/html/index.html # 將本目錄下的html檔案拷貝到容器的某個地方 EXPOSE 80 [root@localhost docker]# docker build . -t 7ing/nginx:expose [root@localhost docker]# docker run --rm -it --name nginx234 -P 7ing/nginx:expose /bin/bash # -P 是隨機分配一個埠 root@77146d9c9362:/# whoami root # 預設使用者root root@77146d9c9362:/# pwd / # 預設目錄是根 root@77146d9c9362:/# nginx -g "daemon off"; [root@localhost html]# netstat -luntp Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp6 0 0 :::32768 :::* LISTEN 14604/docker-proxy-
RUN / ENV 指令
[root@localhost docker]# vim Dockerfile FROM centos:7 ENV ver 9.11.4 # 設定環境變數 RUN yum install bind-$VER -y # 在構建映象的時候,執行可執行命令 [root@localhost docker]# docker build . -t 7ing/nginx:env [root@localhost docker]# docker run -it --rm 7ing/nginx:env /bin/bash cat /etc/redhat-release CentOS Linux release 7.6.1810 (Core) printenv VER=9.11.4
CMD / ENTRYPOINT 指令
[root@localhost docker]# vim Dockerfile
FROM centos:7
RUN yum install httpd -y
CMD ["httpd","-D","FOREGROUND"]
[root@localhost docker]# docker build . -t 7ing/nginx:httpd
[root@localhost docker]# docker run -it --rm 7ing/nginx:env /bin/bash
# 進入網頁192.168.111.134:83 可以看到Apache啟動頁面
[root@localhost docker]# vim Dockerfile
FROM centos:7
ADD entrypoint.sh /entrypoint.sh
RUN yum install epel-release -q -y && yum install nginx -y
ENTRYPOINT /entrypoint/sh
[root@localhost docker]# vim entrypoint.sh
#!/bin/bash
/sbin/nginx -g "daemon off;"
# 一定要給執行許可權
[root@localhost docker]# chmod +x entrypoint.sh
[root@localhost docker]# docker build . -t 7ing/nginx:entry
[root@localhost docker]# docker run --rm -p 84:80 7ing/nginx:entry
[root@localhost html]# docker exec -ti heuristic_nightingale /bin/bash
[root@8b4aca3bb2f2 /]# cat /entrypoint.sh
#!/bin/bash
/sbin/nginx -g "daemon off;"
[root@8b4aca3bb2f2 /]# ls -l /entrypoint.sh
-rwxr-xr-x. 1 root root 41 Jul 21 07:42 /entrypoint.sh
在執行時可以指定新的命令來替代映象設定中的這個預設命令,比如,ubuntu
映象預設的 CMD
是 /bin/bash
,如果我們直接 docker run -it ubuntu
的話,會直接進入 bash
。我們也可以在執行時指定執行別的命令,如 docker run -it ubuntu cat /etc/os-release
。這就是用 cat /etc/os-release
命令替換了預設的 /bin/bash
命令了,輸出了系統版本資訊。
ENTRYPOINT
的目的和 CMD
一樣,都是在指定容器啟動程式及引數。ENTRYPOINT
在執行時也可以替代,不過比 CMD
要略顯繁瑣,需要通過 docker run
的引數 --entrypoint
來指定。
當指定了 ENTRYPOINT
後,CMD
的含義就發生了改變,不再是直接的執行其命令,而是將 CMD
的內容作為引數傳給 ENTRYPOINT
指令
綜合實驗
[root@localhost docker]# vim Dockerfile
FROM 7ing/nginx:curl
USER root
ENV WWW /usr/share/nginx/html
ENV CONF /etc/nginx/conf.d
RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime &&\
echo ' Asia/Shanghai' >/etc/timezone
WORKDIR $WWW
ADD index.html $WWW/index.html
ADD demo.od.com.conf $CONF/demo.od.com.conf
EXPOSE 80
CMD["nginx" ,"-g" , "daemon off;"]
[root@localhost docker]# vim demo.od.com.conf
server {
listen 80;
server_name demo.od.com;
root /usr/share/nginx/html;
}
[root@localhost docker]# docker build . -t 7ing/nginx:baidu
[root@localhost docker]# docker run --rm -p 80:80 7ing/nginx:baidu
# 開啟執行,輸入drivers,開啟/etc/hosts,新增
192.168.111.134 demo.od.com
# 開啟demo.od.com 即可
Docker的網路模型
NAT
None
Host
聯合網路
docker run -ti --rm --name lhwl2 --net=container:原容器ID 7ing/nginx:curl啟動容器 /bin/bash
共享網路名稱空間