Docker總結(jié):《Docker從入門到實戰(zhàn)(黃靖鈞)》

觀其大綱

第一篇 容器技術(shù)與Docker概念
1認(rèn)識容器技術(shù)
2 Docker基本概念
3 安裝和測試Docker
第二篇 Docker基礎(chǔ)知識
4 Docker基礎(chǔ)
5 Docker鏡像
6 Dockerfile文件
7 Docker倉庫
8 Docker容器
9 數(shù)據(jù)卷
10 網(wǎng)絡(luò)管理
第三篇 Docker進(jìn)階實戰(zhàn)
11 操作系統(tǒng)
12 編排工具-compose
13 web服務(wù)器與應(yīng)用
14 數(shù)據(jù)庫
15 編程語言
16 Docker API
17 私有倉庫
18 集群網(wǎng)絡(luò)
19 容器安全
20 Docker網(wǎng)絡(luò)生態(tài)

大綱細(xì)節(jié)

第1篇 容器技術(shù)與Docker概念
第1章 容器技術(shù)
1.1 什么是容器
1.2 容器技術(shù)的前世今生
1.3 容器的原理
1.4 容器云
1.5 容器與Docker
1.6 本章小結(jié)
第2章 Docker簡介
2.1 什么是Docker
2.2 Docker的功能及優(yōu)缺點
2.3 Docker和虛擬機
2.4 Docker與runC
2.5 Docker基本架構(gòu)
2.6 本章小結(jié)
第3章 安裝Docker
3.1 Linux系統(tǒng)
3.2 Windows與Mac OS系統(tǒng)
3.3 二進(jìn)制安裝
3.4 本章小結(jié)
第2篇 Docker基礎(chǔ)知識
第4章 Docker基礎(chǔ)
4.1 Docker基本操作
4.2 啟動第一個Docker容器
4.3 構(gòu)建第一個Docker鏡像
4.4 本章小結(jié)
第5章 Docker鏡像
5.1 認(rèn)識鏡像
5.2 創(chuàng)建鏡像
5.3 導(dǎo)出和導(dǎo)入鏡像
5.4 發(fā)布鏡像
5.5 刪除鏡像
5.6 Docker鏡像擴展
5.7 本章小結(jié)
第6章 Dockerfile文件
6.1 Dockerfile基本結(jié)構(gòu)
6.2 Dockerfile指令
6.3 鏡像構(gòu)建實戰(zhàn)
6.4 本章小結(jié)
第7章 Docker倉庫
7.1 官方倉庫Docker Hub
7.2 國內(nèi)鏡像倉庫
7.3 私有倉庫
7.4 Registry原理
7.5 本章小結(jié)
第8章 Docker容器
8.1 容器基本操作
8.2 進(jìn)入容器內(nèi)部
8.3 導(dǎo)出和導(dǎo)入容器
8.4 容器結(jié)構(gòu)
8.5 本章小結(jié)
第9章 數(shù)據(jù)卷
9.1 數(shù)據(jù)卷是什么
9.2 為容器掛載數(shù)據(jù)卷
9.3 備份璃氢、恢復(fù)、遷移數(shù)據(jù)卷
9.4 容器數(shù)據(jù)卷擴展
9.5 本章小結(jié)
第10章 網(wǎng)絡(luò)管理
10.1 Docker網(wǎng)絡(luò)基礎(chǔ)
10.2 Docker網(wǎng)絡(luò)模式
10.3 Docker網(wǎng)絡(luò)配置
10.4 本章小結(jié)
第3篇 Docker進(jìn)階實戰(zhàn)
第11章 操作系統(tǒng)
11.1 Alpine發(fā)行版
11.2 Busybox發(fā)行版
11.3 Debian/Ubuntu發(fā)行版
11.4 CentOS/Fedora發(fā)行版
11.5 CoreOS發(fā)行版
11.6 RancherOS發(fā)行版
11.7 本章小結(jié)
第12章 編排工具Compose
12.1 安裝Docker Compose
12.2 Compose命令基礎(chǔ)
12.3 Compose配置文件
12.4 Compose實戰(zhàn)
12.5 本章小結(jié)
第13章 Web服務(wù)器與應(yīng)用
13.1 Apache服務(wù)器
13.2 Nginx服務(wù)器
13.3 Tomcat服務(wù)器
13.4 其他Web服務(wù)器
13.5 本章小結(jié)
第14章 數(shù)據(jù)庫
14.1 MySQL數(shù)據(jù)庫
14.2 PostgreSQL數(shù)據(jù)庫
14.3 Redis數(shù)據(jù)庫
14.4 MongoDB數(shù)據(jù)庫
14.5 其他
14.6 本章小結(jié)
第15章 編程語言
15.1 C/C++語言
15.2 Golang語言
15.3 Java語言
15.4 JavaScript(Node.js)語言
15.5 PHP語言
15.6 Python語言
15.7 Swift語言
15.8 本章小結(jié)
第16章 Docker API介紹
16.1 認(rèn)識Docker API
16.2 Docker Remote API介紹
16.3 其他API
16.4 本章小結(jié)
第17章 私有倉庫
17.1 Docker Registry介紹
17.2 認(rèn)證與前端
17.3 企業(yè)級私有倉庫Harbor
17.4 私有倉庫前端授權(quán)工具Portus
17.5 本章小結(jié)
第18章 集群網(wǎng)絡(luò)
第19章 Docker安全




熟知概念

第1篇 容器技術(shù)與Docker概念
第1章 容器技術(shù)

  • 什么是容器
    容器映像是一個軟件的輕量級獨立可執(zhí)行軟件包粮揉,包含運行它所需的一切:代碼速侈,運行時叉谜,系統(tǒng)工具杰捂,系統(tǒng)庫废封,設(shè)置厂画。不管環(huán)境如何雅倒,集裝箱化軟件都可以運行相同的Linux和Windows應(yīng)用程序。容器將軟件與其周圍環(huán)境隔離開來月培,例如開發(fā)環(huán)境和登臺環(huán)境之間的差異,并有助于減少在同一基礎(chǔ)架構(gòu)上運行不同軟件的團隊之間的沖突恩急。


    what is a container?

LXC
Linux Container容器是一種內(nèi)核虛擬化技術(shù)杉畜,可以提供輕量級的虛擬化,以便隔離進(jìn)程和資源衷恭。

容器技術(shù)主要包括Cgroup和Namespace這兩個內(nèi)核特性此叠。
Cgroup
Cgroup是control group,又稱為控制組随珠,它主要是做資源控制灭袁。原理是將一組進(jìn)程放在放在一個控制組里,通過給這個控制組分配指定的可用資源窗看,達(dá)到控制這一組進(jìn)程可用資源的目的茸歧。
Namespace
Namespace又稱為命名空間,它主要做訪問隔離显沈。其原理是針對一類資源進(jìn)行抽象软瞎,并將其封裝在一起提供給一個容器使用逢唤,對于這類資源,因為每個容器都有自己的抽象涤浇,而他們彼此之間是不可見的鳖藕,所以就可以做到訪問隔離。

對于Linux容器的最小組成只锭,除了上面兩個抽象的技術(shù)概念還不夠著恩,完整的容器可以用以下公示描述:

容器=Cgroup+Namespace+rootfs+容器引擎(用戶態(tài)工具)。

其中各項功能分別為:
Cgroup:資源控制纹烹;
Namespace:訪問隔離页滚;
rootfs:文件系統(tǒng)隔離;
容器引擎:生命周期控制铺呵;

第2章 Docker簡介
2.1 什么是Docker

Docker是一個用于開發(fā)裹驰、遷移、運行的開發(fā)平臺片挂。它使你能夠?qū)⒛愕膽?yīng)用程序從基礎(chǔ)架構(gòu)中分離幻林,從而可以快速交付。使用Docker音念,你可以以與管理應(yīng)用程序相同的方式來管理這些基礎(chǔ)架構(gòu)沪饺。使用Docker的方法,進(jìn)行快速開發(fā)闷愤,測試整葡,并可以顯著的減少編寫代碼和運行之間的時間延遲。
就像官網(wǎng)上說的:Build讥脐,Ship遭居,and Run Any App, Anywhere

Docker基本架構(gòu)
docker主要有以下幾部分組成:

Docker Client 客戶端
Docker daemon 守護進(jìn)程
Docker Image 鏡像
Docker Container 容器
Docker Registry 倉庫

  • 客戶端和守護進(jìn)程:
    1 Docker是C/S(客戶端client-服務(wù)器server)架構(gòu)模式。
    docker通過客戶端連接守護進(jìn)程旬渠,通過命令向守護進(jìn)程發(fā)出請求俱萍,守護進(jìn)程通過一系列的操作返回結(jié)果。
    2 docker客戶端可以連接本地或者遠(yuǎn)程的守護進(jìn)程告丢。
    3 docker客戶端和服務(wù)器通過socket或RESTful API進(jìn)行通信枪蘑。


    docker架構(gòu)

第3章 安裝Docker

第2篇 Docker基礎(chǔ)知識
第4章 Docker基礎(chǔ)

常用命令表

  • 操作 命令
    實例

通用命令

  • 查看 docker 版本 docker version
    docker version
  • 查看 docker 信息 docker info
    docker info
  • 查看某命令 help 信息 docker help [command]
    docker help attach
  • 查看 docker help 信息 docker --help
    docker --help

容器操作命令

  • 創(chuàng)建 container docker create
    docker create chenhengjie123/xwalkdriver
  • 創(chuàng)建并運行 container docker run
    docker run chenhengjie123/xwalkdriver /bin/bash
  • 創(chuàng)建并運行 container 后進(jìn)入其 bash 控制臺
    docker run -t -i image /bin/bash
    docker run -t -i ubuntu /bin/bash
  • 創(chuàng)建并運行 container 并讓其在后臺運行,并端口映射
    docker run -p [port in container]:[port in physical system] -d [image] [command]
    docker run -p 5000:5000 -d training/webapp python app.py
  • 查看正在運行的所有 container 信息 docker ps
    docker ps
  • 查看最后創(chuàng)建的 container docker ps -l
    docker ps -l
  • 查看所有 container 岖免,包括正在運行和已經(jīng)關(guān)閉的 docker ps -a
    docker ps -a
  • 輸出指定 container 的 stdout 信息(用來看 log 岳颇,效果和 tail -f 類似,會實時輸出觅捆。)
    docker logs -f [container]
    docker logs -f nostalgic_morse
    補充 docker logs -f -t --since="2017-05-01" --tail=10 edu_web_01
  • 獲取 container 指定端口映射關(guān)系 docker port [container] [port]
    docker port nostalgic_morse 5000
  • 查看 container 進(jìn)程列表 docker top [container]
    docker top nostalgic_morse
  • 查看 container 詳細(xì)信息 docker inspect [container]
    docker inspect nostalgic_morse
  • 停止 continer docker stop [container]
    docker stop nostalgic_morse
  • 強制停止 container docker kill [container]
    docker kill nostalgic_morse
  • 啟動一個已經(jīng)停止的 container docker start [container]
    docker start nostalgic_morse
  • 重啟 container (若 container 處于關(guān)閉狀態(tài)赦役,則直接啟動)
    docker restart [container]
    docker restart nostalgic_morse
  • 刪除 container docker rm [container]
    docker rm nostalgic_morse

注意:命令中需要指定 container 時,既可使用其名稱栅炒,也可使用其 id 掂摔。

鏡像操作命令

  • 從 container 創(chuàng)建 image术羔, docker commit [container] [imageName]
    docker commit nostalgic_morse ouruser/sinatra:v2
  • 從 Dockerfile 創(chuàng)建 image, docker build -t [imageName] [pathToFolder]
    docker build ouruser/sinatra:v3 .
  • 查看本地所有 image乙漓, docker images
    docker images
  • 顯示鏡像構(gòu)建歷史 docker history [OPTIONS] IMAGE
    docker history runoob/ubuntu:v3
  • 在 registry 中搜索鏡像 docker search [query]
    docker search ubuntu
  • 從 registry 中獲取鏡像 (若無指定 tag 名稱级历,則默認(rèn)使用 latest 這個 tag)
    docker pull [imageName]
    docker pull ubuntu:14.04
    docker pull training/webapp
  • 給 image 打 tag, docker tag [imageId] [imageName]
    docker tag 5db5f8471261 ouruser/sinatra:devel
  • 把本地 image 上傳到 registry 中 (此時會把所有 tag 都上傳上去)
    docker push [imageName]
    docker push ouruser/sinatra
  • 刪除本地 image叭披, docker rmi [image]
    docker rmi training/sinatra

注意:注意:image 中沒有指定 tag 名稱的話默認(rèn)使用 latest 這個 tag 寥殖。然而 latest 的含義和 VCS 中的 head 不一樣,不是代表最新一個鏡像涩蜘,僅僅是代表 tag 名稱為 latest 的鏡像嚼贡。若不存在 tag 名稱為 latest 的鏡像則會報錯。

小結(jié):

docker 雖然是一個虛擬化技術(shù)同诫,但使用上卻更像是在管理系統(tǒng)軟件或者代碼粤策。里面的一些 ps,top误窖,rm 命令讓使用 Linux 命令的人感到十分親切(雖然它們的語義有點不一樣叮盘。。霹俺。)柔吼,start,stop丙唧,restart 讓你感覺像是在控制 service 愈魏,而 push,pull想际,commit蝌戒,tag 又讓你覺得像是在使用 git 。因此程序員會感到很親切且容易上手沼琉。

同時由于可以使用 Dockerfile 進(jìn)行 image 的構(gòu)建,且 docker hub 支持從 github 等地方自動根據(jù) Dockerfile 進(jìn)行構(gòu)建桩匪,所以 docker 把運行環(huán)境也集成到 CI 中了打瘪。

美中不足的是由于 docker 目前僅支持 linux 上的容器技術(shù),因此它要在非 Linux 系統(tǒng)下運行必須加多一個虛擬機層傻昙。這會造成一些在 Linux 上運行不會出現(xiàn)的問題(ip 地址闺骚、硬件資源、文件映射等)妆档,同時由于基于 linux 僻爽,一些 windows 的程序會水土不服,泛用性比虛擬機差一些贾惦。

但帶來的好處是占用的系統(tǒng)資源低很多胸梆。一個只能開數(shù)個虛擬機的電腦一般能開數(shù)十個 container 敦捧,且 container 的啟動時間一般在數(shù)秒內(nèi),比虛擬機快得多碰镜。另外兢卵,由于 docker 的 image 除了一些特殊的基礎(chǔ)鏡像外基本都是增量鏡像,因此重復(fù)部分不會耗費額外的資源绪颖,所以幾個看起來有數(shù) g 的 image 如果里面使用的基礎(chǔ)鏡像有重復(fù)部分(大部分情況下都會有部分重復(fù))秽荤,那么它們實際占用空間將會小得多。

第5章 Docker鏡像
5.1 認(rèn)識鏡像
鏡像是Docker容器的基石柠横,容器是鏡像的運行實例窃款,有了鏡像才能啟動容器。

Docker鏡像中的base鏡像理解
  • base 鏡像有兩層含義:
    1 不依賴其他鏡像牍氛,從 scratch 構(gòu)建晨继。
    2 其他鏡像可以之為基礎(chǔ)進(jìn)行擴展。
    能稱作 base 鏡像的通常都是各種 Linux 發(fā)行版的 Docker 鏡像糜俗,比如 Ubuntu, Debian, CentOS 等

  • base鏡像內(nèi)容:
    下載鏡像:
    docker pull centos
    查看鏡像信息:docker images centos # 大約200M
    Linux 操作系統(tǒng)由內(nèi)核空間和用戶空間組成踱稍。如下圖所示:

linux操作系統(tǒng)

rootfs

  • 內(nèi)核空間是 kernel,Linux 剛啟動時會加載 bootfs 文件系統(tǒng)悠抹,之后 bootfs 會被卸載掉珠月。
  • 用戶空間的文件系統(tǒng)是 rootfs,包含我們熟悉的 /dev, /proc, /bin 等目錄楔敌。對于 base 鏡像來說啤挎,底層直接用 Host 的 kernel,自己只需要提供 rootfs 就行了卵凑。
  • 而對于一個精簡的 OS庆聘,rootfs 可以很小,只需要包括最基本的命令勺卢、工具和程序庫就可以了伙判。相比其他 Linux 發(fā)行版,CentOS 的 rootfs 已經(jīng)算臃腫的了黑忱,alpine 還不到 10MB宴抚。
  • 我們平時安裝的 CentOS 除了 rootfs 還會選裝很多軟件、服務(wù)甫煞、圖形桌面等菇曲,需要好幾個 GB 就不足為奇了。
  • base 鏡像提供的是最小安裝的 Linux 發(fā)行版抚吠。

base鏡像----提供了一個基本的操作系統(tǒng)環(huán)境常潮,用戶可以根據(jù)需要安裝和配置軟件
base鏡像通常是各種Linux發(fā)行版的Docker鏡像比如ubuntu、Debian楷力、centos等喊式。
base鏡像只是在用戶空間與發(fā)行版一致孵户,kernel版本與發(fā)行版是不同的。比如說虛機系統(tǒng)是ubuntu14.04垃帅,運行一個容器是centos系統(tǒng)的延届,那么centos使用的其實就是本虛機的kernel。

5.2 創(chuàng)建鏡像

當(dāng)運行容器時贸诚,使用的鏡像如果在本地中不存在方庭,docker 就會自動從 docker 鏡像倉庫中下載,默認(rèn)是從 Docker Hub 公共鏡像源下載酱固。

  • 列出鏡像列表
    我們可以使用 docker images 來列出本地主機上的鏡像械念。
    我們?nèi)绻褂冒姹緸?5.10的ubuntu系統(tǒng)鏡像來運行容器時,命令如下:
    docker run -t -i ubuntu:15.10 /bin/bash
  • 獲取一個新的鏡像
    當(dāng)我們在本地主機上使用一個不存在的鏡像時 Docker 就會自動下載這個鏡像运悲。如果我們想預(yù)先下載這個鏡像龄减,我們可以使用 docker pull 命令來下載它。
    docker pull ubuntu:13.10
  • 查找鏡像
    我們可以從 Docker Hub 網(wǎng)站來搜索鏡像班眯,Docker Hub 網(wǎng)址為: https://hub.docker.com/
    我們也可以使用 docker search 命令來搜索鏡像希停。比如我們需要一個httpd的鏡像來作為我們的web服務(wù)。我們可以通過 docker search 命令搜索 httpd 來尋找適合我們的鏡像署隘。
    docker search httpd
  • 創(chuàng)建鏡像
    當(dāng)我們從docker鏡像倉庫中下載的鏡像不能滿足我們的需求時宠能,我們可以通過以下兩種方式對鏡像進(jìn)行更改。
    1.從已經(jīng)創(chuàng)建的容器中更新鏡像磁餐,并且提交這個鏡像
    2.使用 Dockerfile 指令來創(chuàng)建一個新的鏡像
  • 更新鏡像
    更新鏡像之前违崇,我們需要使用鏡像來創(chuàng)建一個容器。
    docker run -t -i ubuntu:15.10 /bin/bash
    在運行的容器內(nèi)使用命令進(jìn)行更新:
    apt-get update
    在完成操作之后诊霹,輸入 exit命令來退出這個容器羞延。
    此時ID為e218edb10161的容器,是按我們的需求更改的容器脾还。我們可以通過命令 docker commit來提交容器副本伴箩。
    docker commit -m="has update" -a="runoob" e218edb10161 runoob/ubuntu:v2

各個參數(shù)說明:
-m:提交的描述信息
-a:指定鏡像作者
e218edb10161:容器ID
runoob/ubuntu:v2:指定要創(chuàng)建的目標(biāo)鏡像名

  • 構(gòu)建鏡像
    我們使用命令 docker build , 從零開始來創(chuàng)建一個新的鏡像鄙漏。為此赛蔫,我們需要創(chuàng)建一個 Dockerfile 文件,其中包含一組指令來告訴 Docker 如何構(gòu)建我們的鏡像泥张。
runoob@runoob:~$ cat Dockerfile 
FROM    centos:6.7
MAINTAINER      Fisher "fisher@sudops.com"

RUN     /bin/echo 'root:123456' |chpasswd
RUN     useradd runoob
RUN     /bin/echo 'runoob:123456' |chpasswd
RUN     /bin/echo -e "LANG=\"en_US.UTF-8\"" >/etc/default/local
EXPOSE  22
EXPOSE  80
CMD     /usr/sbin/sshd -D

每一個指令都會在鏡像上創(chuàng)建一個新的層,每一個指令的前綴都必須是大寫的鞠值。
FROM媚创,指定使用哪個鏡像源
RUN 指令告訴docker 在鏡像內(nèi)執(zhí)行命令,安裝了什么彤恶。
然后钞钙,我們使用 Dockerfile 文件鳄橘,通過 docker build 命令來構(gòu)建一個鏡像。

docker build -t runoob/centos:6.7 .

-t 指定要創(chuàng)建的目標(biāo)鏡像名
. Dockerfile 文件所在目錄芒炼,可以指定Dockerfile 的絕對路徑
使用docker images 查看創(chuàng)建的鏡像

  • 設(shè)置鏡像標(biāo)簽
    我們可以使用 docker tag 命令瘫怜,為鏡像添加一個新的標(biāo)簽。
    docker tag 860c279d2fec runoob/centos:dev

5.3 導(dǎo)出和導(dǎo)入鏡像

  • 將鏡像導(dǎo)出到文件
    docker export cbe3cb7799ed > update.tar
  • 基于導(dǎo)出的文件創(chuàng)建一個新靜像(導(dǎo)入鏡像)
    docker import - update < update.tar
    新鏡像為update
  • 鏡像的備份和恢復(fù) save 和load
    docker save -o update1.tar update
    備份本刽, -o 輸出到文件
    docker rmi update
    docker load < update1.tar
    恢復(fù)

5.4 發(fā)布鏡像
5.5 刪除鏡像
5.6 Docker鏡像擴展

第6章 Dockerfile文件
6.1 Dockerfile基本結(jié)構(gòu)
DockerFile分為四部分組成:基礎(chǔ)鏡像信息鲸湃、維護者信息、鏡像操作指令和容器啟動時執(zhí)行指令子寓。例如:

#第一行必須指定基于的基礎(chǔ)鏡像
From ubutu
#維護者信息
MAINTAINER docker_user  docker_user@mail.com
#鏡像的操作指令
apt/sourcelist.list
RUN apt-get update && apt-get install -y ngnix 
RUN echo "\ndaemon off;">>/etc/ngnix/nignix.conf
#容器啟動時執(zhí)行指令
CMD /usr/sbin/ngnix

6.2 Dockerfile指令

  • 1暗挑、From指令
    From 或者From :
    DockerFile第一條必須為From指令。如果同一個DockerFile創(chuàng)建多個鏡像時斜友,可使用多個From指令(每個鏡像一次)
  • 2炸裆、MAINTAINER
    格式為maintainer ,指定維護者的信息
  • 3鲜屏、RUN
    格式為Run 或者Run [“executable” ,”Param1”, “param2”]
    前者在shell終端上運行烹看,即/bin/sh -C,后者使用exec運行洛史。例如:RUN [“/bin/bash”, “-c”,”echo hello”]
    每條run指令在當(dāng)前基礎(chǔ)鏡像執(zhí)行惯殊,并且提交新鏡像。當(dāng)命令比較長時虹菲,可以使用“/”換行靠胜。

exec命令用于調(diào)用并執(zhí)行指令的命令。exec命令通常用在shell腳本程序中毕源,可以調(diào)用其他的命令浪漠。如果在當(dāng)前終端中使用命令,則當(dāng)指定的命令執(zhí)行完畢后會立即退出終端霎褐。
-c:在空環(huán)境中執(zhí)行指定的命令址愿。
例如:exec -c echo Linux C++

  • 4、CMD指令
    支持三種格式:
    CMD [“executable” ,”Param1”, “param2”]使用exec執(zhí)行冻璃,推薦
    CMD command param1 param2响谓,在/bin/sh上執(zhí)行
    CMD [“Param1”, “param2”] 提供給ENTRYPOINT做默認(rèn)參數(shù)。
    每個容器只能執(zhí)行一條CMD命令省艳,多個CMD命令時娘纷,只最后一條被執(zhí)行。

  • 5跋炕、EXPOSE
    格式為 EXPOSE […] 赖晶。
    告訴Docker服務(wù)端容器暴露的端口號,供互聯(lián)系統(tǒng)使用。在啟動Docker時遏插,可以通過-P,主機會自動分配一個端口號轉(zhuǎn)發(fā)到指定的端口捂贿。使用-P,則可以具體指定哪個本地端口映射過來
    例如:
    EXPOSE 22 80 8443

  • 6胳嘲、ENV
    格式為 ENV 厂僧。 指定一個環(huán)境變量,會被后續(xù) RUN 指令使用了牛,并在容器運行時保持颜屠。
    例如
    ENV PG_MAJOR 9.3
    ENV PG_VERSION 9.3.4
    RUN curl -SL http://example.com/postgres-$PG_VERSION.tar.xz | tar -xJC /usr/src/postgress && …
    ENV PATH /usr/local/postgres-$PG_MAJOR/bin:$PATH

  • 7、ADD
    ADD命令有兩個參數(shù)白魂,源和目標(biāo)汽纤。它的基本作用是從源系統(tǒng)的文件系統(tǒng)上復(fù)制文件到目標(biāo)容器的文件系統(tǒng)。如果源是一個URL福荸,那該URL的內(nèi)容將被下載并復(fù)制到容器中蕴坪。
    ADD [source directory or URL] [destination directory]
    ADD /my_app_folder /my_app_folder

  • 8、ENTRYPOINT
    兩種格式:
    ENTRYPOINT [“executable”, “param1”, “param2”]
    ENTRYPOINT command param1 param2 (shell中執(zhí)行)敬锐。
    配置容器啟動后執(zhí)行的命令背传,并且不可被 docker run 提供的參數(shù)覆蓋。
    每個Dockerfile中只能有一個 ENTRYPOINT 台夺,當(dāng)指定多個時径玖,只有最后一個起效。

  • 9颤介、VOLUME
    格式為 VOLUME [“/data”] 梳星。
    創(chuàng)建一個可以從本地主機或其他容器掛載的掛載點,一般用來存放數(shù)據(jù)庫和需要保持的數(shù)據(jù)等滚朵。

11冤灾、USER
格式為 USER daemon 。
指定運行容器時的用戶名或UID辕近,后續(xù)的 RUN 也會使用指定用戶韵吨。
當(dāng)服務(wù)不需要管理員權(quán)限時,可以通過該命令指定運行用戶移宅。并且可以在之前創(chuàng)建所需要的用戶归粉,例如: RUN groupadd -r postgres && useradd -r -g postgres postgres 。要臨時獲取管理員權(quán)限可以使用 gosu 漏峰,而不推薦 sudo 糠悼。

  • 11、WORKDIR
    格式為 WORKDIR /path/to/workdir 浅乔。
    為后續(xù)的 RUN 绢掰、 CMD 、 ENTRYPOINT 指令配置工作目錄。
    可以使用多個 WORKDIR 指令滴劲,后續(xù)命令如果參數(shù)是相對路徑,則會基于之前命令指定的路徑顾复。例如
    WORKDIR /a
    WORKDIR b
    WORKDIR c
    RUN pwd
    則最終路徑為 /a/b/c 班挖。

  • 12、ONBUILD
    格式為 ONBUILD [INSTRUCTION] 芯砸。
    配置當(dāng)所創(chuàng)建的鏡像作為其它新創(chuàng)建鏡像的基礎(chǔ)鏡像時萧芙,所執(zhí)行的操作指令。
    例如假丧,Dockerfile使用如下的內(nèi)容創(chuàng)建了鏡像 image-A 双揪。

[…] 
ONBUILD ADD . /app/src 
ONBUILD RUN /usr/local/bin/python-build –dir /app/src 
[…] 
#如果基于A創(chuàng)建新的鏡像時,新的Dockerfile中使用 FROM image-A
 指定基礎(chǔ)鏡像時包帚,會自動執(zhí)行 ONBUILD 指令內(nèi)容渔期,
等價于在后面添加了兩條指令。
FROM image-A
#Automatically run the following
ADD . /app/src
RUN /usr/local/bin/python-build --dir /app/src

使用 ONBUILD 指令的鏡像渴邦,推薦在標(biāo)簽中注明疯趟,例如 ruby:1.9-onbuild 。

  • 13 CMD和ENTRYPOINT 差異對比
    兩個共同點:
    都可以指定shell或exec函數(shù)調(diào)用的方式執(zhí)行命令谋梭;
    當(dāng)存在多個CMD指令或ENTRYPOINT指令時信峻,只有最后一個生效;
    差異:
    差異1:CMD指令指定的容器啟動時命令可以被docker run指定的命令覆蓋瓮床,而ENTRYPOINT指令指定的命令不能被覆蓋盹舞,而是將docker run指定的參數(shù)當(dāng)做ENTRYPOINT指定命令的參數(shù)。
    差異2:CMD指令可以為ENTRYPOINT指令設(shè)置默認(rèn)參數(shù)隘庄,而且可以被docker run指定的參數(shù)覆蓋踢步;

ENTRYPOINT  
An ENTRYPOINT allows you to configure a container that will run as an executable.它可以讓你的容器功能表現(xiàn)得像一個可執(zhí)行程序一樣。

  • 例子一:
    使用下面的ENTRYPOINT構(gòu)造鏡像:
    ENTRYPOINT ["/bin/echo"]
    那么docker build出來的鏡像以后的容器功能就像一個/bin/echo程序:
    比如我build出來的鏡像名稱叫imageecho峭沦,那么我可以這樣用它:
    docker run -it imageecho “this is a test”
    這里就會輸出”this is a test”這串字符贾虽,而這個imageecho鏡像對應(yīng)的容器表現(xiàn)出來的功能就像一個echo程序一樣。 你添加的參數(shù)“this is a test”會添加到ENTRYPOINT后面吼鱼,就成了這樣 /bin/echo “this is a test” ∨罨恚現(xiàn)在你應(yīng)該明白進(jìn)入點的意思了吧。
  • 例子二:
    ENTRYPOINT ["/bin/cat"]
    構(gòu)造出來的鏡像你可以這樣運行(假設(shè)名為st):
    docker run -it st /etc/fstab
    這樣相當(dāng): /bin/cat /etc/fstab 這個命令的作用菇肃。運行之后就輸出/etc/fstab里的內(nèi)容地粪。

6.3 鏡像構(gòu)建實戰(zhàn)

Docker實戰(zhàn)-編寫Dockerfile

[root@docker docker_demo]# cat Dockerfile 
# base image
FROM centos

# MAINTAINER
MAINTAINER json_hc@163.com

# put nginx-1.12.2.tar.gz into /usr/local/src and unpack nginx
ADD nginx-1.12.2.tar.gz /usr/local/src

# running required command
RUN yum install -y gcc gcc-c++ glibc make autoconf openssl openssl-devel 
RUN yum install -y libxslt-devel -y gd gd-devel GeoIP \
 GeoIP-devel pcre pcre-devel
RUN useradd -M -s /sbin/nologin nginx

# mount a dir to container
ONBUILD VOLUME ["/data"]

# change dir to /usr/local/src/nginx-1.12.2
WORKDIR /usr/local/src/nginx-1.12.2

# execute command to compile nginx
RUN ./configure --user=nginx --group=nginx --prefix=/usr/local/nginx \
--with-file-aio  --with-http_ssl_module  --with-http_realip_module    \
--with-http_addition_module    --with-http_xslt_module  \
 --with-http_image_filter_module    --with-http_geoip_module  \
--with-http_sub_module  --with-http_dav_module \
--with-http_flv_module    --with-http_mp4_module \
--with-http_gunzip_module  --with-http_gzip_static_module  \
--with-http_auth_request_module  --with-http_random_index_module  \
 --with-http_secure_link_module   --with-http_degradation_module  \
 --with-http_stub_status_module && make && make install

# setup PATH
ENV PATH /usr/local/nginx/sbin:$PATH

# EXPOSE
EXPOSE 80

# the command of entrypoint
ENTRYPOINT ["nginx"]

CMD ["-g"]

第7章 Docker倉庫
7.1 官方倉庫Docker Hub
7.2 國內(nèi)鏡像倉庫
7.3 私有倉庫
7.4 Registry原理
7.5 本章小結(jié)
第8章 Docker容器
8.1 容器基本操作
8.2 進(jìn)入容器內(nèi)部
8.3 導(dǎo)出和導(dǎo)入容器
8.4 容器結(jié)構(gòu)
8.5 本章小結(jié)
第9章 數(shù)據(jù)卷
9.1 數(shù)據(jù)卷是什么
9.2 為容器掛載數(shù)據(jù)卷
9.3 備份、恢復(fù)琐谤、遷移數(shù)據(jù)卷
9.4 容器數(shù)據(jù)卷擴展
9.5 本章小結(jié)
第10章 網(wǎng)絡(luò)管理
10.1 Docker網(wǎng)絡(luò)基礎(chǔ)
10.2 Docker網(wǎng)絡(luò)模式
10.3 Docker網(wǎng)絡(luò)配置
10.4 本章小結(jié)
第3篇 Docker進(jìn)階實戰(zhàn)
第11章 操作系統(tǒng)
11.1 Alpine發(fā)行版
11.2 Busybox發(fā)行版
11.3 Debian/Ubuntu發(fā)行版
11.4 CentOS/Fedora發(fā)行版
11.5 CoreOS發(fā)行版
11.6 RancherOS發(fā)行版
11.7 本章小結(jié)
第12章 編排工具Compose
12.1 安裝Docker Compose
12.2 Compose命令基礎(chǔ)
12.3 Compose配置文件
12.4 Compose實戰(zhàn)
12.5 本章小結(jié)
第13章 Web服務(wù)器與應(yīng)用
13.1 Apache服務(wù)器
13.2 Nginx服務(wù)器
13.3 Tomcat服務(wù)器
13.4 其他Web服務(wù)器
13.5 本章小結(jié)
第14章 數(shù)據(jù)庫
14.1 MySQL數(shù)據(jù)庫
14.2 PostgreSQL數(shù)據(jù)庫
14.3 Redis數(shù)據(jù)庫
14.4 MongoDB數(shù)據(jù)庫
14.5 其他
14.6 本章小結(jié)
第15章 編程語言
15.1 C/C++語言
15.2 Golang語言
15.3 Java語言
15.4 JavaScript(Node.js)語言
15.5 PHP語言
15.6 Python語言
15.7 Swift語言
15.8 本章小結(jié)
第16章 Docker API介紹
16.1 認(rèn)識Docker API
16.2 Docker Remote API介紹
16.3 其他API
16.4 本章小結(jié)
第17章 私有倉庫
17.1 Docker Registry介紹
17.2 認(rèn)證與前端
17.3 企業(yè)級私有倉庫Harbor
17.4 私有倉庫前端授權(quán)工具Portus
17.5 本章小結(jié)
第18章 集群網(wǎng)絡(luò)
第19章 Docker安全

Kubernetes入門與進(jìn)階實戰(zhàn)培訓(xùn)


docker進(jìn)階與kubernetes基礎(chǔ)
kubernetes進(jìn)階
Kubernetes高階實踐
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末蟆技,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌质礼,老刑警劉巖旺聚,帶你破解...
    沈念sama閱讀 207,248評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異眶蕉,居然都是意外死亡砰粹,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,681評論 2 381
  • 文/潘曉璐 我一進(jìn)店門造挽,熙熙樓的掌柜王于貴愁眉苦臉地迎上來碱璃,“玉大人,你說我怎么就攤上這事饭入∏镀鳎” “怎么了?”我有些...
    開封第一講書人閱讀 153,443評論 0 344
  • 文/不壞的土叔 我叫張陵谐丢,是天一觀的道長爽航。 經(jīng)常有香客問我,道長庇谆,這世上最難降的妖魔是什么岳掐? 我笑而不...
    開封第一講書人閱讀 55,475評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮饭耳,結(jié)果婚禮上串述,老公的妹妹穿的比我還像新娘。我一直安慰自己寞肖,他們只是感情好纲酗,可當(dāng)我...
    茶點故事閱讀 64,458評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著新蟆,像睡著了一般觅赊。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上琼稻,一...
    開封第一講書人閱讀 49,185評論 1 284
  • 那天吮螺,我揣著相機與錄音,去河邊找鬼帕翻。 笑死鸠补,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的嘀掸。 我是一名探鬼主播紫岩,決...
    沈念sama閱讀 38,451評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼睬塌!你這毒婦竟也來了泉蝌?” 一聲冷哼從身側(cè)響起歇万,我...
    開封第一講書人閱讀 37,112評論 0 261
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎勋陪,沒想到半個月后贪磺,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,609評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡诅愚,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,083評論 2 325
  • 正文 我和宋清朗相戀三年缘挽,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片呻粹。...
    茶點故事閱讀 38,163評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖苏研,靈堂內(nèi)的尸體忽然破棺而出等浊,到底是詐尸還是另有隱情,我是刑警寧澤摹蘑,帶...
    沈念sama閱讀 33,803評論 4 323
  • 正文 年R本政府宣布筹燕,位于F島的核電站,受9級特大地震影響衅鹿,放射性物質(zhì)發(fā)生泄漏撒踪。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,357評論 3 307
  • 文/蒙蒙 一大渤、第九天 我趴在偏房一處隱蔽的房頂上張望制妄。 院中可真熱鬧,春花似錦泵三、人聲如沸耕捞。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,357評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽俺抽。三九已至,卻和暖如春较曼,著一層夾襖步出監(jiān)牢的瞬間磷斧,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,590評論 1 261
  • 我被黑心中介騙來泰國打工捷犹, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留弛饭,地道東北人。 一個月前我還...
    沈念sama閱讀 45,636評論 2 355
  • 正文 我出身青樓伏恐,卻偏偏與公主長得像孩哑,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子翠桦,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,925評論 2 344

推薦閱讀更多精彩內(nèi)容

  • 《Docker從入門到實踐》閱讀筆記 原書地址: https://yeasy.gitbooks.io/docker...
    GuoYuebo閱讀 11,352評論 1 39
  • 基本概念 鏡像Docker 鏡像就是一個只讀的模板,鏡像可以用來創(chuàng)建 Docker 容器 容器容器是從鏡像創(chuàng)建的運...
    巨子聯(lián)盟閱讀 7,543評論 0 3
  • 一 横蜒、什么是 Docker Docker 最初是 dotCloud 公司創(chuàng)始人 Solomon Hykes 在法國...
    Blazzer閱讀 3,129評論 0 13
  • 0. 前言 docker是什么胳蛮?docker是用GO語言開發(fā)的應(yīng)用容器引擎,基于容器化丛晌,沙箱機制的應(yīng)用部署技術(shù)仅炊。可...
    sessionboy閱讀 3,840評論 2 49
  • 20170503 真開心澎蛛,又一次28天檢視回顧自己的生活抚垄,時時惰性放下的自己,又再次出發(fā)檢視規(guī)劃自己……這一次谋逻,無...
    玥含上海開啟驛站閱讀 349評論 0 0