为学生提供基于 Docker 容器的虚拟 Linux 实验环境
- 安装 Docker以及 Docker Compose(需要使用V2版本)
- 克隆本项目,切换工作目录
Docker_config
- 使用dockerfile 编译镜像
student-linux-env
docker build -t student-linux-env .
- 使用docker-compose 启动容器
docker compose up
- 切换到目录
Docker_manage
- 修改一下settings.py文件,修改
CSRF_TRUSTED_ORIGINS = [""]
字段,增加你的服务器IP地址或者域名 - pip安装依赖
pip install -r requirements.txt
4.运行管理界面
nohup python manage.py runserver 0.0.0.0:8000 &
访问http://localhost/student1
,root用户名studentroot
,密码student_password
这个是学生1的环境,其他学生的环境分别是http://localhost/student2
,http://localhost/student3
以此类推
./volume/share
是共享文件夹,映射到容器的/home/student/share
,这个目录可以作为发布实验文件用,所有容器都可以访问,并且学生在容器内是只读的
./volume/student/1
是学生1的文件夹,映射到容器的/home/student/1
,这个目录是学生1的私人文件夹,其他学生无法访问,学生可以在这个目录下进行实验
访问http://localhost/student1/manage
,即可管理学生1的容器,可以查看容器的状态,重启容器,重置容器等
修改docker-compose.yml
,增加新学生可按照以下模版:
student1:
image: student-linux-env
container_name: student1
networks:
- webnet
volumes:
- ./volume/share:/home/student/share:ro
- ./volume/student/1:/home/student/1
deploy:
resources:
limits:
cpus: '0.1'
memory: 128M
同时修改nginx.conf
,增加新学生的配置,可按照以下模版:
# 端口转发
upstream student1 {
server student1:7681;
}
# student1
location /student1/ {
proxy_pass http://student1/;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
}
还需要修改./volume/student/
,增加新学生的文件夹
目前容器安装了常见的Linux工具:
RUN apt-get update && apt-get install -y \
sudo \
vim \
wget \
curl \
net-tools \
openssh-server \
python3 \
build-essential \
git \
cmake \
make \
gcc \
libjson-c-dev \
libwebsockets-dev
如果需要安装其他工具,可以修改Dockerfile
,增加新的安装命令
修改Dockerfile
,修改student
用户的密码
RUN useradd -m -u 1000 -s /bin/bash student && \
echo "student:student_password" | chpasswd && \
adduser student sudo && \
cp -r /etc/skel/. /home/student/ && \
chown -R student:student /home/student/
默认容器的CPU和内存限制是10%和128M内存
修改docker-compose.yml
,修改deploy
部分的resources
字段,可以修改CPU和内存的限制
使用python脚本,请在python脚本里修改学生的用户,然后运行:
python generate_docker_compose.py
python generate_nginx_conf.py
python generate_directories.py