# docker 實作練習 ## 操作練習心得 > 1. 安裝時docker如果hyper-v被佔用,docker啟動會失敗,例如模擬器佔用了它,那docker就失敗,反之亦然。 > 2. 我是安裝在win10上,帶上--volume參數對應時皆失敗,最後想起是windows目錄與linux目錄名稱的差異,後來將C:/改成//C/之後就解決了。 ## 下載image並到本機 > docker pull nginx:latest (來自hub.docker public repo) ## 查詢help docker --help docker ps --help docker run --help docker image --help ... ... ## 強制移除container by id docker rm -f $(docker ps -aq) ## 停止全部container docker stop $(docker ps -aq) ## 命名容器 / Mapping port(multiple-port) / 共用目錄 read-only > docker run --name website -p 8080:80 -p 3000:80 -d -v /D//docker/html:/usr/share/nginx/html:ro nginx:latest ## 查找container狀態並格式化輸出 > Windows: set FORMAT="ID\t{{.ID}}\nNAME\t{{.Names}}\nImage\t{{.Image}}\nPORTS\t{{.Ports}}\nCOMMAND\t{{.Command}}\nCREATED\t{{.CreatedAt}}\nSTATUS\t{{.Status}}\n" > > docker ps --format=%FORMAT% > Linux: export FORMAT="ID\t{{.ID}}\nNAME\t{{.Names}}\nImage\t{{.Image}}\nPORTS\t{{.Ports}}\nCOMMAND\t{{.Command}}\nCREATED\t{{.CreatedAt}}\nSTATUS\t{{.Status}}\n" > > docker ps --format=$FORMAT ## TAG -- duplicated it with new tag > docker tag old_name:old_tag new_name:new_tag ## Image 的 Alpine 版本 > 佔用storage較少的版本(linux alpine),少裝了一些libary,因此較為『輕』量,有可能導致某些功能失效。 ## Dockerfile example FROM node:10.16.1-latest WORKDIR /app ADD package*.json ./ RUN npm install ADD . . CMD node index.js ## 由 Dockerfile 建立 image docker build -t newName:newTage . ## to Repo -> hub.docker(private/public) docker push your_account:image_name:tag ## 容器共用目錄 docker run --name newName --volume-from Container_name image_name ## 登錄到 linux bash shell docker exec -it website bash ## Dockerfile: with caching > 在Dockerfile當中,每個動作視為1個layer,在執行build指令時會比較layer與caching,當目前build的layer與caching當中的layer不同時,其之後layer動作會全部重做一遍,換句話說,把沒變的layer往前移,有變的往後移,這樣可以大幅加快建image的速度。 參考資料: https://www.youtube.com/watch?v=p28piYY_wv8&list=WL&index=10 ###### tags: `Docker` `學習筆記`