最近看到一些网上在售的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
- 此方案仅用于尝试和实践,请注意此方案不适用于生产环境,不要用来执行任何设计重要数据的文件!
没有评论