docker——複習篇(六)

1.docker簡介

Docker作爲開源社區最火爆的項目,它是在Linux容器裏運行應用的開源工具,是一種輕量級的“虛擬機”

2.Docker與虛擬機的區別

在這裏插入圖片描述
傳統的虛擬化技術的體系架構
在這裏插入圖片描述
可見,我們在宿主機的操作系統上,可安裝多個虛擬機,而在每個虛擬機中,通過虛擬化技術,實現了一個虛擬操作系統,隨後,就可以在該虛擬操作系統上,安裝自己所需的應用程序了。
我們知道,啓動虛擬機就像啓動一臺計算機,初始化過程是相當慢的,需要等很久,才能看到登錄界面。一旦虛擬機啓動以後,就可以與宿主機建立網絡連接,確保虛擬機與宿主機之間是互聯互通的。不同的虛擬機之間卻是相互隔離的,也就是說,彼此並不知道對方的存在,但每個虛擬機佔用的都是宿主機的硬件與網絡資源。

Docker技術的體系架構
在這裏插入圖片描述

可見,在宿主機的操作系統上,有一個 Docker 服務在運行(或者稱爲“Docker 引擎”),在此服務上,我們可開啓多個 Docker 容器,而每個 Docker 容器中可運行自己所需的應用程序,Docker 容器之間也是相互隔離的,同樣地,都是佔用的宿主機的硬件與網絡資源。
Docker 容器相對於虛擬機而言,除了在技術實現上完全不一樣以外,啓動速度較虛擬機而言有本質的飛躍,啓動一個容器只在眨眼瞬間。不管是虛擬機還是 Docker 容器,它們都是爲了隔離應用程序的運行環境,節省我們的硬件資源,爲我們開發人員提供福利。

Docker的使用場景

現在需要能方便地創建運行在雲平臺上的應用,必須要脫離底層的硬件,同時還需要任何時間、地點可獲取這些資源,這正是Docker所能提供的。
Docker的容器技術可以在一條主句上輕鬆爲任何應用創建一個輕量級的、可移植的、自給自足的容器。通過這種容器打包應用程序,意味着簡化了重新部署、調試這些瑣碎的重複工作,極大地提高了工作效率。
比如:服務器從騰訊雲遷移到阿里雲,如果採用了Docker容器技術,遷移只需要在新的服務器上啓動需要的容器即可。

Docker的三大核心

1)Image(鏡像)
鏡像是創建docker容器的基礎,docker鏡像類似於虛擬機鏡像,可以將它理解爲一個面向docker引擎的只讀模塊,包含文件系統。鏡像可以用來創建Docker容器,一個鏡像可以創建多個容器

Docker提供了簡單的機制來創建和更新現有的進行,用戶也可以從網上下載已經做好的應用進行來直接使用。

2)Container(容器)
容器是從鏡像創建的應用運行實例,容器之間是相互隔離、互不可見的。可以把容器看做一個簡易版的linux系統環境(包括root權限、進程空間、用戶空間和網絡空間等),以及運行在這個環境上的應用打包而成的應用盒子。它可以被啓動、開始、停止、刪除,每個容器都是相互隔離的、保證安全的平臺

3)Repository(倉庫)
Docker倉庫是用來集中保存鏡像的地方,當創建了自己的鏡像之後,可以使用命令將它上傳到公有倉庫或私有倉庫,這樣一來當下次要在另外一條機器上使用這個鏡像是,只需從倉庫拉取下來即可!

倉庫註冊服務器是存放倉庫的地方,其中包含了多個倉庫,每個倉庫集中存放某一類鏡像,並且使用不同的標籤來區分它們。目前最大的公有倉庫Docker Hub,存放了數量龐大的鏡像提供用戶下載使用。

總結:
**Docker本身是一個容器運行載體或稱之爲管理引擎,我們把應用程序和配置依賴打包好形成一個可交付的運行環境,這個打包好的運行環境就似乎image鏡像文件。只有通過這個鏡像文件才能生成Docker容器。image文件可以看作是容器的模板,Docker根據image文件生成的示例,同一個image文件可以生成多個同時運行的容器實例。**

**image文件生成的容器實例,本身也是一個文件。稱之爲鏡像文件**

****一個容器運行一種服務。當我們需要的時候,就可以通過docker客戶端建立一個對應的運行實例。也i就是我們的容器**

**至於倉庫。就是放了一堆鏡像的地方,我們可以把鏡像發佈到倉庫中,需要的時候從倉庫中拉下來就可以了**

安裝Docker

1.檢查內核版本,返回的值大於3.10即可。

[root@zjz ~]# uname -r

在這裏插入圖片描述
2. 如果安裝過請先卸載,我這裏沒裝過。

[root@zjz ~]# yum remove docker \
> docker-client \
>  docker-client-latest \
> docker-common \
> docker-latest \
> docker-latest-logrotate \
>  docker-logrotate \
> docker-engine

在這裏插入圖片描述
3.安裝依賴

[root@zjz ~]# yum install -y yum-utils device-mapper-persistent-data lvm2

在這裏插入圖片描述
4.設置yum倉庫

[root@zjz ~]# yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

在這裏插入圖片描述
5.安裝最新版本docker

[root@zjz ~]# yum -y  install docker-ce docker-ce-cli containerd.io

在這裏插入圖片描述
6.啓動並加入開機啓動

[root@zjz ~]# systemctl start docker
[root@zjz ~]# systemctl enable docker

在這裏插入圖片描述
7.驗證是否安裝成功

[root@zjz ~]# docker version

在這裏插入圖片描述
不過一般不需要那麼多信息,所以一直用的是docker -v命令
在這裏插入圖片描述

————————————————————————————————————————————————————————————————————————————————安裝完成了,也已經簡單的測試過了———————————————————————————————————————————————————————————————

docker鏡像加速

阿里雲鏡像獲取地址:https://cr.console.aliyun.com/cnhangzhou/instances/mirrors,
登陸後,左側菜單選中鏡像加速器就可以看到你的專屬地址了:
在這裏插入圖片描述
在這裏插入圖片描述

測試運行hello-world

在這裏插入圖片描述
————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————

docker常用命令

一.幫助命令

docker version
顯示 Docker 版本信息。
docker info
顯示 Docker 系統信息,包括鏡像和容器數。
docker --help
docker 命令幫助

Commands:
    attach    Attach to a running container                 # 當前 shell 下 attach 連接指定運行鏡像
    build     Build an image from a Dockerfile              # 通過 Dockerfile 定製鏡像
    commit    Create a new image from a container's changes # 提交當前容器爲新的鏡像
    cp        Copy files/folders from the containers filesystem to the host path
              # 從容器中拷貝指定文件或者目錄到宿主機中
    create    Create a new container                        # 創建一個新的容器,同 run,但不啓動容器
    diff      Inspect changes on a container's filesystem   # 查看 docker 容器變化
    events    Get real time events from the server          # 從 docker 服務獲取容器實時事件
    exec      Run a command in an existing container        # 在已存在的容器上運行命令
    export    Stream the contents of a container as a tar archive   
              # 導出容器的內容流作爲一個 tar 歸檔文件[對應 import ]
    history   Show the history of an image                  # 展示一個鏡像形成歷史
    images    List images                                   # 列出系統當前鏡像
    import    Create a new filesystem image from the contents of a tarball  
              # 從tar包中的內容創建一個新的文件系統映像[對應 export]
    info      Display system-wide information               # 顯示系統相關信息
    inspect   Return low-level information on a container   # 查看容器詳細信息
    kill      Kill a running container                      # kill 指定 docker 容器
    load      Load an image from a tar archive              # 從一個 tar 包中加載一個鏡像[對應 save]
    login     Register or Login to the docker registry server   
              # 註冊或者登陸一個 docker 源服務器
    logout    Log out from a Docker registry server         # 從當前 Docker registry 退出
    logs      Fetch the logs of a container                 # 輸出當前容器日誌信息
    port      Lookup the public-facing port which is NAT-ed to PRIVATE_PORT
              # 查看映射端口對應的容器內部源端口
    pause     Pause all processes within a container        # 暫停容器
    ps        List containers                               # 列出容器列表
    pull      Pull an image or a repository from the docker registry server
              # 從docker鏡像源服務器拉取指定鏡像或者庫鏡像
    push      Push an image or a repository to the docker registry server
              # 推送指定鏡像或者庫鏡像至docker源服務器
    restart   Restart a running container                   # 重啓運行的容器
    rm        Remove one or more containers                 # 移除一個或者多個容器
    rmi       Remove one or more images                 
              # 移除一個或多個鏡像[無容器使用該鏡像纔可刪除,否則需刪除相關容器纔可繼續或 -f 強制刪除]
    run       Run a command in a new container
              # 創建一個新的容器並運行一個命令
    save      Save an image to a tar archive                # 保存一個鏡像爲一個 tar 包[對應 load]
    search    Search for an image on the Docker Hub         # 在 docker hub 中搜索鏡像
    start     Start a stopped containers                    # 啓動容器
    stop      Stop a running containers                     # 停止容器
    tag       Tag an image into a repository                # 給源中鏡像打標籤
    top       Lookup the running processes of a container   # 查看容器中運行的進程信息
    unpause   Unpause a paused container                    # 取消暫停容器
    version   Show the docker version information           # 查看 docker 版本號
    wait      Block until a container stops, then print its exit code   
              # 截取容器停止時的退出狀態值

——————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————
二.鏡像命令
1.

docker images  #列出本地主機上的鏡像

例子
在這裏插入圖片描述

參數說明:
REPOSITORY:表示競像的倉庫源
TAG: 鏡像的標籤
IMAGE lID:鏡像ID
CREATED:鏡像創建時間
SIZE:鏡像大小

同一倉庫源可以有多個TAG,代表這個倉庫源的不同個版本,我們使用REPOSITORY:TAG來定義不同的鏡像。
如果你不指定一個鏡像的版本標籤,例如你只使用ubuntu, docker 將默認使用ubuntu:latest 鏡像

OPTIONS說明:

-a :列出本地所有的鏡像(含中間映像層,默認情況下,過濾掉中間映像層);

--digests :顯示鏡像的摘要信息;

-f :顯示滿足條件的鏡像;

--format :指定返回值的模板文件;

--no-trunc :顯示完整的鏡像信息;

-q :只顯示鏡像ID。

——————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————
2.

docker search 某個xxx鏡像的名字  #查找鏡像

例子:
在這裏插入圖片描述

參數說明:

NAME: 鏡像倉庫源的名稱

DESCRIPTION: 鏡像的描述

OFFICIAL: 是否 docker 官方發佈

stars: 類似 Github 裏面的 star,表示點贊、喜歡的意思。

AUTOMATED: 自動構建。
OPTIONS說明:

--automated :只列出 automated build類型的鏡像;

--no-trunc :顯示完整的鏡像描述;

-s :列出收藏數不小於指定值的鏡像。

——————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————
3.

docker pull 某個xxx鏡像名字 #從鏡像倉庫中拉取或者更新指定鏡像

例子
在這裏插入圖片描述

OPTIONS說明:

-a :拉取所有 tagged 鏡像

--disable-content-trust :忽略鏡像的校驗,默認開啓

——————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————
4.

docker rmi 某個xxx鏡像名字id  #刪除鏡像。
docker rmi -f鏡像ID  #刪除單個
docker rmi -f鏡像名1:TAG鏡像名2:TAG  #刪除多個
docker rmi -f $(docker images -qa) #刪除全部

例子
在這裏插入圖片描述
上圖中紫色框中可以看到報錯
守護進程的錯誤響應:衝突:無法刪除存儲庫引用“hello -world”(必須強制)——容器fce867c8363e正在使用其引用的映像bf756fb1ae65

OPTIONS說明:

-f :強制刪除;

--no-prune :不移除該鏡像的過程鏡像,默認移除;

————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————
三.容器命令
有鏡像才能創建容器,這是根本前提(下載一個centos鏡像演示)
1.新建並啓動交互式容器【前臺運行】

docker run [OPTIONS] IMAGE [COMMAND] [ARG..]
OPTIONS說明:
--name="容器新名字":爲容器指定一個名稱;
-d:後臺運行容器,並返回容器ID, 也即啓動守護式容器;
-i: 以交互模式運行容器,通常與-t同時使用: 
-t: 爲容器重新分配一個僞輸入終端,通常與-i同時使用;
-P:隨機端口映射;
-p:指定端口映射,有以下四種格式
ip:hostPort:containerPort
ip:containerPort
hostPort:containerPort
containerPort

在這裏插入圖片描述
2.列出當前所有正在運行的容器

docker ps [OPTIONS]
OPTIONS說明(常用) :
-a :列出當前所有正在運行的容器+歷史上運行過的
-l:顯示最近創建的容器。
-n:顯示最近n個創建的容器。
-q :靜默模式,只顯示容器編號。
--no-trunc :不截斷輸出。

在這裏插入圖片描述
3.退出容器

兩種退出方式
①exit #容器停止退出
②ctrl+p+q #容器不停止退出

在這裏插入圖片描述
4.啓動容器

docker start 容器id或者容器名

在這裏插入圖片描述
5.重啓容器

docker restart 容器id或者容器名

在這裏插入圖片描述
6.停止容器

docker stop 容器id或者容器名

在這裏插入圖片描述
7.強制停止容器

docker kill 容器id或者容器名

在這裏插入圖片描述
8.刪除已停止的容器

docker rm 容器id 
一次性刪除多個容器
docker rm -f $(docker ps -a -q)
docker ps -a -q | xargs docker rm

在這裏插入圖片描述
9.啓動守護式容器【後臺運行】

docker run -d 容器名

在這裏插入圖片描述

10.查看容器日誌

docker logs [-f -t --tail ]容器id
-t是加入時間戳
-f跟隨最新的日誌打印
--tail數字顯示最後多少條

在這裏插入圖片描述
11.查看容器內運行的進程

docker top 容器id

在這裏插入圖片描述
12.查看容器內部細節

docker inspect 容器id

在這裏插入圖片描述
13.進入正在運行的容器並以命令行交互

docker exec -it 容器id 
docker attach 容器id 
attach 【進入容器裏執行命令】
直接進入容器啓動命令的終端,不會啓動新的進程
exec 【在容器外面也可以執行命令】
是在容器中打開新的終端,並且可以啓動新的進程

在這裏插入圖片描述
14.從容器內複製文件到主機上
docker cp 容器id:容器內路徑 目的主機路徑
在這裏插入圖片描述
——————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————

docker鏡像

1.是什麼
鏡像是一種輕量級、可執行的獨立軟件包,用來打包軟件運行環境和基於運行環境開發的軟件,它包含運行某個軟件所需的所有內容包括代碼、運行時、庫、環境變量和配置文件。

UnionFS(聯合文件系統)
UnionFS(聯合文件系統):Union文件系統(UnionFS)是一種分層、輕量級並且高性能的文件系統,它支持對文件系統的修改作爲一次提交來一層層的疊加,同時可以將不同目錄掛載到同一個虛擬文件系統下(unite several directories into a single virtual filesystem)。Union 文件系統是 Docker 鏡像的基礎。鏡像可以通過分層來進行繼承,基於基礎鏡像(沒有父鏡像),可以製作各種具體的應用鏡像。

特性:一次同時加載多個文件系統,但從外面看起來,只能看到一個文件系統,聯合加載會把各層文件系統疊加起來,這樣最終的文件系統會包含所有底層的文件和目錄

Docker鏡像加載原理
docker的鏡像實際上由一層一層的文件系統組成,這種層級的文件系統UnionFS。
bootfs(boot file system)主要包含bootloader和kernel, bootloader主要是引導加載kernel, Linux剛啓動時會加載bootfs文件系統,在Docker鏡像的最底層是bootfs。這一層與我們典型的Linux/Unix系統是一樣的,包含boot加載器和內核。當boot加載完成之後整個內核就都在內存中了,此時內存的使用權已由bootfs轉交給內核,此時系統也會卸載bootfs。
rootfs (root file system) ,在bootfs之上。包含的就是典型 Linux 系統中的 /dev, /proc, /bin, /etc 等標準目錄和文件。rootfs就是各種不同的操作系統發行版,比如Ubuntu,Centos等等。

平時我們安裝進虛擬機的CentOS都是好幾個G,爲什麼docker這裏才200M??
在這裏插入圖片描述
分層的鏡像
以我們的pull爲例,在下載的過程中我們可以看到docker的鏡像好像是在一層一層的在下載
在這裏插入圖片描述
爲什麼 Docker 鏡像要採用這種分層結構呢
最大的一個好處就是 - 共享資源

比如:有多個鏡像都從相同的 base 鏡像構建而來,那麼宿主機只需在磁盤上保存一份base鏡像,

同時內存中也只需加載一份 base 鏡像,就可以爲所有容器服務了。而且鏡像的每一層都可以被共享。

特點
Docker鏡像都是隻讀的
當容器啓動時,一個新的可寫層被加載到鏡像的頂部。
這一層通常被稱作“容器層”,“容器層”之下的都叫“鏡像層”。

Docker鏡像commit操作補充

docker commit提交容器副本使之成爲一個新的鏡像
docker commit -m=“提交的描述信息” -a=“作者” 容器ID 要創建的目標鏡像名:[標籤名]

案例1(自定義端口)
1、從Hub上下載tomcat鏡像到本地併成功運行
-p 主機端口:docker容器端口【指定端口】

docker run -it -p 6666:8080 tomcat

i:交互
t:終端
6666:隨意指定
8080:tomcat端口

在這裏插入圖片描述
上圖報錯解決辦法

vim /etc/sysctl.conf #編輯此文件
net.ipv4.ip_forward=1  #添加這段代碼
systemctl restart network #重啓network服務
systemctl restart docker #重啓docker服務

再次執行,可以看到已成功
在這裏插入圖片描述
在這裏插入圖片描述
這時候已經在運行了,接下來,我們用瀏覽器訪問,
在這裏插入圖片描述
我這裏檢查完服務器端口8080已經開放了,接下來,我們進入tomcat的目錄:
然後查看到裏面發現有webapps和webapps.dist兩個文件,而wenapps裏面沒有東西,webapps.dist纔是我們要的東西
所以這裏把webapps刪掉,把webapps.dist改名爲webapps
在這裏插入圖片描述
改完之後,我們再重新訪問:
在這裏插入圖片描述
案例2(隨機端口)

docker run -it -P tomcat
i:交互
t:終端
-P :隨機分配端口

在這裏插入圖片描述
在這裏插入圖片描述
這裏訪問時和上面一樣會報錯,照上面一樣改就行
改完之後,我們再重新訪問:
在這裏插入圖片描述
2、故意刪除上一步鏡像生產tomcat容器的文檔
在這裏插入圖片描述
在這裏插入圖片描述
3、commit一個沒有doc的tomcat新鏡像
也即當前的tomcat運行實例是一個沒有文檔內容的容器,
以它爲模板commit一個沒有doc的tomcat新鏡像heian/tomcat:1.2

docker commit -a "zjz" -m "del tomcat docs" 5d65827eefe8 heian/tomcat:1.2

在這裏插入圖片描述
4.啓動我們的新鏡像並和原來的對比
在這裏插入圖片描述
可以看到這個容器沒有docs文檔
在這裏插入圖片描述

新啓動原來的tomcat,它有docs
在這裏插入圖片描述
——————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————

docker容器數據卷

docker容器數據卷是什麼?
當我們在使用docker容器的時候,會產生一系列的數據文件,這些數據文件在我們關閉docker容器時是會消失的,但是其中產生的部分內容我們是希望能夠把它給保存起來另作用途的,Docker將應用與運行環境打包成容器發佈,我們希望在運行過程鍾產生的部分數據是可以持久化的的,而且容器之間我們希望能夠實現數據共享。

通俗地來說,docker容器數據卷可以看成使我們生活中常用的u盤,它存在於一個或多個的容器中,由docker掛載到容器,但不屬於聯合文件系統,Docker不會在容器刪除時刪除其掛載的數據卷。

docker容器數據卷能幹嘛?
卷的設計目的就是數據的持久化,完全獨立與容器的生命週期,因此Docker不會在容器刪除時刪除其掛載的數據卷。

特點:

1:數據卷可以在容器之間共享或重用數據

2:數據卷中的更改可以直接生效

3:數據卷中的更改不會包含在鏡像的更新中

4:數據卷的生命週期一直持續到沒有容器使用它爲止

容器的持久化
容器間繼承+共享數據

添加數據卷的方式有兩種,第一種是直接通過命令行掛載,第二種是通過dockerFile添加
首先來說第一種通過命令行掛載的方式,命令如下:

docker run -it -v  /宿主機絕對路徑目錄:  /容器內目錄  鏡像名

這個命令會在宿主機和容器內分別建立兩個目錄,兩個目錄是對接的,裏面的數據可以共享
在這裏插入圖片描述
如果我們不知道數據卷是否掛載成功時,我們可以通過以下方式來檢查數據卷的掛載結果。

docker inspect  容器id

在這裏插入圖片描述
上面的命令可以查看容器的詳細情況,命令返回的是JSON格式的字符串,運行命令之後我們在返回的JSON字符串中找到Volumes屬性,假如掛載成功的話,Volumes裏面顯示的綁定結果應該是你在掛載時輸入的命令參數 (/宿主機絕對路徑目錄: /容器內目錄 ),如果與你們之前輸入的一致的話,證明掛載成功。PS: Volumes裏面顯示的綁定結果可能有多個,但是隻要找到目標結果就可以。掛載之後,當容器停止運行的時候,宿主機上對數據卷做的內容修改是會同步到容器內的。

我們再掛載的時候還可以給數據卷加上權限,假如我們要宿主機只能讀取容器的數據卷內容不能修改,我們可以添加只讀權限
在這裏插入圖片描述
同樣也可以用docker inspect 容器id 來查看
在這裏插入圖片描述
第二種是通過dockerFile添加
1.根目錄下新建mydocker文件夾進入
在這裏插入圖片描述
可在dockerfile中使用VOLUME指令來個鏡像添加一個或者多個數據卷

VOLUME["/dataVolumeContainer","/dataVolumeContainer2",/dataVolumeContainer3"]
說明:
出於可移植和分享的考慮,用-v 主機目錄:容器目錄這種方法不能夠直接在Dockerfile中實現。
由於宿主機目錄是依賴於特定宿主機的,並不能夠保證在所有的宿主機上都存在這樣的特定目錄。

2…file構建

編寫的dockerFile文件如下

FROM  鏡像名

VOLUME ["/生成的目錄路徑"]  -- privileged=true

CMD echo "success build" #輸出成功構建

CMD /bin/bash

在這裏插入圖片描述
3…build後生成鏡像
通過命令行docker build執行我們寫好的dockerFile文件(docker build和docker commit兩個命令都可以建立docker鏡像,docker commit 需要在容器內進行,docker build 不需要)
在這裏插入圖片描述
4.查看鏡像,登陸容器
在這裏插入圖片描述
5.容器內的卷目錄地址查看
在這裏插入圖片描述

6.使用docker inspect 容器id來主機對應的默認地址

在這裏插入圖片描述
最後測試一下
在這裏插入圖片描述

docker容器數據卷容器

1.數據卷容器什麼?
命名的容器掛載數據卷,其它容器通過掛載這個(父容器)實現數據共享,掛載數據卷的容器,稱之爲數據卷容器

上面介紹了docker容器數據卷,它的作用相當於生活中的活動硬盤,那麼數據卷容器就相當於把多個活動硬盤再掛載到一個活動硬盤上,實現數據的傳遞依賴。

1.先啓動一個父容器dc01,在dc01創建dc01.txt
在這裏插入圖片描述
2.dc02/dc03繼承自dc01,dc02創建dc02.txt,dc03創建dc03.txt
在這裏插入圖片描述
在這裏插入圖片描述
3.回到dc01可以看到dc02/dc03各自添加的都能共享了
在這裏插入圖片描述
上圖中可以看到dc01、dc02、dc03數據共享了
4.刪除dc01,dc02修改後dc03可否訪問
在這裏插入圖片描述
上圖中可以看到刪除了dc01,在dc02中創建新的文件,dc03中可以訪問

結論:容器之間配置信息的傳遞,數據卷的生命週期一直持續到沒有容器使用它爲止
——————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————

dockerfile詳細講解

dockerfile是什麼
Dockerfile.是用來構建Docker鏡像的構建文件,是由一系列命令和參數構成的腳本。

dockerfile構建三步驟 
 編寫Dockerfile文件  
 docker build  
 docker run

dockerfile構建過程解析
dockerfile內容基礎知識
1: 每條保留字指令都必須爲大寫字母且後面要跟隨至少一個參數
2: 指令按照從上到下,順序執行
3: #表示註釋
4:每條指令都會創建一個新的鏡像層,並對鏡像進行提交
docker執行dockerfile的大致流程
(1) docker從基礎鏡像運行一個容器
(2)執行一條指令並對容器作出修改
(3)執行類似docker commit的操作提交一 個新的鏡像層
(4) docker再基於剛提交的鏡像運行一個新容器
(5)執行dockerfile中的下一 條指令直到所有指令都執行完成
總結
從應用軟件的角度來看,Dockerfile、 Docker鏡像與Docker容器分別代表軟件的三個不同階段,
Dockerfile是軟件的原材料
Docker鏡像是軟件的交付品
Docker容器則可以認爲是軟件的運行態。
Dockerfile面向開發, Docker鏡像成爲交付標準,Docker容器則涉及部署與運維,三者缺一不可,合力充當Docker體系的基石。

在這裏插入圖片描述
1 Dockerfile, 需要定義個Dockerfile, Dockerfile定義了進程需要的一切東西。Dockerfile涉及的內容包括執行代碼或者是文件、環境、變量、依賴包、運行時環境、動態鏈接庫、操作系統的發行版、服務進程和內核進程(當應用進程需要和系統服務和內核進程打交道,這時需要考慮如何設計namespace的權限控制)等等;
2 Docker鏡像, 在用Dockerfile定義一個文件之後,docker build時會產生一個Pocker鏡像, 當運行Docker鏡像時, 會真正開始提供服
3 Docker容器, 容器是直接提供服務的。

dockerfile體系結構
在這裏插入圖片描述
Docker以從上到下的順序運行Dockerfile的指令。爲了指定基本映像,第一條指令必須是FROM。一個聲明以#字符開頭則被視爲註釋。可以在Docker文件中使用RUN,CMD,FROM,EXPOSE,ENV等指令。

在這裏列出了一些常用的指令。

在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
案例
Base鏡像(scratch)
DockerHub中99%的鏡像都是通過在base
鏡像中安裝和配置需要的軟件構建出來的
自定義鏡像mycentos
1.編寫
Hub默認CentOS鏡像什麼情況
在這裏插入圖片描述
編寫DockerFile文件
在這裏插入圖片描述
2.構建
docker build -t 新鏡像名字:TAG .

在這裏插入圖片描述
查看自定義的鏡像
在這裏插入圖片描述
3.運行
docker run -it 新鏡像名字:TAG
在這裏插入圖片描述
4.列出鏡像的變更歷史
docker history 鏡像名
在這裏插入圖片描述

本地鏡像發佈阿里雲

1.生成你想發佈的鏡像
在這裏插入圖片描述
2.登陸阿里雲
在這裏插入圖片描述
點擊創建鏡像倉庫
在這裏插入圖片描述
選擇地域——創建命名空間——倉庫空間——公開——摘要——描述信息

在這裏插入圖片描述
在這裏插入圖片描述
設置完成點擊下一步,選擇本地倉庫,點擊創建鏡像倉庫
在這裏插入圖片描述
完成
在這裏插入圖片描述
3.將鏡像推送到阿里雲
在這裏插入圖片描述

在這裏插入圖片描述
在阿里雲上查看

倉庫名稱
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
4.將阿里雲上的鏡像下載到本地
在這裏插入圖片描述
我這裏爲了測試先刪除了我本機有的鏡像
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章