亚洲最大看欧美片,亚洲图揄拍自拍另类图片,欧美精品v国产精品v呦,日本在线精品视频免费

  • 站長(zhǎng)資訊網(wǎng)
    最全最豐富的資訊網(wǎng)站

    最系統(tǒng)的掌握Docker核心技術(shù)(總結(jié)分享)

    本篇文章給大家?guī)?lái)了關(guān)于docker核心技術(shù)之容器操作,以及Dockerfile詳解等等相關(guān)問(wèn)題,希望對(duì)大家有幫助。

    最系統(tǒng)的掌握Docker核心技術(shù)(總結(jié)分享)

    一. Docker

    1. 簡(jiǎn)介

    • 基于Linux內(nèi)核的Cgroup, Namespace, 以及Union FS等技術(shù),對(duì)進(jìn)程進(jìn)行封裝隔離,屬于操作系統(tǒng)層面的虛擬技術(shù),由于隔離的進(jìn)程獨(dú)立于宿主和其它的隔離進(jìn)程,因此稱(chēng)為容器
    • 最初實(shí)現(xiàn)是基于LXC, 從0.7以后開(kāi)始去除LXC, 轉(zhuǎn)而使用自行開(kāi)發(fā)的Libcontainer, 從1.11開(kāi)始, 則進(jìn)一步演進(jìn)為使用runC和Containerd
    • Docker在容器的基礎(chǔ)上,進(jìn)行了進(jìn)一步的封裝,從文件系統(tǒng)、網(wǎng)絡(luò)互聯(lián)到進(jìn)程隔離等等,極大的簡(jiǎn)化了容器的創(chuàng)建和維護(hù),使得Docker技術(shù)比虛擬機(jī)技術(shù)更為輕便、快捷

    2. Docker優(yōu)勢(shì)

    • 更高效地利用系統(tǒng)資源
    • 更快速的啟動(dòng)時(shí)間
    • 一致的運(yùn)行環(huán)境
    • 持續(xù)交付和部署
    • 更輕松的遷移
    • 更輕松地維護(hù)和擴(kuò)展

    3. Docker與虛擬機(jī)對(duì)比

    最系統(tǒng)的掌握Docker核心技術(shù)(總結(jié)分享)

    最系統(tǒng)的掌握Docker核心技術(shù)(總結(jié)分享)

    二. Docker安裝

    參考文章安裝: Install Docker Engine on Ubuntu | Docker Documentation

    最系統(tǒng)的掌握Docker核心技術(shù)(總結(jié)分享)

    最系統(tǒng)的掌握Docker核心技術(shù)(總結(jié)分享)

    最系統(tǒng)的掌握Docker核心技術(shù)(總結(jié)分享)

    最系統(tǒng)的掌握Docker核心技術(shù)(總結(jié)分享)最系統(tǒng)的掌握Docker核心技術(shù)(總結(jié)分享)

    三. 容器操作

    • 啟動(dòng):

    docker run:

    -it 交互

    -d 后臺(tái)運(yùn)行

    -p 端口映射

    -v 磁盤(pán)掛載

    最系統(tǒng)的掌握Docker核心技術(shù)(總結(jié)分享)

    • 啟動(dòng)已終止容器

    docker start

    最系統(tǒng)的掌握Docker核心技術(shù)(總結(jié)分享)

    • 停止容器

    docker stop

    最系統(tǒng)的掌握Docker核心技術(shù)(總結(jié)分享)

    • 查看容器進(jìn)程

    docker ps

    最系統(tǒng)的掌握Docker核心技術(shù)(總結(jié)分享)

    • 查看容器細(xì)節(jié)

    docker inspect

    最系統(tǒng)的掌握Docker核心技術(shù)(總結(jié)分享)

    • 拷貝文件到容器內(nèi)

    docker cp file1 <containerid>:/file_to_path

    最系統(tǒng)的掌握Docker核心技術(shù)(總結(jié)分享)

    • docker退出容器,而不關(guān)閉容器: ctrl+q+p

    • docker退出容器,而關(guān)閉容器: exit

    • 查詢(xún)docker所有鏡像

    docker images

    最系統(tǒng)的掌握Docker核心技術(shù)(總結(jié)分享)

    • Docker鏡像倉(cāng)庫(kù)

    Docker hub: https://hub.docker.com

    創(chuàng)建私有鏡像倉(cāng)庫(kù): docker run -d -p 5000:5000 registry

    四. Dockerfile詳解

    Dockerfile一般分為四個(gè)部分:基礎(chǔ)鏡像信息、維護(hù)信息、鏡像操作指令和容器啟動(dòng)時(shí)操作指令

    • 常用命令

    FROM:指定基礎(chǔ)鏡像, 必須為第一個(gè)指令

    格式:

    FROM <image>

    FROM <image>:<tag>

    FROM <image>@<digest>

    示例:

    FROM ubuntu

    MAINTAINER: 維護(hù)信息

    格式:

    MAINTAINER <name>

    示例

    MAINTAINER ribbon

    RUN:構(gòu)建鏡像時(shí)執(zhí)行的命令

    格式:

    shell執(zhí)行:RUN <command>

    exec執(zhí)行:RUN ["executable", "param1", "param2"]

    示例:

    RUN apk update

    RUN ["/etc/execfile", "arg1", "arg2"]

    RUN apt-get update && apt-get install這兩條命令永遠(yuǎn)用&&連接,否則apt-get update構(gòu)建層被緩存,會(huì)導(dǎo)致新package無(wú)法安裝

    ADD: 將本地文件添加到容器中,tar等類(lèi)型會(huì)自動(dòng)解壓,可以訪(fǎng)問(wèn)網(wǎng)絡(luò)資源,類(lèi)似于wget

    格式:

    ADD <src> … <dest>

    示例:

    ADD bin/amd64/httpserver /httpserver

    COPY: 功能類(lèi)似于ADD,但是不會(huì)解壓縮文件,不能訪(fǎng)問(wèn)網(wǎng)絡(luò)資源

    在Dockerfile中使用multi-stage: Dockerfile 中的 multi-stage(多階段構(gòu)建) – sparkdev – 博客園

    格式:

    COPY<src> … <dest>

    示例:

    COPYbin/amd64/httpserver /httpserver

    CMD: 構(gòu)建容器后調(diào)用,也就是在容器啟動(dòng)時(shí)才進(jìn)行調(diào)用

    格式:

    CMD ["executable","param1","param2"] (執(zhí)行可執(zhí)行文件,優(yōu)先)
    CMD ["param1","param2"] (設(shè)置了ENTRYPOINT,則直接調(diào)用ENTRYPOINT添加參數(shù))
    CMD command param1 param2 (執(zhí)行shell內(nèi)部命令)

    示例:

    CMD ["ethtool", "–help"]

    CMD echo "1111"

    ENTRTPOINT: 配置容器,使其可執(zhí)行化。

    格式:

    ENTRYPOINT ["executable", "param1", "param2"] (可執(zhí)行文件, 優(yōu)先)
    ENTRYPOINT command param1 param2 (shell內(nèi)部命令)

    范例:

    ENTRYPOINT /httpserver

    CMD [-c]

    LABAL: 用于為鏡像添加源數(shù)據(jù)

    格式:

    LABEL <key>=<value> <key>=<value> <key>=<value> …

    范例:

    LABEL multi.label1="value1" multi.label2="value2" other="value3"

    ENV: 設(shè)置環(huán)境變量

    格式:

    ENV <key> <value>

    范例:

    ENV MY_SERVICE_PORT=80 UDP_PORT=90

    EXPOSE: 指定外界交互的端口

    格式:

    EXPOSE <port> [<port>…]

    示例:

    EXPOSE 80

    EXPOSE 80/tcp

    EXPOSE 80 90

    VOLUME: 用于指定持久化目錄

    格式:

    VOLUME [<path>]

    范例:

    VOLUME ["/data", "/usr1/jenkins"]

    USER:指定運(yùn)行容器時(shí)的用戶(hù)名或 UID,后續(xù)的 RUN 也會(huì)使用指定用戶(hù)。

    格式:
      USER user
      USER user:group
      USER uid
      USER uid:gid
      USER user:gid
      USER uid:group

    示例:
      USER www

    ARG: 用于指定傳遞給構(gòu)建運(yùn)行時(shí)的變量

    格式:
    ARG <name>[=<default value>]
    示例:
    ARG build_user=ribbon

    最系統(tǒng)的掌握Docker核心技術(shù)(總結(jié)分享)

    五. Linux NameSpace詳解

    • NamesSpace詳解:

    Linux NameSpace_Frank_Abagnale的博客-CSDN博客 這篇文章比較詳細(xì)的介紹,可以參考這篇

    最系統(tǒng)的掌握Docker核心技術(shù)(總結(jié)分享)

    • NameSpace的常用操作

    • 查看當(dāng)前系統(tǒng)的namespace:

    lsns -t <type>

    最系統(tǒng)的掌握Docker核心技術(shù)(總結(jié)分享)

    • 查看某進(jìn)程的namespace:

    ls -la /proc/<pid>/ns/

    最系統(tǒng)的掌握Docker核心技術(shù)(總結(jié)分享)

    • 查看某namespace運(yùn)行命令

    nsenter -t <pid> -n

    最系統(tǒng)的掌握Docker核心技術(shù)(總結(jié)分享)

    六. Linux Cgroups詳解

    • Cgroups詳解

    容器核心:cgroups – 簡(jiǎn)書(shū) 可以參考這篇文章來(lái)進(jìn)行了解

    • 模擬Cgroups控制CPU資源

    通過(guò)模擬來(lái)更好的熟悉Cgroups控制資源的效果, 首先創(chuàng)建cpudemo文件夾

    最系統(tǒng)的掌握Docker核心技術(shù)(總結(jié)分享)

    執(zhí)行top可以看到busyloop占用兩個(gè)CPU資源最系統(tǒng)的掌握Docker核心技術(shù)(總結(jié)分享)

    將進(jìn)程添加進(jìn)cgroup進(jìn)程配置組

    最系統(tǒng)的掌握Docker核心技術(shù)(總結(jié)分享)

    設(shè)置cpuquota

    最系統(tǒng)的掌握Docker核心技術(shù)(總結(jié)分享)

    可以看到成功將占用200%CPU資源的降低成1%

    最系統(tǒng)的掌握Docker核心技術(shù)(總結(jié)分享)

    • 模擬Cgroups超過(guò)限定memory資源被OOM kill

    /sys/fs/cgroup/memory目錄下創(chuàng)建memorydemo文件夾

    最系統(tǒng)的掌握Docker核心技術(shù)(總結(jié)分享)

    運(yùn)行消耗內(nèi)存程序, 使用watch查詢(xún)內(nèi)存使用情況

    最系統(tǒng)的掌握Docker核心技術(shù)(總結(jié)分享)

    最系統(tǒng)的掌握Docker核心技術(shù)(總結(jié)分享)

    將進(jìn)程配置進(jìn)cgroups配置組最系統(tǒng)的掌握Docker核心技術(shù)(總結(jié)分享)

    設(shè)置最大內(nèi)存大小

    最系統(tǒng)的掌握Docker核心技術(shù)(總結(jié)分享)

    等待程序被OOM kill, dmesg可以看到殺死信息

    最系統(tǒng)的掌握Docker核心技術(shù)(總結(jié)分享)

    最系統(tǒng)的掌握Docker核心技術(shù)(總結(jié)分享)

    備注:刪除自主創(chuàng)建的cgroup文件夾, 需要使用cgroup-tools

    最系統(tǒng)的掌握Docker核心技術(shù)(總結(jié)分享)

    七. Union FS

    Docker前面使用的技術(shù)都是源于linux的技術(shù)并沒(méi)有創(chuàng)新,而Docker的創(chuàng)新正是文件系統(tǒng)。

    1. 概念:

    • 將不同目錄掛載在同一個(gè)虛擬文件系統(tǒng)下的文件系統(tǒng)
    • 支持為每一個(gè)成員目錄設(shè)定readonly、readwrite和without-able權(quán)限
    • 文件系統(tǒng)分層,對(duì)readonly權(quán)限的目錄可以進(jìn)行邏輯上的修改,這里的修改屬于增量的,不影響readonly部分
    • 通常Union FS的用途: 多個(gè)disk掛載到同一個(gè)目錄下, 另一個(gè)是將readonly部分和writeable的目錄聯(lián)合在一起

    2. 圖解Union FS

    Docker鏡像的設(shè)計(jì)中,引入了層(layer)的概念,也就是說(shuō),用戶(hù)制作鏡像的每一步操作,都會(huì)生成一個(gè)層,也就是一個(gè)增量rootfs(一個(gè)目錄),這樣應(yīng)用A和應(yīng)用B所在的容器共同引用相同的ubuntu操作系統(tǒng)層、Golang環(huán)境層(作為只讀層),而各自有各自應(yīng)用程序?qū)?,和可?xiě)層。啟動(dòng)容器的時(shí)候通過(guò)UnionFS把相關(guān)的層掛載到一個(gè)目錄,作為容器的根文件系統(tǒng)。

    最系統(tǒng)的掌握Docker核心技術(shù)(總結(jié)分享)

    3. 容器存儲(chǔ)驅(qū)動(dòng)

    最系統(tǒng)的掌握Docker核心技術(shù)(總結(jié)分享)

    4. 模擬Union FS更好理解效果
    最系統(tǒng)的掌握Docker核心技術(shù)(總結(jié)分享)

    由于docker當(dāng)前版本上使用的是overlayFS的存儲(chǔ)驅(qū)動(dòng),所以我們就以overlay掛載方式來(lái)進(jìn)行實(shí)驗(yàn), overlayfs通過(guò)三個(gè)目錄:lower目錄、upper目錄、以及work目錄實(shí)現(xiàn),其中l(wèi)ower目錄可以是多個(gè),work目錄為工作基礎(chǔ)目錄,掛載后內(nèi)容會(huì)被清空,且在使用過(guò)程中其內(nèi)容用戶(hù)不可見(jiàn),最后聯(lián)合掛載完成給用戶(hù)呈現(xiàn)的統(tǒng)一視圖稱(chēng)為為merged目錄。

    最系統(tǒng)的掌握Docker核心技術(shù)(總結(jié)分享)

    執(zhí)行如下命令:

    mkdir upper lower merged work echo "lower" > lower/in_lower.txt echo "from lower" > lower/in_both.txt echo "from upper" > upper/in_both.txt echo "upper" > upper/in_upper.txt path=$(pwd) mount -t overlay overlay -o lowerdir=${path}/lower,upperdir=${path}/upper,workdir=${path}/work ${path}/merged

    最系統(tǒng)的掌握Docker核心技術(shù)(總結(jié)分享)

    最系統(tǒng)的掌握Docker核心技術(shù)(總結(jié)分享) 可以看到使用overlay存儲(chǔ)驅(qū)動(dòng)文件掛載實(shí)現(xiàn)的效果。實(shí)驗(yàn)完成后恢復(fù)環(huán)境需要先umount merged目錄后, 再將四個(gè)目錄進(jìn)行刪除操作,先刪除其他的可能會(huì)出現(xiàn)rm: cannot remove 'merged/': Device or resource busy,導(dǎo)致merged目錄刪除不掉。

    八. Docker網(wǎng)絡(luò)

    1. 安裝工具

    Centos系統(tǒng):

    $ yum install bridge-utils

    Ubuntu系統(tǒng):

    $ apt-get install bridge-utils

    2. Docker網(wǎng)絡(luò)模式

    最系統(tǒng)的掌握Docker核心技術(shù)(總結(jié)分享)

    • 查詢(xún)docker內(nèi)置的網(wǎng)絡(luò)模式

    最系統(tǒng)的掌握Docker核心技術(shù)(總結(jié)分享)

    • docker run選擇運(yùn)行的網(wǎng)絡(luò)模式

    1)host模式:使用 –net=host 指定。 跟host公用一套net

    最系統(tǒng)的掌握Docker核心技術(shù)(總結(jié)分享)

    最系統(tǒng)的掌握Docker核心技術(shù)(總結(jié)分享)

    最系統(tǒng)的掌握Docker核心技術(shù)(總結(jié)分享)

    2)none模式:使用 –net=none 指定。網(wǎng)絡(luò)配置需要由自己來(lái)進(jìn)行配置

    最系統(tǒng)的掌握Docker核心技術(shù)(總結(jié)分享)

    最系統(tǒng)的掌握Docker核心技術(shù)(總結(jié)分享)

    3)bridge模式:使用 –net=bridge 指定,默認(rèn)設(shè)置。

    最系統(tǒng)的掌握Docker核心技術(shù)(總結(jié)分享)

    最系統(tǒng)的掌握Docker核心技術(shù)(總結(jié)分享)

    docker網(wǎng)絡(luò)邏輯圖 網(wǎng)橋和NAT

    最系統(tǒng)的掌握Docker核心技術(shù)(總結(jié)分享)

    最系統(tǒng)的掌握Docker核心技術(shù)(總結(jié)分享)

    4)container模式:使用 –net=container:NAME_or_ID 指定。使用其他容器的網(wǎng)絡(luò)配置

    最系統(tǒng)的掌握Docker核心技術(shù)(總結(jié)分享)

    最系統(tǒng)的掌握Docker核心技術(shù)(總結(jié)分享)

    最系統(tǒng)的掌握Docker核心技術(shù)(總結(jié)分享)

    網(wǎng)絡(luò)模式圖大概如下圖所示最系統(tǒng)的掌握Docker核心技術(shù)(總結(jié)分享)

    3. 模擬Docker起網(wǎng)橋的操作

    • 創(chuàng)建–net=none nginx

    最系統(tǒng)的掌握Docker核心技術(shù)(總結(jié)分享)

    • 創(chuàng)建network namespace

    最系統(tǒng)的掌握Docker核心技術(shù)(總結(jié)分享)

    • 建立網(wǎng)絡(luò)namespace鏈接

    最系統(tǒng)的掌握Docker核心技術(shù)(總結(jié)分享)

    最系統(tǒng)的掌握Docker核心技術(shù)(總結(jié)分享)

    • 檢查當(dāng)前已經(jīng)創(chuàng)建的網(wǎng)橋設(shè)備

    最系統(tǒng)的掌握Docker核心技術(shù)(總結(jié)分享)

    • 創(chuàng)建veth對(duì)

    最系統(tǒng)的掌握Docker核心技術(shù)(總結(jié)分享)

    • 進(jìn)行A網(wǎng)絡(luò)配置

    最系統(tǒng)的掌握Docker核心技術(shù)(總結(jié)分享)

    • 進(jìn)行B網(wǎng)絡(luò)配置

    生成eth0網(wǎng)絡(luò)設(shè)備在nginx docker中

    最系統(tǒng)的掌握Docker核心技術(shù)(總結(jié)分享)

    給eth0配置ip 網(wǎng)關(guān)

    最系統(tǒng)的掌握Docker核心技術(shù)(總結(jié)分享)

    • nginx可以訪(fǎng)問(wèn)

    最系統(tǒng)的掌握Docker核心技術(shù)(總結(jié)分享)

    • 配置nat, 讓windows通過(guò)ip也可以訪(fǎng)問(wèn)

    最系統(tǒng)的掌握Docker核心技術(shù)(總結(jié)分享)

    最系統(tǒng)的掌握Docker核心技術(shù)(總結(jié)分享)

    最系統(tǒng)的掌握Docker核心技術(shù)(總結(jié)分享)

    • 使用完刪除指定nat規(guī)則

    最系統(tǒng)的掌握Docker核心技術(shù)(總結(jié)分享)

    推薦學(xué)習(xí):《docker視頻教程》

    贊(0)
    分享到: 更多 (0)
    網(wǎng)站地圖   滬ICP備18035694號(hào)-2    滬公網(wǎng)安備31011702889846號(hào)