Docker 學習 (一)

2021-12-25 墨守安全
docker pull [IMAGE_NAME]    # 拉取鏡像
docker run -it -p 5000:5000 ubuntu /bin/bash參數說明:    -i: 交互式操作    -t: 終端    -d: 後臺運行    -p: 埠映射 主機埠:容器埠    -v: 目錄映射 本地目錄:/容器目錄    ubuntu: ubuntu 鏡像    /bin/bash:放在鏡像名後的是命令
docker exec -it [CONTAINER_ID] /bin/bash    # 進入容器
docker export [CONTAINER_ID] > ubuntu.tar    # 導出容器docker import ubuntu.tar    # 導入容器為鏡像
docker save -o ubuntu.tar [IMAGE_NAME]     # 導出鏡像# 使用鏡像ID打包的話導致解壓的出來的鏡像沒有名字docker load < ubuntu.tar    # 導入鏡像docker tag [IMAGE_ID] [IMAGE_NAME]:[IMAGE_TAG]    # 重命名鏡像
docker container update --restart=always ubuntu    # 更新容器配置,開機自啟

Dockerfile 是一個用來構建鏡像的文本文件,文本內容包含了一條條構建鏡像所需的指令和說明。

在 Dockerfile 文件的存放目錄下,執行構建動作。

以下示例,通過目錄下的 Dockerfile 構建一個 nginx:v3(鏡像名稱:鏡像標籤)。

上下文路徑,是指 docker 在構建鏡像,有時候想要使用到本機的文件(比如複製),docker build 命令得知這個路徑後,會將路徑下的所有內容打包。

解析:由於 docker 的運行模式是 C/S。我們本機是 C,docker 引擎是 S。實際的構建過程是在 docker 引擎下完成的,所以這個時候無法用到我們本機的文件。這就需要把我們本機的指定目錄下的文件一起打包提供給 docker 引擎使用。
如果未說明最後一個參數,那麼默認上下文路徑就是 Dockerfile 所在的位置。
注意:上下文路徑下不要放無用的文件,因為會一起打包發送給 docker 引擎,如果文件過多會造成過程緩慢。

2.2.1 RUN

用於執行後面跟著的命令行命令。有以下倆種格式:

shell 格式:

RUN <命令行命令># <命令行命令> 等同於,在終端操作的 shell 命令。

exec 格式:

RUN ["可執行文件", "參數1", "參數2"]# 例如:# RUN ["./test.php", "dev", "offline"] 等價於 RUN ./test.php dev offline

Dockerfile 的指令每執行一次都會在 docker 上新建一層。所以過多無意義的層,會造成鏡像膨脹過大。

FROM centosRUN yum -y install wgetRUN wget -O redis.tar.gz "http://download.redis.io/releases/redis-5.0.3.tar.gz"RUN tar -xvf redis.tar.gz

FROM centosRUN yum -y install wget \  && wget -O redis.tar.gz "http://download.redis.io/releases/redis-5.0.3.tar.gz" \  && tar -xvf redis.tar.gz

2.2.2 COPY

複製指令,從上下文目錄中複製文件或者目錄到容器裡指定路徑。

格式:

COPY [--chown=<user>:<group>] <源路徑1>...  <目標路徑>COPY [--chown=<user>:<group>] ["<源路徑1>",...  "<目標路徑>"]

[--chown=<user>:<group>]:可選參數,用戶改變複製到容器內文件的擁有者和屬組。

COPY ['source1.txt', 'source2.txt', 'source3.txt', 'Path']

2.2.3 ADD

ADD 指令和 COPY 的使用格類似(同樣需求下,官方推薦使用 COPY)。功能也類似,不同之處如下:

ADD 的優點:在執行 <源文件> 為 tar 壓縮文件的話,壓縮格式為 gzip, bzip2 以及 xz 的情況下,會自動複製並解壓到 <目標路徑>。

ADD 的缺點:在不解壓的前提下,無法複製 tar 壓縮文件。會令鏡像構建緩存失效,從而可能會令鏡像構建變得比較緩慢。具體是否使用,可以根據是否需要自動解壓來決定。

2.2.4 CMD

類似於 RUN 指令,用於運行程序,但二者運行的時間點不同:

CMD 在 docker run 時運行。

RUN 是在 docker build。

用:為啟動的容器指定默認要運行的程序,程序運行結束,容器也就結束。CMD 指令指定的程序可被 docker run 命令行參數中指定要運行的程序所覆蓋。

注意如果 Dockerfile 中如果存在多個 CMD 指令,僅最後一個生效。

格式:

CMD <shell 命令> CMD ["<可執行文件或命令>","<param1>","<param2>",...]

2.2.5 ENV

設置環境變量,定義了環境變量,那麼在後續的指令中,就可以使用這個環境變量。

格式:

ENV <key> <value>ENV <key1>=<value1> <key2>=<value2>...

以下示例設置 NODE_VERSION = 7.2.0 , 在後續的指令中可以通過 $NODE_VERSION 引用:

ENV NODE_VERSION 7.2.0
RUN curl -SLO "https://nodejs.org/dist/v$NODE_VERSION/node-v$NODE_VERSION-linux-x64.tar.xz" \  && curl -SLO "https://nodejs.org/dist/v$NODE_VERSION/SHASUMS256.txt.asc"

ENV key1=value1 key2=value2

2.2.6 VOLUME

定義匿名數據卷。在啟動容器時忘記掛載數據卷,會自動掛載到匿名卷。

作用:

VOLUME ["<路徑1>", "<路徑2>"...]VOLUME <路徑>

在啟動容器 docker run 的時候,我們可以通過 -v 參數修改掛載點。

2.2.7 ENTRYPOINT

格式和 RUN 指令格式一樣,分為 exec 格式和 shell 格式。

ENTRYPOINT 的目的和 CMD 一樣,都是在指定容器啟動程序及參數。

ENTRYPOINT 在運行時也可以替代,不過比 CMD 要略顯繁瑣,需要通過 docker run 的參數 --entrypoint 來指定。

當指定了 ENTRYPOINT 後,CMD 的含義就發生了改變,不再是直接的運行其命令,而是將 CMD 的內容作為參數傳給 ENTRYPOINT 指令,換句話說實際執行時,將變為:

相關焦點

  • 【長篇博文】Docker學習筆記與深度學習環境的搭建和部署(一)
    docker學習筆記    0.2 Docker架構1 註冊、登錄、
  • 【Docker 系列】docker 學習 二,Docker 的常用命令
    【Docker 系列】docker 學習 二,Docker 的常用命令基本幫助命令# 查看 docker 的基本版本信息docker version# 查看 docker 的系統信息,如鏡像和容器數量docker info# 查看某個命令的幫助docker xx命令 --help
  • 生信學習第一步!免費領取一套docker虛擬機!
    我們都知道,windows下安裝軟體是極其簡單的,點點滑鼠就搞定了,但是linux中安裝軟體就麻煩多了,很多人不是不喜愛生信學習,只是把學習熱情消磨在軟體安裝中了!那麼,有沒有好的方法規避這隻攔路虎呢?
  • docker學習筆記
    docker學習筆記1 docker環境安裝1.1 安裝yum-utils yum install -
  • Docker學習之Dockerfile詳解
    上一篇學習了docker的基礎,知道docker有三大概念,鏡像,容器和倉庫。使用第三方鏡像不是學習docker的最終目的,最想要的還是要自己構建鏡像。    將自己的程序、文件、環境等構建成自己想要的應用鏡像、方便後續部署、啟動、維護。
  • Docker學習之docker-compose詳解
    通過前面兩篇的學習,我們可以通過 Dockerfile 文件讓用戶很方便的定義一個單獨的應用容器。然後,在日常工作中,經常會碰到需要多個容器相互配合來完成某項任務的情況。項目(project): 由一組關聯的應用容器組成的一個完整的業務單元, 在 docker-compose 中定義docker-compose.yml 文件詳解Docker compose 允許用戶通過 docker-compose.yml 文件來定義一組相關聯的容器為一個工程。
  • 【20210109】Docker學習筆記
    docker load -i /tongfu.net/docker/backup/base.tgz10.Docker數據目錄遷移(move data directory)10.1 遷移數據目錄10.1.1 停止服務10.1.2 移動數據目錄mv /var/lib/docker /data/docker10.1.3 建立符號連結ln -s /data/docker /var/lib/docker
  • Docker超詳細學習筆記
    大家好,我是java時光,以下是我吐血總結的Docker學習文檔,有詳細的案例,可以達到更好的學習效果!
  • Docker(一)-CentOS7中安裝Docker視頻教程
    本文使用視頻的方式展示在CentOS7系統中安裝Docker,本文更適合於準備入門學習Docker的童靴,同時也歡迎各路大神給我們指點提建議。二、環境CentOS7三、安裝Docker確認Linux內核版本卸載舊版本             docker-client \             docker-client-latest \             docker-common \             docke
  • 免費學習 Docker 的最佳方法:Play-with-docker(PWD)
    去年在柏林的分布式系統峰會上,Docker 的負責人 Marcos Nils[1] 和 Jonathan Leibiusky[2] 宣稱已經開始研究瀏覽器內置 Docker 的方案,幫助人們學習
  • 通過Docker部署深度學習項目環境
    深度學習環境部署的方法有很多種,其中Docker化深度學習環境和項目是一個很不錯的選擇。
  • 我的Docker學習筆記(基礎篇)
    鏡像(images)Docker 鏡像是Docker容器運行時的只讀模板,每一個鏡像由一系列的層為什麼要學習docker我學習docker主要是因為Go,也是為了更好的實現devops的橋接,隨著caas平臺的推進,和打包即應用的快速部署等吸引所驅使。
  • Docker實戰學習筆記(附源碼)
    docker stop [容器名稱|容器ID]docker restart [容器名稱|容器ID]docker logs [容器名稱|容器ID]docker psdocker create nginx容器中執行命令docker exec [容器名稱|容器ID] 命令docker run ‐d ‐‐name namespaceA busybox
  • Docker之Dockerfle實戰(一)
    使用dockerfile主要是用於構建docker鏡像文件信息,相當於一個腳本,通過dockerfile自己的指令,來構建軟體依賴,文件依賴,存儲等等情況。      在docker中創建鏡像可以分為兩個方法,這兩個方法具體可以總結為如下:dockerfile的主要組成部分可以匯總為:     dockerfile的指令主要可以匯總為如下
  • 啟用Docker虛擬機GPU,加速深度學習
    但我覺得還是有必要記錄一下我最近一次的深度學習環境配置,主要原因在於各種軟體在快速更新,對應的安裝配置方法也會有一些變化。這篇深度學習環境配置有兩個關鍵詞,一個是Docker虛擬機,另一個是GPU加速。開始之前Docker虛擬機首先說一下Docker虛擬機。為什麼需要虛擬機?
  • Docker學習筆記(二)——Docker安裝
    複製代碼Step 4.2: 安裝指定版本的Docker-CE: (把下面VERSION改成指定版本即可)sudo apt-get -y install docker-ce=[VERSION]複製代碼Step 5: 查看docker是否啟動systemctl status docker複製代碼
  • Docker/K8S再學習
    前面寫了一篇文章《Docker和hadoop》,直言docker並不是Hadoop體系的關鍵技術,當前階段只是作為大數據體系的一個很小的補充,更適合在應用領域的開發、應用和部署。其他相關閱讀:簡單3步,docker跑起來快速理解dockerdocker:一種值得關注的開源應用容器說到docker,兩家公司不得不提,這也是docker領域的核心玩家:1)Docker Inc.
  • Docker問答錄系列——Docker引擎相關問題(一)
    文中內容絕對乾貨,強烈學習Docker的讀者一讀!本次主要介紹Docker引擎基礎概念相關方面的一些問題。Docker引擎相關問題宿主如果和容器系統不同的話,那不是和虛擬機一樣,一層層的調用,那麼 Docker 和虛擬機還有什麼差別?
  • 通過構建微服務來學習Docker
    為了繼續學習和使用本文章的以下內容,第一步你需要安裝Docker。以下是基於你的平臺的安裝指南docs.docker.com/engine/installation。假如是在使用Mac或者Windows,那麼你可以考慮使用虛擬機。在Mac OS X上用的是Parallels來運行Ubuntu以支持大多數的開發活動。
  • 一道ctf題目的docker學習
    一道ctf題目的docker學習lctf_2018_bestphp_s_revenge