antony@notes:~/container$ cat "改裝-Alpine-Container.md"
改裝 Alpine ( Container )
改裝 Alpine ( Container )
登入這台continer後,直接跳出問題,5秒內沒猜對數字的話,帳號凍結、container 作廢
bigred@alp:~/wulin$ docker run --name aa -it ncue/alpine sh
# 先創建一台alpine的container
Unable to find image 'ncue/alpine:latest' locally
latest: Pulling from ncue/alpine
a0d0a0d46f8b: Pull complete
b3aa9bb698fd: Pull complete
Digest: sha256:1ad35e31b372f2c982b7e9d19dfb7c9f2f0baaa7c7348ec09e501e4e81847f04
Status: Downloaded newer image for ncue/alpine:latest/ # echo $PATH
# 查看環境變數。
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/binPATH主要是告訴linux說,等下我要run的命令,在這幾個目錄做尋找。
PATH環境變數是所有作業系統,Windows也好、Mac也好和IBM大型主機也好,當然包括linux,裡面存放的是一堆目錄區的名字,每當我們在作業系統打一個命令,他就會到這幾個目錄裡面去做尋找,例如:下面的
which ping
/usr/local/sbin我們目前使用的container裡面實際上不存在這個目錄。
/ # which ping
/bin/ping我們run
ping這個命令,他是存放在/bin這個目錄區裡面。
/ # apk add nano
# 新增nano這個檔案
fetch https://dl-cdn.alpinelinux.org/alpine/v3.14/main/x86_64/APKINDEX.tar.gz
fetch https://dl-cdn.alpinelinux.org/alpine/v3.14/community/x86_64/APKINDEX.tar.gz
(1/4) Installing libmagic (5.40-r1)
(2/4) Installing ncurses-terminfo-base (6.2_p20210612-r0)
(3/4) Installing ncurses-libs (6.2_p20210612-r0)
(4/4) Installing nano (5.7-r2)
Executing busybox-1.33.1-r3.trigger
OK: 16 MiB in 23 packages/ # nano /usr/local/sbin/ping- 提問:現在要寫的這個程式
ping,為甚麼要寫在/usr/local/sbin目錄裡面? - 今天只要把自己寫的
ping程式,寫在/usr/local/sbin,我們的程式一定第一個執行,也就是說以後在這個Linux作業系統裡面,我們只要打ping,他一定第一個被執行,因為它的目錄區是PATH環境變數裡面的第一個,他一定第一個被執行,所以系統的排在最後一名就沒人理啦。
/ # mkdir /usr/local/sbin
/ # nano /usr/local/sbin/ping
/ # cat /usr/local/sbin/ping
#!/bin/sh #我們的程式是由sh貝殼程式執行。
read -t 20 -p '192.168.30.127/26 ,network id is? ' ans
# -t 20 代表等待20秒,20秒後如果沒打資料,ans會是空的
if [ "$ans" = "192.168.30.64" ]
then
rm `which $0` # $0是程式本身,如果這個條件式成立,代表系統可以去run原先的ping。
else
rm `which sh` # 老師是 which busybox,直接把busybox刪掉
echo 'gg'
fi測試改裝完的alpine
$ chmod +x /usr/local/sbin/ping- 先給程式執行權限。
$ exit- 離開container。
$ docker start aa- 把aa啟動
$ docker exec -it aa sh- 下面是docker exec的補充
- https://www.runoob.com/docker/docker-exec-command.html
- / # ping 8.8.8.8 192.168.30.127/26 ,network id is? 192.168.30.64
- / # ping 8.8.8.8

改裝 alpine 2 (使用 ping curl 指令後,問 network id,打不出來的話,nc ifconfig route ip ping curl 不可使用)
/ # nano /usr/local/bin/sh #(一樣把程式寫在/bin這個目錄區裡面。)
#!/bin/sh
echo 'you have 10 second to answer the question'
read -t 10 -p '1632457 byte = ?M (請用無條件捨去法算到小數點第1位)' ans
if [ "$ans" = "1.6" ]
then
rm `which $0`
sh
else
echo "gg"
rm `which busybox`
fi這個程式做完上面的動作後,只能用docker commit燒成光碟,無法用Dockerfile。