使用Docker虚拟化构建云服务器
最近看到一些网上在售的NAT服务器,买了一个发现是用Docker实现的虚拟化,遂稍微研究了下,用KVM虚拟化的云服务器(系统为Debian12)和docker(Ubuntu22镜像)简单试了一下,特此记录。
- 首先需要准备两个文件,分别为/etc/shadow和/etc/ssh/sshd_config。其中shadow文件存储了Linux系统中用户的加密密码,sshd_config为服务器中SSH的配置文件,就地取材即可。
sudo -s
mkdir /opt/ubuntu
mkdir /opt/ubuntu/ubuntu22
cp /etc/shadow /opt/ubuntu/ubuntu22
cp /etc/ssh/sshd_config /opt/ubuntu/ubuntu22
touch Dockerfile
- 编辑Dockerfile文件,构建一个基本能够连接的ubuntu22镜像(默认镜像甚至无法使用SSH)。
cd /opt/ubuntu/ubuntu22
vim Dockerfile
FROM ubuntu:jammy
RUN apt-get update && apt-get upgrade -y && apt install locales openssh-server openssh-client -y && localedef -i en_US -c -f UTF-8 -A /usr/share/locale/locale.alias en_US.UTF-8
ENV LANG en_US.utf8
COPY ./shadow /etc/shadow
COPY ./sshd_config /etc/ssh/sshd_config
- 构建这个Dockerfile(应确保Dockerfile、shadow、sshd_config都在/opt/ubuntu/ubuntu22目录下)。
cd /opt/ubuntu/ubuntu22
docker build -t akhyui/ubuntu22:v1 .
- 构建完成后,准备docker-compose环境(如果有,可跳过这步),可以从GitHub上下载一个。
cd /root
# 服务器是x86_64架构,所以我下载了docker-compose-linux-x86_64
wget https://github.com/docker/compose/releases/download/v2.23.3/docker-compose-linux-x86_64
mv docker-compose-linux-x86_64 docker-compose
chmod +x docker-compose
mv docker-compose /usr/local/bin/
- 此时服务器应当可以使用docker-compose。
root@localhost:/opt/ubuntu# docker-compose
Usage: docker compose [OPTIONS] COMMAND
Define and run multi-container applications with Docker.
## 此处省略
Run 'docker compose COMMAND --help' for more information on a command.
- 在/opt/ubuntu下创建一个文件,其名为docker-compose.yml,并编辑以下内容。
cd /opt/ubuntu
vim docker-compose.yml
version: '3.3'
services:
ubuntu:
mem_limit: 128m
cpus: 1
ports:
- 1022:22
- 7000:7000
- 7001:7001
- 7002:7002
- 7003:7003
- 7004:7004
image: 'akhyui/ubuntu22:v1'
networks:
vserver:
ipv4_address: 172.10.1.2
storage_opt:
size: 10G
command: sh -c "/etc/init.d/ssh start && tail -f /dev/null"
networks:
vserver:
driver: bridge
ipam:
driver: default
config:
- subnet: 172.10.1.0/24
gateway: 172.10.1.1
mem_limit: 128m可将内存限制在128m。
cpus: 1可将CPU核心数限制在1核。
ports为docker容器映射的端口(左边是宿主机右边是容器)。
storage_opt中指定存储大小。
command: sh -c "/etc/init.d/ssh start && tail -f /dev/null"这个命令使ssh服务持续启动,可以维持容器的持续运行。
networks部分会创建一个名为vserver的网络,services中的network按照底部创建好的网络设定容器IP,配置文件中的容器IP被设定为了172.10.1.2,底部network创建的网络配置网段为172.10.1.0/24,网关为172.10.1.1。
- 以上配置完成后,使用docker-compose执行这个配置文件。
cd /opt/ubuntu
docker-compose up -d
执行完成后尝试进行连接(xxx.xxx.xxx.xxx为宿主机IP,若无法连接,可检查宿主机防火墙是否已放行1022端口)。
ssh xxx.xxx.xxx.xxx -p 1022
- 此方案仅用于尝试和实践,请注意此方案不适用于生产环境,不要用来执行任何设计重要数据的文件!
