亚欧色一区w666天堂,色情一区二区三区免费看,少妇特黄A片一区二区三区,亚洲人成网站999久久久综合,国产av熟女一区二区三区

  • 發布文章
  • 消息中心
點贊
收藏
評論
分享
原創

如何制作一個Docker鏡像(基于centos基礎鏡像,并添加cuda samplers測試樣例)

2024-09-02 09:51:06
91
0

Docker基礎

基礎概念

Docker 是一個開源的容器化平臺,它允許開發者和系統管理員打包、分發和運行應用程序,而無需擔心底層基礎設施。Docker 使用 Linux 容器(LXC)技術,但提供了一個更易用的接口和更豐富的功能集。以下是 Docker 的一些關鍵特性和概念:

  1. 容器(Container):容器是 Docker 的核心概念,它是一個輕量級的、可移植的、自給自足的軟件運行環境。容器內包含了運行應用程序所需的所有內容:代碼、運行時、庫、環境變量和配置文件。
  2. 鏡像(Image):Docker 鏡像是一個只讀模板,包含了運行容器所需的所有內容。鏡像可以被看作是容器的藍圖,它們是不可變的,這意味著一旦創建,就不能更改
  3. 倉庫(Repository):Docker 倉庫是一個集中存儲和分發 Docker 鏡像的地方。
  4. Dockerfile:Dockerfile 是一個文本文件,包含了一系列的指令和參數,用于自動化構建 Docker 鏡像的過程。通過編寫 Dockerfile,你可以定義如何構建你的應用程序的鏡像。

容器共享宿主機的內核,不需要像虛擬機那樣模擬整個操作系統,因此啟動速度快,資源占用少。總結來講,可以把docker當作一個小型的虛擬機

運行模式

Docker 的運行模式可以分為幾種主要的方式,每種模式適用于不同的使用場景。在筆者的工作之中,應用最為廣泛的是交互模式和后臺模式。

交互模式

交互模式允許你啟動一個容器并與其進行交互,通常是為了調試或手動操作容器內的應用程序。

runoob@runoob:~$ docker run -i -t ubuntu:15.10 /bin/bash
root@0123ce188bd8:/#

各個參數解析:

  • -t: 在新容器內指定一個偽終端或終端。
  • -i: 允許你對容器內的標準輸入 (STDIN) 進行交互。

交互模式會進入容器里面

后臺模式

后臺模式使容器在后臺運行,不會占用你的終端。可以通過 docker ps 命令查看運行中的容器。

docker run -itd --name ubuntu-test ubuntu /bin/bash

注:加了 -d 參數默認不會進入容器,想要進入容器需要使用指令 docker exec

如果需要進入容器:

docker exec -it 243c32535da7 /bin/bash

其中243c32535da7為容器ID。

Docker鏡像的制作

Docker鏡像的制作主要包括以下幾個步驟:

拉取鏡像
 以某一個鏡像作為基礎鏡像,這里選用的是以centos7操作系統作為基礎鏡像,該鏡像包括cuda工具和cudnn包。

docker pull nvidia/cuda:11.7.1-devel-centos7

測試樣例下載
下載需要的測試樣例,此處以cuda samplers為例,測試樣例位于github里的
/NVIDIA/cuda-samples位置。

啟動容器

docker run -itd --rm --gpus all nvidia/cuda:11.7.1-devel-centos7 /bin/bash

其中的參數解釋如下:

  • ?-it-i保持容器的標準輸入流,允許你與容器進行交互; -t分配一個偽終端,使容器的終端更易于交互。
  • ?-d--detach:讓容器在后臺運行,不會占用你的終端。與 -it 配合使用時,容器會在后臺運行,并且你可以通過終端訪問容器。
  • ?--rm:自動刪除容器:當容器停止時,Docker 會自動刪除該容器。這個選項有助于避免容器積累,節省磁盤空間。
  • ?--gpus all:允許容器訪問所有可用的 NVIDIA GPU。這個選項需要在 Docker 運行時和 GPU 驅動程序配置正確,以便容器能夠利用 GPU 進行計算加速。
  • ?nvidia/cuda:11.7.1-devel-centos7:Docker 鏡像的名稱和標簽:指定要使用的 Docker 鏡像。在這個例子中,使用了 NVIDIA 提供的 CUDA 11.7.1 開發環境鏡像,基于 CentOS 7。
  • ?/bin/bash:容器啟動時執行的命令:啟動一個 bash shell,使你可以在容器內進行交互式操作。

將測試樣例cp到容器中

docker cp /home/cuda-samples-11.6 faa9d887f1ee:/home/

封裝鏡像

docker commit -a "jsd" -m "cuda:12.5.1 with cuda-samples-12.5" 2316bf9e3674  nvidia/cuda/12.5.1-cudnn-devel-ubuntu20.04/cudasamples:v1.0

參數說明如下:

  • ?-a "jsd"-a--author):指定鏡像的作者信息。這里的 "jsd" 是作者名。
  • ?-m "cuda:12.5.1 with cuda-samples-12.5":?-m?(--message):為鏡像提交添加注釋。這條信息描述了你對容器所做的修改或鏡像的用途。在這個例子中,注釋為 "cuda:12.5.1 with cuda-samples-12.5",表明這個鏡像包含了 CUDA 12.5.1 以及 CUDA 樣本代碼。
  • ?2316bf9e3674:容器的 ID。你想從這個容器創建新的鏡像。你可以通過 docker ps -a 命令獲取容器 ID。

登陸倉庫

docker login --username=<yourID> <提供鏡像服務的網址>
?
<password>

修改鏡像tag

docker tag <本地鏡像ID> <你的鏡像倉庫地址>
例如:
docker tag 391718087e05 ***.com/jsd/cuda-with-samples:v1.0

推送鏡像

docker push 鏡像倉庫的地址/倉庫用戶名/倉庫名稱:鏡像標簽
例如:
docker push ***.com/jsd/cuda-with-samples:v1.0

Docker鏡像的修改

上節討論了Docker鏡像的制作方法以及如何將其推送至鏡像倉庫。這節主要介紹如何在當前現有鏡像中添加新的文件,并且將其保存為新的鏡像。

這是當前鏡像:

***.com/jsd/cuda-with-samples:v1.0

這是要添加的內容:

fileA.sh  fileB.sh

具體步驟如下:

  1. 創建 Dockerfile

    # 使用現有的鏡像作為基礎鏡像
    FROM ***.com/jsd/cuda-with-samples:v1.0
    ?
    # 將本地文件復制到鏡像中的指定目錄
    # 確保路徑和文件名正確
    COPY check_executables.sh  cuda_samples_manager.sh  run_make_in_samples.sh /home/cuda-samples-12.5/
    
  2. 構建鏡像:在包含 Dockerfile 的目錄下打開終端或命令提示符,使用 docker build 命令構建新的鏡像。記得將 [new-tag] 替換為你想要的新標簽名稱。

    docker build -t ***.com/jsd/cuda-with-samples:v3.0 .
    

    注意:在命令的最后,.表示 Dockerfile 在當前目錄。

  3. 推送鏡像到阿里云倉庫:構建完成后,使用 docker push 命令將新鏡像推送到阿里云 Docker 倉庫。

    docker push ***.com/jsd/cuda-with-samples:v3.0
    
  4. 驗證新鏡像:使用 docker images 查看本地鏡像列表,確認新鏡像已經創建。你也可以使用 docker pull 命令拉取新鏡像到本地進行測試。

  5. 運行新鏡像:使用新鏡像啟動容器,以驗證文件是否正確添加。

    docker run -it --name [container-name] ***.com/your-repo/your-image:[新標簽] /bin/bash
    

Docker常用操作

上述講述了Docker鏡像的制作和修改,下面說明docker常用的操作命令。
 在使用Docker鏡像的過程中,除了構建和修改鏡像,還有許多其他相關操作。這些操作涵蓋了鏡像的管理、運行和分發等方面。以下是一些常見的與Docker鏡像操作相關的命令和使用方法:

鏡像管理

  1. 列出本地鏡像
    列出本地的所有Docker鏡像:

    docker images
    
  2. 刪除鏡像
    刪除一個或多個鏡像:

    docker rmi <image_id_or_name>
    

    如果鏡像正在被使用,可以使用 -f 選項強制刪除:

    docker rmi -f <image_id_or_name>
    
  3. 查看鏡像詳細信息

    docker inspect <image_id_or_name>
    

運行容器

  1. 運行容器
    從鏡像運行一個新容器:

    docker run -it --name <container_name> <image_name> /bin/bash
    
    • -it:讓容器運行在交互模式,并連接終端。
    • --name:指定容器名稱。
  2. 后臺運行容器
    以后臺模式運行容器(守護模式):

    docker run -d --name <container_name> <image_name>
    
  3. 運行并暴露端口
    運行容器并暴露端口,使其可以被外部訪問:

    docker run -d -p 8080:80 --name <container_name> <image_name>
    
    • -p 8080:80:將主機的8080端口映射到容器的80端口。

鏡像分發

  1. 登錄Docker Hub
    在推送和拉取鏡像之前,需要先登錄Docker Hub:

    docker login
    
  2. 推送鏡像到Docker Hub
    將本地鏡像推送到Docker Hub上:

    docker tag <local_image_name> <your_dockerhub_username>/<repository_name>:<tag>
    docker push <your_dockerhub_username>/<repository_name>:<tag>
    
  3. 從Docker Hub拉取鏡像
    從Docker Hub拉取一個鏡像:

    docker pull <image_name>:<tag>
    

容器管理相關操作

  1. 查看運行中的容器
    查看所有正在運行的容器:

    docker ps
    
  2. 查看所有容器(包括已停止的)

    docker ps -a
    
  3. 停止和啟動容器
    停止一個正在運行的容器:

    docker stop <container_id_or_name>
    

    啟動一個已停止的容器:

    docker start <container_id_or_name>
    
  4. 重啟容器
    重新啟動一個容器:

    docker restart <container_id_or_name>
    
  5. 刪除容器
    刪除一個已停止的容器:

    docker rm <container_id_or_name>
    
0條評論
0 / 1000
c****d
4文章數
0粉絲數
c****d
4 文章 | 0 粉絲
原創

如何制作一個Docker鏡像(基于centos基礎鏡像,并添加cuda samplers測試樣例)

2024-09-02 09:51:06
91
0

Docker基礎

基礎概念

Docker 是一個開源的容器化平臺,它允許開發者和系統管理員打包、分發和運行應用程序,而無需擔心底層基礎設施。Docker 使用 Linux 容器(LXC)技術,但提供了一個更易用的接口和更豐富的功能集。以下是 Docker 的一些關鍵特性和概念:

  1. 容器(Container):容器是 Docker 的核心概念,它是一個輕量級的、可移植的、自給自足的軟件運行環境。容器內包含了運行應用程序所需的所有內容:代碼、運行時、庫、環境變量和配置文件。
  2. 鏡像(Image):Docker 鏡像是一個只讀模板,包含了運行容器所需的所有內容。鏡像可以被看作是容器的藍圖,它們是不可變的,這意味著一旦創建,就不能更改
  3. 倉庫(Repository):Docker 倉庫是一個集中存儲和分發 Docker 鏡像的地方。
  4. Dockerfile:Dockerfile 是一個文本文件,包含了一系列的指令和參數,用于自動化構建 Docker 鏡像的過程。通過編寫 Dockerfile,你可以定義如何構建你的應用程序的鏡像。

容器共享宿主機的內核,不需要像虛擬機那樣模擬整個操作系統,因此啟動速度快,資源占用少。總結來講,可以把docker當作一個小型的虛擬機

運行模式

Docker 的運行模式可以分為幾種主要的方式,每種模式適用于不同的使用場景。在筆者的工作之中,應用最為廣泛的是交互模式和后臺模式。

交互模式

交互模式允許你啟動一個容器并與其進行交互,通常是為了調試或手動操作容器內的應用程序。

runoob@runoob:~$ docker run -i -t ubuntu:15.10 /bin/bash
root@0123ce188bd8:/#

各個參數解析:

  • -t: 在新容器內指定一個偽終端或終端。
  • -i: 允許你對容器內的標準輸入 (STDIN) 進行交互。

交互模式會進入容器里面

后臺模式

后臺模式使容器在后臺運行,不會占用你的終端。可以通過 docker ps 命令查看運行中的容器。

docker run -itd --name ubuntu-test ubuntu /bin/bash

注:加了 -d 參數默認不會進入容器,想要進入容器需要使用指令 docker exec

如果需要進入容器:

docker exec -it 243c32535da7 /bin/bash

其中243c32535da7為容器ID。

Docker鏡像的制作

Docker鏡像的制作主要包括以下幾個步驟:

拉取鏡像
 以某一個鏡像作為基礎鏡像,這里選用的是以centos7操作系統作為基礎鏡像,該鏡像包括cuda工具和cudnn包。

docker pull nvidia/cuda:11.7.1-devel-centos7

測試樣例下載
下載需要的測試樣例,此處以cuda samplers為例,測試樣例位于github里的
/NVIDIA/cuda-samples位置。

啟動容器

docker run -itd --rm --gpus all nvidia/cuda:11.7.1-devel-centos7 /bin/bash

其中的參數解釋如下:

  • ?-it-i保持容器的標準輸入流,允許你與容器進行交互; -t分配一個偽終端,使容器的終端更易于交互。
  • ?-d--detach:讓容器在后臺運行,不會占用你的終端。與 -it 配合使用時,容器會在后臺運行,并且你可以通過終端訪問容器。
  • ?--rm:自動刪除容器:當容器停止時,Docker 會自動刪除該容器。這個選項有助于避免容器積累,節省磁盤空間。
  • ?--gpus all:允許容器訪問所有可用的 NVIDIA GPU。這個選項需要在 Docker 運行時和 GPU 驅動程序配置正確,以便容器能夠利用 GPU 進行計算加速。
  • ?nvidia/cuda:11.7.1-devel-centos7:Docker 鏡像的名稱和標簽:指定要使用的 Docker 鏡像。在這個例子中,使用了 NVIDIA 提供的 CUDA 11.7.1 開發環境鏡像,基于 CentOS 7。
  • ?/bin/bash:容器啟動時執行的命令:啟動一個 bash shell,使你可以在容器內進行交互式操作。

將測試樣例cp到容器中

docker cp /home/cuda-samples-11.6 faa9d887f1ee:/home/

封裝鏡像

docker commit -a "jsd" -m "cuda:12.5.1 with cuda-samples-12.5" 2316bf9e3674  nvidia/cuda/12.5.1-cudnn-devel-ubuntu20.04/cudasamples:v1.0

參數說明如下:

  • ?-a "jsd"-a--author):指定鏡像的作者信息。這里的 "jsd" 是作者名。
  • ?-m "cuda:12.5.1 with cuda-samples-12.5":?-m?(--message):為鏡像提交添加注釋。這條信息描述了你對容器所做的修改或鏡像的用途。在這個例子中,注釋為 "cuda:12.5.1 with cuda-samples-12.5",表明這個鏡像包含了 CUDA 12.5.1 以及 CUDA 樣本代碼。
  • ?2316bf9e3674:容器的 ID。你想從這個容器創建新的鏡像。你可以通過 docker ps -a 命令獲取容器 ID。

登陸倉庫

docker login --username=<yourID> <提供鏡像服務的網址>
?
<password>

修改鏡像tag

docker tag <本地鏡像ID> <你的鏡像倉庫地址>
例如:
docker tag 391718087e05 ***.com/jsd/cuda-with-samples:v1.0

推送鏡像

docker push 鏡像倉庫的地址/倉庫用戶名/倉庫名稱:鏡像標簽
例如:
docker push ***.com/jsd/cuda-with-samples:v1.0

Docker鏡像的修改

上節討論了Docker鏡像的制作方法以及如何將其推送至鏡像倉庫。這節主要介紹如何在當前現有鏡像中添加新的文件,并且將其保存為新的鏡像。

這是當前鏡像:

***.com/jsd/cuda-with-samples:v1.0

這是要添加的內容:

fileA.sh  fileB.sh

具體步驟如下:

  1. 創建 Dockerfile

    # 使用現有的鏡像作為基礎鏡像
    FROM ***.com/jsd/cuda-with-samples:v1.0
    ?
    # 將本地文件復制到鏡像中的指定目錄
    # 確保路徑和文件名正確
    COPY check_executables.sh  cuda_samples_manager.sh  run_make_in_samples.sh /home/cuda-samples-12.5/
    
  2. 構建鏡像:在包含 Dockerfile 的目錄下打開終端或命令提示符,使用 docker build 命令構建新的鏡像。記得將 [new-tag] 替換為你想要的新標簽名稱。

    docker build -t ***.com/jsd/cuda-with-samples:v3.0 .
    

    注意:在命令的最后,.表示 Dockerfile 在當前目錄。

  3. 推送鏡像到阿里云倉庫:構建完成后,使用 docker push 命令將新鏡像推送到阿里云 Docker 倉庫。

    docker push ***.com/jsd/cuda-with-samples:v3.0
    
  4. 驗證新鏡像:使用 docker images 查看本地鏡像列表,確認新鏡像已經創建。你也可以使用 docker pull 命令拉取新鏡像到本地進行測試。

  5. 運行新鏡像:使用新鏡像啟動容器,以驗證文件是否正確添加。

    docker run -it --name [container-name] ***.com/your-repo/your-image:[新標簽] /bin/bash
    

Docker常用操作

上述講述了Docker鏡像的制作和修改,下面說明docker常用的操作命令。
 在使用Docker鏡像的過程中,除了構建和修改鏡像,還有許多其他相關操作。這些操作涵蓋了鏡像的管理、運行和分發等方面。以下是一些常見的與Docker鏡像操作相關的命令和使用方法:

鏡像管理

  1. 列出本地鏡像
    列出本地的所有Docker鏡像:

    docker images
    
  2. 刪除鏡像
    刪除一個或多個鏡像:

    docker rmi <image_id_or_name>
    

    如果鏡像正在被使用,可以使用 -f 選項強制刪除:

    docker rmi -f <image_id_or_name>
    
  3. 查看鏡像詳細信息

    docker inspect <image_id_or_name>
    

運行容器

  1. 運行容器
    從鏡像運行一個新容器:

    docker run -it --name <container_name> <image_name> /bin/bash
    
    • -it:讓容器運行在交互模式,并連接終端。
    • --name:指定容器名稱。
  2. 后臺運行容器
    以后臺模式運行容器(守護模式):

    docker run -d --name <container_name> <image_name>
    
  3. 運行并暴露端口
    運行容器并暴露端口,使其可以被外部訪問:

    docker run -d -p 8080:80 --name <container_name> <image_name>
    
    • -p 8080:80:將主機的8080端口映射到容器的80端口。

鏡像分發

  1. 登錄Docker Hub
    在推送和拉取鏡像之前,需要先登錄Docker Hub:

    docker login
    
  2. 推送鏡像到Docker Hub
    將本地鏡像推送到Docker Hub上:

    docker tag <local_image_name> <your_dockerhub_username>/<repository_name>:<tag>
    docker push <your_dockerhub_username>/<repository_name>:<tag>
    
  3. 從Docker Hub拉取鏡像
    從Docker Hub拉取一個鏡像:

    docker pull <image_name>:<tag>
    

容器管理相關操作

  1. 查看運行中的容器
    查看所有正在運行的容器:

    docker ps
    
  2. 查看所有容器(包括已停止的)

    docker ps -a
    
  3. 停止和啟動容器
    停止一個正在運行的容器:

    docker stop <container_id_or_name>
    

    啟動一個已停止的容器:

    docker start <container_id_or_name>
    
  4. 重啟容器
    重新啟動一個容器:

    docker restart <container_id_or_name>
    
  5. 刪除容器
    刪除一個已停止的容器:

    docker rm <container_id_or_name>
    
文章來自個人專欄
文章 | 訂閱
0條評論
0 / 1000
請輸入你的評論
0
0