程序员

Hyper-V + Docker 容器化部署与应用

2020-12-17  本文已影响0人  无口会咬人

基于 Hyper-V 与 Docker 的容器化部署与应用


前言

本文仅提供 Hyper-V 与 Docker 最低限度应用的指导,详细内容请参考官方文档

关于 Hyper-V

Hyper-V 提供 硬件虚拟化。 这意味着每个虚拟机都在虚拟硬件上运行。 Hyper-V 允许你创建虚拟硬盘驱动器、虚拟交换机以及许多其他虚拟设备,所有这些都可以添加到虚拟机中。

相比传统虚拟机,Hyper-V 极大地 减少发送 I/O 请求所需的开销。使高 I/O 工作负载的 CPU 开销大大降低。

需要使用 GPU 进行处理的游戏或应用程序可能无法良好运行。

运行环境

宿主机
虚拟机

Hyper-V 的启用

Windows10 已经附带虚拟组件 Hyper-V
默认情况下 Hyper-V 组件并没有被启用,需手动启用。

  1. 服务器管理器 > 添加角色和功能
image.png
  1. 勾选 Hyper-V,待安装完成后重启系统

Hyper-V 虚拟机创建

image.png image.png image.png

由于 Hyper-V 第二代虚拟机的兼容性尚不明确,此处建议选择第一代虚拟机

image.png

此处填写虚拟机所需的启动内存用量,强烈建议勾选上 为此虚拟机使用动态内存

关于 Hyper-V 动态内存管理

动态内存管理 是 Hyper-V R2 提供的一项新功能和特性,目前只有Windows Server 2008 R2 Service Pack 1((SP1)以上版本(Windows Server 2012)支持该功能,该功能能够自动平衡服务器上运行的虚拟机所占用的物理内存大小。此功能可以在管理员针对不同虚拟机所指定的内存范围内,根据虚拟机中的应用优先级来 自动调整虚拟机对物理内存的占用大小,在应用性能和内存占用大小方面进行自动平衡并达到性能优化的目的。

image.png

暂不配置,网络相关配置详见后文

image.png image.png

选择 从可启动的 CD/DVD-ROM 安装操作系统,并选择已下载好的系统镜像文件。

image.png image.png

安装 Ubuntu

image.png image.png

默认即可

image.png

不配置代理

image.png

此处建议使用 清华大学 Ubuntu 镜像https://mirrors.tuna.tsinghua.edu.cn/ubuntu

image.png

默认即可

image.png

默认即可

image.png

务必牢记初始账户与密码

image.png

为便于未来远程终端操作与文件传输,建议安装。

image.png

为容器化部署作准备,此处可选 microk8sdocker 进行安装

image.png image.png

Hyper-V 网络配置

image.png
关于 Hyper-v 虚拟交换机类型
  • 外部:虚拟机可以连接外部外网(与宿主机的网络相同),允许与其他虚拟机互相通信。
  • 内部:只能在虚拟机之间或者虚拟机与宿主机之间进行网络通信,无法连接外部网络。
  • 专用:虚拟机与虚拟机之间的局域网,宿主机无法对其访问。

此处默认可选用 外部 类型。

如果宿主机不是 DHCP 动态 IP 而是静态 IP 网络配置的情况下(不进行新的 IP 配置),使用 外部 类型在可能会导致宿主机与虚拟机都无法连接外部网络。此情况下,应选择使用 内部 类型,并将宿主网络共享至内部虚拟交换机。

PS:此处以 内部 类型为例

image.png image.png image.png

在网络适配器一栏选择刚刚新建的虚拟交换机

image.png image.png

勾选 允许其他网络用户通过此计算机的 Internet 来连接允许其他网络用户控制或禁用共享的 Internet 连接,并在 家庭网络连接 中选择刚刚创建的内部虚拟交换机。

image.png image.png

此前选择的第三方工具会在首次启动后联网下载安装,待安装完成后即可使用

image.png

Hyper-V 虚拟机与宿主机的文件传输

Linux

在 Linux 下宿主机可直接使用 SSH 协议对虚拟机进行终端操作与文件传输

ssh-keygen
ssh-keygen
cd ~/.ssh
nano authorized_keys
image.png
cd /etc/ssh
nano sshd_config

配置以下内容

PasswordAuthentication no
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
image.png
service sshd restart
image.png

Windows

在 Windows 下有两种文件传输方式

1. 共享文件夹
image.png image.png image.png
2. RDP
image.png image.png

Docker 容器化部署

关于 Docker

Docker 是一个开放平台,用于开发应用、交付(shipping)应用、运行应用。 Docker允许用户将基础设施(Infrastructure)中的应用单独分割出来,形成更小的颗粒(容器),从而提高交付软件的速度。

Docker 加速镜像配置

sudo usermod -aG docker [用户名]
sudo mkdir -p /etc/docker
sudo nano /etc/docker/daemon.json

向 daemon.json 文件添加以下内容:

{
  "registry-mirrors": [
    "https://hub-mirror.c.163.com",
    "https://mirror.baidubce.com"
  ],
  "log-opts": {"max-size":"500m", "max-file":"3"}
}
image.png
sudo systemctl restart docker

定义 Docker 容器

关于 Docker 容器

Docker 容器与虚拟机类似但在原理上不同。容器是将操作系统层虚拟化,具有便携性、能够高效地利用服务器。由于容器的标准化,因此它可以 无视基础设施的差异,部署到任何一个地方。

关于 Docker Compose

Docker Compose 是用于定义和运行多容器 Docker 应用程序的工具。通过 Docker Compose,可以使用 YML 文件来配置应用程序需要的所有服务。并且使用一个命令就可以从 YML 文件配置中创建并启动所有服务。

mkdir ~/gitlab
nano ~/gitlab/docker-compose.yml
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:

启动 Docker 容器

cd ~/gitlab
sudo docker-compose up
image.png image.png

相关链接


上一篇下一篇

猜你喜欢

热点阅读