为学生提供基于 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.txt4.运行管理界面
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