# Docker 筆記(陸續增加中) ###### tags: `Docker` 我有先把os user加入docker群組裡面,故以下相關指令,我沒有使用到super user權限 ```javascript= $ sudo usermod -aG docker $USER ``` ## docker背後的機制:namespace、cgroup ## build出由Canonical官方維護的ubuntu docker image 1. github連結:https://github.com/tianon/docker-brew-ubuntu-core/tree/1b67caf335fdf475610a883e53c686ce3b48d7a5 2. 按下Code按鈕後,按Download ZIP  3. 到放置該zip file所在的位置後,解壓縮 ```javascript= # unzip docker-brew-ubuntu-core-1b67caf335fdf475610a883e53c686ce3b48d7a5.zip ``` 4. 到該檔案夾裡面 ```javascript= # cd docker-brew-ubuntu-core-1b67caf335fdf475610a883e53c686ce3b48d7a5 ``` 5. 該資料夾有數個Folder,trusty、xenial、bionic以及focal分別代表ubuntu14.04、16.04、18.04以及20.04,這次目標是build ubuntu 20.04 docker image,所以到focal這個資料夾 ```javascript= # cd focal ``` 6. build docker image,相關資訊可以看該目錄底下的Dockerfile ```javascript= $ sudo docker build -t yhwu_ubuntu20.04 . --no-cache //-t(tag,指的就是yhwu_ubuntu20.04) --no-cache意義還不清楚 ``` 使用這個docker image生成docker後,記得先apt update ## build出由CentOS Project官方維護的CentOS docker image 1. CentOS7 github連結:https://github.com/CentOS/sig-cloud-instance-images/tree/b2d195220e1c5b181427c3172829c23ab9cd27eb CentOS8 github連結:https://github.com/CentOS/sig-cloud-instance-images/tree/ccd17799397027acf9ee6d660e75b8fce4c852e8 2. 按下Code按鈕後,按Download ZIP  3. 到放置該zip file所在的位置後,解壓縮 ```javascript= # unzip sig-cloud-instance-images-b2d195220e1c5b181427c3172829c23ab9cd27eb.zip //centos7 # unzip sig-cloud-instance-images-ccd17799397027acf9ee6d660e75b8fce4c852e8.zip //centos8 ``` 4. 到該檔案夾裡面 ```javascript= # cd ./sig-cloud-instance-images-b2d195220e1c5b181427c3172829c23ab9cd27eb/docker //centos7 # cd ./sig-cloud-instance-images-ccd17799397027acf9ee6d660e75b8fce4c852e8/docker //centos8 ``` 5. build docker image,相關資訊可以看該目錄底下的Dockerfile ```javascript= $ sudo docker build -t docker_image_name . --no-cache //-t(tag,指的就是docker_image_name) --no-cache意義還不清楚 ``` ## docker network docker有四個模式 1. bridge network 2. host network 直接使用host的網路,與外界網路相通 3. overlay network 4. maclvan network Maclvan允許使用者能將實體網卡設定多個mac address,並將這些address分配給container使用,使其在network上顯示為physical address而非virtual address ## 指令總覽 1. docker環境資訊:info、version 2. 容器(container)生命週期管理:create、exec、kill、pause、restart、rm、run、start、stop、unpause 3. 容器(container)運行維護操作、容器資源管理: attach、export、inspect、port、ps、rename、stats、top、wait、cp、diff、update volume、network 4. 映像檔(image)倉庫(管理)指令:login、logout、pull、push、search 5. 映像檔(image)管理:build、images、import、load、rmi、save、tag、commit 6. 系統紀錄檔資訊:events、history、logs ### docker search:到docker hub尋找docker image ```javascript= # docker search 關鍵字 ``` ex: ```javascript= # docker search ubuntu 18.04 ``` ### docker pull:下載docker image ```javascript= # docker pull docker名稱 ``` ex: ```javascript= # docker pull nvcr.io/nvidia/tensorrt:19.12-py3 ``` ### docker images:查看已有的docker images ```javascript= # docker images ``` ### docker run:以docker image建立docker container後並執行 ```javascript= # docker run docker_image_name ``` ex: ```javascript= # docker run nvcr.io/nvidia/tensorflow:19.06-py3 ``` docker run一些參數(持續增加中): * -–gpus '“device=0”‘代表給這個container編號0的顯卡,’“device=1”'代表給這個container編號1的顯卡,all代表給這個container全部的顯卡,其他的可以自行google關鍵字:docker run –gpu * -c or --cpus 0.5是代表供給該container最高0.5個核心CPU的效能 * -m or --memory代表給該container最高65536MB(64GB)的效能 * -i(interactive),即使未連接STDIN,也應使其保持打開狀態。(必打) * -t(tty),分配一個假的tty界面。(必打) * --rm是指該container停止執行後,會自動刪除 * -v是指host端與container端,若要進行檔案傳輸,所使用的路徑,$(pwd):/work意思即是host端目前所在的路徑與container內/work的路徑資料是相通的 * -w(workspace),進docker之後所到達的路徑 最後會像是: ```javascript= # docker run --gpus all –-cpus 0.5 -–memory 65536MB -it --rm -v $(pwd):/work -w /workspace/tensorrt/data/resnet50/ nvcr.io/nvidia/tensorrt:19.12-py3 ``` * --network,設定其所要在的network interface 會像是: ```javascript= # docker run -it --network yhwu_bridge --name 2004_net_yhwuBridge_stu -v $(pwd):/mnt yhwu_ubuntu20.04 ``` ### docker stop:停止一個正在執行中的container ```javascript= # docker stop containerID ``` ### docker start:處於終止狀態的container,想要讓其重新啟動 ```javascript= # docker start containerID ``` ### docker attach:進入一個正在運作的container ```javascript= # docker attach containerID ``` ### 離開container並且關閉container ```javascript= # exit //這樣container會停止運行 ``` Ctrl+C也會使container停止運行 ### 離開container但維持container運作 Ctrl+P再按Ctrl+Q ### 查看所有的container(包含以停止運作的) ```javascript= # docker ps -aq ``` ### docker rm:刪除已停止運行的container ```javascript= # docker rm containerID ``` 這邊請注意,執行中的container是不能直接被刪除的,要先將其container終止之後才能被刪除 ### docker rmi:刪除docker image ```javascript= # docker rmi imageID ``` ### docker commit:將已經修改過內容的docker container儲存成docker image ```javascript= # docker commit containerID/containerNAME ``` ### docker tag:為docker image取名字 ```javascript= # docker tag imageID Name_You_Want_To_Give_It ``` ### docker save:將docker image儲存成.tar ```javascript= # docker save -o filename.tar imageID/imageName ``` ### docker load:將docker .tar檔案變成docker image ```javascript= # docker load -i docker_file.tar ``` ### docker stats:查詢並監控docker container占用硬體狀態 ```javascript= # docker stats ``` ### docker export ### docker network:網路相關指令 創建docker net interface ```javascript= # docker network create interface_name_you_give_it ``` 查詢docker net interface ```javascript= # docker network ls ``` 查詢docker net interface更詳細資訊 ```javascript= # docker network inspect interface_name ``` ## things to do list docker 網路四種模式(bridge, host, container, none) ## source: 1. https://github.com/tianon/docker-brew-ubuntu-core/tree/1b67caf335fdf475610a883e53c686ce3b48d7a5 2. https://hub.docker.com/r/amd64/ubuntu/ 3. https://hackmd.io/@kZ_Gc4xdSXW-gxf45fbQUQ/S1NEI-_DU 4. https://docs.docker.com/config/containers/resource_constraints/ 5. https://www.chainnews.com/zh-hant/articles/728049525008.htm 6. https://colobu.com/2018/05/15/Stop-and-remove-all-docker-containers-and-images/ 7. https://blog.wu-boy.com/2019/10/three-ways-to-setup-docker-user-and-group/ 8. https://ithelp.ithome.com.tw/articles/10194839 9. https://blog.csdn.net/weixin_43975924/article/details/104046790 10. https://ithelp.ithome.com.tw/articles/10242460
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up