<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Docker 快速入門、核心概念和常用指令

          共 5152字,需瀏覽 11分鐘

           ·

          2021-05-02 14:50

          1、基本概念與操作

          1.1、安裝

          Linux 是 Docker 的原生支持平臺,所以建議在 Linux 下安裝。
          CentOS 下安裝 Docker,需要 7 及以上的發(fā)行版,建議使用 overlay2 存儲驅(qū)動程序。

          # 卸載已有 docker
          sudo yum remove docker \
                            docker-client \
                            docker-client-latest \
                            docker-common \
                            docker-latest \
                            docker-latest-logrotate \
                            docker-logrotate \
                            docker-engine

          # 添加安裝源
          sudo yum-config-manager \
              --add-repo \
              https://download.docker.com/linux/centos/docker-ce.repo

          # 安裝最新版
          sudo yum install docker-ce docker-ce-cli containerd.io

          # 啟動
          sudo yum install docker-ce docker-ce-cli containerd.io


          1.2、鏡像

          本質(zhì)上是只讀的文件和文件夾組合,包含了容器運行時所需要的所有基礎(chǔ)文件和配置信息。
          操作:
          1、拉取鏡像 docker pull
          如:docker pull nginx


          2、重命名鏡像 docker tag
          如:docker tag nginx:latest mynginx:latest


          3、查看鏡像 docker image ls 或 docker images


          4、刪除鏡像 docker rmi

          如:docker rmi mynginx


          5、構(gòu)建鏡像 docker build 或 docker commit
          如:docker commit nginx mynginx:lastest
          docker build 相對復雜,但使用較多


          1.3、容器

          容器是鏡像的運行實體、一個鏡像可以創(chuàng)建出多個容器、運行容器本質(zhì)是在容器內(nèi)部創(chuàng)建該文件系統(tǒng)的讀寫副本。


          生命周期:
          created:初建狀態(tài)
          running:運行狀態(tài)
          stopped:停止狀態(tài)
          paused:暫停狀態(tài)
          deleted:刪除狀態(tài)

          操作:
          1、創(chuàng)建并啟動容器
          創(chuàng)建:docker create -it --name=mynginx mynginx
          啟動:docker start mynginx
          創(chuàng)建并啟動:docker run -it --name=mynginx mynginx


          2、終止容器
          docker stop mynginx


          3、進入容器
          docker attach mynginx
          docker exec -it mynginx sh (使用較多)


          4、刪除容器
          docker rm mynginx
          刪除運行中的容器:docker rm -f mynginx

          5、導出容器
          docker export mynginx > mynginx.tar


          6、導入容器
          docker import mynginx.tar mynginx:import


          1.4、倉庫

          存儲和分發(fā) Docker 鏡像;注冊服務器是存放倉庫的實際服務器,可包含很多個倉庫,每個倉庫可以包含多個鏡像。


          公共倉庫 docker hub  https://hub.docker.com/
          登錄:docker login
          推送鏡像到倉庫:docker push

          使用 distribution 構(gòu)建私有倉庫
          https://github.com/distribution/distribution


          docker run -d -p 5000:5000 --name registry registry:2.7
          docker push localhost:5000/mynginx


          1.5、卷

          可以繞過默認的聯(lián)合文件系統(tǒng),直接以文件或目錄的形式存在于宿主機上。它解決了數(shù)據(jù)持久化和容器間共享數(shù)據(jù)的問題。
          操作:
          1、創(chuàng)建:docker volume create volume-name


          2、-v 指定被持久化的路徑,Docker 會自動為我們創(chuàng)建卷,并且綁定到容器中
          docker run -d --name=nginx-volume -v /usr/share/nginx/html nginx

          3、查看:docker volume ls

          4、卷詳細信息:docker volume inspect volume-name

          5、--mount 參數(shù)指定卷的名稱
          docker run -d --name=nginx --mount source=volume-name,target=/usr/share/nginx/html nginx

          6、刪除卷:docker volume rm volume-name

          7、卷之間數(shù)據(jù)共享:
          docker run --mount source=lv,target=/tmp/log --name=v-producer -it test
          docker run -it --name consumer --volumes-from v-producer test

          8、卷與主機之間數(shù)據(jù)共享:
          docker run -v /data:/usr/local/data -it test


          1.6、重要組件

          1、Docker

          • docker,是 Docker 客戶端,發(fā)送請求

          • dockerd,服務端入口,負責接收請求、返回結(jié)果

          • docker-init,容器的 1 號進程,管理子容器

          • docker-proxy,主機的網(wǎng)絡流量轉(zhuǎn)發(fā)到容器


          2、containerd

          • containerd,負責容器的生命周期管理,如容器啟動、停止等…

          • containerd-shim,作為容器進程的父進程,解耦 containerd 和真正的容器進程

          • ctr,containerd 的客戶端,開發(fā)與調(diào)試時向 containerd 發(fā)送請求


          3、運行時

          • runc,通過系統(tǒng)接口,創(chuàng)建、銷毀容器


          1.7、容器監(jiān)控

          docker stats 可查看主機上所有容器的 CPU、內(nèi)存、網(wǎng)絡 IO、磁盤 IO、PID 等資源的使用情況。
          cAdvisor 是谷歌開源的一款通用的容器監(jiān)控解決方案。
          安裝參考:

          https://www.jianshu.com/p/91f9d9ec374f


          查看監(jiān)控:
          http://localhost:8080
          http://localhost:8080/containers/
          http://localhost:8080/docker/


          1.8、安全問題

          • 自身安全漏洞

          • 鏡像中存在安全問題

          • Linux 主機內(nèi)核隔離不夠


          2、實現(xiàn)原理

          2.1、Namespace

          Namespace 是 Linux 內(nèi)核的一個特性,該特性可以實現(xiàn)在同一主機系統(tǒng)中,對進程 ID、主機名、用戶、文件名、網(wǎng)絡和進程間通信等資源的隔離。


          Docker 使用了六種:
          Mount Namespace,掛載點隔離
          PID Namespace,進程隔離
          UTS Namespace,主機名隔離
          IPC Namespace,進程間通信隔離
          User Namespace,用戶和用戶組隔離
          Net Namespace,網(wǎng)絡設備、IP 地址和端口等隔離


          2.2、Cgroups

          限制進程或者進程組的資源,如 CPU、內(nèi)存、磁盤 IO 等。
          cgroups 的功能:

          • 限制資源的使用量

          • 不同的組可以有 CPU 、磁盤 IO 等資源不同的使用優(yōu)先級

          • 計算控制組的資源使用情況

          • 控制進程的掛起或恢復


          2.3、聯(lián)合文件系統(tǒng)

          Union File System,一種分層的輕量級文件系統(tǒng),可以把多個目錄內(nèi)容聯(lián)合掛載到同一目錄下,從而形成一個單一的文件系統(tǒng)。


          Docker 中最常用的聯(lián)合文件系統(tǒng)有三種:AUFS、Devicemapper 和 OverlayFS。

          • AUFS 最早、最成熟;

          • Devicemapper,Linux 內(nèi)核提供的框架,是一種映射塊設備的技術(shù)框架。核心概念有映射設備(mapped device)、目標設備(target device)、映射表(map table),包含 loop-lvm 模式、direct-lvm 模式(生產(chǎn)使用);

          • overlay2,更新更穩(wěn)定,對 Linux 內(nèi)核和 Docker 版本要求都較高。


          2.4、網(wǎng)絡實現(xiàn)

          CNM (Container Network Model) 是 Docker 發(fā)布的容器網(wǎng)絡標準。
          Libnetwork 是開源的,使用 Golang 編寫,完全遵循 CNM 網(wǎng)絡規(guī)范,是 CNM 的官方實現(xiàn)。


          Libnetwork 包含四種主要的網(wǎng)絡模型:

          • null 空網(wǎng)絡模式,不提供容器網(wǎng)絡

          • bridge 橋接模式,容器與容器之間互通

          • host 主機網(wǎng)絡模式,容器內(nèi)與主機網(wǎng)絡互通

          • container 網(wǎng)絡模式,容器放在同一網(wǎng)絡通過 localhost 訪問


          3、其他相關(guān)

          3.1、容器編排

          Docker 三種常用的編排工具:Docker Compose、Docker Swarm 和 Kubernetes。

          • Docker Compose 是 Docker 收購得來,本質(zhì)是一個 python 腳本,可以在單個結(jié)點上管理和編排多個容器。

          • Docker Swarm 是 Docker 官方推出的容器集群管理工具,原生支持 Docker API,它的操作簡單、支持 TLS 雙向認證、使用 Raft 協(xié)議實現(xiàn)分布式。

          • Kubernetes,Google 借鑒內(nèi)部 Borg 系統(tǒng)沉淀的技術(shù)設計實現(xiàn),功能強大,目標是能夠支撐數(shù)億容器的運行;但其架構(gòu)較為復雜,上手門檻高。


          3.2、在 devops 中的作用

          DevOps 的整體目標是促進開發(fā)和運維人員之間的配合,并且通過自動化的手段縮短軟件的整個交付周期,提高軟件的可靠性。


          通過 Docker 快速安裝開發(fā)環(huán)境、Dockerfile 構(gòu)建鏡像快速集成、拉取鏡像運行容器即可完成部署,結(jié)合容器編排工具可實現(xiàn)藍綠發(fā)布。

          助力了 DevOps 的發(fā)展。


          可以快速持續(xù)集成與交付。

          瀏覽 53
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  AV观看在线观看 | 久草男人| 青娱乐在线视频2 | 好逼天天有 | 欧美日韩国产免费电影 |