觀其大綱
第一篇 容器技術與Docker概念
1認識容器技術
2 Docker基本概念
3 安裝和測試Docker
第二篇 Docker基礎知識
4 Docker基礎
5 Docker鏡像
6 Dockerfile文件
7 Docker倉庫
8 Docker容器
9 數(shù)據(jù)卷
10 網(wǎng)絡管理
第三篇 Docker進階實戰(zhàn)
11 操作系統(tǒng)
12 編排工具-compose
13 web服務器與應用
14 數(shù)據(jù)庫
15 編程語言
16 Docker API
17 私有倉庫
18 集群網(wǎng)絡
19 容器安全
20 Docker網(wǎng)絡生態(tài)
大綱細節(jié)
第1篇 容器技術與Docker概念
第1章 容器技術
1.1 什么是容器
1.2 容器技術的前世今生
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 二進制安裝
3.4 本章小結(jié)
第2篇 Docker基礎知識
第4章 Docker基礎
4.1 Docker基本操作
4.2 啟動第一個Docker容器
4.3 構(gòu)建第一個Docker鏡像
4.4 本章小結(jié)
第5章 Docker鏡像
5.1 認識鏡像
5.2 創(chuàng)建鏡像
5.3 導出和導入鏡像
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 進入容器內(nèi)部
8.3 導出和導入容器
8.4 容器結(jié)構(gòu)
8.5 本章小結(jié)
第9章 數(shù)據(jù)卷
9.1 數(shù)據(jù)卷是什么
9.2 為容器掛載數(shù)據(jù)卷
9.3 備份、恢復、遷移數(shù)據(jù)卷
9.4 容器數(shù)據(jù)卷擴展
9.5 本章小結(jié)
第10章 網(wǎng)絡管理
10.1 Docker網(wǎng)絡基礎
10.2 Docker網(wǎng)絡模式
10.3 Docker網(wǎng)絡配置
10.4 本章小結(jié)
第3篇 Docker進階實戰(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命令基礎
12.3 Compose配置文件
12.4 Compose實戰(zhàn)
12.5 本章小結(jié)
第13章 Web服務器與應用
13.1 Apache服務器
13.2 Nginx服務器
13.3 Tomcat服務器
13.4 其他Web服務器
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 認識Docker API
16.2 Docker Remote API介紹
16.3 其他API
16.4 本章小結(jié)
第17章 私有倉庫
17.1 Docker Registry介紹
17.2 認證與前端
17.3 企業(yè)級私有倉庫Harbor
17.4 私有倉庫前端授權(quán)工具Portus
17.5 本章小結(jié)
第18章 集群網(wǎng)絡
第19章 Docker安全
熟知概念
第1篇 容器技術與Docker概念
第1章 容器技術
什么是容器
容器映像是一個軟件的輕量級獨立可執(zhí)行軟件包,包含運行它所需的一切:代碼,運行時,系統(tǒng)工具,系統(tǒng)庫,設置。不管環(huán)境如何,集裝箱化軟件都可以運行相同的Linux和Windows應用程序。容器將軟件與其周圍環(huán)境隔離開來,例如開發(fā)環(huán)境和登臺環(huán)境之間的差異,并有助于減少在同一基礎架構(gòu)上運行不同軟件的團隊之間的沖突。
what is a container?
LXC
Linux Container容器是一種內(nèi)核虛擬化技術,可以提供輕量級的虛擬化,以便隔離進程和資源。
容器技術主要包括Cgroup和Namespace這兩個內(nèi)核特性。
Cgroup
Cgroup是control group,又稱為控制組,它主要是做資源控制。原理是將一組進程放在放在一個控制組里,通過給這個控制組分配指定的可用資源,達到控制這一組進程可用資源的目的。
Namespace
Namespace又稱為命名空間,它主要做訪問隔離。其原理是針對一類資源進行抽象,并將其封裝在一起提供給一個容器使用,對于這類資源,因為每個容器都有自己的抽象,而他們彼此之間是不可見的,所以就可以做到訪問隔離。
對于Linux容器的最小組成,除了上面兩個抽象的技術概念還不夠,完整的容器可以用以下公示描述:
容器=Cgroup+Namespace+rootfs+容器引擎(用戶態(tài)工具)。
其中各項功能分別為:
Cgroup:資源控制;
Namespace:訪問隔離;
rootfs:文件系統(tǒng)隔離;
容器引擎:生命周期控制;
第2章 Docker簡介
2.1 什么是Docker
Docker是一個用于開發(fā)、遷移、運行的開發(fā)平臺。它使你能夠?qū)⒛愕膽贸绦驈幕A架構(gòu)中分離,從而可以快速交付。使用Docker,你可以以與管理應用程序相同的方式來管理這些基礎架構(gòu)。使用Docker的方法,進行快速開發(fā),測試,并可以顯著的減少編寫代碼和運行之間的時間延遲。
就像官網(wǎng)上說的:Build,Ship,and Run Any App, Anywhere
Docker基本架構(gòu)
docker主要有以下幾部分組成:Docker Client 客戶端
Docker daemon 守護進程
Docker Image 鏡像
Docker Container 容器
Docker Registry 倉庫
客戶端和守護進程:
1 Docker是C/S(客戶端client-服務器server)架構(gòu)模式。
docker通過客戶端連接守護進程,通過命令向守護進程發(fā)出請求,守護進程通過一系列的操作返回結(jié)果。
2 docker客戶端可以連接本地或者遠程的守護進程。
3 docker客戶端和服務器通過socket或RESTful API進行通信。
docker架構(gòu)
第3章 安裝Docker
第2篇 Docker基礎知識
第4章 Docker基礎
常用命令表
- 操作 命令
實例
通用命令
- 查看 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 后進入其 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)關閉的 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 指定端口映射關系 docker port [container] [port]
docker port nostalgic_morse 5000 - 查看 container 進程列表 docker top [container]
docker top nostalgic_morse - 查看 container 詳細信息 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 處于關閉狀態(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 名稱,則默認使用 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 名稱的話默認使用 latest 這個 tag 。然而 latest 的含義和 VCS 中的 head 不一樣,不是代表最新一個鏡像,僅僅是代表 tag 名稱為 latest 的鏡像。若不存在 tag 名稱為 latest 的鏡像則會報錯。
小結(jié):
docker 雖然是一個虛擬化技術,但使用上卻更像是在管理系統(tǒng)軟件或者代碼。里面的一些 ps,top,rm 命令讓使用 Linux 命令的人感到十分親切(雖然它們的語義有點不一樣。。。),start,stop,restart 讓你感覺像是在控制 service ,而 push,pull,commit,tag 又讓你覺得像是在使用 git 。因此程序員會感到很親切且容易上手。
同時由于可以使用 Dockerfile 進行 image 的構(gòu)建,且 docker hub 支持從 github 等地方自動根據(jù) Dockerfile 進行構(gòu)建,所以 docker 把運行環(huán)境也集成到 CI 中了。
美中不足的是由于 docker 目前僅支持 linux 上的容器技術,因此它要在非 Linux 系統(tǒng)下運行必須加多一個虛擬機層。這會造成一些在 Linux 上運行不會出現(xiàn)的問題(ip 地址、硬件資源、文件映射等),同時由于基于 linux ,一些 windows 的程序會水土不服,泛用性比虛擬機差一些。
但帶來的好處是占用的系統(tǒng)資源低很多。一個只能開數(shù)個虛擬機的電腦一般能開數(shù)十個 container ,且 container 的啟動時間一般在數(shù)秒內(nèi),比虛擬機快得多。另外,由于 docker 的 image 除了一些特殊的基礎鏡像外基本都是增量鏡像,因此重復部分不會耗費額外的資源,所以幾個看起來有數(shù) g 的 image 如果里面使用的基礎鏡像有重復部分(大部分情況下都會有部分重復),那么它們實際占用空間將會小得多。
第5章 Docker鏡像
5.1 認識鏡像
鏡像是Docker容器的基石,容器是鏡像的運行實例,有了鏡像才能啟動容器。
Docker鏡像中的base鏡像理解
base 鏡像有兩層含義:
1 不依賴其他鏡像,從 scratch 構(gòu)建。
2 其他鏡像可以之為基礎進行擴展。
能稱作 base 鏡像的通常都是各種 Linux 發(fā)行版的 Docker 鏡像,比如 Ubuntu, Debian, CentOS 等base鏡像內(nèi)容:
下載鏡像:
docker pull centos
查看鏡像信息:docker images centos # 大約200M
Linux 操作系統(tǒng)由內(nèi)核空間和用戶空間組成。如下圖所示:

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 還會選裝很多軟件、服務、圖形桌面等,需要好幾個 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)建鏡像
當運行容器時,使用的鏡像如果在本地中不存在,docker 就會自動從 docker 鏡像倉庫中下載,默認是從 Docker Hub 公共鏡像源下載。
- 列出鏡像列表
我們可以使用 docker images 來列出本地主機上的鏡像。
我們?nèi)绻褂冒姹緸?5.10的ubuntu系統(tǒng)鏡像來運行容器時,命令如下:
docker run -t -i ubuntu:15.10 /bin/bash- 獲取一個新的鏡像
當我們在本地主機上使用一個不存在的鏡像時 Docker 就會自動下載這個鏡像。如果我們想預先下載這個鏡像,我們可以使用 docker pull 命令來下載它。
docker pull ubuntu:13.10- 查找鏡像
我們可以從 Docker Hub 網(wǎng)站來搜索鏡像,Docker Hub 網(wǎng)址為: https://hub.docker.com/
我們也可以使用 docker search 命令來搜索鏡像。比如我們需要一個httpd的鏡像來作為我們的web服務。我們可以通過 docker search 命令搜索 httpd 來尋找適合我們的鏡像。
docker search httpd- 創(chuàng)建鏡像
當我們從docker鏡像倉庫中下載的鏡像不能滿足我們的需求時,我們可以通過以下兩種方式對鏡像進行更改。
1.從已經(jīng)創(chuàng)建的容器中更新鏡像,并且提交這個鏡像
2.使用 Dockerfile 指令來創(chuàng)建一個新的鏡像
- 更新鏡像
更新鏡像之前,我們需要使用鏡像來創(chuàng)建一個容器。
docker run -t -i ubuntu:15.10 /bin/bash
在運行的容器內(nèi)使用命令進行更新:
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)建的目標鏡像名
- 構(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)建的目標鏡像名
. Dockerfile 文件所在目錄,可以指定Dockerfile 的絕對路徑
使用docker images 查看創(chuàng)建的鏡像
- 設置鏡像標簽
我們可以使用 docker tag 命令,為鏡像添加一個新的標簽。
docker tag 860c279d2fec runoob/centos:dev
5.3 導出和導入鏡像
- 將鏡像導出到文件
docker export cbe3cb7799ed > update.tar - 基于導出的文件創(chuàng)建一個新靜像(導入鏡像)
docker import - update < update.tar
新鏡像為update - 鏡像的備份和恢復 save 和load
docker save -o update1.tar update
備份, -o 輸出到文件
docker rmi update
docker load < update1.tar
恢復
5.4 發(fā)布鏡像
5.5 刪除鏡像
5.6 Docker鏡像擴展
第6章 Dockerfile文件
6.1 Dockerfile基本結(jié)構(gòu)
DockerFile分為四部分組成:基礎鏡像信息、維護者信息、鏡像操作指令和容器啟動時執(zhí)行指令。例如:
#第一行必須指定基于的基礎鏡像
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指令在當前基礎鏡像執(zhí)行,并且提交新鏡像。當命令比較長時,可以使用“/”換行。
exec命令用于調(diào)用并執(zhí)行指令的命令。exec命令通常用在shell腳本程序中,可以調(diào)用其他的命令。如果在當前終端中使用命令,則當指定的命令執(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做默認參數(shù)。
每個容器只能執(zhí)行一條CMD命令,多個CMD命令時,只最后一條被執(zhí)行。5、EXPOSE
格式為 EXPOSE […] 。
告訴Docker服務端容器暴露的端口號,供互聯(lián)系統(tǒng)使用。在啟動Docker時,可以通過-P,主機會自動分配一個端口號轉(zhuǎn)發(fā)到指定的端口。使用-P,則可以具體指定哪個本地端口映射過來
例如:
EXPOSE 22 80 84436、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:$PATH7、ADD
ADD命令有兩個參數(shù),源和目標。它的基本作用是從源系統(tǒng)的文件系統(tǒng)上復制文件到目標容器的文件系統(tǒng)。如果源是一個URL,那該URL的內(nèi)容將被下載并復制到容器中。
ADD [source directory or URL] [destination directory]
ADD /my_app_folder /my_app_folder8、ENTRYPOINT
兩種格式:
ENTRYPOINT [“executable”, “param1”, “param2”]
ENTRYPOINT command param1 param2 (shell中執(zhí)行)。
配置容器啟動后執(zhí)行的命令,并且不可被 docker run 提供的參數(shù)覆蓋。
每個Dockerfile中只能有一個 ENTRYPOINT ,當指定多個時,只有最后一個起效。9、VOLUME
格式為 VOLUME [“/data”] 。
創(chuàng)建一個可以從本地主機或其他容器掛載的掛載點,一般用來存放數(shù)據(jù)庫和需要保持的數(shù)據(jù)等。
11、USER
格式為 USER daemon 。
指定運行容器時的用戶名或UID,后續(xù)的 RUN 也會使用指定用戶。
當服務不需要管理員權(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] 。
配置當所創(chuàng)建的鏡像作為其它新創(chuàng)建鏡像的基礎鏡像時,所執(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
指定基礎鏡像時,會自動執(zhí)行 ONBUILD 指令內(nèi)容,
等價于在后面添加了兩條指令。
FROM image-A
#Automatically run the following
ADD . /app/src
RUN /usr/local/bin/python-build --dir /app/src
使用 ONBUILD 指令的鏡像,推薦在標簽中注明,例如 ruby:1.9-onbuild 。
- 13 CMD和ENTRYPOINT 差異對比
兩個共同點:
都可以指定shell或exec函數(shù)調(diào)用的方式執(zhí)行命令;
當存在多個CMD指令或ENTRYPOINT指令時,只有最后一個生效;
差異:
差異1:CMD指令指定的容器啟動時命令可以被docker run指定的命令覆蓋,而ENTRYPOINT指令指定的命令不能被覆蓋,而是將docker run指定的參數(shù)當做ENTRYPOINT指定命令的參數(shù)。
差異2:CMD指令可以為ENTRYPOINT指令設置默認參數(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鏡像對應的容器表現(xiàn)出來的功能就像一個echo程序一樣。 你添加的參數(shù)“this is a test”會添加到ENTRYPOINT后面,就成了這樣 /bin/echo “this is a test” ?,F(xiàn)在你應該明白進入點的意思了吧。- 例子二:
ENTRYPOINT ["/bin/cat"]
構(gòu)造出來的鏡像你可以這樣運行(假設名為st):
docker run -it st /etc/fstab
這樣相當: /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 進入容器內(nèi)部
8.3 導出和導入容器
8.4 容器結(jié)構(gòu)
8.5 本章小結(jié)
第9章 數(shù)據(jù)卷
9.1 數(shù)據(jù)卷是什么
9.2 為容器掛載數(shù)據(jù)卷
9.3 備份、恢復、遷移數(shù)據(jù)卷
9.4 容器數(shù)據(jù)卷擴展
9.5 本章小結(jié)
第10章 網(wǎng)絡管理
10.1 Docker網(wǎng)絡基礎
10.2 Docker網(wǎng)絡模式
10.3 Docker網(wǎng)絡配置
10.4 本章小結(jié)
第3篇 Docker進階實戰(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命令基礎
12.3 Compose配置文件
12.4 Compose實戰(zhàn)
12.5 本章小結(jié)
第13章 Web服務器與應用
13.1 Apache服務器
13.2 Nginx服務器
13.3 Tomcat服務器
13.4 其他Web服務器
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 認識Docker API
16.2 Docker Remote API介紹
16.3 其他API
16.4 本章小結(jié)
第17章 私有倉庫
17.1 Docker Registry介紹
17.2 認證與前端
17.3 企業(yè)級私有倉庫Harbor
17.4 私有倉庫前端授權(quán)工具Portus
17.5 本章小結(jié)
第18章 集群網(wǎng)絡
第19章 Docker安全
Kubernetes入門與進階實戰(zhàn)培訓




