Docker補充
Docker實際應用
docker 管理
鏡像操作
- 搜索對應鏡像
docker serarch xxx
- 查看現有鏡像
docker images
docker images ls
docker images image_name # 也可以直接查找鏡像名
- 拉取鏡像
docker pull xxx # 默認default版本
docker pull xxx:xxx # 可以冒號后面指定版本號
- 鏡像配置文件路徑(該文件內容是用的json格式數據)
docker info # docker信息,包含了路徑
一般情況下在 /var/lib/docker 下
docker info | grep root # 不確定的話可以直接查看對應數據存放的目錄
可以接著去看該目錄下對應的內容,下圖直接告訴你存放docker鏡像配置文件的具體位置

# 查看鏡像的信息
docker images inspect 鏡像id
- 刪除鏡像
docker rmi 鏡像名字
# 刪除所有鏡像, 參數a就是顯示所有鏡像,q就是只顯示鏡像id,所以列出來后再進行rmi就很方便了
docker rmi `docker images -aq`
這里刪除的時候可能會因為容器被掛起了,或者容器被使用過無法刪除鏡像,這里需要找到對應的容器刪除,那刪除容器后面會講
- 導入/導出鏡像
# 導出
docker save nginx:latest -o docker_nginx_latest.tar.gz
docker save nginx > /opt/docker_nginx_latest.tar.gz
# 導入
docker load -i docker_nginx_latest.tar.gz
- 當前狀態保存為一個新的鏡像
# commit 命令
OPTIONS說明:
-a :提交的鏡像作者。
-c :使用 Dockerfile 指令來創建鏡像。
-m :提交時的說明文字。
-p :提交鏡像前暫停容器(默認為 true)。
將名為 my_container 的容器保存為一個名為 my_new_image 的新鏡像
指定標簽: docker commit my_container my_new_image:latest
- 給鏡像打標簽
通過為鏡像打標簽,可以使用更容易記憶的名字或版本號來標識和管理鏡像
docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]
- SOURCE_IMAGE[:TAG]: 源鏡像名稱和標簽,標簽默認為 latest。
- TARGET_IMAGE[:TAG]: 目標鏡像名稱和標簽,標簽默認為 latest。
容器操作

- 運行容器
docker run nginx:xxx
# 也可以在運行容器的時候執行一個命令
docker run nginx:xxx ping baidu.om
# 上述中運行了一個容器,容器運行了ping biadu.com,所以當你終止ping baidu.com 的時候這個容器也就終止了
# 參數-i 交互模式 參數-t開啟一個終端
docker run -it nginx:xxx bash
# 上面這個就是運行nginx的時候進入一個交互模式,并且運行一個命令bash,因為你bash才能交互,
# 上面的都是:如果你中斷了該進程比如ping 或者 你進入的那個bash交互,中斷了之后容器也終止了
# 那我們就需要另一個參數 -d 在后臺運行容器
docker run -d nginx:xxx ping biaud.com
如下圖所示一:command中就是你運行的命令,當然具體情況看你執行了什么

- 指定容器運行的名字
docker run -d --name xxx nginx:xxx
- 容器啟動
docker start 容器名/容器id
- 停止容器
docker stop 容器名/容器id
- 刪除容器
docker rm 容器名/容器id
- 查看某個容器的日志
# 查看該容器的所有日志,注意:會顯示非常多
docker logs 容器id
# 監聽日志參數 -f
docker logs -f 容器id
- 查看已有容器
docker ps
# 查看不管掛掉還是停止了的容器
docker ps -aq
- 查看容器詳細信息
# 這個依舊是json數據,顯示容器的具體詳細信息
docker container inspect 容器id
- 容器端口映射
# 這里就是物理機的84端口與容器內的80端口映射
# 也就是說你物理機訪問84端口就可以訪問到容器的80端口
docker run -p 84:80 nginx
# 實際情況中當然還要結合其他參數,比如-d后臺執行,--name 指定容器的名字 等等
Dockerfile
Dockerfile文件,可以通過docker build . 來構鏡像
這個就是當你有這個Dockerfile文件后,你通過這個命令能夠根據你這個文件的配置去構建一個鏡像
命令學習
- FROM
從現有鏡像指定一個作為基礎
先去本地看是否存在該鏡像,若有就直接使用,若沒有則需要去倉庫中在線下載
- RUN
從你這個鏡像中,你希望運行一個容器后他要做什么
- ADD <物理機的源目標/URL> <容器的目錄目標>
添加宿主機的文件到容器內
ADD 添加進容器, 若源文件為 tar 壓縮文件的話,壓縮格式為 gzip, bzip2 以及 xz 的情況下,會自動復制并解壓到目標路徑
若ADD指定的是一個URL,則會去下載然后放到目標目錄中

- COPY
和ADD功能差不多,但官方推薦使用這個,因為這個單單只是復制僅此而已,不會對什么壓縮包額外進行解壓之類操作
- WORKDIR
類似CD,就是在創建容器后,進入的目錄的位置
在你配置Dockerfile的時候,可能需要切換目錄去做一些操作,那這個就類似cd
這也就是為什么上面所說有的容器進入的時候,發現他的默認目錄不一樣,這是因為寫Dockerfile的那個人可能用這個切換了目錄去做一些事情,也有可能希望用戶默認進入的目錄是某個目錄等等
- VOLUME
掛載,就是類似vmware的目錄映射,將物理的某個目錄映射到容器內的某個目錄
當你訪問容器內那個目錄的時候就相當于訪問映射的那個物理機的目錄
這個更多的作用是:
確保應用產生的數據不寫入應用層,而是將數據寫入到我們的物理機中想要存儲的位置,所以我們就可以用VOLUME
還有一個方式是當你run的時候,指定參數-v指定目錄掛載
當你構建了一個鏡像后,且運行了一個該鏡像的容器后可以通過docker inspect 容器id來查看你掛載的目錄在哪,下面這個就是自動指定的一個物理機中的目錄,你VOLUME指定的是容器中哪個目錄

CMD ["參數1", "參數2"]
該命令不允許在run的時候額外傳入參數,所以這就需要后面學習的ENTRYPOINT命令
比如我們docker run -it nginx bash中最后一個bash就是我們進入容器執行的一個命令
若不指定,那就是默認我們寫的dockerfile中構建的這個容器的配置中寫的這個CMD了
所以該CMD的作用就是默認你進入容器的命令
例子:
CMD ["cat", "/etc/passwd"] # 這個就是等于正常的cat /etc/passwd
CMD ["/bin/bash"]
- ENTRYPOINT
簡單點直接看例子:
Dockerfile重新修成下面這樣
------------
FROM nginx
ENTRYPOINT ["nginx", "-c"] # 定參
CMD ["/etc/nginx/nginx.conf"] # 變參
------------
當你run的時候就可以傳參了:docker run nginx:test -c /etc/nginx/new.conf
這個可不是重新傳入一個新命令哈,這個是重新傳入-c參數并指定新的一個conf文件進去
(容器內會默認運行以下命令,啟動主進程(/etc/nginx/new.conf:假設容器內已有此文件)
- EXPOSE
EXPOSE <端口1> [<端口2>...]
僅僅只是聲明端口,不會作用于你實際的映射端口(除非你使用隨機映射參數-P的時候才會起到幫忙隨機你指定的端口)
- 幫助鏡像使用者理解這個鏡像服務的守護端口,以方便配置映射。
- 在運行時使用隨機端口映射時,也就是 docker run -P 時,會自動隨機映射 EXPOSE 的端口。
理解:
EXPOSE 指令是聲明容器運行時提供服務的端口,這只是一個聲明,在容器運行時并不會因為這個聲明應用就會開啟這個端口的服務。在 Dockerfile 中寫入這樣的聲明有兩個好處,一個是幫助鏡像使用者理解這個鏡像服務的守護端口,以方便配置映射;另一個用處則是在運行時使用隨機端口映射時,也就是 docker run -P 時,會自動隨機映射 EXPOSE 的端口。
- ENV/ARG
ENV 在構建鏡像和容器運行的時候都可以找得到能使用
ARG 只在構建鏡像的時候能用,容器跑起來的時候找不到不能用
- User
切換用戶
USER root
USER test
- MAINTAINER
維護者信息(可選)
一些Docker的圖解
看視頻課過程中截圖下來的一些圖解


這里主要要注意增刪的時候都是只在容器層處理,基礎鏡像這些不會被改變,只做記錄,這是為了保證你這個鏡像image可以啟動多個容器而不會因為某個容器修改導致其他容器想要使用的時候鏡像被修改了

現階段我個人所需的且能用到的就這些,后續可能會有更多的補充內容。
本文來自博客園,作者:竹等寒,轉載請注明原文鏈接。

浙公網安備 33010602011771號