基于 Hyper-V 與 Docker 的容器化部署與應(yīng)用
前言
本文僅提供 Hyper-V 與 Docker 最低限度應(yīng)用的指導(dǎo)柏肪,詳細(xì)內(nèi)容請(qǐng)參考官方文檔
關(guān)于 Hyper-V
Hyper-V 提供 硬件虛擬化。 這意味著每個(gè)虛擬機(jī)都在虛擬硬件上運(yùn)行宿礁。 Hyper-V 允許你創(chuàng)建虛擬硬盤驅(qū)動(dòng)器梆靖、虛擬交換機(jī)以及許多其他虛擬設(shè)備,所有這些都可以添加到虛擬機(jī)中测僵。
- 優(yōu)勢(shì)
相比傳統(tǒng)虛擬機(jī)沾谜,Hyper-V 極大地 減少發(fā)送 I/O 請(qǐng)求所需的開銷窿锉。使高 I/O 工作負(fù)載的 CPU 開銷大大降低良风。
- 局限
需要使用 GPU 進(jìn)行處理的游戲或應(yīng)用程序可能無法良好運(yùn)行统诺。
運(yùn)行環(huán)境
宿主機(jī)
- Windows Server 2019 x64
虛擬機(jī)
Hyper-V 的啟用
Windows10 已經(jīng)附帶虛擬組件 Hyper-V
默認(rèn)情況下 Hyper-V 組件并沒有被啟用,需手動(dòng)啟用。
- 服務(wù)器管理器 > 添加角色和功能
- 勾選 Hyper-V,待安裝完成后重啟系統(tǒng)
Hyper-V 虛擬機(jī)創(chuàng)建
以宿主機(jī)
Windows Server 2019
+ 虛擬機(jī)Ubuntu 20.04.1
為例:開始 > Windows 管理工具 > Hyper-V 管理器
- Hyper-V 管理器 > 服務(wù)器-右鍵 > 新建 > 虛擬機(jī)
- 指定名稱和位置
- 指定虛擬機(jī)代數(shù)
由于 Hyper-V 第二代虛擬機(jī)的兼容性尚不明確嵌溢,此處建議選擇第一代虛擬機(jī)
- 分配內(nèi)存
此處填寫虛擬機(jī)所需的啟動(dòng)內(nèi)存用量学少,強(qiáng)烈建議勾選上 為此虛擬機(jī)使用動(dòng)態(tài)內(nèi)存
關(guān)于 Hyper-V 動(dòng)態(tài)內(nèi)存管理
動(dòng)態(tài)內(nèi)存管理 是 Hyper-V R2 提供的一項(xiàng)新功能和特性,目前只有Windows Server 2008 R2 Service Pack 1((SP1)以上版本(Windows Server 2012)支持該功能绒疗,該功能能夠自動(dòng)平衡服務(wù)器上運(yùn)行的虛擬機(jī)所占用的物理內(nèi)存大小吓蘑。此功能可以在管理員針對(duì)不同虛擬機(jī)所指定的內(nèi)存范圍內(nèi),根據(jù)虛擬機(jī)中的應(yīng)用優(yōu)先級(jí)來 自動(dòng)調(diào)整虛擬機(jī)對(duì)物理內(nèi)存的占用大小棋嘲,在應(yīng)用性能和內(nèi)存占用大小方面進(jìn)行自動(dòng)平衡并達(dá)到性能優(yōu)化的目的痪伦。
- 配置網(wǎng)絡(luò)
暫不配置,網(wǎng)絡(luò)相關(guān)配置詳見后文
- 連接虛擬硬盤
- 安裝選項(xiàng)
選擇 從可啟動(dòng)的 CD/DVD-ROM 安裝操作系統(tǒng)辉哥,并選擇已下載好的系統(tǒng)鏡像文件。
- 完成虛擬機(jī)創(chuàng)建
安裝 Ubuntu
- 選擇語(yǔ)言
- 選擇鍵盤布局
- 網(wǎng)卡配置
默認(rèn)即可
- 代理配置
不配置代理
- Ubuntu 鏡像配置
此處建議使用 清華大學(xué) Ubuntu 鏡像:https://mirrors.tuna.tsinghua.edu.cn/ubuntu
- 硬盤選擇
默認(rèn)即可
- 硬盤分區(qū)
默認(rèn)即可
- 服務(wù)器相關(guān)信息配置
務(wù)必牢記初始賬戶與密碼
- 安裝 OpenSSh server
為便于未來遠(yuǎn)程終端操作與文件傳輸攒射,建議安裝醋旦。
- 安裝第三方常用工具包
為容器化部署作準(zhǔn)備会放,此處可選 microk8s 與 docker 進(jìn)行安裝
- 待安裝完成后重啟虛擬機(jī)
Hyper-V 網(wǎng)絡(luò)配置
- Hyper-V 管理器 > 服務(wù)器-右鍵 > 虛擬交換機(jī)管理器
- 選擇虛擬交換機(jī)類型
關(guān)于 Hyper-v 虛擬交換機(jī)類型
- 外部:虛擬機(jī)可以連接外部外網(wǎng)(與宿主機(jī)的網(wǎng)絡(luò)相同)饲齐,允許與其他虛擬機(jī)互相通信。
- 內(nèi)部:只能在虛擬機(jī)之間或者虛擬機(jī)與宿主機(jī)之間進(jìn)行網(wǎng)絡(luò)通信咧最,無法連接外部網(wǎng)絡(luò)捂人。
- 專用:虛擬機(jī)與虛擬機(jī)之間的局域網(wǎng),宿主機(jī)無法對(duì)其訪問矢沿。
此處默認(rèn)可選用 外部 類型滥搭。
如果宿主機(jī)不是 DHCP 動(dòng)態(tài) IP 而是靜態(tài) IP 網(wǎng)絡(luò)配置的情況下(不進(jìn)行新的 IP 配置),使用 外部 類型在可能會(huì)導(dǎo)致宿主機(jī)與虛擬機(jī)都無法連接外部網(wǎng)絡(luò)捣鲸。此情況下瑟匆,應(yīng)選擇使用 內(nèi)部 類型,并將宿主網(wǎng)絡(luò)共享至內(nèi)部虛擬交換機(jī)摄狱。
PS:此處以 內(nèi)部 類型為例
- 創(chuàng)建虛擬交換機(jī)
- 虛擬機(jī)-右鍵 > 設(shè)置
- 網(wǎng)絡(luò)適配器
在網(wǎng)絡(luò)適配器一欄選擇剛剛新建的虛擬交換機(jī)
- 網(wǎng)絡(luò)連接 > 帶有外部網(wǎng)絡(luò)連接的網(wǎng)卡-右鍵 > 屬性
- 屬性 > 共享
勾選 允許其他網(wǎng)絡(luò)用戶通過此計(jì)算機(jī)的 Internet 來連接 與 允許其他網(wǎng)絡(luò)用戶控制或禁用共享的 Internet 連接脓诡,并在 家庭網(wǎng)絡(luò)連接 中選擇剛剛創(chuàng)建的內(nèi)部虛擬交換機(jī)。
- 進(jìn)入虛擬機(jī)媒役,確認(rèn)外部網(wǎng)絡(luò)對(duì)內(nèi)部虛擬交換機(jī)的共享已經(jīng)完成
- 啟動(dòng)虛擬機(jī)確認(rèn)安裝完成
此前選擇的第三方工具會(huì)在首次啟動(dòng)后聯(lián)網(wǎng)下載安裝祝谚,待安裝完成后即可使用
Hyper-V 虛擬機(jī)與宿主機(jī)的文件傳輸
Linux
在 Linux 下宿主機(jī)可直接使用 SSH 協(xié)議對(duì)虛擬機(jī)進(jìn)行終端操作與文件傳輸
- 宿主機(jī)上生成 ssh 公鑰與密鑰
ssh-keygen
- 虛擬機(jī)上生成 ssh 公鑰與密鑰
ssh-keygen
- 在虛擬機(jī)內(nèi)配置宿主機(jī)公鑰
cd ~/.ssh
nano authorized_keys
- 修改虛擬機(jī) sshd 配置
cd /etc/ssh
nano sshd_config
配置以下內(nèi)容
PasswordAuthentication no
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
- 重啟 sshd 服務(wù)
service sshd restart
- 待服務(wù)重啟完成后,即可使用 puTTY 或 MobaXterm 等支持 ssh 協(xié)議的連接工具進(jìn)行操作
Windows
在 Windows 下有兩種文件傳輸方式
1. 共享文件夾
- 在宿主機(jī)上選擇文件夾進(jìn)行共享
- 在虛擬機(jī)上添加宿主機(jī)的共享文件夾
- 完成配置后即可通過共享文件夾進(jìn)行宿主機(jī)與虛擬機(jī)的文件傳輸
2. RDP
- 虛擬機(jī)開啟遠(yuǎn)程桌面功能
- 宿主機(jī)即可通過遠(yuǎn)程桌面 RDP 連接虛擬機(jī)進(jìn)行文件傳輸
Docker 容器化部署
關(guān)于 Docker
Docker 是一個(gè)開放平臺(tái)酣衷,用于開發(fā)應(yīng)用交惯、交付(shipping)應(yīng)用、運(yùn)行應(yīng)用穿仪。 Docker允許用戶將基礎(chǔ)設(shè)施(Infrastructure)中的應(yīng)用單獨(dú)分割出來席爽,形成更小的顆粒(容器),從而提高交付軟件的速度啊片。
Docker 加速鏡像配置
- 添加當(dāng)前用戶至 docke 用戶組(可選)
sudo usermod -aG docker [用戶名]
- 配置 docker 鏡像加速器
sudo mkdir -p /etc/docker
sudo nano /etc/docker/daemon.json
向 daemon.json 文件添加以下內(nèi)容:
{
"registry-mirrors": [
"https://hub-mirror.c.163.com",
"https://mirror.baidubce.com"
],
"log-opts": {"max-size":"500m", "max-file":"3"}
}
- 修改完成后重啟 docker 服務(wù):
sudo systemctl restart docker
定義 Docker 容器
關(guān)于 Docker 容器
Docker 容器與虛擬機(jī)類似但在原理上不同只锻。容器是將操作系統(tǒng)層虛擬化,具有便攜性紫谷、能夠高效地利用服務(wù)器齐饮。由于容器的標(biāo)準(zhǔn)化捐寥,因此它可以 無視基礎(chǔ)設(shè)施的差異,部署到任何一個(gè)地方祖驱。
關(guān)于 Docker Compose
Docker Compose 是用于定義和運(yùn)行多容器 Docker 應(yīng)用程序的工具握恳。通過 Docker Compose,可以使用 YML 文件來配置應(yīng)用程序需要的所有服務(wù)捺僻。并且使用一個(gè)命令就可以從 YML 文件配置中創(chuàng)建并啟動(dòng)所有服務(wù)乡洼。
- 新建 docker-compose.yml 文件
mkdir ~/gitlab
nano ~/gitlab/docker-compose.yml
- 填寫容器定義內(nèi)容
version: '3.5'
services:
gitlab:
image: 'gitlab/gitlab-ee:latest'
restart: always
hostname: 'gitlab.example.com'
environment:
GITLAB_OMNIBUS_CONFIG: |
external_url 'http://192.168.7.225:8929'
gitlab_rails['gitlab_shell_ssh_port'] = 2224
ports:
- '8929:8929'
- '2224:22'
volumes:
- '/opt/gitlab/config:/etc/gitlab'
- '/opt/gitlab/logs:/var/log/gitlab'
- '/opt/gitlab/data:/var/opt/gitlab'
logging:
options:
max-size: 1g
networks:
- gitlab
gitlab-runner:
image: gitlab/gitlab-runner:alpine
restart: unless-stopped
depends_on:
- gitlab
privileged: true
volumes:
- /opt/gitlab-runner/config:/etc/gitlab-runner
- /opt/gitlab-runner/run/docker.sock:/var/run/docker.sock
- /opt/gitlab-runner/docker:/bin/docker
logging:
options:
max-size: 1g
networks:
- gitlab
networks:
gitlab:
啟動(dòng) Docker 容器
- 啟動(dòng)容器
cd ~/gitlab
sudo docker-compose up
- 待首次鏡像拉取完成容器啟動(dòng)后即可訪問服務(wù)
相關(guān)鏈接
- 清華大學(xué)開源軟件鏡像站
- 虛擬化文檔
- Hyper-V Dynamic Memory Overview
- How To Install and Use Docker on Ubuntu 20.04
- Docker Docs
- Overview of Docker Compose