前面先針對這次會用到的 docker 基本操作做簡易說明,如果你對 docker 很熟的話這邊就可以跳過了 。
Docker 的基本指令可以參考 Docker Engine commands for Docker Images,這張圖將相關指令整理得相當清楚,這邊我就針對幾個這次比賽會用到個功能做說明即可。
從上圖我們可以觀察到幾個元件名稱
首先,先來練習拉一下 Images,這次拉的對象是 ubuntu:22.04,預設使用的 Docker Registry 為 dockerhub,建議可以去申請個帳號。相關資訊可以到 ubuntu 上面查看。然後這邊會利用工具 dive 來觀察一下 images 裡面的內容。
#顯示目前已經抓下來的 images 資訊
docker images ;
docker pull ubuntu:22.04 ;
docker images ;
wget https://github.com/wagoodman/dive/releases/download/v0.10.0/dive_0.10.0_linux_amd64.deb ;
sudo dpkg -i dive_0.10.0_linux_amd64.deb ;
dive ubuntu:22.04 ;
#顯示出所有容器(執行中、結束)
docker ps -a ;
#接收不到使用者資訊,也沒啟動虛擬終端機,直接結束
docker run ubuntu:22.04 [啟動指令] ;
docker ps -a ;
docker run -it ubuntu:22.04 [啟動指令] ;
exit ;
#顯示很多結束的容器
docker ps -a ;
#砍掉所有的容器
docker rm $(docker ps -qa);
#給予名稱方便指定執行對象
docker run -it --rm --name ithome ubuntu:22.04 ;
# docker exec -it ithome [啟動指令] ;
docker exec -it ithome bash ;
#找不到指令
ifconfig ;
apt update && apt install net-tools -y ;
ifconfig ;
exit ;
docker run -it --rm --name ithome ubuntu:22.04 ;
ifconfig ;
FROM ubuntu:22.04
RUN apt update && apt install wget curl vim net-tools iproute2 procps fdisk kmod ncat dsniff tcpdump iputils-ping telnet python3 -y
docker build --tag [dockerhub帳號]/[image名稱]:[版本號] --no-cache . ;
#可以看到編譯好的 image 檔案
docker images ;
docker run -it --rm [dockerhub帳號]/[image名稱]:[版本號] ;
exit ;
#假如想把 image push 到 dockerhub,必須先登入
docker login ;
#推上去後大家都抓的到了
docker push [dockerhub帳號]/[image名稱]:[版本號] ;
docker run -it --rm aeifkz/my-ubuntu:v1.0 ;
#在容器內開啟 8080 port
python3 -m "http.server" 8080 ;
#切到宿主機,無法連通
curl http://localhost:8080 ;
# docker run -p [host_port]:[container_port]
docker run -it --rm -p 8888:8080 aeifkz/my-ubuntu:v1.0 ;
#在容器內開啟 8080 port ;
python3 -m "http.server" 8080 ;
#切到宿主機,通了!!!!
curl http://localhost:8888 ;
# docker run -v [host_path]:[container_path]
docker run -it --rm -v /tmp:/mnt aeifkz/my-ubuntu:v1.0 ;
touch /mnt/oh_my_god ;
#切到宿主機,會發現這個檔案的 owner 是 root,這個以後會在說明
ls /tmp/oh_my_god -al;
docker rm [container 名稱] ;
docker rmi [image 名稱] ;
差不多就到這邊了,假如是第一次用 docker 的話可能會覺得指令很多,但這部分我已經過濾出必要會使用到的部分,假如看完有興趣的話可以再參考其他鐵人賽系列做更深入的研究。
今日總結 :