<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>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                ## 1.概念 Docker 使用 Google 公司推出的 Go 語言 進行開發實現,基于 Linux 內核的 cgroup,namespace,以及 AUFS 類的 Union FS 等技術,對進程進行封裝隔離,屬于 操作系統層面的虛擬化技術。由于隔離的進程獨立于宿主和其它的隔離的進程,因此也稱其為容器。最初實現是基于 LXC,從 0.7 版本以后開始去除 LXC,轉而使用自行開發的 libcontainer,從 1.11 開始,則進一步演進為使用 runC 和 containerd。 Docker 在容器的基礎上,進行了進一步的封裝,從文件系統、網絡互聯到進程隔離等等,極大的簡化了容器的創建和維護。使得 Docker 技術比虛擬機技術更為輕便、快捷。 傳統虛擬機技術是虛擬出一套硬件后,在其上運行一個完整操作系統,在該系統上再運行所需應用進程;而容器內的應用進程直接運行于宿主的內核,容器內沒有自己的內核,而且也沒有進行硬件虛擬。因此容器要比傳統虛擬機更為輕便。 ### Docker 鏡像 我們都知道,操作系統分為內核和用戶空間。對于 Linux 而言,內核啟動后,會掛載 root 文件系統為其提供用戶空間支持。而 Docker 鏡像(Image),就相當于是一個 root 文件系統。比如官方鏡像 ubuntu:16.04 就包含了完整的一套 Ubuntu 16.04 最小系統的 root 文件系統。 Docker 鏡像是一個特殊的文件系統,除了提供容器運行時所需的程序、庫、資源、配置等文件外,還包含了一些為運行時準備的一些配置參數(如匿名卷、環境變量、用戶等)。鏡像不包含任何動態數據,其內容在構建之后也不會被改變。 ### Docker 容器 鏡像(Image)和容器(Container)的關系,就像是面向對象程序設計中的 類 和 實例 一樣,鏡像是靜態的定義,容器是鏡像運行時的實體。容器可以被創建、啟動、停止、刪除、暫停等。 容器的實質是進程,但與直接在宿主執行的進程不同,容器進程運行于屬于自己的獨立的 命名空間。因此容器可以擁有自己的 root 文件系統、自己的網絡配置、自己的進程空間,甚至自己的用戶 ID 空間。容器內的進程是運行在一個隔離的環境里,使用起來,就好像是在一個獨立于宿主的系統下操作一樣。這種特性使得容器封裝的應用比直接在宿主運行更加安全。也因為這種隔離的特性,很多人初學 Docker 時常常會混淆容器和虛擬機。 容器存儲層的生存周期和容器一樣,容器消亡時,容器存儲層也隨之消亡。因此,任何保存于容器存儲層的信息都會隨容器刪除而丟失。 按照 Docker 最佳實踐的要求,容器不應該向其存儲層內寫入任何數據,容器存儲層要保持無狀態化。所有的文件寫入操作,都應該使用 數據卷(Volume)、或者綁定宿主目錄,在這些位置的讀寫會跳過容器存儲層,直接對宿主(或網絡存儲)發生讀寫,其性能和穩定性更高。 數據卷的生存周期獨立于容器,容器消亡,數據卷不會消亡。因此,使用數據卷后,容器刪除或者重新運行之后,數據卻不會丟失。 鏡像構建完成后,可以很容易的在當前宿主機上運行,但是,如果需要在其它服務器上使用這個鏡像,我們就需要一個集中的存儲、分發鏡像的服務,Docker Registry 就是這樣的服務。 ### Docker倉庫 一個 Docker Registry 中可以包含多個倉庫(Repository);每個倉庫可以包含多個標簽(Tag);每個標簽對應一個鏡像。 通常,一個倉庫會包含同一個軟件不同版本的鏡像,而標簽就常用于對應該軟件的各個版本。我們可以通過 <倉庫名>:<標簽> 的格式來指定具體是這個軟件哪個版本的鏡像。如果不給出標簽,將以 latest 作為默認標簽。 以 Ubuntu 鏡像 為例,ubuntu 是倉庫的名字,其內包含有不同的版本標簽,如,14.04, 16.04。我們可以通過 ubuntu:14.04,或者 ubuntu:16.04 來具體指定所需哪個版本的鏡像。如果忽略了標簽,比如 ubuntu,那將視為 ubuntu:latest。 倉庫名經常以 兩段式路徑 形式出現,比如 jwilder/nginx-proxy,前者往往意味著 Docker Registry 多用戶環境下的用戶名,后者則往往是對應的軟件名。但這并非絕對,取決于所使用的具體 Docker Registry 的軟件或服務。 國內從 Docker Hub 拉取鏡像有時會遇到困難,此時可以配置鏡像加速器。Docker 官方和國內很多云服務商都提供了國內加速器服務,例如: Docker 官方提供的中國 registry mirror https://registry.docker-cn.com 七牛云加速器 https://reg-mirror.qiniu.com/ 當配置某一個加速器地址之后,若發現拉取不到鏡像,請切換到另一個加速器地址。 國內各大云服務商均提供了 Docker 鏡像加速服務,建議根據運行 Docker 的云平臺選擇對應的鏡像加速服務。 ## 2.使用鏡像 `pull`: 拉取鏡像 ```sh docker pull [選項] [Docker Registry 地址[:端口號]/]倉庫名[:標簽] ``` `images`: 列出鏡像 ```sh docker images ``` ``` REPOSITORY TAG IMAGE ID CREATED SIZE redis latest 5f515359c7f8 5 days ago 183 MB nginx latest 05a60462f8ba 5 days ago 181 MB mongo 3.2 fe9198c04d62 5 days ago 342 MB <none> <none> 00285df0df87 5 days ago 342 MB ubuntu 16.04 f753707788c5 4 weeks ago 127 MB ubuntu latest f753707788c5 4 weeks ago 127 MB ubuntu 14.04 1e0c3dd64ccd 4 weeks ago 188 MB ``` `rmi`:刪除鏡像 ```sh docker rmi [選項] <鏡像1> [<鏡像2> ...] ``` 其中,<鏡像> 可以是 鏡像短 ID、鏡像長 ID、鏡像名 或者 鏡像摘要. ## 3.操作容器 `run` ```sh docker run -it -d --privileged --runtime=nvidia --name test <鏡像> ``` 其中,-t 選項讓Docker分配一個偽終端(pseudo-tty)并綁定到容器的標準輸入上, -i 則讓容器的標準輸入保持打開。如果在docker run后面追加-d,那么容器將會運行在后臺模式。此時所有I/O數據只能通過網絡資源或者共享卷組來進行交互。默認情況下,Docker的容器是沒有特權的,例如不能在容器中再啟動一個容器。這是因為默認情況下容器是不能訪問任何其它設備的。但是通過"--privileged",容器就擁有了訪問任何其它設備的權限。 當操作者執行docker run --privileged時,Docker將擁有訪問主機所有設備的權限,同時Docker也會在apparmor或者selinux做一些設置,使容器可以容易的訪問那些運行在容器外部的設備。--runtime=nvidia啟動GPU運行時。--name設置名稱。 `ps -as`: 列出運行中的容器。 `stop`: 終止容器 `restart` :重啟容器 `start`:啟動一個或多個已經被停止的容器 `rm`:刪除容器 ```sh docker rm [選項] <容器1> [<容器2> ...] ``` `exec`: 進入容器 ```sh docker exec -it {{容器id}} /bin/bash ``` 退出容器使用`exit` ## 4.外部數據 #### 掛載目錄 ```sh docker run -it -d --privileged --name test \ # -v /home/dev/test:/home/dev/test \ --mount type=bind,source=/home/dev/test,target=/home/dev/test \ {鏡像} ``` 本地目錄的路徑必須是絕對路徑,使用 -v 參數時如果本地目錄不存在 Docker 會自動為你創建一個文件夾,使用 --mount 參數時如果本地目錄不存在,Docker 會報錯。 #### 外部訪問容器 容器中可以運行一些網絡應用,要讓外部也可以訪問這些應用,可以通過 -P 或 -p 參數來指定端口映射。 當使用 -P 標記時,Docker 會隨機映射一個 49000~49900 的端口到內部容器開放的網絡端口。 使用 docker container ls 可以看到,本地主機的 49155 被映射到了容器的 5000 端口。此時訪問本機的 49155 端口即可訪問容器內 web 應用提供的界面。 ```sh docker run -d -P training/webapp python app.py ``` ```sh docker container ls -l ``` ``` CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES bc533791f3f5 training/webapp:latest python app.py 5 seconds ago Up 2 seconds 0.0.0.0:49155->5000/tcp nostalgic_morse ``` -p 則可以指定要映射的端口,并且,在一個指定端口上只可以綁定一個容器。支持的格式有` ip:hostPort:containerPort | ip::containerPort | hostPort:containerPort`。 ## 5.push鏡像 #### Docker一共有兩種構建鏡像的方法(都是基于基礎鏡像構建新的鏡像,用戶當然也可以一步一步構建自己的鏡像) * 使用docker commit構建 * 使用docker build和Dockerfile命令構建 #### 使用docker commit創建一個新的鏡像 * 1.運行一個基礎鏡像,生成一個基礎的容器 ~~~ sudo docker run -t -i ubuntu?/bin/bash ~~~ * 2.在運行的容器中進行修改,安裝需要的軟件并進行配置 添加阿里云鏡像站,`vim /etc/apt/sources.list` ``` deb http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse deb-src http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse deb-src http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse deb-src http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse deb-src http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse deb-src http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse ``` `sudo apt-get update` 之后就可以安裝軟件,注意由于安裝的系統版本不同,所以各有問題,例如opencv-python的安裝可能就會使用`sudo apt-get install python-opencv` 安裝軟件。 * 3.使用exit命令退出容器 ~~~ exit ~~~ * 4.使用docker commit命令生成一個新的鏡像 ~~~ sudo docker?commit?容器id?目標鏡像倉庫/鏡像名 ~~~ 使用dockerfile構建: 寫好dockerfile之后,使用`docker build --rm -t [name]:[tag]` push到阿里云: [https://www.cnblogs.com/afangxin/p/6601099.html](https://www.cnblogs.com/afangxin/p/6601099.html) [https://www.jianshu.com/p/93a678d1bde6](https://www.jianshu.com/p/93a678d1bde6) ## 6.容器協同 [http://c.biancheng.net/view/3166.html](http://c.biancheng.net/view/3166.html) [https://blog.csdn.net/u013091013/article/details/70208178](https://blog.csdn.net/u013091013/article/details/70208178) >參考: [Docker——入門到實踐](https://legacy.gitbook.com/book/yeasy/docker_practice)
                  <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>

                              哎呀哎呀视频在线观看