Virtualization นั้นง่ายที่สุด
อย่างไรก็ตามคุณมีกรณีการใช้งานแยกกัน 2 กรณีที่นี่ซึ่งจะมีวิธีแก้ไขปัญหาที่แตกต่างกัน
1. ลองใช้ distro ใหม่
ดิสทริบิวชันจะถูกกำหนดโดยทั่วไปโดยแอปพลิเคชันที่บรรจุและสภาพแวดล้อม userspace (เช่นSystemD
vs init
สำหรับบูต)
หากคุณต้องการ "ประเมิน" UIX ของการกระจายที่แตกต่างกันในเชิงคุณภาพแล้วฉันจะแนะนำการจำลองเสมือนแบบเต็มรูปแบบที่คุณติดตั้งระบบปฏิบัติการอย่างครบถ้วนและประเมินการใช้งานของมัน นี่เป็นคำตอบอื่น ๆ ที่ครอบคลุมอย่างเพียงพอ
หากคุณต้องการสภาพแวดล้อม userspace สำหรับการทดสอบแล้วอ่านต่อ
2. การทดสอบและ "อินสแตนซ์ทิ้ง" ในสภาพแวดล้อมที่แตกต่างกัน
มันง่ายกว่าถูกกว่าและเร็วกว่าในการใช้ containerization รูปแบบของ virtualization ที่มีน้ำหนักเบาซึ่งใช้เคอร์เนลเพื่อสร้างสภาพแวดล้อมแบบ sandbox
คอนเทนเนอร์แชร์ทรัพยากรเคอร์เนลกับโฮสต์ แต่อย่างอื่นมีระบบไฟล์รูทของตัวเอง userpace เครือข่ายสแต็ค ฯลฯ มันอาจเป็นแนวคิดในฐานะที่เป็นchroot
สเตียรอยด์ อย่างไรก็ตามเนื่องจากเคอร์เนลถูกแชร์ virtualization คือ "thin" ซึ่งหมายความว่าสำหรับการใช้งานจริงส่วนใหญ่จะทำงานที่ความเร็วเดียวกับ host OS
docker
มีระบบตู้คอนเทนเนอร์มือสองที่เรียกกันว่าเป็น นักเทียบท่ามีภาพที่ได้มาตรฐานสำหรับการกระจายลินุกซ์ทุกอย่างที่คุณต้องการและมันทำงานบน windows (อย่างไรก็ตามรูปภาพ windows จะทำงานได้เฉพาะบน windows เท่านั้นและรูปภาพ linux ทำงานได้ทั้งสองอย่าง) มันมีคุณสมบัติที่มีประโยชน์เพิ่มเติมเพื่อประหยัดพื้นที่และประสิทธิภาพ
นอกจากนี้ยังมีทางเลือกโอเพ่นซอร์สดั้งเดิมสำหรับ linux like LXC
(ซึ่งสร้างไว้ในเคอร์เนล!) ซึ่งสามารถใช้กับสิ่งเดียวกันได้มาก (แต่ต้องมีการกำหนดค่าเพิ่มเติม)
ตัวอย่างแบบง่ายของการทดสอบหรือสร้างสภาพแวดล้อมใน docker
# Dockerfile
FROM ubuntu:17.10
RUN apt-get update && apt-get install -y build-essential
WORKDIR /workdir
docker build --tag my-builder .
จากบรรทัดคำสั่งคอมไพล์โปรเจ็กต์หรือการทดสอบของคุณในสภาพแวดล้อมนั้นได้หลายวิธี
"เข้าสู่ระบบ" และรวบรวมภายในสภาพแวดล้อมรันการทดสอบ ฯลฯ สมมติว่าคุณอยู่ในไดเรกทอรีแหล่งที่มาของโครงการของคุณ
$ docker run -v "$PWD:/workdir" --rm -it my-builder /bin/bash
# echo "Now in docker container"
# make
...
# build/test/my-test
...
# exit
$ echo "Build artifacts are now on your host OS Directory :) "
ใช้เป็นแบบครั้งเดียว
$ docker run -v "$PWD:/workdir" --rm my-builder make
คุณสามารถส่งผ่านตัวแปรสภาพแวดล้อมได้
$ docker run -e "CROSS_COMPILE=arm-linux-gnueabi" -v "$PWD:/workdir" --rm my-builder make
หรือเริ่มต้นอินสแตนซ์ถาวรและคัดลอกไฟล์ลงในมันอย่างชัดเจน
$ Start our instance in background
$ docker run --name my-builder-inst -d my-builder
$ echo "Copy files to instance"
$ docker cp /my/source/dir my-builder-inst:/workdir
$ echo "run project build"
$ docker exec my-builder-inst make
$ echo "copy build artifacts"
$ docker cp my-builder-inst:/workdir/build /my/output/dir
$ echo "destroy and delete container"
$ docker rm -f my-builder-inst
มีรูปแบบการใช้งานอื่น ๆ อีกหลายร้อยรูปแบบอย่างไรก็ตามคำจำกัดความของภาพที่เหมือนสคริปต์ภาพที่ขยายได้และการใช้บรรทัดคำสั่งทำให้น่าสนใจอย่างยิ่งสำหรับการพัฒนาทดสอบและแม้แต่สภาพแวดล้อมในการปรับใช้