使用Docker虚拟化构建云服务器

AKHYui2024-01-03 14:52:00Linux
最近看到一些网上在售的NAT服务器,买了一个发现是用Docker实现的虚拟化,遂稍微研究了下,用KVM虚拟化的云服务器(系统为Debian12)和docker(Ubuntu22镜像)简单试了一下,特此记录。
  1. 首先需要准备两个文件,分别为/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

  1. 编辑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

  1. 构建这个Dockerfile(应确保Dockerfile、shadow、sshd_config都在/opt/ubuntu/ubuntu22目录下)。

cd /opt/ubuntu/ubuntu22

docker build -t akhyui/ubuntu22:v1 .

  1. 构建完成后,准备docker-compose环境(如果有,可跳过这步),可以从GitHub上下载open in new window一个。

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/

  1. 此时服务器应当可以使用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.

  1. 在/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。

  1. 以上配置完成后,使用docker-compose执行这个配置文件。

cd /opt/ubuntu

docker-compose up -d

执行完成后尝试进行连接(xxx.xxx.xxx.xxx为宿主机IP,若无法连接,可检查宿主机防火墙是否已放行1022端口)。


ssh xxx.xxx.xxx.xxx -p 1022

  1. 此方案仅用于尝试和实践,请注意此方案不适用于生产环境,不要用来执行任何设计重要数据的文件!
Last Updated 9/17/2025, 7:13:55 AM