Docker === --- ###### tags: `Docker` 記載著學習過程中,關於 docker 的筆記 --- [TOC] # My docker repos https://hub.docker.com/repository/docker/ljptw/ubuntu_for_pwner 這裡有 ubuntu16, 18, 19, 20 我自己建立的拿來打 pwn 的 image 可以下喔 ouo (預計還會加 ubuntu14) (下載的套件列在連結中) # 下載 [照著官方手冊的步驟下載](https://docs.docker.com/v17.12/install/linux/docker-ce/ubuntu/#set-up-the-repository) # 概念 所有不懂在幹嘛的指令只要後面加 `--help` 就能知道在幹嘛 ![](https://miro.medium.com/max/750/1*joAfS_1sBhCOJzJuaAzzeg.png) `sudo usermod -aG docker [USERNAME]` 將自己使用者加入到 docker group,如此一來就有用跟 docker 有關指令的權限 `docker image ls` 可以看到你 local 端所有的 image `docker container ls -a` 可以看到你 local 端所有的 container 的狀態 每個 container 都基於某個 image 而創出來 `docker pull [IMAGE](:[TAG])` 可以從公開 Docker Hub 上抓下某個 image (有點像 github clone) 後面 TAG 可以再細選版號 `docker container start [CONTAINER]` 將特定 CONTAINER run 起來 `docker container attach [CONTAINER]` 進入特定 CONTAINER `docker run --name [CONTAINER] -it [IMAGE]` 從特定 IMAGE create 出 CONTAINER,並且 start 此 CONTAINER it 參數為創立交互式 tty,讓你能在 CONTAINER 裡面下指令 離開 CONTAINER 而不 stop 它的方式是按下 Ctrl+p 再 Ctrl+q # Ubuntu 直接以我架設自訂的 Ubuntu 為例子,image 來源為 https://hub.docker.com/_/ubuntu ## 下載 Image `docker pull ubuntu:18.04` ## 創造 Container `docker run --name ubuntu18 -itd ubuntu:18.04` ## 開 shell `docker exec -it ubuntu18 /bin/bash` 這邊小小的提一下 `exec` 跟 `attach` 的差別 `exec` 是 fork 新的 process `attach` 是黏上舊有的 所以連下兩個 `attach` 的結果就是兩個 terminal 的 output input 會一模一樣 ## 設定 這 image 乾淨到連 ping, ip 都沒有,先來下載一下常用的東西 ``` apt-get udpate apt-get install iputils-ping iproute2 vim curl wget git ``` ## 推上 hub 首先先登入 Docker hub,創造一個新 repos ![](https://i.imgur.com/fzsbXLo.png) 再來 commit,創造新的 image `docker commit -m "Initialization: Install some common tools" -a "LJP" ubuntu18 ljptw/ubuntu:18.04` 可以用 `docker image ls -a` 看看,的確產生 `ljptw/ubuntu:18.04` Image 也可以用 `docker history ljptw/ubuntu:18.04` 看 commit 紀錄 再來就是 push,但要先登入 Docker Hub `docker login` push 囉 `docker push ljptw/ubuntu:18.04` 之後 pull 下來就能用了 讚讚 # 指令 ## docker exec ```shell man docker exec ``` 對 running container 執行指令 ## docker ps ```shell man docker ps ``` 查看所有 Container ## 應用 ### 進入 container 要用到指令 docker exec 和 docker ps 先以 docker ps 查看要進入的 container 的 id 再下指令 ```shell docker exec -it 79e768bd215c /bin/bash ``` 其中的 `79e768bd215c` 需替換為 container id # Reference 好文: https://medium.com/@sh.tsang/docker-tutorial-4-exporting-container-and-saving-image-c3a7d792cfb6 圖片來源: https://medium.com/@sh.tsang/docker-tutorial-4-exporting-container-and-saving-image-c3a7d792cfb6