觀其大綱
第一篇 容器技術與Docker概念
1認識容器技術
2 Docker基本概念
3 安裝和測試Docker
第二篇 Docker基礎知識
4 Docker基礎
5 Docker鏡像
6 Dockerfile文件
7 Docker倉庫
8 Docker容器
9 數據卷
10 網絡管理
第三篇 Docker進階實戰
11 操作系統
12 編排工具-compose
13 web服務器與應用
14 數據庫
15 編程語言
16 Docker API
17 私有倉庫
18 集群網絡
19 容器安全
20 Docker網絡生態
大綱細節
第1篇 容器技術與Docker概念
第1章 容器技術
1.1 什么是容器
1.2 容器技術的前世今生
1.3 容器的原理
1.4 容器云
1.5 容器與Docker
1.6 本章小結
第2章 Docker簡介
2.1 什么是Docker
2.2 Docker的功能及優缺點
2.3 Docker和虛擬機
2.4 Docker與runC
2.5 Docker基本架構
2.6 本章小結
第3章 安裝Docker
3.1 Linux系統
3.2 Windows與Mac OS系統
3.3 二進制安裝
3.4 本章小結
第2篇 Docker基礎知識
第4章 Docker基礎
4.1 Docker基本操作
4.2 啟動第一個Docker容器
4.3 構建第一個Docker鏡像
4.4 本章小結
第5章 Docker鏡像
5.1 認識鏡像
5.2 創建鏡像
5.3 導出和導入鏡像
5.4 發布鏡像
5.5 刪除鏡像
5.6 Docker鏡像擴展
5.7 本章小結
第6章 Dockerfile文件
6.1 Dockerfile基本結構
6.2 Dockerfile指令
6.3 鏡像構建實戰
6.4 本章小結
第7章 Docker倉庫
7.1 官方倉庫Docker Hub
7.2 國內鏡像倉庫
7.3 私有倉庫
7.4 Registry原理
7.5 本章小結
第8章 Docker容器
8.1 容器基本操作
8.2 進入容器內部
8.3 導出和導入容器
8.4 容器結構
8.5 本章小結
第9章 數據卷
9.1 數據卷是什么
9.2 為容器掛載數據卷
9.3 備份、恢復、遷移數據卷
9.4 容器數據卷擴展
9.5 本章小結
第10章 網絡管理
10.1 Docker網絡基礎
10.2 Docker網絡模式
10.3 Docker網絡配置
10.4 本章小結
第3篇 Docker進階實戰
第11章 操作系統
11.1 Alpine發行版
11.2 Busybox發行版
11.3 Debian/Ubuntu發行版
11.4 CentOS/Fedora發行版
11.5 CoreOS發行版
11.6 RancherOS發行版
11.7 本章小結
第12章 編排工具Compose
12.1 安裝Docker Compose
12.2 Compose命令基礎
12.3 Compose配置文件
12.4 Compose實戰
12.5 本章小結
第13章 Web服務器與應用
13.1 Apache服務器
13.2 Nginx服務器
13.3 Tomcat服務器
13.4 其他Web服務器
13.5 本章小結
第14章 數據庫
14.1 MySQL數據庫
14.2 PostgreSQL數據庫
14.3 Redis數據庫
14.4 MongoDB數據庫
14.5 其他
14.6 本章小結
第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 本章小結
第16章 Docker API介紹
16.1 認識Docker API
16.2 Docker Remote API介紹
16.3 其他API
16.4 本章小結
第17章 私有倉庫
17.1 Docker Registry介紹
17.2 認證與前端
17.3 企業級私有倉庫Harbor
17.4 私有倉庫前端授權工具Portus
17.5 本章小結
第18章 集群網絡
第19章 Docker安全
熟知概念
第1篇 容器技術與Docker概念
第1章 容器技術
什么是容器
容器映像是一個軟件的輕量級獨立可執行軟件包,包含運行它所需的一切:代碼,運行時,系統工具,系統庫,設置。不管環境如何,集裝箱化軟件都可以運行相同的Linux和Windows應用程序。容器將軟件與其周圍環境隔離開來,例如開發環境和登臺環境之間的差異,并有助于減少在同一基礎架構上運行不同軟件的團隊之間的沖突。
what is a container?
LXC
Linux Container容器是一種內核虛擬化技術,可以提供輕量級的虛擬化,以便隔離進程和資源。
容器技術主要包括Cgroup和Namespace這兩個內核特性。
Cgroup
Cgroup是control group,又稱為控制組,它主要是做資源控制。原理是將一組進程放在放在一個控制組里,通過給這個控制組分配指定的可用資源,達到控制這一組進程可用資源的目的。
Namespace
Namespace又稱為命名空間,它主要做訪問隔離。其原理是針對一類資源進行抽象,并將其封裝在一起提供給一個容器使用,對于這類資源,因為每個容器都有自己的抽象,而他們彼此之間是不可見的,所以就可以做到訪問隔離。
對于Linux容器的最小組成,除了上面兩個抽象的技術概念還不夠,完整的容器可以用以下公示描述:
容器=Cgroup+Namespace+rootfs+容器引擎(用戶態工具)。
其中各項功能分別為:
Cgroup:資源控制;
Namespace:訪問隔離;
rootfs:文件系統隔離;
容器引擎:生命周期控制;
第2章 Docker簡介
2.1 什么是Docker
Docker是一個用于開發、遷移、運行的開發平臺。它使你能夠將你的應用程序從基礎架構中分離,從而可以快速交付。使用Docker,你可以以與管理應用程序相同的方式來管理這些基礎架構。使用Docker的方法,進行快速開發,測試,并可以顯著的減少編寫代碼和運行之間的時間延遲。
就像官網上說的:Build,Ship,and Run Any App, Anywhere
Docker基本架構
docker主要有以下幾部分組成:Docker Client 客戶端
Docker daemon 守護進程
Docker Image 鏡像
Docker Container 容器
Docker Registry 倉庫
客戶端和守護進程:
1 Docker是C/S(客戶端client-服務器server)架構模式。
docker通過客戶端連接守護進程,通過命令向守護進程發出請求,守護進程通過一系列的操作返回結果。
2 docker客戶端可以連接本地或者遠程的守護進程。
3 docker客戶端和服務器通過socket或RESTful API進行通信。
docker架構
第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
容器操作命令
- 創建 container docker create
docker create chenhengjie123/xwalkdriver - 創建并運行 container docker run
docker run chenhengjie123/xwalkdriver /bin/bash - 創建并運行 container 后進入其 bash 控制臺
docker run -t -i image /bin/bash
docker run -t -i ubuntu /bin/bash - 創建并運行 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 - 查看最后創建的 container docker ps -l
docker ps -l - 查看所有 container ,包括正在運行和已經關閉的 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 - 啟動一個已經停止的 container docker start [container]
docker start nostalgic_morse - 重啟 container (若 container 處于關閉狀態,則直接啟動)
docker restart [container]
docker restart nostalgic_morse - 刪除 container docker rm [container]
docker rm nostalgic_morse
注意:命令中需要指定 container 時,既可使用其名稱,也可使用其 id 。
鏡像操作命令
- 從 container 創建 image, docker commit [container] [imageName]
docker commit nostalgic_morse ouruser/sinatra:v2 - 從 Dockerfile 創建 image, docker build -t [imageName] [pathToFolder]
docker build ouruser/sinatra:v3 . - 查看本地所有 image, docker images
docker images - 顯示鏡像構建歷史 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 的鏡像則會報錯。
小結:
docker 雖然是一個虛擬化技術,但使用上卻更像是在管理系統軟件或者代碼。里面的一些 ps,top,rm 命令讓使用 Linux 命令的人感到十分親切(雖然它們的語義有點不一樣。。。),start,stop,restart 讓你感覺像是在控制 service ,而 push,pull,commit,tag 又讓你覺得像是在使用 git 。因此程序員會感到很親切且容易上手。
同時由于可以使用 Dockerfile 進行 image 的構建,且 docker hub 支持從 github 等地方自動根據 Dockerfile 進行構建,所以 docker 把運行環境也集成到 CI 中了。
美中不足的是由于 docker 目前僅支持 linux 上的容器技術,因此它要在非 Linux 系統下運行必須加多一個虛擬機層。這會造成一些在 Linux 上運行不會出現的問題(ip 地址、硬件資源、文件映射等),同時由于基于 linux ,一些 windows 的程序會水土不服,泛用性比虛擬機差一些。
但帶來的好處是占用的系統資源低很多。一個只能開數個虛擬機的電腦一般能開數十個 container ,且 container 的啟動時間一般在數秒內,比虛擬機快得多。另外,由于 docker 的 image 除了一些特殊的基礎鏡像外基本都是增量鏡像,因此重復部分不會耗費額外的資源,所以幾個看起來有數 g 的 image 如果里面使用的基礎鏡像有重復部分(大部分情況下都會有部分重復),那么它們實際占用空間將會小得多。
第5章 Docker鏡像
5.1 認識鏡像
鏡像是Docker容器的基石,容器是鏡像的運行實例,有了鏡像才能啟動容器。
Docker鏡像中的base鏡像理解
base 鏡像有兩層含義:
1 不依賴其他鏡像,從 scratch 構建。
2 其他鏡像可以之為基礎進行擴展。
能稱作 base 鏡像的通常都是各種 Linux 發行版的 Docker 鏡像,比如 Ubuntu, Debian, CentOS 等base鏡像內容:
下載鏡像:
docker pull centos
查看鏡像信息:docker images centos # 大約200M
Linux 操作系統由內核空間和用戶空間組成。如下圖所示:
rootfs
- 內核空間是 kernel,Linux 剛啟動時會加載 bootfs 文件系統,之后 bootfs 會被卸載掉。
- 用戶空間的文件系統是 rootfs,包含我們熟悉的 /dev, /proc, /bin 等目錄。對于 base 鏡像來說,底層直接用 Host 的 kernel,自己只需要提供 rootfs 就行了。
- 而對于一個精簡的 OS,rootfs 可以很小,只需要包括最基本的命令、工具和程序庫就可以了。相比其他 Linux 發行版,CentOS 的 rootfs 已經算臃腫的了,alpine 還不到 10MB。
- 我們平時安裝的 CentOS 除了 rootfs 還會選裝很多軟件、服務、圖形桌面等,需要好幾個 GB 就不足為奇了。
- base 鏡像提供的是最小安裝的 Linux 發行版。
base鏡像----提供了一個基本的操作系統環境,用戶可以根據需要安裝和配置軟件
base鏡像通常是各種Linux發行版的Docker鏡像比如ubuntu、Debian、centos等。
base鏡像只是在用戶空間與發行版一致,kernel版本與發行版是不同的。比如說虛機系統是ubuntu14.04,運行一個容器是centos系統的,那么centos使用的其實就是本虛機的kernel。
5.2 創建鏡像
當運行容器時,使用的鏡像如果在本地中不存在,docker 就會自動從 docker 鏡像倉庫中下載,默認是從 Docker Hub 公共鏡像源下載。
- 列出鏡像列表
我們可以使用 docker images 來列出本地主機上的鏡像。
我們如果要使用版本為15.10的ubuntu系統鏡像來運行容器時,命令如下:
docker run -t -i ubuntu:15.10 /bin/bash- 獲取一個新的鏡像
當我們在本地主機上使用一個不存在的鏡像時 Docker 就會自動下載這個鏡像。如果我們想預先下載這個鏡像,我們可以使用 docker pull 命令來下載它。
docker pull ubuntu:13.10- 查找鏡像
我們可以從 Docker Hub 網站來搜索鏡像,Docker Hub 網址為: https://hub.docker.com/
我們也可以使用 docker search 命令來搜索鏡像。比如我們需要一個httpd的鏡像來作為我們的web服務。我們可以通過 docker search 命令搜索 httpd 來尋找適合我們的鏡像。
docker search httpd- 創建鏡像
當我們從docker鏡像倉庫中下載的鏡像不能滿足我們的需求時,我們可以通過以下兩種方式對鏡像進行更改。
1.從已經創建的容器中更新鏡像,并且提交這個鏡像
2.使用 Dockerfile 指令來創建一個新的鏡像
- 更新鏡像
更新鏡像之前,我們需要使用鏡像來創建一個容器。
docker run -t -i ubuntu:15.10 /bin/bash
在運行的容器內使用命令進行更新:
apt-get update
在完成操作之后,輸入 exit命令來退出這個容器。
此時ID為e218edb10161的容器,是按我們的需求更改的容器。我們可以通過命令 docker commit來提交容器副本。
docker commit -m="has update" -a="runoob" e218edb10161 runoob/ubuntu:v2各個參數說明:
-m:提交的描述信息
-a:指定鏡像作者
e218edb10161:容器ID
runoob/ubuntu:v2:指定要創建的目標鏡像名
- 構建鏡像
我們使用命令 docker build , 從零開始來創建一個新的鏡像。為此,我們需要創建一個 Dockerfile 文件,其中包含一組指令來告訴 Docker 如何構建我們的鏡像。
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
每一個指令都會在鏡像上創建一個新的層,每一個指令的前綴都必須是大寫的。
FROM,指定使用哪個鏡像源
RUN 指令告訴docker 在鏡像內執行命令,安裝了什么。
然后,我們使用 Dockerfile 文件,通過 docker build 命令來構建一個鏡像。
docker build -t runoob/centos:6.7 .
-t 指定要創建的目標鏡像名
. Dockerfile 文件所在目錄,可以指定Dockerfile 的絕對路徑
使用docker images 查看創建的鏡像
- 設置鏡像標簽
我們可以使用 docker tag 命令,為鏡像添加一個新的標簽。
docker tag 860c279d2fec runoob/centos:dev
5.3 導出和導入鏡像
- 將鏡像導出到文件
docker export cbe3cb7799ed > update.tar - 基于導出的文件創建一個新靜像(導入鏡像)
docker import - update < update.tar
新鏡像為update - 鏡像的備份和恢復 save 和load
docker save -o update1.tar update
備份, -o 輸出到文件
docker rmi update
docker load < update1.tar
恢復
5.4 發布鏡像
5.5 刪除鏡像
5.6 Docker鏡像擴展
第6章 Dockerfile文件
6.1 Dockerfile基本結構
DockerFile分為四部分組成:基礎鏡像信息、維護者信息、鏡像操作指令和容器啟動時執行指令。例如:
#第一行必須指定基于的基礎鏡像
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
#容器啟動時執行指令
CMD /usr/sbin/ngnix
6.2 Dockerfile指令
- 1、From指令
From 或者From :
DockerFile第一條必須為From指令。如果同一個DockerFile創建多個鏡像時,可使用多個From指令(每個鏡像一次) - 2、MAINTAINER
格式為maintainer ,指定維護者的信息 - 3、RUN
格式為Run 或者Run [“executable” ,”Param1”, “param2”]
前者在shell終端上運行,即/bin/sh -C,后者使用exec運行。例如:RUN [“/bin/bash”, “-c”,”echo hello”]
每條run指令在當前基礎鏡像執行,并且提交新鏡像。當命令比較長時,可以使用“/”換行。
exec命令用于調用并執行指令的命令。exec命令通常用在shell腳本程序中,可以調用其他的命令。如果在當前終端中使用命令,則當指定的命令執行完畢后會立即退出終端。
-c:在空環境中執行指定的命令。
例如:exec -c echo Linux C++
4、CMD指令
支持三種格式:
CMD [“executable” ,”Param1”, “param2”]使用exec執行,推薦
CMD command param1 param2,在/bin/sh上執行
CMD [“Param1”, “param2”] 提供給ENTRYPOINT做默認參數。
每個容器只能執行一條CMD命令,多個CMD命令時,只最后一條被執行。5、EXPOSE
格式為 EXPOSE […] 。
告訴Docker服務端容器暴露的端口號,供互聯系統使用。在啟動Docker時,可以通過-P,主機會自動分配一個端口號轉發到指定的端口。使用-P,則可以具體指定哪個本地端口映射過來
例如:
EXPOSE 22 80 84436、ENV
格式為 ENV 。 指定一個環境變量,會被后續 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命令有兩個參數,源和目標。它的基本作用是從源系統的文件系統上復制文件到目標容器的文件系統。如果源是一個URL,那該URL的內容將被下載并復制到容器中。
ADD [source directory or URL] [destination directory]
ADD /my_app_folder /my_app_folder8、ENTRYPOINT
兩種格式:
ENTRYPOINT [“executable”, “param1”, “param2”]
ENTRYPOINT command param1 param2 (shell中執行)。
配置容器啟動后執行的命令,并且不可被 docker run 提供的參數覆蓋。
每個Dockerfile中只能有一個 ENTRYPOINT ,當指定多個時,只有最后一個起效。9、VOLUME
格式為 VOLUME [“/data”] 。
創建一個可以從本地主機或其他容器掛載的掛載點,一般用來存放數據庫和需要保持的數據等。
11、USER
格式為 USER daemon 。
指定運行容器時的用戶名或UID,后續的 RUN 也會使用指定用戶。
當服務不需要管理員權限時,可以通過該命令指定運行用戶。并且可以在之前創建所需要的用戶,例如: RUN groupadd -r postgres && useradd -r -g postgres postgres 。要臨時獲取管理員權限可以使用 gosu ,而不推薦 sudo 。
11、WORKDIR
格式為 WORKDIR /path/to/workdir 。
為后續的 RUN 、 CMD 、 ENTRYPOINT 指令配置工作目錄。
可以使用多個 WORKDIR 指令,后續命令如果參數是相對路徑,則會基于之前命令指定的路徑。例如
WORKDIR /a
WORKDIR b
WORKDIR c
RUN pwd
則最終路徑為 /a/b/c 。12、ONBUILD
格式為 ONBUILD [INSTRUCTION] 。
配置當所創建的鏡像作為其它新創建鏡像的基礎鏡像時,所執行的操作指令。
例如,Dockerfile使用如下的內容創建了鏡像 image-A 。
[…]
ONBUILD ADD . /app/src
ONBUILD RUN /usr/local/bin/python-build –dir /app/src
[…]
#如果基于A創建新的鏡像時,新的Dockerfile中使用 FROM image-A
指定基礎鏡像時,會自動執行 ONBUILD 指令內容,
等價于在后面添加了兩條指令。
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函數調用的方式執行命令;
當存在多個CMD指令或ENTRYPOINT指令時,只有最后一個生效;
差異:
差異1:CMD指令指定的容器啟動時命令可以被docker run指定的命令覆蓋,而ENTRYPOINT指令指定的命令不能被覆蓋,而是將docker run指定的參數當做ENTRYPOINT指定命令的參數。
差異2:CMD指令可以為ENTRYPOINT指令設置默認參數,而且可以被docker run指定的參數覆蓋;
ENTRYPOINT
An ENTRYPOINT allows you to configure a container that will run as an executable.它可以讓你的容器功能表現得像一個可執行程序一樣。
- 例子一:
使用下面的ENTRYPOINT構造鏡像:
ENTRYPOINT ["/bin/echo"]
那么docker build出來的鏡像以后的容器功能就像一個/bin/echo程序:
比如我build出來的鏡像名稱叫imageecho,那么我可以這樣用它:
docker run -it imageecho “this is a test”
這里就會輸出”this is a test”這串字符,而這個imageecho鏡像對應的容器表現出來的功能就像一個echo程序一樣。 你添加的參數“this is a test”會添加到ENTRYPOINT后面,就成了這樣 /bin/echo “this is a test” 。現在你應該明白進入點的意思了吧。- 例子二:
ENTRYPOINT ["/bin/cat"]
構造出來的鏡像你可以這樣運行(假設名為st):
docker run -it st /etc/fstab
這樣相當: /bin/cat /etc/fstab 這個命令的作用。運行之后就輸出/etc/fstab里的內容。
6.3 鏡像構建實戰
Docker實戰-編寫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 國內鏡像倉庫
7.3 私有倉庫
7.4 Registry原理
7.5 本章小結
第8章 Docker容器
8.1 容器基本操作
8.2 進入容器內部
8.3 導出和導入容器
8.4 容器結構
8.5 本章小結
第9章 數據卷
9.1 數據卷是什么
9.2 為容器掛載數據卷
9.3 備份、恢復、遷移數據卷
9.4 容器數據卷擴展
9.5 本章小結
第10章 網絡管理
10.1 Docker網絡基礎
10.2 Docker網絡模式
10.3 Docker網絡配置
10.4 本章小結
第3篇 Docker進階實戰
第11章 操作系統
11.1 Alpine發行版
11.2 Busybox發行版
11.3 Debian/Ubuntu發行版
11.4 CentOS/Fedora發行版
11.5 CoreOS發行版
11.6 RancherOS發行版
11.7 本章小結
第12章 編排工具Compose
12.1 安裝Docker Compose
12.2 Compose命令基礎
12.3 Compose配置文件
12.4 Compose實戰
12.5 本章小結
第13章 Web服務器與應用
13.1 Apache服務器
13.2 Nginx服務器
13.3 Tomcat服務器
13.4 其他Web服務器
13.5 本章小結
第14章 數據庫
14.1 MySQL數據庫
14.2 PostgreSQL數據庫
14.3 Redis數據庫
14.4 MongoDB數據庫
14.5 其他
14.6 本章小結
第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 本章小結
第16章 Docker API介紹
16.1 認識Docker API
16.2 Docker Remote API介紹
16.3 其他API
16.4 本章小結
第17章 私有倉庫
17.1 Docker Registry介紹
17.2 認證與前端
17.3 企業級私有倉庫Harbor
17.4 私有倉庫前端授權工具Portus
17.5 本章小結
第18章 集群網絡
第19章 Docker安全
Kubernetes入門與進階實戰培訓