Featured image of post 使用Alpine linux在爱快中作为虚拟机运行Docker

使用Alpine linux在爱快中作为虚拟机运行Docker

阅读次数:

[TOC]

前言

  自从爱快添加Docker插件之后我有第一时间就安装,使用一段时间后感觉这玩意问题蛮多的,首先就是功能残废,系统提供的界面只能实现修改镜像源、配置存储位置这些基础功能(修改镜像源还是最近几个版本才添加,原来直连官方国内已经无法访问);然后就是访问异常,我使用Chromium内核的浏览器(包括但不限于Chrome、Edge)访问Docker的管理页面,总是会莫名其妙的跳出来,每点一下就跳一次,拉个镜像配置完参数硬是要花我几分钟时间。而且Docker功能需要到云服务端去手动开启,一直搞不懂为什么要这样。
  但是现在多个路子,就是通过自带的虚拟机虚拟linux环境专门来跑docker,听说它自带的虚拟机也有一些问题,长期使用会影响到宿主系统的性能,但是我使用一段时间之后并没有感觉,日常使用占用CPU最多也就跑到40%,内存我限制了1G,感觉基本够用了。   我使用的是某鱼上购入的双网口j1900+4G+32G MSata主板作为旁路由,原来用的是基于openwrt的istore,功能很全面,使用起来也很简单,日常维护甚至不需要进ssh,但是我监控家中的网络时发现这个软路由总是莫名其妙的掉线,好在下级做过故障转移,旁路由挂的时候AP能够直接过光猫,不然家里老人断网了我都不知道怎么和他们解释。
  之所以用Alpine是因为它有专门针对虚拟机的版本,体积仅有65M,安装完占用硬盘不到300M,但是能全功能安装Docker甚至其他软件,对于j1900+4G这种配置再合适不过了。

准备工作

分区

  建议先对爱快分区内的文件备份,因为需要单独给Alpine配置一个分区。 image   因为硬盘只有32G,我打算分成三块,4G给系统日志绰绰有余,12G分配做普通存储,用自带的Docker还有存放一些文件的时候使用,剩下的全部都留作Alpine的分区。注意的是Alpine的分区不需要绑定业务,也无需挂载,格式化好之后放着就行。

上传镜像

  刚才我们分配做普通存储的分区下新建一个文件夹ISO,然后到https://www.alpinelinux.org/downloads/找到Virtual下的x86_64(如果是arm系统就下载arm/aarch),下载针对虚拟机的最新版本ISO,目前最新的是:https://dl-cdn.alpinelinux.org/alpine/v3.22/releases/x86_64/alpine-virt-3.22.1-x86_64.iso存放到ISO文件夹,或者不限难看直接放在根目录也行。 image
image   找到文件后点击查看路径并复制路径备用。

新增虚拟机

配置虚拟机

  在高级应用-虚拟机下选择添加。 image   配置方面根据自己的实际情况添加即可,虚拟机名称任意天蝎,系统类型选Linux,CPU使用率我只给80%,核心数给2,内存分配1024M。 image   设备管理需要手工添加一个分区,设备类型为磁盘,磁盘类型选引用分区,勾选半虚拟化,分区名称选择前面我们分区时没格式化的那个,我这里显示的是sda7。 image   下面虚拟机光驱就填写前面我们的ISO文件路径,VNC外部访问一定要打开,密码和端口任意,下面的开机自启、UEFI启动和硬件加速也打开,然后保存。 webp-virtual-2

安装Alpine

  启动虚拟机,返回上一层的操作部分点击VNC,输入之前配置的密码,进入到系统安装界面。 8f0b0496-59b7-469f-843f-730d4fa95a16   默认的用户名是root,没有密码直接回车。   然后按提示进行配置:

localhost:~# setup-alpine #执行安装脚本
...
...
Select keyboard layout:[none] us #选择键盘布局,选us即可
...
...
Select variant (or 'abort'): us-intl #选择布局变种,我是随便选的
...
...
Enter system hostname (fully qualified from, e.g. 'foo.example.org')[localhost] #系统名,一般直接保持localhost
...
...
Which one do you want to initialize? (or '?' or 'done') [eth0] #选择网卡,一般默认eth0即可,如果有另外添加网卡或其他特殊情况再调整
...
...
Ip address for eth0?(or 'dhcp', 'none', '?')[dhcp]192.168.233.233 #获取eth0网卡IP的方式,默认dhcp,但是我爱快没开dhcp,配置的静态路由,所以我填写爱快网段内任意一个没占用的IP。
...
...
Do you want to do any manual network configuration?(y/n) [n] #是否需要手动设置网络,y则进入vi界面编辑网络配置文件,如无需要直接n
..
...
New Password: #设置root用户的密码
Retype password: #再输入一次
...
...
Which timezone are you in? (or '?' or 'none') [UTC] Asia #选择时区
What sub-timezone of 'Asia' are you in? (or '?') Shanghai #选择子时区
...
...
HTTP/FTP proxy URL? (e.g. 'http://proxy:8080', or 'none') [none] #是否需要代理访问网络
...
...
Which NTP client to run? ('busybox', 'openntpd', 'chrony' or 'none') [busybox] #用哪个作为ntp终端,默认即可
...
...
Enter mirror number or URL: [1] f #选择软件源,最好选择第一项,即f,会遍历所有镜像留下最快的那个
...
...
Setup a user? (enter a lower-case loginname, or 'no') [no] alpine #是否新建各一般用户,是则输入用户名,否则no
...
...
Full name for user alpine [alpine] #新用户的全名
...
...
New Password: #设置root用户的密码
Retype password: #再输入一次
...
...
Enter ssh key or URL for alpine (or 'none') [none] #输入新用户的ssh key,直接回车给它自己处理
...
...
Which ssh server?('openssh', 'dropbear' or 'none') [openssh] #选择默认的ssh服务,一般都是用openssh,直接回车
...
...
Which disk(s) you like to use (or '?' for help or 'none') [none] vda2 #要安装在哪个硬盘。如果前面没有手工把sda7分区添加进来这里则是空的,我这边系统中显示这个分区是vda2
...
...
How would you like to use it? ('sys'', 'data', 'lvm' or '?' for help) [?] sys #要怎么使用这个硬盘,一般选sys即可,所有文件都放在这个分区上,如果挂了多个分区可以分别配置
...
...
WARNING: Erase the above disk(s) and continue? [y/N]: y #是否要格式化硬盘
...
...
Installation is complete. Please reboot.  reboot #是否重启
配置必要环境和Docker

  重启后可以直接用ssh连接alpine了,不需要再使用VNC。首先把软件包升级,Aplnes的安装器是apk,有点抽象。   先执行su -apk update拉取索引,然后用apk add sudo安装sudo包,如果提示:

localhost:~# apk add sudo
ERROR: unable to select packages:
  sudo (no such package):
    required by: world[sudo]

  可能是dns的问题,需要手动调整dns:

localhost:~# vi /etc/resolv.conf
nameserver 223.5.5.5

  然后再重新安装sudo:

localhost:~# apk add sudo
localhost:~# vi /etc/sudoers
...
root ALL=(ALL:ALL) ALL
alpine ALL=(ALL:ALL) ALL #添加这行到上面那行下面,alpine换成实际用户名
...

  接下来安装Docker:

localhost:~# apk add docker
localhost:~# rc-update add docker boot #添加docker到开机自启动
localhost:~# service docker start #启动docker服务
localhost:~# docker -v
Docker version 28.3.3, build 980b85681696fbd95927fd8ded8f6d91bdca95b0

  还可以给自己新增的一般用户增加docker权限:

localhost:~# apk add shadow #因为alpine默认没有usermod,需要手动安装
localhost:~# usermod -aG docker alpine #alpine换成实际用户名
localhost:~# newgrp docker #重新登录用户,也可以直接注销会话再登录
本博客已稳定运行
使用 Hugo 构建