Docker指令使用筆記
Docker指令使用筆記
因為工作上需要開發簡單的API server並自動化部屬,就開始學習docker該如何使用。
下面用藍色標記我會用的指令
1. 建置image
$ docker build .
$ docker build -t mydocker:1.0.0 .
使用Dockerfile內所寫的script建置image
第二個指令是一併指定repo跟tag
2. 顯示image/container
$ docker images
$ docker image ls
會顯示repository, tag, image id等資料
$ docker ps
$ docker ps -a
$ docker container ls
會顯示container id, image, cmd, status
-a會包含已停止的。加上-q則只顯示container id
3. 刪除image/container
$ docker rm {container-id}
$ docker rmi {image-id}
4. 設定image的repository,tag與刪除
我們會因為build沒有打repository,tag導致ps都只顯示<none>,這時候就要用docker tag設定
例如我們的image id是06f02a96ecea, repo和tag為<none>想設定mydocker和1.0.0,則可以用
$ docker tag 06f02a96ecea mydocker:1.0.0
不過因為docker tag是產生新的tag,所以可以多個都對應到同一個image id
要刪除tag時,必須連同 repository一起指定,例如:
$ docker rmi mydocker:1.0.0
5. 啟動docker
直接執行可用
$ docker run {image-id}
$ docker run {repo-tag}
因為我是API server,就不能只是下docker run,不然會被卡在裡面
$ docker run -d mydocker:1.0.0
$ docker run -d -p 3000:8080 mydocker:1.0.0
有-d就不會卡住BASH,並且docker會返回啟動成功的container id
-p則是設定port mapping對應表,寫法是本機的port:docker的port,只要設定後就可以用 http://localhost:3000 看到自己的API server了
其他run的設定還有很多
--name {名稱}
--memory=512M
--memory-reservation=512M
--storage-opt size=120G
-v "c:\foo:"/dest
請參考官方說明
6. 顯示container的log和ip,mac
$ docker logs -t -f --tail 60 {container-id}
用Ctrl+C來停止用inspect的內容搜尋IP/MAC
$ docker inspect -f '{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}' {container-id}
$ docker inspect -f '{{range .NetworkSettings.Networks}}{{.MacAddress}}{{end}}' {container-id}
$ docker inspect -f '{{range .NetworkSettings.Networks}}{{.MacAddress}}{{end}}' {container-id}
用除了用container-id外,inspect用container name也可以跑
$ docker rename 90d59596dc74 speechemu
$ docker run -it --name container1 centos /bin/bash
7. 啟動/停止/移除container
$ docker container stop {container-id}
$ docker start {container-id}
$ docker container rm {container-id}
$ docker container rm -f {container-id}
$ docker rm $(sudo docker ps -a -q)
這個rm指令因為跟bash有關所以無法直接在windows上跑
8. 一個Node.js的Dockerfile範本
FROM node:14.6.0-alpine3.12ENV NODE_ENV production
ENV PORT 8080
WORKDIR /usr/src/app
COPY ["package.json", "yarn.lock", "./"]
RUN yarn --production --silent
COPY . .
EXPOSE 8080
CMD yarn server:prod
參考資料
- 適用於 VS Code 使用者的 Docker 簡介
https://docs.microsoft.com/zh-tw/visualstudio/docker/tutorials/image-building-best-practices
留言