第三章 Kubernetes之Docker必知必會

3-1 為什么需要Docker?k8s與Docker的關(guān)系档叔?

3.1.1 Docker VS 虛擬機

image

官方解釋:Package Software into Standardized Units for Development, Shipment and Deployment.

3.1.2 為什么需要Docker

image

3.1.3 Docker的系統(tǒng)組成

image

3.2 Docker namespace 隔離

3.2.1 Docker通過 Namespace 實現(xiàn)進程隔離

通過clone()在創(chuàng)建新進程的同時創(chuàng)建namespace。

int clone(int (*child_func)(void *), void *child_stack, int flags, void *arg);

3.2.2 Namespace 隔離類型

  • UTS namespace

UTS(UNIX Time-sharing System)namespace提供了主機名與域名的隔離计寇,這樣每個docke容器就可以擁有獨立的主機名和域名了常拓,在網(wǎng)絡(luò).上可以被視為- -個獨立的節(jié)點,而非宿主機.上的一個進程毛秘。

  • IPC namespace

進程間通信(nter-Pracess Communication,IPC)涉 及的IPC資源包括常見的信號量阻课、消息隊列和共享內(nèi)存叫挟。在同一個IPC namespace下的進程彼此可見,不同IPC namespace下的進程則互相不可見限煞。

  • PID namespace

PID namespace隔離非常實用抹恳,它對進程PID重新標號,即兩個不同namespace下的進程可以有相同的PID署驻。每個PID namespace都有自己的計數(shù)程序奋献。內(nèi)核為所有的PID namespace維護了一個樹狀結(jié)構(gòu)绊序,最頂層的是系統(tǒng)初始時創(chuàng)建的,被稱為root namespace秽荞,它創(chuàng)建的心PID namespace被稱為

child namespace(樹的子節(jié)點)骤公。

通過這種方式,不同的PIDnamespace會形成一個層級體系扬跋。所屬的父節(jié)點可以看到子節(jié)點中的進程阶捆,并可以通過信號等方式對子節(jié)點中的進程產(chǎn)生影響。反過來钦听,子節(jié)點卻不能看到父節(jié)點PID洒试。

3.2.3 實踐:通過unshare()在原先進程上進行namespace隔離

最后要說明的系統(tǒng)調(diào)用是unshare(),它與clone()很像朴上,不同的是垒棋,unshare()運行 在原先的進程上,不需要啟動一個新進程痪宰。

$ sudo unshare --fork --pid --mount-proc bash
ps aux
image

3.2.4 Docker 的實現(xiàn)原理:Docker 如何通過 Namespace 聚合進程叼架,實現(xiàn)進程間隔離。

docker run -d -p 8083:8083  nginx
ps -ef|grep docker 
ls -al /proc/[PID]/ns

3.3 Docker 的資源配額 CGroups

  1. Docker 使用CGroups實現(xiàn)資源的配額管理衣撬。
  • Cgroups (control groups)

  • 2007年由谷歌工程師研發(fā)

  • 2008年并入 Linux Kernel 2.6.24

  • C語言實現(xiàn)

  1. CGroups 限制進程的 CPU使用時間乖订。 Docker中的 CPU,內(nèi)存具练,網(wǎng)絡(luò)的限制均通過 cgroups 實現(xiàn)
    image
  2. 實踐 在宿主機上創(chuàng)建一個讓 CPU 飆升到100%的進程: (此操作有風(fēng)險乍构,慎用)

while : ; do : ; done &

記錄下 PID = 27358

cd /sys/fs/cgroup/cpu
mkdir cgroups_test
echo 20000 > /sys/fs/cgroup/cpu/cgroups_test/cpu.cfs_quota_us
echo 27358 > /sys/fs/cgroup/cpu/cgroups_test/tasks

20000代表2萬微秒,也就是20%的CPU配額

清理該進程

kill -9 27358

  1. docker 里如何加參數(shù)進行資源配額 docker run -it --cpus=".5" nginx /bin/sh扛点,其中的.5表示0.5即50% 進入容器查看是否有對應(yīng)的 cgroup 設(shè)置
cd /sys/fs/cgroup/cpu
cat cpu.cfs_quota_us

配置顯示 500000即50%的CPU配額哥遮,證明--cpus=".5"的參數(shù)已經(jīng)生效

image

3-4 Docker鏡像

3.4.1 Docker鏡像的由來

  • 雖然 Docker 實現(xiàn)了運行環(huán)境的隔離盯捌,但如何將一個運行的容器快速進行啟動镜悉,復(fù)制,遷移到其他的主機上運行人柿?
  • 如果容器無法快速進行復(fù)制畔乙,遷移君仆,那么和以 VMware 為代表的虛擬化技術(shù)相比并沒有太多優(yōu)勢

3.4.2 Docker 鏡像的特性

  • Docker 鏡像具備了應(yīng)用運行所需要的所有依賴

  • 一次構(gòu)建翩概,處處運行

  • Docker 鏡像的存儲是基于 checksum 的去重存儲牲距,大大降低存儲空間

3.4.3 Docker 鏡像常用命令

  • 下載 Docker 鏡像 docker pull nginx

  • 為鏡像打版本號 docker tag

  • 上傳 Docker 鏡像 docker push


3-5 編寫博客 應(yīng)用的 Dockerfile

FROM openjdk:8-jdk-alpine
MAINTAINER QingFeng
VOLUME /tmp
ADD target/kubeblog.jar /kubeblog.jar
EXPOSE 5000
ENTRYPOINT ["java","-jar","/kubeblog.jar"]

3-6 為博客應(yīng)用構(gòu)建 Docker 鏡像

  • 增加 mysql57 hosts 記錄,作為數(shù)據(jù)庫的域名
vi /etc/hosts
127.0.0.1    mysql57
  • 下載代碼,構(gòu)建 mvn package
git clone <git url>
cd /root/kubeblog/Final
mvn package
  • 構(gòu)建 Docker 鏡像
docker build -t kubeblog .
  • 查看 docker 鏡像
docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
kubeblog            1.0                 f9bb30633155        4 minutes ago       148MB
  • 將鏡像推到自己的dockerhub
[root@swarm-manager Final]# docker login
Login with your Docker ID to push and pull images from Docker Hub. If you don't have a Docker ID, head over to https://hub.docker.com to create one.
Username: insaneloafer
Password:
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store

Login Succeeded
[root@swarm-manager Final]#
[root@swarm-manager Final]# docker tag kubeblog:1.0 insaneloafer/kubeblog:1.0
[root@swarm-manager Final]#
[root@swarm-manager Final]# docker push insaneloafer/kubeblog:1.0
The push refers to repository [docker.io/insaneloafer/kubeblog]
b0e8272da662: Pushed
138726990cf7: Mounted from library/openjdk
5b40c5fb5220: Mounted from library/openjdk
717b092b8c86: Mounted from library/openjdk
1.0: digest: sha256:3023f7b6ae04313c72504dd608f6b8bc1e5268aaa97d5529ba7d7cd360dae243 size: 1159
image

3-7 Docker run --link運行博客應(yīng)用

  • docker run --link運行博客應(yīng)用

--link表示運行容器時與哪個容器進行網(wǎng)絡(luò)連接钥庇。

docker run --name kubeblog -d -p 5000:5000  --link mysql57 kubeblog:1.0

-進入容器查看環(huán)境變量 evn

docker exec -it kubeblog sh
env |grep MYSQL
MYSQL57_ENV_MYSQL_MAJOR=5.7
MYSQL57_PORT_3306_TCP_ADDR=172.17.0.2
MYSQL57_ENV_MYSQL_ROOT_PASSWORD=password
MYSQL57_ENV_GOSU_VERSION=1.12
MYSQL57_PORT_3306_TCP_PORT=3306
MYSQL57_PORT_3306_TCP_PROTO=tcp
MYSQL57_PORT_33060_TCP_ADDR=172.17.0.2
MYSQL57_PORT=tcp://172.17.0.2:3306
MYSQL57_PORT_3306_TCP=tcp://172.17.0.2:3306
MYSQL57_PORT_33060_TCP_PORT=33060
MYSQL57_ENV_MYSQL_VERSION=5.7.30-1debian10
MYSQL57_PORT_33060_TCP_PROTO=tcp
MYSQL57_NAME=/kubeblog/mysql57
MYSQL57_PORT_33060_TCP=tcp://172.17.0.2:33060
  • 更新/etc/hosts文件
cat /etc/hosts

127.0.0.1   localhost
::1 localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
172.17.0.2  mysql57 401b104b930a
172.17.0.3  2028007380c4
  • 在宿主機訪問 centos 虛擬機上的 kubeblog 應(yīng)用牍鞠,需要關(guān)閉虛擬機防火墻
systemctl stop firewalld
192.168.99.101:5000
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市评姨,隨后出現(xiàn)的幾起案子难述,更是在濱河造成了極大的恐慌萤晴,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,692評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件胁后,死亡現(xiàn)場離奇詭異店读,居然都是意外死亡,警方通過查閱死者的電腦和手機攀芯,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,482評論 3 392
  • 文/潘曉璐 我一進店門屯断,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人侣诺,你說我怎么就攤上這事殖演。” “怎么了年鸳?”我有些...
    開封第一講書人閱讀 162,995評論 0 353
  • 文/不壞的土叔 我叫張陵趴久,是天一觀的道長。 經(jīng)常有香客問我搔确,道長彼棍,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,223評論 1 292
  • 正文 為了忘掉前任膳算,我火速辦了婚禮滥酥,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘畦幢。我一直安慰自己坎吻,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,245評論 6 388
  • 文/花漫 我一把揭開白布宇葱。 她就那樣靜靜地躺著瘦真,像睡著了一般。 火紅的嫁衣襯著肌膚如雪黍瞧。 梳的紋絲不亂的頭發(fā)上诸尽,一...
    開封第一講書人閱讀 51,208評論 1 299
  • 那天,我揣著相機與錄音印颤,去河邊找鬼您机。 笑死,一個胖子當(dāng)著我的面吹牛年局,可吹牛的內(nèi)容都是我干的际看。 我是一名探鬼主播,決...
    沈念sama閱讀 40,091評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼矢否,長吁一口氣:“原來是場噩夢啊……” “哼仲闽!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起僵朗,我...
    開封第一講書人閱讀 38,929評論 0 274
  • 序言:老撾萬榮一對情侶失蹤赖欣,失蹤者是張志新(化名)和其女友劉穎屑彻,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體顶吮,經(jīng)...
    沈念sama閱讀 45,346評論 1 311
  • 正文 獨居荒郊野嶺守林人離奇死亡社牲,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,570評論 2 333
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了悴了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片膳沽。...
    茶點故事閱讀 39,739評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖让禀,靈堂內(nèi)的尸體忽然破棺而出挑社,到底是詐尸還是另有隱情,我是刑警寧澤巡揍,帶...
    沈念sama閱讀 35,437評論 5 344
  • 正文 年R本政府宣布痛阻,位于F島的核電站,受9級特大地震影響腮敌,放射性物質(zhì)發(fā)生泄漏阱当。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,037評論 3 326
  • 文/蒙蒙 一糜工、第九天 我趴在偏房一處隱蔽的房頂上張望弊添。 院中可真熱鬧,春花似錦捌木、人聲如沸油坝。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,677評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽澈圈。三九已至,卻和暖如春帆啃,著一層夾襖步出監(jiān)牢的瞬間瞬女,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,833評論 1 269
  • 我被黑心中介騙來泰國打工努潘, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留诽偷,地道東北人。 一個月前我還...
    沈念sama閱讀 47,760評論 2 369
  • 正文 我出身青樓疯坤,卻偏偏與公主長得像报慕,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子贴膘,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,647評論 2 354

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