4-什么是Image和container

4-什么是Image和container

什么是Image?

先練習一個例子:

docker pull ubuntu:16.04
docker image ls    # 查看鏡像

鏡像類似于一個系統安裝光盤,你可以使用一個安裝光盤為多臺電腦安裝操作系統,同樣,你也可以用同一個鏡像構建多個運行的 Docker 實體——容器。當你使用同一張安裝光盤給多臺電腦安裝系統之后,這些電腦的系統是完全一樣的,換句話說,安裝光盤的內容是不變的。同理,鏡像也是一個靜態的概念,從同一個鏡像運行的 Docker 容器也都是一樣的,鏡像的內容在生成之后就不再改變!

Docker 鏡像是一個特殊的文件系統,類似于 Linux 的 root 文件系統,鏡像提供了容器運行時所需的程序、庫、資源、配置等文件,還包含了一些為運行時準備的一些配置參數。鏡像是一個靜態的概念,鏡像不包含任何動態數據,其內容在構建之后也不會被改變。

由于鏡像包含完整的 Linux root 文件系統,所以它可能會很龐大。因此,Docker 的設計者充分利用 Unions FS 技術,把 Docker 設計為分層存儲的結構,什么意思呢?
意思是說,鏡像是分層構建的,每一層是上面一層的基礎,每一層在構建完成之后都不會再發生變化,這提醒我們,構建鏡像的時候我們要保證每一層都只包含我們的應用需要的東西,不要有包含不需要的文件,因為每一層在構建之后不再發生變化,所以即使你在之上的層刪除了那些不需要的文件,這些文件也只是被標記為刪除,實際上并沒有真正刪除;如果每一層都包含一些可有可無的文件,就會使得我們的鏡像越來越臃腫。通過之前的敘述,我們可以看出,一個鏡像實際上并不是一個文件,而是一組分層文件。分層存儲還使得不同的鏡像可以共享某些層,便于鏡像的復用。

什么是container?

你可以從鏡像創建容器,就像從快照創建虛擬機一樣。容器是一個動態的概念,你的程
序都是在容器里運行的。

容器就是一個進程,但是它有自己獨立的命名空間,擁有自己獨立的文件系統,獨立的
網絡等資源。因此,容器就好像一個完全獨立于宿主主機的操作系統一樣,完全可以被
當做一個獨立的操作系統使用。
容器也是分層存儲的,當你從一個鏡像創建并運行一個容器的時候,是以鏡像作為基礎
層,在此之上創建一個容器的存儲層,你對容器的讀寫都是在這一層完成的。但是當容
器消亡的時候,容器的存儲層也會隨之消失。因此,我們不應該在容器的存儲層寫入數
據,文件的寫入操作需要使用其它的方式,這會在之后的教程介紹。
我們現在只需要知道,容器和鏡像都是分層存儲的,并了解容器和鏡像的關系就足夠
了。

鏡像和容器的關系 就好比 面向對象編程中的 類 與 實例

練習

  1. pull 一個 ubuntu16.04鏡像
    如果不知道有哪些鏡像可以搜索

    docker search ubuntu
    

    拉取16.04版本

    docker pull ubuntu:16.04
    16.04: Pulling from library/ubuntu
    Digest: sha256:e4a134999bea4abb4a27bc437e6118fdddfb172e1b9d683129b74d254af51675
    Status: Image is up to date for ubuntu:16.04
    
  2. 創建一個容器

    docker run --name ubuntu-demo ubuntu:16.04
    

    此時docker ps命令是查看不到的,說明他創建完成后就退出了,通過docker ps -a查看。
    這是因為這個容器并不能占用一個進程一直跑。此時我們可以這樣使用

    docker run -it --name ubuntu-demo ubuntu:16.04 /bin/bash
    

    此方式為交互式的運行,讓我們可以進入一個終端

    此時 ubuntu:16.04鏡像就好比一個類,而 ubuntu-demo 容器就是實例

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/536042.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/536042.shtml
英文地址,請注明出處:http://en.pswp.cn/news/536042.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

5-Dockerfile文件

5-Dockerfile文件 先練習一個例子: 創建 Dockerfile 文件 FROM ubuntu:14.04 LABEL maintainer"vincent <jeffmanwordgmail.com>" RUN apt-get update && apt-get install -y redis-server EXPOSE 6397 ENTRYPOINT [ "/usr/bin/redis-server&quo…

6-搭建一個私有registry

6-搭建一個私有registry docker hub 查找 registry docker hub registry 可以看到部署很簡單&#xff0c;只有一條命令。 docker run -d -p 5000:5000 --restart always --name registry registry:2部署私有registry 找一臺linux的服務器并安裝好docker 在此服務器上部署re…

7-深入練習Dockerfile

7-深入練習Dockerfile 創建一個json-server 鏡像 首先創建一個 json-server 文件夾 mkdir json-server在json-server文件夾下創建Dockerfile FROM node:10.15.0 RUN npm install -g json-server構建鏡像 docker build -t json-server .創建一個api服務的鏡像 首先創建一個 …

8-容器操作

8-容器操作 普通操作 進入容器 docker exec -it api /bin/bash容器停止與啟動 docker stop api docker start api容器重啟 docker restart api查看容器詳細信息 docker inspect api查看日志 docker logs api容器刪除 docker stop api # 必須先停止才能刪除 docker rm…

9-資源限制

9-資源限制 了解stress工具 stress是一個壓力測試工具 docker run -it ubuntu:16.04此時會進入ubuntu內&#xff0c;這時我們安裝 stress工具 apt-get update && apt-get install -y stress查看help stress --helpUsage: stress [OPTION [ARG]] ...-?, --help …

10-Docker 網絡

10-Docker 網絡 基礎網絡概念 數據傳輸通過數據包 兩臺筆記本之間通信是通過數據包通信的。想知道數據包是怎么打包的呢&#xff0c;就先要知道網絡分層的概念。 網絡分層 目前有兩種網絡分層的模型。 ISO/OSI 分層&#xff0c;也就是 7 層模型。TCP/IP 分層&#xff0c;也就…

11-Docker Bridge詳解

11-Docker Bridge詳解 容器之間是如何通信的&#xff1f; 操作前刪除test2的容器。 查看當前機器上docker的網絡 docker network lsNETWORK ID NAME DRIVER SCOPE 056d0ece100f bridge bridge local a…

12-容器之間link

12-容器之間link 這篇主要講 容器之間如何 link。 需要準備的是&#xff0c;創建兩個容器 test1 和 test2 通過 busybox。 在之前的課程中已經創建的只需要重新啟動即可。 什么情況下需要link 例如有一個容器是 web 服務器&#xff0c;并且跑在一個docker容器內&#xff0c;…

13-容器的端口映射

13-容器的端口映射 部署一個簡單web nginx容器 docker run -d --name web nginxnginx 默認的端口是 80 端口&#xff0c;此時我們是沒有辦法訪問的。 好的&#xff0c;通過前面的學習我們已經知道&#xff0c;這個 web 容器四連接到 bridge 網橋上的&#xff0c;那我們查看一…

14-容器網絡之host和none

14-容器網絡之host和none 在之前的小節&#xff0c;我們有看到過 host 和 none。 通過 docker network ls 查看。 none 網絡 刪除 test1 容器 docker stop test1 && docker rm test1創建 test1 容器并連接到none網絡 docker run -d --name test1 --network none busy…

15-多容器復雜應用的部署

15-多容器復雜應用的部署 此節主要是通過部署一個復雜的應用場景&#xff0c;進而練習容器的網絡相關知識。 創建一個flask-web應用 創建一個 flask-web 文件夾 mkdir flask-web在此文件夾內創建 app.py 文件 cd flask-web touch app.py編寫一個簡單的 web 程序 import os im…

16-多機器通信

16-多機器通信 回顧上節課的思考題。 flask-redis 想訪問 redis&#xff0c;該如何通信&#xff1f; 創建另外一臺linux虛擬機 直接拷貝Vagrantfile文件創建一個 centos 虛擬機 我們創建一個centos7-2文件夾&#xff0c;然后創建虛擬機 vagrant up創建的過程中提示選擇網絡接…

17-Docker的數據持久化介紹

17-Docker的數據持久化介紹 回顧容器與鏡像 容器是在鏡像之上創建的一層運行時層&#xff0c;這一層是可以讀寫的&#xff0c;我們能夠在容器內添加數據&#xff0c;讀取數據。 也就是說我們在創建容器的時候&#xff0c;我們能夠在容器內創建文件&#xff0c;安裝軟件等等&a…

18-數據持久化-Data Volume

18-數據持久化-Data Volume Data Volume 使用場景。一般來講有些容器自己會產生一些數據&#xff0c;我們不想數據隨著容器的銷毀而銷毀&#xff0c;我們想保存數據&#xff0c;正常一般用在數據庫&#xff0c;比如我們想保存數據庫中的數據&#xff0c;這個時候我們就會使用 …

19-數據持久化-Bind Mounting

19-數據持久化-Bind Mounting Bind Mounting 與 Data Volume區別 Data Volume 需要在 Dockerfile 內聲明需要創建的 volume 目錄。 Bind Mounting 則不需要在 Dockerfile 聲明 volume&#xff0c;只需要在創建容器的時候&#xff0c;也就是 run 的時候聲明即可。 如: dock…

go自定義包教程

go自定義包教程 而是環境為 go version go1.11 linux/amd64linux mint 19 創建一個自定義的包 切換到src目錄下&#xff0c;創建demo目錄 cd src mkdir demo再創建smap 文件夾 cd demo mkdir smap創建包文件 cd smap touch map.gomap.go文件內容 package smapimport "…

在Linux中對硬盤進行分區、格式化和掛載

在Linux中對硬盤進行分區、格式化和掛載 我最近有一個全新的4-TB硬盤加入我的電腦。所以我需要在Linux中安裝它。為此&#xff0c;我需要執行以下操作&#xff1a; 分區格式化掛載檢查是否已安裝硬盤驅動器 分區 首先&#xff0c;在通過SATA和電源線將硬盤連接到計算機后&am…

Angular gitlab持續集成之runner配置

gitlab持續集成 安裝Runner 正常安裝 sudo wget -O /usr/local/bin/gitlab-runner https://gitlab-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-runner-linux-amd64sudo chmod x /usr/local/bin/gitlab-runner sudo useradd --comment GitLab Runner --creat…

javascript編譯壓縮

javascript編譯 js是JavaScript 源碼文件&#xff0c; .min.js是壓縮版的js文件。 .min.js文件經過壓縮&#xff0c;相對編譯前的js文件體積較小&#xff0c;傳輸效率快。經過編碼將變量和函數原命名改為毫無意義的命名&#xff0c;以防止他人窺視和竊取 js 源代碼 在線版 g…

vscode設置中文

vscode設置中文 當我們安裝完成vscode后&#xff0c;會發現它是中文的&#xff0c;因為默認情況下&#xff0c;vscode使用的語言為英文(us)。 那很多同學是不喜歡英文的&#xff0c;不是看不懂&#xff0c;而是不方便哈。 修改語言配置文件 使用快捷鍵組合【CtrlShiftp】 在…