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}
用除了用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.12
ENV 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

參考資料

留言