<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                # Docker ## 一、概述 在傳統的開發過程中,以Java后端開發為例,一般都會打成jar包之后傳送到服務器當中,然后在服務器中使用命令`java -jar *.jar`來運行。這種方式會使所有的項目都在宿主機上的操作系統運行,彼此之間沒有隔離,很有可能出現因為一個服務內存泄漏占用大量的內存而導致所有的服務都不可用的情況。 采用容器技術就可以讓服務之間彼此隔離,可以將每個容器都看成單獨的操作系統(甚至可以看成單獨的一臺主機),對于運行在容器中的服務彼此之間是隔離的。 容器技術從本質上說就是一個與主機上其他進程相互隔離的進程,Docker就是容器技術的一種。 ### 1.1 歷史 1. 2010年,在美國成立的`dotCloud`公司做一些 pass (移動社交APP)的云計算服務和Linux相關的容器技術,并將自己做的容器化技術命名為Docker。Docker一開始并沒有引起注意,但在2013年Docker開源之后,就引起越來越多人的注意了。開源之后每個月都會更新一個版本,并于2014年4月9日時發布Docker1.0版本。 2. Docker為什么這么火? Docker的核心是容器技術,容器非常輕巧,在容器技術出來之前使用的是虛擬技術(例如Vmware軟件),但是虛擬機的是非常笨重的,一臺虛擬機就可以看成是完整的一臺電腦了。而容器也是一種虛擬化技術。但是其使用的是鏡像技術,其里面只包括運行所需要的操作系統最核心的環境,然后自己再根據需要安裝其他的環境(在容器中甚至沒有ll命令),這樣要比虛擬機小很多。通常虛擬機是G級別的,容器是M級別的。 ~~~ ?例如在虛擬機中安裝centos7系統可能需要2個G,但是在docker中安裝centos7鏡像只要200MB左右。 ~~~ 架構對比: :-: ![容器和虛擬機對比](https://blogs.vmware.com/china/files/2018/01/VM-vs-Container.png) 區別: 1. 虛擬機占用的資源非常多、同時啟動也比較慢,分鐘級別的;而容器占用的資源相對較少,啟動也比較快,幾秒就能啟動一個應用。 2. 虛擬機是會模擬一個完整的操作系統的,而容器化技術并不會,只會安裝操作系統最核心的組件。每個項目都可以和自己所需要的環境打包形成一個應用。 3. 容器內的應用直接運行在宿主機,容器是沒有自己的內核的,也沒有虛擬硬件功能。`并且每個容器是相互隔離的,每個容器都有自己的文件系統,互不影響。` 4. Docker能夠充分的利用服務器的資源。 ### 1.2 基本組成 架構圖: :-: ![](https://img.kancloud.cn/fe/34/fe3492019eb0afc564e995c0d2dfe2f6_1087x588.png) 由三個部分組成:`客戶端,服務器,遠程倉庫docker hub。` Docker服務的組件: 1. 鏡像:image 好比是一個模板,可以用這個模板來創建容器服務,同時這個鏡像可以創建多個容器,而最終的服務就運行在容器中的。 2. 容器:container 通過鏡像創建,獨立運行一個或一組應用,是一個相互隔離的進程。容器可以啟動,停止,刪除。每個容器都可以看成是簡易的linux系統。在項目中每個組件可以看成一個容器,例如mysql,redis等。 3. 倉庫:repository 存放鏡像的地方。分為公有倉庫和私有倉庫。例如Docker Hub,阿里云等。 ~~~ ?daemon:守護進程 ~~~ ### 1.3 Docker是怎么工作的? Docker是一個C/S結構的系統,Server的守護進程(daemon)運行在主機上。客戶端通過守護進程與容器進行通信。 :-: ![](https://img.kancloud.cn/fe/34/fe3492019eb0afc564e995c0d2dfe2f6_1087x588.png) 新建一個容器的時候,docker不需要像虛擬機一樣重新加載一個操作系統內核,避免引導,虛擬機加載Guest OS,加載時間為分鐘級別,而docker是利用宿主機的操作系統,省略了復雜的過程,加載時間是秒級別的。 簡單來說,虛擬機技術通過軟件模擬了一整套的操作系統,包括硬件設備;而容器技術仍然用的是宿主機中的硬件設備。 **其他:** Docker是使用Go語言開發,開源 。 官網:[https://www.docker.com/](https://www.docker.com/),Docker的文檔非常詳細。 倉庫地址:[https://www.docker.com/products/docker-hub](https://www.docker.com/products/docker-hub) 搜索鏡像,查看鏡像版本及其使用方法。 &nbsp; ## 二、安裝 以centos為例,其他操作系統的安裝可以前往[官網](https://docs.docker.com/engine/install/centos/)查看。 1. 查看自己Linux的環境,確定當前Linux的發行版 查看發行版本 ~~~ ?cat /etc/os-release ~~~ 輸出: ~~~ ?NAME="CentOS Linux" ?VERSION="7 (Core)" ... ~~~ 例如這里使用的是阿里云的Centos7的Linux,安裝Docker時要安裝相應的版本。 2. 查看是否有舊的docker版本,有的話卸載舊的版本 ~~~ ?sudo yum remove docker \ ? ? ? ? ? ? ? ? ? docker-client \ ? ? ? ? ? ? ? ? ? docker-client-latest \ ? ? ? ? ? ? ? ? ? docker-common \ ? ? ? ? ? ? ? ? ? docker-latest \ ? ? ? ? ? ? ? ? ? docker-latest-logrotate \ ? ? ? ? ? ? ? ? ? docker-logrotate \ ? ? ? ? ? ? ? ? ? docker-engine ~~~ 3. Centos要先安裝yum下載工具,yum類似于Ubuntu中的apt ~~~ ?yum install -y yum-utils ~~~ yum是一個基于RPM的包管理工具,能夠從指定的服務器中自動下載RPM包和一次性安裝所有的依賴。 4. 正式安裝Docker前先設置Docker的鏡像倉庫 ~~~ ?sudo yum-config-manager \ ? ? ?--add-repo \ ? ? http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo ~~~ 現在的centos已經不再維護了,直接這樣可能會出錯,根據出錯信息上網查找即可解決。 5. 更新yum軟件包索引 ~~~ ?yum makecache fast ~~~ 6. 安裝docker,其中docker-ce是社區版,docker-ee是企業版,docker-ce-cli是docker的客戶端。 ~~~ ?sudo yum install docker-ce docker-ce-cli containerd.io ~~~ 7. 檢查docker是否安裝成功 ~~~ ?docker version ~~~ 輸出: ~~~ ?Client: Docker Engine - Community ? Version: ? ? ? ? ? 20.10.5 ... ~~~ 8. 啟動docker ~~~ ?systemctl start docker ~~~ 9. 運行docker中自帶的hello-world鏡像 ~~~ ?docker run hello-world ~~~ 輸出: ~~~ ?Unable to find image 'hello-world:latest' locally # 在本地找不到鏡像 ?latest: Pulling from library/hello-world # 從遠程倉庫進行拉取 ?b8dfde127a29: Pull complete # b8dfde127a29這是鏡像id ?Digest: sha256:308866a43596e83578c7dfa15e27a73011bdd402185a84c5cd7f32a88b501a24 ?Status: Downloaded newer image for hello-world:latest ?? ?Hello from Docker! ?This message shows that your installation appears to be working correctly. ??... ~~~ 10. 查看docker下的所有鏡像 ~~~ ?docker images ~~~ 輸出: ~~~ ?REPOSITORY ? TAG ? ? ? IMAGE ID ? ? ? CREATED ? ? ? SIZE ?hello-world ? latest ? d1165f221234 ? 2 weeks ago ? 13.3kB ~~~ `Image ID是鏡像id,可以用來指示唯一這個鏡像,后面中經常用到。` 11. 配置阿里云鏡像 在網址:[https://cr.console.aliyun.com/cn-qingdao/instances/mirrors](https://cr.console.aliyun.com/cn-qingdao/instances/mirrors)找到鏡像加速器。 :-: ![](https://img.kancloud.cn/d4/65/d4657ed9b6656cf77bee4bc59d1d9779_1215x704.png) 配置鏡像加速器: ~~~ ?sudo mkdir -p /etc/docker ?sudo tee /etc/docker/daemon.json <<-'EOF' ?{ ? ?"registry-mirrors": ["https://vawx0tcn.mirror.aliyuncs.com"] ?} ?EOF ?sudo systemctl daemon-reload ?sudo systemctl restart docker ~~~ **拉取一個鏡像的執行流程** :-: ![](https://img.kancloud.cn/f2/bf/f2bff4fc9837930d7d68e93898300f7b_805x557.png) **安裝圖形化界面** Docker提供一個通過瀏覽器圖形化界面操作的軟件Portainer給我們使用,安裝方式如下: ~~~ docker run -d -p 8088:9000 --restart=always -v /var/run/docker.sock:/var/run/docker.sock --privileged=true portainer/portainer ~~~ 訪問地址為:http://ip:8080 &nbsp; ## 三、命令 ### 3.1 幫助命令 ~~~ docker version # docker版本信息 docker info # docker系統信息,包括鏡像和容器的數量 docker 命令 --help # 幫助命令 ~~~ &nbsp; ### 3.2鏡像相關命令 ~~~ docker images # 查看本地所有鏡像 docker search mysql # 搜索mysql鏡像 docker pull mysql:tag # 拉取Tag標簽的鏡像 docker rmi -f 鏡像id # 刪除鏡像 ~~~ &nbsp; ### 3.3 容器相關命令 1. 創建一個容器 ~~~ docker run -itd --name=容器name -p 主機端口:容器端口 鏡像名 ~~~ 2. 查看運行中的容器 ~~~ docker ps # 查看運行中容器 docker ps -a # 查看歷史容器 ~~~ 3. 刪除容器 ~~~ docker rm [-f] 容器id #-f強制刪除 docker rm -f $(docker ps -aq) # 刪除所有的容器 docker rm -aq|xargs docker rm # 刪除所有容器 ~~~ 4. 操作創建完成的容器 ~~~ docker start 容器id # 啟動容器 docker restart 容器id # 重新啟動容器 docker stop 容器id # 停止容器 docker kill 容器id # 強制關閉容器 ~~~ 5. 查看容器日志 ~~~ docker logs -tf --tail number 容器id ~~~ - -t 顯示時間戳 - -f 格式化顯示 - --tail number 顯示的條數 只有容器在運行的時候才會有日志。 6. 查看容器中的進程信息 ~~~ docker top 容器id ~~~ 7. 查看容器元數據信息 ~~~ docker inspect 容器id ~~~ 和網絡相關比較重要的是有個局域網的IPV4地址。 8. 拷貝容器內文件 ~~~ docker cp 容器id:容器文件路徑 主機保存文件路徑 ~~~ :-: ![](https://img.kancloud.cn/33/2a/332ac605e81e9a5e028615dc7ea8669f_1065x746.png) &nbsp; &nbsp;
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看