1. 程式人生 > >windows7下的docker的安裝及使用(持續更新,未完待續,每天一點點)

windows7下的docker的安裝及使用(持續更新,未完待續,每天一點點)

1.驗證電腦是否支援docker

docker需要支援微軟的硬體虛擬化技術,且windows10只支援專業版(由於不用windows10請自行百度吧),windows10的安裝和windows7不同,windows7,8需要Toolbox,而windows10不用

windows7請下載securable軟體進行檢視

點選下載

出現如下兩種之一即為支援硬體虛擬化技術

2.Docker的版本說明

Docker 從 17.03版本之後分為 CE(Community Edition) 和 EE(Enterprise Edition)

Docker Engine改為Docker CE(社群版) 

Docker CE是免費的Docker產品的新名稱,Docker CE包含了完整的Docker平臺,非常適合開發人員和運維團隊構建容器APP。事實上,Docker CE 17.03,可理解為Docker 1.13.1的Bug修復版本。因此,從Docker 1.13升級到Docker CE 17.03風險相對是較小的。

Docker CE有兩種版本:

edge版本每月釋出一次,主要面向那些喜歡嘗試新功能的使用者。

stable版本每季度釋出一次,適用於希望更加容易維護的使用者(穩定版)。

edge版本只能在當前月份獲得安全和錯誤修復。而stable版本在初始釋出後四個月內接收關鍵錯誤修復和安全問題的修補程式。這樣,Docker CE使用者就有一個月的視窗期來切換版本到更新的版本。舉個例子,Docker CE 17.03會維護到17年07月;而Docker CE 17.03的下個穩定版本是CE 17.06,這樣,6-7月這個時間視窗,使用者就可以用來切換版本了。

Docker Data Center改為Docker EE(企業版) 

Docker EE由公司支援,可在經過認證的作業系統和雲提供商中使用,並可執行來自Docker Store的、經過認證的容器和外掛。

Docker EE提供三個服務層次:

服務層級功能

Basic 包含用於認證基礎設施的Docker平臺
Docker公司的支援
經過 認證的、來自Docker Store的容器與外掛
Standard 新增高階映象與容器管理
LDAP/AD使用者整合
基於角色的訪問控制(Docker Datacenter)
Advanced 新增Docker安全掃描
連續漏洞監控

Docker從17.03開始,轉向基於時間的YY.MM 形式的版本控制方案,類似於Canonical為Ubuntu所使用的版本控制方案。

Docker EE和stable版本的版本號保持一致,每個Docker EE版本都享受為期一年的支援與維護期,在此期間接受安全與關鍵修正。

3.下載docker

開啟官網 docker官網點選我  點選Get Docker ,首先是Docker的兩個版本說明及其區別,然後是支援的平臺。注意了沒有Windows 7,所以不要盲目的就點選下載。

在頁面的左側選單中點選 Docker Toolbox(legacy) ->Install Toolbox on Windows。這裡說了Docker Toolbox提供一種讓老的windows作業系統使用Docker的方法,點選 Get Docker Toolbox for Windows 下載211.50M很快就能下載完。 

然後

4.安裝Docker Toolbox

1.幫助改善docker不用勾選

2.選擇安裝到哪裡

3.選擇安裝,預設就行

Kitematic 是一個具有現代化的介面設計的自由開源軟體,它可以讓我們在 Docker 中互動式執行任務。Kitematic 設計的非常漂亮、介面美觀。使用它,我們可以簡單快速地開箱搭建我們的容器而不需要輸入命令,可以在圖形使用者介面中通過簡單的點選從而在容器上部署我們的應用。Kitematic 集成了 Docker Hub,允許我們搜尋、拉取任何需要的映象,並在上面部署應用。它同時也能很好地切換到命令列使用者介面模式。目前,它包括了自動對映埠、視覺化更改環境變數、配置卷、流式日誌以及其它功能。

4.安裝完成

桌面上多了下面三個圖示

5.執行終端視窗,安裝相應檔案

1.雙擊擊“Docker Quickstart Terminal”啟動一個終端視窗,自動執行指令碼獲取boot2docker.iso到本地路徑“C:\Users\zhaobaolong\.docker\machine\machines\default”

錯誤1:如果報錯就按照下面的方式去找到git的安裝位置。如果不報錯就不用更改了,下面是未更改前

下面是更改後。

然後雙擊執行Docker Quickstart Terminal

錯誤:2:由於網路原因下載失敗,再次進行下載時候報錯

按照下面的方式,刪除下載生成的臨時檔案,我的地址是在C:\Users\Administrator\.docker\machine\cache

點選手動去github去下載

點選去下載

下圖即為地址,點選上面進去有很多版本,選擇下圖所示的版本進行下載

下載完成後將boot2docker.iso然後放置到對應的目錄,我的目錄是C:\Users\Administrator\.docker\machine\cache

如果你沒遇到錯誤就應該是如下圖所示:

因為我執行失敗了。而且網路不好,上面的圖不是我擷取的。所以請忽略版本,看個大概就行

如果是手動下載的檔案,再次執行Docker Quickstart Terminal終端視窗

會在下面的目錄發現多了一個machines資料夾,default裡面也生成了一些檔案

最後終端視窗會變成如下所示

6.驗證安裝

docker run hello-world

出現上圖即為安裝成功!

7.docker更換映象源或者設定阿里雲映象加速

由於預設的國外映象源太慢了!!!我們要換成國內的!!!

進入宿主機 docker-machine ssh

然後沒註冊就註冊,登陸,點選下面的"建立我的容器映象"

提示你什麼沒開通服務,別理他,確認 就好

然後再左邊會看到 映象加速器

點選 映象加速器,然後就看到加速器的地址了。下面有不同平臺的操作文件,寫的比我好,自己研究一下就行了。

本文是直接按照下面的方式進行配置雲加速代理的

  1. 在Windows命令列執行docker-machine ssh 進入VM bash
  2. sudo vi /var/lib/boot2docker/profile
  3. --label provider=virtualbox的下一行新增--registry-mirror https://xxxxxxxx.mirror.aliyuncs.com
  4. 重啟docker服務:sudo /etc/init.d/docker restart或者重啟VM:exit退出VM bash,在Windows命令列中執行docker-machine restart

8.使用終端工具來操控docker的宿主機

進入宿主機 docker-machine ssh

檢視IP地址 ifconfig

使用CRT終端工具連線宿主機

預設的使用者名稱和密碼是: 使用者名稱 docker 密碼 tcuser

9.docker的使用

docker run 的使用

Docker 允許你在容器內執行應用程式, 使用 docker run 命令來在容器內執行一個應用程式。

docker run ubuntu:15.10 /bin/echo "Hello world"

各個引數解析:

  • docker: Docker 的二進位制執行檔案。

  • run:與前面的 docker 組合來執行一個容器。

  • ubuntu:15.10指定要執行的映象,Docker首先從本地主機上查詢映象是否存在,如果不存在,Docker 就會從映象倉庫 Docker Hub 下載公共映象。

  • /bin/echo "Hello world": 在啟動的容器裡執行的命令

以上命令完整的意思可以解釋為:Docker 以 ubuntu15.10 映象建立一個新容器,然後在容器裡執行 bin/echo "Hello world",然後輸出結果。

進行互動式容器操作

docker run -i -t ubuntu:15.10 /bin/bash

我們通過docker的兩個引數 -i -t,讓docker執行的容器實現"對話"的能力

各個引數解析:

  • -t:在新容器內指定一個偽終端或終端。

  • -i:允許你對容器內的標準輸入 (STDIN) 進行互動。

此時我們已進入一個 ubuntu15.10系統的容器

我們嘗試在容器中執行命令 cat /proc/versionls分別檢視當前系統的版本資訊和當前目錄下的檔案列表

我們可以通過執行 exit 命令或者使用 CTRL+D 來退出容器。

啟動容器(後臺模式)

使用以下命令建立一個以程序方式執行的容器

docker run -d ubuntu:15.10 /bin/sh -c "while true; do echo hello world; sleep 1; done"

在輸出中,我們沒有看到期望的"hello world",而是一串長字元

這個長字串叫做容器ID,對每個容器來說都是唯一的,我們可以通過容器ID來檢視對應的容器發生了什麼。

首先,我們需要確認容器有在執行,可以通過 docker ps來檢視

CONTAINER ID:容器ID

NAMES:自動分配的容器名稱

在容器內使用docker logs命令,檢視容器內的標準輸出 

docker logs 2b1b7a428627

或者 docker logs stoic_ptolemy

停止容器

我們使用 docker stop 命令來停止容器:

10.docker容器的使用

docker客戶端

docker 客戶端非常簡單 ,我們可以直接輸入 docker 命令來檢視到 Docker 客戶端的所有命令選項。

可以通過命令 docker command --help 更深入的瞭解指定的 Docker 命令使用方法。

例如我們要檢視 docker stats 指令的具體使用方法:

檢視已經下載過的映象

docker images

執行一個web應用

使用 docker 構建一個 web 應用程式。在docker容器中執行一個 Python Flask 應用來執行一個web應用。

docker run -d -P training/webapp python app.py

引數說明:

  • -d:讓容器在後臺執行。

  • -P:將容器內部使用的網路埠對映到我們使用的主機上。

使用 docker ps 來檢視我們正在執行的容器,這裡多了埠資訊。

PORTS
0.0.0.0:32769->5000/tcp

Docker 開放了 5000 埠(預設 Python Flask 埠)對映到主機埠 32768 上。

這時我們可以通過瀏覽器訪問WEB應用

docker run -d -p 5000:5000 training/webapp python app.py

容器內部的 5000 埠對映到我們本地主機的 5000 埠上。

網路埠的快捷方式

通過docker ps 命令可以檢視到容器的埠對映,docker還提供了另一個快捷方式:docker port,使用 docker port 可以檢視指定 (ID或者名字)容器的某個確定埠對映到宿主機的埠號。

上面我們建立的web應用容器ID為:7a38a1ad55c6 名字為:determined_swanson

我可以使用docker port 7a38a1ad55c6 或docker port determined_swanson來檢視容器埠的對映情況

~$ docker port 7a38a1ad55c6
5000/tcp -> 0.0.0.0:5000
~$ docker port determined_swanson
5000/tcp -> 0.0.0.0:5000

檢視WEB應用程式日誌

docker logs [ID或者名字] 可以檢視容器內部的標準輸出。

docker logs -f 容器ID或者容器名

-f:讓 dokcer logs 像使用 tail -f 一樣來輸出容器內部的標準輸出。

從上面,我們可以看到應用程式使用的是 5000 埠並且能夠檢視到應用程式的訪問日誌。

檢視WEB應用程式容器的程序

我們還可以使用 docker top 來檢視容器內部執行的程序

docker top 容器ID或者容器名

檢查WEB應用程式

使用 docker inspect 來檢視Docker的底層資訊。它會返回一個 JSON 檔案記錄著 Docker 容器的配置和狀態資訊。

docker inspect 容器ID或者容器名

停止WEB應用容器

docker stop 容器ID或者容器名

重啟WEB應用容器

docker start 容器ID或者容器名

正在執行的容器,我們可以使用 docker restart 容器ID或者容器名 命令來重啟

移除WEB應用容器

我們可以使用 docker rm 命令來刪除不需要的容器

docker rm 容器ID或者容器名

刪除容器時,容器必須是停止狀態,否則會報如下錯誤

:~$ docker rm determined_swanson
Error response from daemon: You cannot remove a running container 7a38a1ad55c6914b360b565819604733db751d86afd2575236a70a2519527361. Stop the container before attempting removal or use -f

11.docker映象的使用

當執行容器時,使用的映象如果在本地中不存在,docker 就會自動從 docker 映象倉庫中下載,預設是從 Docker Hub 公共映象源下載。

列出映象列表

docker images

各個選項說明:

  • REPOSTITORY:表示映象的倉庫源

  • TAG:映象的標籤

  • IMAGE ID:映象ID

  • CREATED:映象建立時間

  • SIZE:映象大小

同一倉庫源可以有多個 TAG,代表這個倉庫源的不同個版本,如ubuntu倉庫源裡,有15.10、14.04等多個不同的版本,我們使用 REPOSTITORY:TAG 來定義不同的映象。

所以,我們如果要使用版本為15.10的ubuntu系統映象來執行容器時,命令如下:

如果要使用版本為14.04的ubuntu系統映象來執行容器時,命令如下:

docker run -t -i ubuntu:14.04 /bin/bash

如果你不指定一個映象的版本標籤,例如你只使用 ubuntu,docker 將預設使用 ubuntu:latest 映象。

獲取一個新的映象

當我們在本地主機上使用一個不存在的映象時 Docker 就會自動下載這個映象。如果我們想預先下載這個映象,我們可以使用 docker pull 命令來下載它。

~$ docker pull ubuntu:13.10
13.10: Pulling from library/ubuntu
6599cadaf950: Pull complete 
23eda618d451: Pull complete 
f0be3084efe9: Pull complete 
52de432f084b: Pull complete 
a3ed95caeb02: Pull complete 
Digest: sha256:15b79a6654811c8d992ebacdfbd5152fcf3d165e374e264076aa435214a947a3
Status: Downloaded newer image for ubuntu:13.10

查詢映象

我們可以從 Docker Hub 網站來搜尋映象,Docker Hub 網址為:https://hub.docker.com/

我們也可以使用 docker search 命令來搜尋映象。比如我們需要一個httpd的映象來作為我們的web服務。我們可以通過 docker search 命令搜尋 httpd 來尋找適合我們的映象。

NAME:映象倉庫源的名稱

DESCRIPTION:映象的描述

OFFICIAL:是否docker官方釋出

拖取映象

我們決定使用上圖中的httpd 官方版本的映象,使用命令 docker pull 來下載映象。

docker pull httpd

下載完成後,我們就可以使用這個映象了。

docker run httpd

建立映象

當我們從docker映象倉庫中下載的映象不能滿足我們的需求時,我們可以通過以下兩種方式對映象進行更改。

  • 1.從已經建立的容器中更新映象,並且提交這個映象
  • 2.使用 Dockerfile 指令來建立一個新的映象

更新映象

更新映象之前,我們需要使用映象來建立一個容器。

docker run -t -i ubuntu:15.10 /bin/bash

在執行的容器內使用 apt-get update 命令進行更新。

在完成操作之後,輸入 exit命令來退出這個容器。

此時ID為ecc874f3b9a8的容器,是按我們的需求更改的容器。我們可以通過命令 docker commit來提交容器副本。

$ docker commit -m="has update" -a="jenrey" ecc874f3b9a8 jenrey/ubuntu:v2

各個引數說明:

  • -m:提交的描述資訊

  • -a:指定映象作者

  • ecc874f3b9a8:容器ID

  • jenrey/ubuntu:v2:指定要建立的目標映象名

我們可以使用 docker images 命令來檢視我們的新映象 w3cschool/ubuntu:v2

使用我們的新映象 jenrey/ubuntu 來啟動一個容器

$ docker run -t -i jenrey/ubuntu:v2 /bin/bash

刪除映象

需要先刪除容器(rm)再刪除映象(rmi)

docker rmi 映象ID

構建映象

我們使用命令 docker build , 從零開始來建立一個新的映象。為此,我們需要建立一個 Dockerfile 檔案,其中包含一組指令來告訴 Docker 如何構建我們的映象。

$ vim Dockerfile

每一個指令都會在映象上建立一個新的層,每一個指令的字首都必須是大寫的。

第一條FROM,指定使用哪個映象源

RUN 指令告訴docker 在映象內執行命令,安裝了什麼。。。

然後,我們使用 Dockerfile 檔案,通過 docker build 命令來構建一個映象。

$ docker build -t youj/centos:6.7 .

引數說明:

  • -t :指定要建立的目標映象名

  • . :Dockerfile 檔案所在目錄,可以指定Dockerfile 的絕對路徑

使用docker images 檢視建立的映象已經在列表中存在,映象ID為4c656946c083

我們可以使用新的映象來建立容器

$ docker run -t -i youj/centos:6.7  /bin/bash

從上面看到新映象已經包含我們建立的使用者youj

設定映象標籤

我們可以使用 docker tag 命令,為映象新增一個新的標籤。

12.docker容器連線

Docker 容器連線

前面我們實現了通過網路埠來訪問執行在docker容器內的服務。下面我們來實現通過埠連線到一個docker容器

網路埠對映

我們建立了一個 python 應用的容器。

另外,我們可以指定容器繫結的網路地址,比如繫結 127.0.0.1。

我們使用 -P 引數建立一個容器,使用 docker ps 來看到埠5000繫結主機埠32768。

我們也可以使用 -p 標識來指定容器埠繫結到主機埠。

兩種方式的區別是:

  • -P :是容器內部埠隨機對映到主機的高階口。
  • -p : 是容器內部埠繫結到指定的主機埠。

docker run -d -p 5000:5000 training/webapp python app.py

另外,我們可以指定容器繫結的網路地址,比如繫結127.0.0.1。

$ docker run -d -p 127.0.0.1:5001:5002 training/webapp python app.py

這樣我們就可以通過訪問127.0.0.1:5001來訪問容器的5002埠。

上面的例子中,預設都是繫結 tcp 埠,如果要繫結 UPD 埠,可以在埠後面加上 /udp

docker run -d -p 127.0.0.1:5000:5000/udp training/webapp python app.py

docker port 命令可以讓我們快捷地檢視埠的繫結情況。

$ docker port vibrant_torvalds 5002

Docker容器連線

埠對映並不是唯一把 docker 連線到另一個容器的方法。

docker有一個連線系統允許將多個容器連線在一起,共享連線資訊。

docker連線會建立一個父子關係,其中父容器可以看到子容器的資訊。

容器命名

當我們建立一個容器的時候,docker會自動對它進行命名。另外,我們也可以使用--name標識來命名容器,例如:

$ docker run -d -P --name jenrey training/webapp python app.py

我們可以使用 docker ps 命令來檢視容器名稱。

13.Docker安裝Nginx

方法一、通過 Dockerfile構建

建立Dockerfile

首先,建立目錄nginx,用於存放後面的相關東西。

$ mkdir -p ~/nginx/www ~/nginx/logs ~/nginx/conf

www目錄將對映為nginx容器配置的虛擬目錄

logs目錄將對映為nginx容器的日誌目錄

conf目錄裡的配置檔案將對映為nginx容器的配置檔案

進入建立的nginx目錄,建立Dockerfile

FROM debian:jessie

MAINTAINER NGINX Docker Maintainers "[email protected]"

ENV NGINX_VERSION 1.10.1-1~jessie

RUN apt-key adv --keyserver hkp://pgp.mit.edu:80 --recv-keys 573BFD6B3D8FBC641079A6ABABF5BD827BD9BF62 \
        && echo "deb http://nginx.org/packages/debian/ jessie nginx" >> /etc/apt/sources.list \
        && apt-get update \
        && apt-get install --no-install-recommends --no-install-suggests -y \
                                                ca-certificates \
                                                nginx=${NGINX_VERSION} \
                                                nginx-module-xslt \
                                                nginx-module-geoip \
                                                nginx-module-image-filter \
                                                nginx-module-perl \
                                                nginx-module-njs \
                                                gettext-base \
        && rm -rf /var/lib/apt/lists/*

# forward request and error logs to docker log collector
RUN ln -sf /dev/stdout /var/log/nginx/access.log \
        && ln -sf /dev/stderr /var/log/nginx/error.log

EXPOSE 80 443

CMD ["nginx", "-g", "daemon off;"]

通過Dockerfile建立一個映象,替換成你自己的名字

docker build -t nginx .

# docker run -d --name mynginx nginx   #啟動nginx映象,沒有會自動pull