Docker做爲開源社區最火爆的項目,它是在Linux容器裏運行應用的開源工具,是一種輕量級的「虛擬機」
。css
傳統的虛擬化技術的體系架構
可見,咱們在宿主機的操做系統上,可安裝多個虛擬機,而在每一個虛擬機中,經過虛擬化技術,實現了一個虛擬操做系統,隨後,就能夠在該虛擬操做系統上,安裝本身所需的應用程序了。
咱們知道,啓動虛擬機就像啓動一臺計算機,初始化過程是至關慢的,須要等好久,才能看到登陸界面。一旦虛擬機啓動之後,就能夠與宿主機創建網絡鏈接,確保虛擬機與宿主機之間是互聯互通的。不一樣的虛擬機之間倒是相互隔離的,也就是說,彼此並不知道對方的存在,但每一個虛擬機佔用的都是宿主機的硬件與網絡資源。linux
Docker技術的體系架構
web
可見,在宿主機的操做系統上,有一個 Docker 服務在運行(或者稱爲「Docker 引擎」),在此服務上,咱們可開啓多個 Docker 容器,而每一個 Docker 容器中可運行本身所需的應用程序,Docker 容器之間也是相互隔離的,一樣地,都是佔用的宿主機的硬件與網絡資源。
Docker 容器相對於虛擬機而言,除了在技術實現上徹底不同之外,啓動速度較虛擬機而言有本質的飛躍,啓動一個容器只在眨眼瞬間。無論是虛擬機仍是 Docker 容器,它們都是爲了隔離應用程序的運行環境,節省咱們的硬件資源,爲咱們開發人員提供福利。docker
如今須要能方便地建立運行在雲平臺上的應用,必需要脫離底層的硬件,同時還須要任什麼時候間、地點可獲取這些資源,這正是Docker所能提供的。
Docker的容器技術能夠在一條主句上輕鬆爲任何應用建立一個輕量級的、可移植的、自給自足的容器。經過這種容器打包應用程序,意味着簡化了從新部署、調試這些瑣碎的重複工做,極大地提升了工做效率。
好比:服務器從騰訊雲遷移到阿里雲,若是採用了Docker容器技術,遷移只須要在新的服務器上啓動須要的容器便可。shell
1)Image(鏡像)
鏡像是建立docker容器的基礎,docker鏡像相似於虛擬機鏡像,能夠將它理解爲一個面向docker引擎的只讀模塊,包含文件系統。鏡像能夠用來建立Docker容器,一個鏡像能夠建立多個容器
。ubuntu
Docker提供了簡單的機制來建立和更新現有的進行,用戶也能夠從網上下載已經作好的應用進行來直接使用。vim
2)Container(容器)
容器是從鏡像建立的應用運行實例,容器之間是相互隔離、互不可見的。能夠把容器看作一個簡易版的linux系統環境
(包括root權限、進程空間、用戶空間和網絡空間等),以及運行在這個環境上的應用打包而成的應用盒子。它能夠被啓動、開始、中止、刪除,每一個容器都是相互隔離的、保證安全的平臺
。centos
3)Repository(倉庫)
Docker倉庫是用來集中保存鏡像的地方,當建立了本身的鏡像以後,可使用命令將它上傳到公有倉庫或私有倉庫,這樣一來當下次要在另一條機器上使用這個鏡像是,只需從倉庫拉取下來便可!瀏覽器
倉庫註冊服務器是存放倉庫的地方,其中包含了多個倉庫,每一個倉庫集中存放某一類鏡像,而且使用不一樣的標籤來區分它們。目前最大的公有倉庫Docker Hub,存放了數量龐大的鏡像提供用戶下載使用。tomcat
總結:**Docker自己是一個容器運行載體或稱之爲管理引擎,咱們把應用程序和配置依賴打包好造成一個可交付的運行環境,這個打包好的運行環境就彷佛image鏡像文件。只有經過這個鏡像文件才能生成Docker容器。image文件能夠看做是容器的模板,Docker根據image文件生成的示例,同一個image文件能夠生成多個同時運行的容器實例。**
**image文件生成的容器實例,自己也是一個文件。稱之爲鏡像文件**
****一個容器運行一種服務。當咱們須要的時候,就能夠經過docker客戶端創建一個對應的運行實例。也i就是咱們的容器**
**至於倉庫。就是放了一堆鏡像的地方,咱們能夠把鏡像發佈到倉庫中,須要的時候從倉庫中拉下來就能夠了**
1.檢查內核版本,返回的值大於3.10便可。
[root@zjz ~]# uname -r
[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
//查看docker-ce可用版本 yum list docker-ce.x86_64 --showduplicates | sort -r //這裏咱們下載指定版本18.9.0,注意並無採起阿里雲官方推薦的方法, 咱們分別下載了docker-ce,docker-ce-cli和containerd.io這3個組件。 yum -y install docker-ce-18.09.0-3.el7 docker-ce-cli-18.09.0-3.el7 containerd.io-1.2.10-el7
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
命令
————————————————————————————————————————————————————————————————————————————————安裝完成了,也已經簡單的測試過了———————————————————————————————————————————————————————————————
阿里雲鏡像獲取地址:https://cr.console.aliyun.com/cnhangzhou/instances/mirrors,
登錄後,左側菜單選中鏡像加速器就能夠看到你的專屬地址了:
————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————
一.幫助命令
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:容器內路徑 目的主機路徑
——————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————
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(自定義端口)
一、從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 :隨機分配端口
這裏訪問時和上面同樣會報錯,照上面同樣改就行
改完以後,咱們再從新訪問:
二、故意刪除上一步鏡像生產tomcat容器的文檔
三、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容器數據卷能夠當作使咱們生活中經常使用的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來主機對應的默認地址
最後測試一下
1.數據卷容器什麼?
命名的容器掛載數據卷,其它容器經過掛載這個(父容器)實現數據共享,掛載數據卷的容器,稱之爲數據卷容器
上面介紹了docker容器數據卷,它的做用至關於生活中的活動硬盤,那麼數據卷容器就至關於把多個活動硬盤再掛載到一個活動硬盤上,實現數據的傳遞依賴。
1.先啓動一個父容器dc01,在dc01建立dc01.txt
2.dc02/dc03繼承自dc01,dc02建立dc02.txt,dc03建立dc03.txt
3.回到dc01能夠看到dc02/dc03各自添加的都能共享了
上圖中能夠看到dc0一、dc0二、dc03數據共享了
4.刪除dc01,dc02修改後dc03能否訪問
上圖中能夠看到刪除了dc01,在dc02中建立新的文件,dc03中能夠訪問
結論:容器之間配置信息的傳遞,數據卷的生命週期一直持續到沒有容器使用它爲止
——————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————
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.將阿里雲上的鏡像下載到本地
我這裏爲了測試先刪除了我本機有的鏡像