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

學(xué)無先后,達者為師

網(wǎng)站首頁 編程語言 正文

Docker常見用法

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

Ⅰ. 幫助啟動類命令

啟動 docker

systemctl start docker

停止 docker

systemctl stop docker

重啟 docker

systemctl restart docker

查看 docker 狀態(tài)

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: 鏡像創(chuàng)建時間
  • SIZE: 鏡像大小

選項:

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

docker search

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

  • NAME: 鏡像名稱
  • DESCRIPTION: 鏡像說明
  • STARS: STAR 數(shù)
  • OFFICIAL: 是否是官方的
  • AUTOMATED: 是否是自動構(gòu)建的

選項:

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

docker pull

拉取指定鏡像

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

docker system df

查看鏡像/容器/數(shù)據(jù)卷所占用的空間

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 顯示最近創(chuàng)建的容器
  • -n 顯示最近 n 個創(chuàng)建的容器
  • -q 只顯示容器 ID

退出容器

兩種退出方式

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

啟動已經(jīng)停止的容器

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

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

docker run -d 鏡像名

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

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

查看容器日志

docker logs 容器ID或者容器名

查看容器內(nèi)運行的進程

docker top 容器ID或者容器名

查看容器內(nèi)部細節(jié)

docker inspect 容器ID或者容器名

進入正在運行的容器

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

docker attach 容器ID或容器名

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

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

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

從容器內(nèi)拷貝文件到主機上

容器->主機

docker cp 容器ID或容器名:容器內(nèi)路徑 目的主機路徑

主機->容器

docker cp 文件名 容器名:容器內(nèi)路徑

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

導(dǎo)入和導(dǎo)出容器

export 導(dǎo)出容器的內(nèi)容流作為一個 tar 歸檔文件[對應(yīng) import 命令]

import 從 tar 包中的內(nèi)容創(chuàng)建一個新的文件系統(tǒng)再導(dǎo)入為鏡像[對應(yīng) export 命令]

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

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

Ⅳ. 構(gòu)建并發(fā)布自己的鏡像(非Dockerfile方式)

當在創(chuàng)建的容器內(nèi)搭建好了一系列的環(huán)境后,怎么發(fā)布出去給別人用呢?這時就需要 docker commit 命令。

比如新創(chuàng)建的環(huán)境是沒有 vim 編輯器的,當我們在自己的容器中裝好 vim,就可以發(fā)布成新的鏡像。

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

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

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

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

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:[鏡像版本號]

Ⅴ. 容器數(shù)據(jù)卷

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

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

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

簡而言之,就是把容器內(nèi)的重要數(shù)據(jù)備份長期保存到本地主機目錄。

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

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

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

注意:可以指定多個數(shù)據(jù)卷~

數(shù)據(jù)同步規(guī)則如下:

  • docker修改,主機同步修改
  • 主機修改,docker修改
  • docker stop,主機修改,docker 啟動同步數(shù)據(jù)

數(shù)據(jù)卷之間的繼承

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

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

Ⅵ. Dockerfile

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

Dockerfile基礎(chǔ)知識

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

Docker執(zhí)行Dockerfile的大致流程

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

Dockerfile保留字

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

更多的參考 Dockerfile reference

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

欄目分類
最近更新