日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 編程語言 正文

Docker常見用法

作者:aW5jaXBl 更新時間: 2022-08-15 編程語言

Ⅰ. 幫助啟動類命令

啟動 docker

systemctl start docker

停止 docker

systemctl stop docker

重啟 docker

systemctl restart docker

查看 docker 狀態

systemctl status docker

開機啟動

systemctl enable docker

查看 docker 信息

docker info

查看 docker 幫助文檔

docker --help

查看 docker 命令幫助文檔

docker 具體命令 --help

Ⅱ. 鏡像類命令

docker images

列出本地主機上的鏡像

  • REPOSITORY: 倉庫鏡像的倉庫源
  • TAG: 鏡像的標簽版本號(同一倉庫源可以有多個 TAG 版本,使用 REPOSITORY:TAG 來定義不同的鏡像)
  • IMAGE ID: 鏡像 ID
  • CREATED: 鏡像創建時間
  • SIZE: 鏡像大小

選項:

  • -a: 列出本地所有的鏡像
  • -q: 只顯示鏡像 ID

docker search

在 hup 服務器上尋找鏡像,如果沒有配置國內鏡像默認就是在 hup.docker.com 上查找。

  • NAME: 鏡像名稱
  • DESCRIPTION: 鏡像說明
  • STARS: STAR 數
  • OFFICIAL: 是否是官方的
  • AUTOMATED: 是否是自動構建的

選項:

  • –limit: 只列出 N 個鏡像,默認 25 個

docker pull

拉取指定鏡像

如果沒有指定 TAG,默認就是最新版,即 docker pull ubuntu:latest

docker system df

查看鏡像/容器/數據卷所占用的空間

docker rmi

刪除某個鏡像

刪除單個:docker rmi -f 鏡像ID

刪除多個:docker rmi -f 鏡像名1:TAG 鏡像名2:TAG

刪除全部:docker rmi -f $(docker images -qa)

Ⅲ. 容器類命令

新建并啟動容器

docker run [OPTIONS] IMAGE [COMMAND] [ARG...]

選項

  • –name=“容器的名字”
  • -d 后臺運行容器并返回容器 ID,也即啟動守護式容器
  • -i 以交互模式運行容器,通常跟 -t 同時使用
  • -t 為容器重新分配一個偽 tty(終端),通常與 -i 同時使用
  • -P(大寫)隨機端口映射
  • -p(小寫)指定端口映射

列出當前所有正在運行的容器

docker ps

選項

  • -a 列出所有容器,不加 -a 只會顯示正在運行的容器
  • -l 顯示最近創建的容器
  • -n 顯示最近 n 個創建的容器
  • -q 只顯示容器 ID

退出容器

兩種退出方式

  • exit 退出,容器停止
  • ctrl + p ctrl + q 退出,容器不停止

啟動已經停止的容器

docker start 容器ID或者容器名

、

停止容器

docker stop 容器ID或者容器名

強制停止容器

docker kill 容器ID或者容器名

刪除已停止的容器

docker rm 容器ID或者容器名

沒有停止的容器加上選項 -f 既可以刪除。

一次性刪除多個容器實列 docker rm -f $(docker ps -aq) 或者 docker ps -a -q | xargs docker rm

啟動守護式容器(后臺服務器)

docker run -d 鏡像名

請注意,雖然是叫做守護容器,但是如果你的容器內部沒有一個前臺進程,即使是使用 docker run -d 運行的容器也會馬上結束。

因此,需要將我們要運行的程序以前臺進程的形式進行,如下圖所示:

查看容器日志

docker logs 容器ID或者容器名

查看容器內運行的進程

docker top 容器ID或者容器名

查看容器內部細節

docker inspect 容器ID或者容器名

進入正在運行的容器

docker exec -it 容器ID或容器名 shell

docker attach 容器ID或容器名

attach 直接進入容器啟動命令的終端,不會啟動新的進程,用 exit 退出,會導致容器的停止。

exec 是在容器中打開新的終端,并且可以啟動新的進程,用 exit 退出,不會導致容器的停止。

推薦用 docket exec 進入正在運行的容器。

從容器內拷貝文件到主機上

容器->主機

docker cp 容器ID或容器名:容器內路徑 目的主機路徑

主機->容器

docker cp 文件名 容器名:容器內路徑

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-wObynC2F-1660483281740)(https://incipe.oss-cn-shenzhen.aliyuncs.com/image-20220813165403516.png)]

導入和導出容器

export 導出容器的內容流作為一個 tar 歸檔文件[對應 import 命令]

import 從 tar 包中的內容創建一個新的文件系統再導入為鏡像[對應 export 命令]

docker export 容器ID或容器名 >> 文件名.tar

cat 文件名.tar | docker import -鏡像用戶/鏡像名:鏡像版本號

Ⅳ. 構建并發布自己的鏡像(非Dockerfile方式)

當在創建的容器內搭建好了一系列的環境后,怎么發布出去給別人用呢?這時就需要 docker commit 命令。

比如新創建的環境是沒有 vim 編輯器的,當我們在自己的容器中裝好 vim,就可以發布成新的鏡像。

然后我們執行 apt-get update apt-get install vim 安裝 vim。注意:剛剛運行的容器需要先運行 apt-get update

如此一來我們的容器里面就有了一個 vim 編輯器,現在把其發布成一個鏡像。

docker commit -m="提交的描述信息" -a="作者" 容器名或容器ID 要創建的鏡像名:[標簽]

把自己制作的鏡像發布到阿里云容器服務器或者Docker官網(首先要在容器服務器網站創建命名空間和倉庫)。

docker login --username=XXXXXX registry.cn-shenzhen.aliyuncs.com
docker tag [ImageId] registry.cn-shenzhen.aliyuncs.com/incipe/test:[鏡像版本號]
docker push registry.cn-shenzhen.aliyuncs.com/incipe/test:[鏡像版本號]

Ⅴ. 容器數據卷

數據卷是一個可供一個或者多個容器使用的特殊目錄,它繞過 UFS,可以提供很多有用的特性:

  • 數據卷可以在容器之間共享和重用
  • 對數據卷的修改會立馬生效
  • 對數據卷的更新,不會影響鏡像
  • 數據卷默認會一直存在,即使容器被刪除

注意:數據卷的使用,類似于 Linux 下對目錄或文件進行 mount,鏡像中的被指定為掛載點的目錄中的文件會復制到數據卷中(僅數據卷為空時會復制)

簡而言之,就是把容器內的重要數據備份長期保存到本地主機目錄。

docker run -it --privileged=true -v /主機絕對路徑目錄:/容器內目錄:[ro(read only, default is read write)] 鏡像名

然后在 docker 指定的目錄下生成的文件就會被實時的同步到主機相應的目錄了。

執行 docker inspect 容器名或容器ID 即可查看掛載的位置。

注意:可以指定多個數據卷~

數據同步規則如下:

  • docker修改,主機同步修改
  • 主機修改,docker修改
  • docker stop,主機修改,docker 啟動同步數據

數據卷之間的繼承

docker run -it --privileged=true --volumes-from 父類 --name=容器名字 鏡像

只要某個容器繼承了數據卷,那么就會共享數據卷,即無論哪一方修改共享目錄,都會同步,即使 docker stop。

Ⅵ. Dockerfile

前文提到了,我們可以通過 docker commit 定制每一層所添加的配置,文件,但是每次我們添加一層時,都需要 commit 命令,會顯的很麻煩,這時就需要 Dockerfile ,把每一層修改、安裝、構建、操作的命令都寫入一個腳本,用這個腳本來構建、定制鏡像,那么之前提及的無法重復的問題、鏡像構建透明性的問題、體積的問題就都會解決。

Dockerfile基礎知識

  1. 每個保留字都必須為大寫字母,并且后面至少要跟一個參數
  2. 指令從上到下,順序執行
  3. # 表示注釋
  4. 每條指令都會創建一個新的鏡像層并對鏡像進行提交

Docker執行Dockerfile的大致流程

  1. docker 從基礎鏡像運行一個容器
  2. 執行一條指令并對容器作出修改
  3. 執行類似 docker commit 的操作提交一個新的鏡像層
  4. docker 再基于剛剛提交的鏡像運行一個新容器
  5. 執行 dockerfile 中的下一條指令,直到所有指令都執行完成

Dockerfile保留字

  • FROM 表示當前新鏡像基于哪個鏡像,指定一個已經存在的鏡像作為模板,第一條必須是 FROM
  • LABEL 維護鏡像的作者信息
  • RUN 容器構建的時候需要運行的命令
    • 兩種格式
      • shell 格式
      • exec 格式
    • RUN 實在 docker build 時運行
  • EXPOSE 當前容器對外暴露出的端口
  • WORKDIR 指定在創建容器后,終端默認登錄進來的工作目錄
  • USER 指定該鏡像以什么樣的用戶去執行,如果不指定,默認是 root
  • ENV 用來構建鏡像過程中設置環境變量
  • ADD 將宿主機目錄下的文件拷貝進鏡像且會自動處理 URL 和解 tar 包
  • COPY 類似 ADD,拷貝主機文件和目錄到鏡像中
  • VOLUME 上文說的數據卷
  • CMD 指定容器啟動后要干的事情
    • Dockerfile 可以有多個 CMD 指令,但是只有最后一個生效,CMD 會被 docker run 之后的指令替換
    • 跟 RUN 的區別
      • RUN 是在 docker build 后執行
      • CMD 實在 docker run 后執行
  • ENTRYPOINT 容器啟動時要運行的命令,類似于 CMD 命令,但是 ENTRYPOINT 不會被 docker run 后面的指令覆蓋,而且這些指令會被當作參數送給 ENTRYPOINT 指令指定的程序

更多的參考 Dockerfile reference

原文鏈接:https://blog.csdn.net/qq_43826212/article/details/126336544

欄目分類
最近更新