Windows10 環境下的 Docker

Docker是什麼?

Docker是 虛擬機的一種,是在一個有限資源的軟件環境中(可以看做是一臺虛擬機)運行多臺體積非常小的linux/Windows操作系統,每一個linux操作系統中僅存在一個或者多個 特定需求的軟件。
可以理解爲 現實中的大海 就是一臺真實的計算機操作系統,docker軟件就是大海中的特定容量的一艘貨船(分配的固定內存大小),每一個通過docker軟件運行的linux操作系統就是貨船上一個集裝箱,在這艘船上可以存放多少個集裝箱,取決於這個貨船有多大。
相對比於傳統的虛擬機(如 VMware,VirtulBox),通過系統鏡像ISO 安裝一個完整的操作系統佔用大量的系統資源(內存),相當於佔用了一個大的島嶼,在一個操作中有時僅僅安裝一個軟件,這樣會導致浪費了大量的系統資源。Docker的優勢是在最簡單的linux/Windows操作系統中安裝這個軟件後,僅佔用貨船上很少的資源(如100M內存)。

Windows10 安裝Docker軟件
1.註冊賬號
在Docker官方網站上註冊一個DockerID
https://hub.docker.com/signup
2.下載
https://docs.docker.com/docker-for-windows/install/ 中點擊【Download from Docker Hub】,
進入到下載畫面後,點擊【Download Docker Desktop for windows】進行下載 Community 版本

https://hub.docker.com/?overlay=onboarding
3.安裝
3.1虛擬化確認

  1. 在任務管理器中的性能選項卡的CPU畫面中 虛擬化 = 已啓用 的狀態。
  2. 未啓用狀態的話,需要打開BIOS中的支持虛擬化技術 https://docs.docker.com/docker-for-windows/troubleshoot/#virtualization-must-be-enabled
    虛擬化確認
    3.2開啓HYPER-V
    a.打開控制面板中的程序和功能選項
    b.點擊【啓用或關閉Windows功能】

HYPER-V啓動
c.在Windows功能中,勾選Hyper-V虛擬機功能
Hyper-V
d.打開Docker for Windows Installer.exe 進行默認安裝
Docker for Windows Installer
e.在系統的托盤中找到docker圖標,右鍵打開,點擊Setting
在這裏插入圖片描述
f.https://hub.docker.com網站延遲大或者無法登陸的場合, 需要設定替代的鏡像下載地址
在Daemon的畫面中,勾選Advanced,並且設定下面的配置,配置後,點擊Apply,Docker服務會重新啓動。

{
  "registry-mirrors": [
    "https://mirror.ccs.tencentyun.com",
    "https://hub-mirror.c.163.com",
    "https://registry.docker-cn.com",
    "https://dockerhub.azk8s.cn",
    "https://docker.mirrors.ustc.edu.cn"
  ],
  "insecure-registries": [],
  "debug": true,
  "experimental": false
}

在這裏插入圖片描述
g.設定Docker軟件的資源容量
打開Advanced畫面,按實際計算機進行配置使用的CPU,內存的資源大小,點擊Apply,Docker自動重啓後生效。
PS:內存設定大小後,會永久佔用系統資源
在這裏插入圖片描述
h.上面的操作完成後,在開始菜單中,搜索Hyper-V,並打開【Hyper-V管理器】
在這裏插入圖片描述
在管理器中可以看到Docker虛擬機軟件 已經啓動,並且佔用系統的1024M內存(貨船已經造好了)
在這裏插入圖片描述
i.開始菜單上右鍵,啓動Windows PowerShell(管理員)
使用-v命令查下docker 軟件的版本,返回對應的版本,安裝成功

docker -v

在這裏插入圖片描述

4.使用Docker
a.下載鏡像
在https://hub.docker.com/search?q=&type=image 中搜索想要下載的鏡像名稱(把集裝箱從工廠運輸到港口)
windows的docker鏡像請參考
https://docs.microsoft.com/en-us/virtualization/windowscontainers/

這裏以tomcat進行舉例

  1. 打開相應的tomcat鏡像,點擊打開

tomcat
2.拷貝image的pull命令
在這裏插入圖片描述
3.在PowerShell中 執行命令

docker pull tomcat

在這裏插入圖片描述
4.鏡像下載成功後,使用命令進行鏡像列表確認
在這裏插入圖片描述

docker images

可以看到本地的倉庫中已經存在最新的鏡像(港口中的集裝箱列表)
在這裏插入圖片描述
5.啓動tomcat(把港口的tomcat集裝箱[容器]裝上船),並返回一個船上的集裝箱[容器]的ID

 docker run -d -p 30001:8080 --name test_tomcat tomcat
 參數:
 run :運行新鏡像
 -d  :後臺運行鏡像
 -p  :主機本地端口與容器內的端口的映射,即訪問主機的30001端口 等於訪問tomcat的8080端口
 --name : 給集裝箱[容器] 起個別名
 tomcat  : 被執行的鏡像名稱
返回值 : containerID 新做成的容器的ID

啓動tomcat
6.查看運行中的docker容器列表(船上都有哪些正在被使用的集裝箱)

 docker ps

在這裏插入圖片描述
7.本地訪問測試

http://localhost:30001

返回tomcat的管理畫面
在這裏插入圖片描述
8.登錄到容器系統中,查看tomcat的log

docker exec -it {容器ID} shell類型
例如: docker exec -it b49ab11143fc bash

在這裏插入圖片描述
9.指定登錄用戶(某些鏡像中的默認登錄者是非root用戶,可以指定登錄的用戶)

docker exec -it {容器ID} --user 指定登錄用戶 shell類型
例如: docker exec -it --user root b49ab11143fc bash

在這裏插入圖片描述
10.本地磁盤的目錄與容器內的目錄/文件 進行映射
Windows環境,需要建立共享文件夾,將共享文件夾與容器內的文件夾進行映射

  • 新建共享文件夾 c:\docker_share
  • 開放共享,文件夾 右鍵屬性
    在這裏插入圖片描述在這裏插入圖片描述在這裏插入圖片描述
  • 在本地的C:\docker_share中 創建文件夾 webapps
  • 在文件夾內創建test文件夾,在test文件夾中添加index.html,並添加內容
<html>
<body>
Hello World !
</body>
</html>
  • 創建一個新docker 容器,並且將tomcat的容器中的目錄/usr/local/tomcat/webapps與本地的C:\docker_share\webapps進行映射
  • 初次添加映射時,會提示是否允許將驅動器進行分享,點擊[share]
 docker run -d -p 30002:8080 --name test_tomcat_mount -v /c/docker_share/webapps:/usr/local/tomcat/webapps tomcat
 參數:
 -v : 本地磁盤目錄或文件路徑:容器內的目錄或文件路徑 windows環境下,指定的磁盤的驅動器要寫成 /驅動器號 例如/c

在這裏插入圖片描述

  • 驗證tomcat是否被啓動
docker ps

在這裏插入圖片描述

  • 訪問30002端口的 test下index.html網頁
http://localhost:3002/test/index.html

在這裏插入圖片描述

  • 修改本地C:\docker_share\webapps\test的index.html文件內容
<html>
<body>
Hello World !  -> first modify
</body>
</html>
  • 再次訪問30002端口的 test下index.html網頁,內容被成功同步
http://localhost:3002/test/index.html

在這裏插入圖片描述
11.重啓容器
有些應用程序,再更新後,需要重新啓動服務
在docker中,可以直接重啓容器對象

docker restart 容器ID
例如 docker restart 2901d3d61c20

在這裏插入圖片描述

  • 驗證容器ID 2901d3d61c20是否被啓動
docker ps

在這裏插入圖片描述
12.停止一個運行中的容器

docker stop 容器ID
例如 docker stop 2901d3d61c20

在這裏插入圖片描述

  • 驗證容器ID 2901d3d61c20是否被成功停止
docker ps

在這裏插入圖片描述
13.查詢所有的docker容器,包含運行中及停止的

docker ps -a

2901d3d61c20 的狀態顯示爲停止
b49ab11143fc 的狀態顯示爲運行中,已經啓動了50分鐘
即30002端口不可以訪問,30001端口可以訪問
在這裏插入圖片描述
14.啓動已經停止運行的容器

docker restart 容器ID
例如 docker restart 2901d3d61c20

在這裏插入圖片描述
驗證是否啓動成功

docker ps

30002端口已經在運行狀態
15.查詢容器的資源佔用

docker stats

在這裏插入圖片描述
16.刪除一個容器
對已經停止(docker ps -a -> STATUS = Exited)的容器進行刪除
在這裏插入圖片描述

docker rm 容器ID
例如 docker rm d6959ff9238c

在這裏插入圖片描述
17.橋接(bridge )網絡
在創建docker的容器對象時,可以指定容器的IP地址,並且指定容器在哪個創建的子網內
docker默認有3種網絡模式,默認使用橋接類型

  • host:容器將不會虛擬出自己的網卡,配置自己的IP等,而是使用宿主機的IP和端口。
  • None:該模式關閉了容器的網絡功能。
  • Bridge:此模式會爲每一個容器分配、設置IP等,並將容器連接到一個docker0虛擬網橋,通過docker0網橋以及Iptables nat表配置與宿主機通信。

Container:創建的容器不會創建自己的網卡,配置自己的IP,而是和一個指定的容器共享IP、端口範圍。

  • 創建一個新定義的IP子網段
docker network create --driver bridge --subnet 172.19.0.0/16 網絡別名
參數:
network : 網絡命令
create   :創建一個新的網絡
--driver : 網絡驅動類型 例如:bridge 
--subnet : 子網的網段
網絡別名  : 例如 : php-net

例如:  docker network create --driver bridge --subnet 172.19.0.0/16 php-net

在這裏插入圖片描述

  • 查看網絡列表
docker network ls

新的php-net網絡創建成功
在這裏插入圖片描述

  • 在指定網段中,創建容器 並且指定IP地址
docker run -d --name test_network_tomcat --network php-net --ip 172.19.0.11 tomcat
參數:
--network : 要加入的網絡名稱 例如 php-net
--ip : 對應網絡中的IP地址 例如: 172.19.0.11

在這個鏡像中,並沒有設置端口映射,所以本地無法訪問到此容器
在這裏插入圖片描述
驗證是否創建成功

docker ps

在這裏插入圖片描述

  • 登錄到容器,查看IP地址
docker exec -it fad2a6942635 bash

在這裏插入圖片描述
由於鏡像中的操作系統,沒有集成ip addr命令,需要手動通過apt-get自動升級 進行安裝

apt-get update
apt-get -y install iptables
ip addr

可以看到ip地址 172.19.0.11已經被設置
在這裏插入圖片描述

  • 在相同的網絡中,安裝Nginx容器,使用代理轉發,訪問 172.19.0.11的tomcat

a.在docker的鏡像庫中檢索Nginx容器的鏡像

docker search nginx

在這裏插入圖片描述
b.通過鏡像的名稱 ,下載鏡像,並且在同一個網絡中運行

docker pull nginx
docker run -d --name test_network_nginx -p 30003:80 --network php-net --ip 172.19.0.12 nginx

在這裏插入圖片描述
c. 使用30003端口進行訪問,nginx畫面顯示

http://localhost:30003

在這裏插入圖片描述
d.拷貝nginx容器內的配置文件到主機

docker cp 源路徑 目標路徑
參數:
cp  : 拷貝命令
源文件路徑 :容器ID:/文件名 或者 windows主機目錄/文件名   
目標路徑 : windows主機目錄/文件名 或者 容器ID:/文件名 
注: windows主機目錄的格式爲 磁盤驅動器:/   例如c:/...
例如 docker cp 8489b0234116:/etc/nginx/conf.d/default.conf c:/docker_share/default.conf

在這裏插入圖片描述
e.修改本地的nginx配置

#代理網址列表,多個地址的場合,Nginx自動對地址列表進行負載均衡,在tomcat8以上的場合,upstream的名字不能帶下劃線(_)
upstream tomcatproxy {
     server 172.19.0.11:8080;
      }
server {
    listen       80;
    server_name  localhost;

    #charset koi8-r;
    access_log  /var/log/nginx/host.access.log  main;

    location / {
        #
        proxy_pass http://tomcatproxy/test/;
    }

    #charset koi8-r;
    #access_log  /var/log/nginx/host.access.log  main;

    #error_page  404              /404.html;

    # redirect server error pages to the static page /50x.html
    #
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }
}

f.拷貝至nginx容器中,並重啓nginx,

docker cp 源路徑 容器ID:目標路徑
例如:docker cp c:/docker_share/default.conf 8489b0234116:/etc/nginx/conf.d/default.conf
docker restart 容器ID
例如:docker restart 8489b0234116

g.登錄到tomcat容器中,在/usr/local/tomcat/webapps/路徑中,創建test文件夾,並且在test文件夾中,安裝vim插件,添加index.html文件,重啓tomcat容器
index.html內容:

<html>
<body>
Nginx -> tomcat 
</body>
</html>
docker exec -it  容器ID bash
例如:docker exec -it fad2a6942635 bash
#apt-get update
#apt-get -y install vim
#cd webapps/
#mkdir test
#cd test/
# vim index.html
#exit
docker restart 容器ID
例如:docker restart fad2a6942635 

在這裏插入圖片描述
h.本地訪問

http://localhost:30003/

跳轉順序:
本地網頁訪問http://localhost:30003/
第一次跳轉到 nginx(172.19.0.12)的80端口
第二次跳轉到 tomcat(172.19.0.11)的 8080端口的test文件夾的index.html
在這裏插入圖片描述

i.Nginx的負載均衡實現

  • 新建一個tomcat 容器指定IP爲(172.19.0.13
docker run -d --name test_network_tomcat2 --network php-net --ip 172.19.0.13 tomcat
  • 登錄到 test_network_tomcat2 中 , 在/usr/local/tomcat/webapps/中創建test文件夾,並在test文件夾中,添加index.html
    index.html內容如下:
<html>
<body>
Nginx -> tomcat 2
</body>
</html>
  • 修改nginx容器的配置文件,在tomcatproxy 的 upstream 中 添加新的節點,拷貝到nginx容器中,並重啓nginx容器
upstream  tomcatproxy  {
    server 172.19.0.11:8080;
    server 172.19.0.13:8080;
     }

測試訪問,多次刷新畫面:

http://localhost:30003/

訪問到1號機
在這裏插入圖片描述
訪問到2號機
在這裏插入圖片描述

Docker UI 管理工具

kitematic
桌面版本管理工具
1.下載地址:https://github.com/docker/kitematic/releases/
下載 最新版本的Kitematic-*-Windows.zip的客戶端,然後解壓縮到 C:\Program Files\Docker\Kitematic中
在這裏插入圖片描述
2.啓動Kitematic
右鍵打開docker客戶端的系統托盤,點擊Kitematic按鈕
在這裏插入圖片描述
3.在桌面客戶端中,可以下載鏡像,啓動鏡像,查看鏡像的實時log,登錄到鏡像等功能。
在這裏插入圖片描述

Portainer
Web版本管理工具
Portainer是一個docker的鏡像
下載訪問:
docker pull

docker pull portainer/portainer

部署
https://portainer.readthedocs.io/en/latest/deployment.html
1.建立本地磁盤存儲c:/docker_share/portainer/data文件夾

docker run -d -p 9000:9000 --restart=always --name portainer -v /var/run/docker.sock:/var/run/docker.sock -v /c/docker_share/portainer/data:/data portainer/portainer

登錄
輸入8位密碼,點擊【Create user】

http://localhost:9000/#/init/admin

在這裏插入圖片描述
選擇本地模式(Local)
在這裏插入圖片描述
在主畫面中,可以看到docker常用的功能
在這裏插入圖片描述
暫停/恢復 Windows的 Docker Hyper-V虛擬機
暫停:
在Hyper-V管理器中,在DockerDesktopVM 右鍵,點擊【保存】,主機系統釋放,docker無法使用
在這裏插入圖片描述
在Hyper-V管理器中,在DockerDesktopVM 右鍵,點擊【啓動】,主機系統內存被佔用,可以正常使用docker
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章