1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        Docker從入門到干活,看這一篇足矣 [建議收藏]

        共 9444字,需瀏覽 19分鐘

         ·

        2020-12-12 03:53

        容器簡介

        什么是?Linux?容器

        Linux容器是與系統(tǒng)其他部分隔離開的一系列進(jìn)程,從另一個鏡像運行,并由該鏡像提供支持進(jìn)程所需的全部文件。


        容器提供的鏡像包含了應(yīng)用的所有依賴項,因而在從開發(fā)到測試再到生產(chǎn)的整個過程中,它都具有可移植性和一致性。



        更加詳細(xì)地來說,請您假定您在開發(fā)一個應(yīng)用。您使用的是一臺筆記本電腦,而且您的開發(fā)環(huán)境具有特定的配置。其他開發(fā)人員身處的環(huán)境配置可能稍有不同。您正在開發(fā)的應(yīng)用依賴于您當(dāng)前的配置,還要依賴于某些特定文件。


        與此同時,您的企業(yè)還擁有標(biāo)準(zhǔn)化的測試和生產(chǎn)環(huán)境,且具有自身的配置和一系列支持文件。


        您希望盡可能多在本地模擬這些環(huán)境,而不產(chǎn)生重新創(chuàng)建服務(wù)器環(huán)境的開銷。


        因此,您要如何確保應(yīng)用能夠在這些環(huán)境中運行和通過質(zhì)量檢測,并且在部署過程中不出現(xiàn)令人頭疼的問題,也無需重新編寫代碼和進(jìn)行故障修復(fù)?答案就是使用容器。


        容器可以確保您的應(yīng)用擁有必需的配置和文件,使得這些應(yīng)用能夠在從開發(fā)到測試、再到生產(chǎn)的整個流程中順利運行,而不出現(xiàn)任何不良問題。這樣可以避免危機(jī),做到皆大歡喜。


        雖然這只是簡化的示例,但在需要很高的可移植性、可配置性和隔離的情況下,我們可以利用 Linux 容器通過很多方式解決難題。


        無論基礎(chǔ)架構(gòu)是在企業(yè)內(nèi)部還是在云端,或者混合使用兩者,容器都能滿足您的需求。


        容器不就是虛擬化嗎

        是,但也不竟然。我們用一種簡單方式來思考一下:


        虛擬化使得許多操作系統(tǒng)可同時在單個系統(tǒng)上運行。


        容器則可共享同一個操作系統(tǒng)內(nèi)核,將應(yīng)用進(jìn)程與系統(tǒng)其他部分隔離開。


        圖?-?普通虛擬化技術(shù)和Docker的對比


        這意味著什么?首先,讓多個操作系統(tǒng)在單個虛擬機(jī)監(jiān)控程序上運行以實現(xiàn)虛擬化,并不能達(dá)成和使用容器同等的輕量級效果。


        事實上,在僅擁有容量有限的有限資源時,您需要能夠可以進(jìn)行密集部署的輕量級應(yīng)用。


        Linux 容器可從單個操作系統(tǒng)運行,在所有容器中共享該操作系統(tǒng),因此應(yīng)用和服務(wù)能夠保持輕量級,并行快速運行。


        容器發(fā)展簡史?


        我們現(xiàn)在稱為容器技術(shù)的概念最初出現(xiàn)在 2000?年,當(dāng)時稱為 FreeBSD jail,這種技術(shù)可將 FreeBSD 系統(tǒng)分區(qū)為多個子系統(tǒng)(也稱為 Jail)。


        Jail 是作為安全環(huán)境而開發(fā)的,系統(tǒng)管理員可與企業(yè)內(nèi)部或外部的多個用戶共享這些 Jail。


        Jail 的目的是讓進(jìn)程在經(jīng)過修改的 chroot 環(huán)境中創(chuàng)建,而不會脫離和影響整個系統(tǒng)?—?在 chroot 環(huán)境中,對文件系統(tǒng)、網(wǎng)絡(luò)和用戶的訪問都實現(xiàn)了虛擬化。


        盡管 Jail 在實施方面存在局限性,但最終人們找到了脫離這種隔離環(huán)境的方法。


        但這個概念非常有吸引力。


        2001 年,通過 Jacques Gélinas 的 VServer 項目,隔離環(huán)境的實施進(jìn)入了 Linux 領(lǐng)域。


        正如 Gélinas 所說,這項工作的目的是“在高度獨立且安全的單一環(huán)境中運行多個通用 Linux 服務(wù)器?[sic]?!?


        在完成了這項針對 Linux 中多個受控制用戶空間的基礎(chǔ)性工作后,Linux 容器開始逐漸成形并最終發(fā)展成了現(xiàn)在的模樣。


        什么是 Docker?

        “Docker”?一詞指代多種事物,包括開源社區(qū)項目、開源項目使用的工具、主導(dǎo)支持此類項目的公司 Docker Inc. 以及該公司官方支持的工具。技術(shù)產(chǎn)品和公司使用同一名稱,的確讓人有點困惑。


        我們來簡單說明一下:

        ? IT 軟件中所說的?“Docker”?,是指容器化技術(shù),用于支持創(chuàng)建和使用 Linux 容器。


        ??開源 Docker 社區(qū)致力于改進(jìn)這類技術(shù),并免費提供給所有用戶,使之獲益。


        ? Docker Inc. 公司憑借 Docker 社區(qū)產(chǎn)品起家,它主要負(fù)責(zé)提升社區(qū)版本的安全性,并將改進(jìn)后的版本與更廣泛的技術(shù)社區(qū)分享。此外,它還專門對這些技術(shù)產(chǎn)品進(jìn)行完善和安全固化,以服務(wù)于企業(yè)客戶。


        借助 Docker ,您可將容器當(dāng)做重量輕、模塊化的虛擬機(jī)使用。同時,您還將獲得高度的靈活性,從而實現(xiàn)對容器的高效創(chuàng)建、部署及復(fù)制,并能將其從一個環(huán)境順利遷移至另一個環(huán)境。


        Docker 如何工作?

        Docker 技術(shù)使用 Linux 內(nèi)核和內(nèi)核功能(例如 Cgroups 和 namespaces)來分隔進(jìn)程,以便各進(jìn)程相互獨立運行。


        這種獨立性正是采用容器的目的所在;它可以獨立運行多種進(jìn)程、多個應(yīng)用程序,更加充分地發(fā)揮基礎(chǔ)設(shè)施的作用,同時保持各個獨立系統(tǒng)的安全性。


        容器工具(包括 Docker)可提供基于鏡像的部署模式。這使得它能夠輕松跨多種環(huán)境,與其依賴程序共享應(yīng)用或服務(wù)組。Docker 還可在這一容器環(huán)境中自動部署應(yīng)用程序(或者合并多種流程,以構(gòu)建單個應(yīng)用程序)。


        此外,由于這些工具基于 Linux 容器構(gòu)建,使得 Docker 既易于使用,又別具一格?——?它可為用戶提供前所未有的高度應(yīng)用程訪問權(quán)限、快速部署以及版本控制和分發(fā)能力。


        Docker 技術(shù)是否與傳統(tǒng)的 Linux 容器相同?

        否。Docker 技術(shù)最初是基于 LXC 技術(shù)構(gòu)建(大多數(shù)人都會將這一技術(shù)與“傳統(tǒng)的” Linux 容器聯(lián)系在一起),但后來它逐漸擺脫了對這種技術(shù)的依賴。


        就輕量級?虛擬化?這一功能來看,LXC?非常有用,但它無法提供出色的開發(fā)人員或用戶體驗。除了運行容器之外,Docker 技術(shù)還具備其他多項功能,包括簡化用于構(gòu)建容器、傳輸鏡像以及控制鏡像版本的流程。



        傳統(tǒng)的 Linux 容器使用 init 系統(tǒng)來管理多種進(jìn)程。這意味著,所有應(yīng)用程序都作為一個整體運行。與此相反,Docker 技術(shù)鼓勵應(yīng)用程序各自獨立運行其進(jìn)程,并提供相應(yīng)工具以實現(xiàn)這一功能。這種精細(xì)化運作模式自有其優(yōu)勢。


        docker的目標(biāo)

        docker的主要目標(biāo)是"Build,Ship and Run any App,Angwhere",構(gòu)建,運輸,處處運行

        • 構(gòu)建:做一個docker鏡像
        • 運輸:docker pull
        • 運行:啟動一個容器


        每一個容器,他都有自己的文件系統(tǒng)rootfs.


        安裝Docker

        環(huán)境說明
        #?需要兩臺幾點進(jìn)行安裝
        [root@docker01?~]#?cat?/etc/redhat-release?
        CentOS?Linux?release?7.2.1511?(Core)?
        [root@docker01?~]#?uname??-r?
        3.10.0-327.el7.x86_64
        [root@docker01?~]#?hostname?-I
        10.0.0.100?172.16.1.100?
        [root@docker02?~]#?hostname?-I
        10.0.0.101?172.16.1.101


        兩個節(jié)點上都進(jìn)行操作

        wget?-O?/etc/yum.repos.d/docker-ce.repo?https://mirrors.ustc.edu.cn/docker-ce/linux/centos/docker-ce.repo
        sed?-i?'s#download.docker.com#mirrors.ustc.edu.cn/docker-ce#g'?/etc/yum.repos.d/docker-ce.repo
        yum?install?docker-ce?-y


        修改在docker01配置:

        #?修改啟動文件,監(jiān)聽遠(yuǎn)程端口
        vim?/usr/lib/systemd/system/docker.service
        ExecStart=/usr/bin/dockerd?-H?unix:///var/run/docker.sock?-H?tcp://10.0.0.100:2375
        systemctl?daemon-reload
        systemctl?enable?docker.service?
        systemctl?restart?docker.service
        #?ps?-ef檢查進(jìn)行,是否啟動


        docker02測試

        [root@docker02?~]#?docker?-H?10.0.0.100?info
        Containers:?0
        ?Running:?0
        ?Paused:?0
        ?Stopped:?0
        Images:?0
        Server?Version:?17.12.0-ce
        Storage?Driver:?devicemapper
        ···


        Docker基礎(chǔ)命令操作

        查看docker相關(guān)信息

        [root@docker01?~]#??docker?version??
        Client:
        ?Version:????17.12.0-ce
        ?API?version:????1.35
        ?Go?version:????go1.9.2
        ?Git?commit:????c97c6d6
        ?Built:????Wed?Dec?27?20:10:14?2017
        ?OS/Arch:????linux/amd64
        Server:
        ?Engine:
        ??Version:????17.12.0-ce
        ??API?version:????1.35?(minimum?version?1.12)
        ??Go?version:????go1.9.2
        ??Git?commit:????c97c6d6
        ??Built:????Wed?Dec?27?20:12:46?2017
        ??OS/Arch:????linux/amd64
        ??Experimental:????false


        配置docker鏡像加速

        vi?/etc/docker/daemon.json
        {
        ??"registry-mirrors":?["https://registry.docker-cn.com"]
        }???


        啟動第一個容器

        [root@docker01?~]#?docker?run?-d?-p?80:80?nginx
        Unable?to?find?image?'nginx:latest'?locally
        latest:?Pulling?from?library/nginx
        e7bb522d92ff:?Pull?complete?
        6edc05228666:?Pull?complete?
        cd866a17e81f:?Pull?complete?
        Digest:?sha256:285b49d42c703fdf257d1e2422765c4ba9d3e37768d6ea83d7fe2043dad6e63d
        Status:?Downloaded?newer?image?for?nginx:latest
        8d8f81da12b5c10af6ba1a5d07f4abc041cb95b01f3d632c3d638922800b0b4d
        #?容器啟動后,在瀏覽器進(jìn)行訪問測試?


        參數(shù)說明


        Docker鏡像生命周期

        ?

        Docker鏡像相關(guān)操作

        搜索官方倉庫鏡像

        [root@docker01?~]#??docker?search?centos
        NAME??????????????????????DESCRIPTION????????????????????STARS????OFFICIAL???????????????AUTOMATED
        centos????????????????????The?official?build?of?CentOS.??3992?????[OK]??????
        ansible/centos7-ansible???Ansible?on?Centos7?????????????105??????????????????????????????[OK]


        列表說明


        獲取鏡像

        根據(jù)鏡像名稱拉取鏡像
        [root@docker01?~]#?docker?pull?centos
        Using?default?tag:?latest
        latest:?Pulling?from?library/centos
        af4b0a2388c6:?Downloading??34.65MB/73.67MB


        查看當(dāng)前主機(jī)鏡像列表

        [root@docker01?~]#?docker?image?list?
        REPOSITORY??????????TAG?????????????????IMAGE?ID????????????CREATED?????????????SIZE
        centos??????????????latest??????????????ff426288ea90????????3?weeks?ago?????????207MB
        nginx???????????????latest??????????????3f8a4339aadd????????5?weeks?ago?????????108MB


        拉第三方鏡像方法

        docker?pull?index.tenxcloud.com/tenxcloud/httpd


        導(dǎo)出鏡像

        [root@docker01?~]#?docker?image?list?
        REPOSITORY??????????TAG?????????????????IMAGE?ID????????????CREATED?????????????SIZE
        centos??????????????latest??????????????ff426288ea90????????3?weeks?ago?????????207MB
        nginx???????????????latest??????????????3f8a4339aadd????????5?weeks?ago?????????108MB
        #?導(dǎo)出
        [root@docker01?~]#?docker?image?save?centos?>?docker-centos.tar.gz


        刪除鏡像

        [root@docker01?~]#?docker?image?rm?centos:latest
        [root@docker01?~]#?docker?image?list?
        REPOSITORY??????????TAG?????????????????IMAGE?ID????????????CREATED?????????????SIZE
        nginx???????????????latest??????????????3f8a4339aadd????????5?weeks?ago?????????108MB


        導(dǎo)入鏡像

        [root@docker01?~]#?docker?image?load?-i?docker-centos.tar.gz??
        e15afa4858b6:?Loading?layer??215.8MB/215.8MB
        Loaded?image:?centos:latest
        [root@docker01?~]#?docker?image?list?
        REPOSITORY??????????TAG?????????????????IMAGE?ID????????????CREATED?????????????SIZE
        centos??????????????latest??????????????ff426288ea90????????3?weeks?ago?????????207MB
        nginx???????????????latest??????????????3f8a4339aadd????????5?weeks?ago?????????108MB


        查看鏡像的詳細(xì)信息

        [root@docker01?~]#?docker?image?inspect?centos


        容器的日常管理

        容器的起/停

        最簡單的運行一個容器
        [root@docker01?~]#?docker?run?nginx


        創(chuàng)建容器,兩步走(不常用)

        [root@docker01?~]#?docker?create?centos:latest??/bin/bash
        bb7f32368ecf0492adb59e20032ab2e6cf6a563a0e6751e58930ee5f7aaef204
        [root@docker01?~]#?docker?start?stupefied_nobel
        stupefied_nobel


        快速啟動容器方法

        [root@docker01?~]#?docker?run??centos:latest??/usr/bin/sleep?20;


        容器內(nèi)的第一個進(jìn)程必須一直處于運行的狀態(tài),否則這個容器,就會處于退出狀態(tài)!


        查看正在運行的容器
        [root@docker01?~]#?docker?container?ls
        ????或
        [root@docker01?~]#?docker?ps?
        CONTAINER?ID????????IMAGE???????????????COMMAND??????????????????CREATED?????????????STATUS??????????????PORTS???????????????NAMES
        8708e93fd767????????nginx???????????????"nginx?-g?'daemon?of…"???6?seconds?ago???????Up?4?seconds????????80/tcp??????????????keen_lewin


        查看你容器詳細(xì)信息/ip

        [root@docker01?~]#?docker?container??inspect??容器名稱/id


        查看你所有容器(包括未運行的)

        [root@docker01?~]#?docker?ps?-a
        CONTAINER?ID????????IMAGE???????????????COMMAND??????????????????CREATED?????????????STATUS??????????????????????PORTS???????????????NAMES
        8708e93fd767????????nginx???????????????"nginx?-g?'daemon?of…"???4?minutes?ago???????Exited?(0)?59?seconds?ago???????????????????????keen_lewin
        f9f3e6af7508????????nginx???????????????"nginx?-g?'daemon?of…"???5?minutes?ago???????Exited?(0)?5?minutes?ago????????????????????????optimistic_haibt
        8d8f81da12b5????????nginx???????????????"nginx?-g?'daemon?of…"???3?hours?ago?????????Exited?(0)?3?hours?ago??????????????????????????lucid_bohr


        停止容器

        [root@docker01?~]#?docker?stop?容器名稱/id?

        [root@docker01?~]#?docker?container??kill??容器名稱/id

        進(jìn)入容器方法

        啟動時進(jìn)去方法
        [root@docker01?~]# docker run -it #參數(shù):-it 可交互終端
        [root@docker01?~]#?docker?run?-it?nginx:latest??/bin/bash
        root@79241093859e:/#


        退出/離開容器
        ctrl+p?&?ctrl+q


        啟動后進(jìn)入容器的方法

        啟動一個docker
        [root@docker01?~]#?docker?run?-it?centos:latest?
        [root@1bf0f43c4d2f?/]#?ps?-ef?
        UID?????????PID???PPID??C?STIME?TTY??????????TIME?CMD
        root??????????1??????0??0?15:47?pts/0????00:00:00?/bin/bash
        root?????????13??????1??0?15:47?pts/0????00:00:00?ps?-ef


        attach進(jìn)入容器,使用pts/0?,會讓所用通過此方法進(jìn)如放入用戶看到同樣的操作。

        [root@docker01?~]#?docker?attach?1bf0f43c4d2f
        [root@1bf0f43c4d2f?/]#?ps?-ef?
        UID?????????PID???PPID??C?STIME?TTY??????????TIME?CMD
        root??????????1??????0??0?15:47?pts/0????00:00:00?/bin/bash
        root?????????14??????1??0?15:49?pts/0????00:00:00?ps?-ef

        自命名啟動一個容器?--name

        [root@docker01?~]#?docker?attach?1bf0f43c4d2f
        [root@1bf0f43c4d2f?/]#?ps?-ef?
        UID?????????PID???PPID??C?STIME?TTY??????????TIME?CMD
        root??????????1??????0??0?15:47?pts/0????00:00:00?/bin/bash
        root?????????14??????1??0?15:49?pts/0????00:00:00?ps?-ef


        exec?進(jìn)入容器方法(推薦使用)

        [root@docker01?~]#?docker?exec?-it?clsn1??/bin/bash?
        [root@b20fa75b4b40?/]#?重新分配一個終端
        [root@b20fa75b4b40?/]#?ps?-ef?
        UID?????????PID???PPID??C?STIME?TTY??????????TIME?CMD
        root??????????1??????0??0?16:11?pts/0????00:00:00?/bin/bash
        root?????????13??????0??0?16:14?pts/1????00:00:00?/bin/bash
        root?????????26?????13??0?16:14?pts/1????00:00:00?ps?-ef

        刪除所有容器

        [root@docker01?~]#?docker?rm?-f??`docker?ps?-a?-q`
        #?-f?強制刪除


        啟動時進(jìn)行端口映射

        -p參數(shù)端口映射
        [root@docker01?~]#?docker?run?-d?-p?8888:80??nginx:latest?
        287bec5c60263166c03e1fc5b0b8262fe76507be3dfae4ce5cd2ee2d1e8a89a9


        不同指定映射方法


        隨機(jī)映射
        docker?run?-P?(大P)#?需要鏡像支持


        瀏覽 50
        點贊
        評論
        收藏
        分享

        手機(jī)掃一掃分享

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

        手機(jī)掃一掃分享

        分享
        舉報
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            天天大香蕉 | 成人性爱网址 | 粉嫩逼逼 | 喷水久久 | 91AV爱爱 | 国产精品果派 | 久久大鸡巴再线观看 | 亚洲少妇喷水 | 在线中文字幕无码 | 国产性爱在线播放 |