การแปลการถอดเสียงพอดแคสต์ที่เตรียมไว้เพื่อรอการเริ่มต้นหลักสูตร
Docker Compose เป็นเครื่องมือที่น่าทึ่งสำหรับการสร้างสรรค์ผลงาน
สภาพแวดล้อมสำหรับสแต็กที่ใช้ในแอปพลิเคชันของคุณ ช่วยให้คุณกำหนดได้
แต่ละองค์ประกอบของแอปพลิเคชันของคุณ ตามไวยากรณ์ที่ชัดเจนและเรียบง่าย
ไฟล์
ด้วยการถือกำเนิดของ
กลุ่ม
แต่นี่หมายความว่าคุณสามารถใช้ไฟล์นักเทียบท่าเขียนเดียวกันได้
กระบวนการพัฒนาและในสภาพแวดล้อมการผลิต? หรือใช้ไฟล์เดียวกันสำหรับ
จัดฉาก? โดยทั่วไปแล้ว ใช่ แต่สำหรับฟังก์ชันนี้ เราจำเป็นต้องมีสิ่งต่อไปนี้:
- การแก้ไขตัวแปร: การใช้ตัวแปรสภาพแวดล้อมสำหรับบางตัว
ค่านิยมที่เปลี่ยนแปลงไปในแต่ละสภาพแวดล้อม - การแทนที่การกำหนดค่า: ความสามารถในการกำหนดวินาที (หรือใดๆ
ไฟล์นักเทียบท่าอื่นที่ตามมา) ที่จะเปลี่ยนแปลงบางอย่างที่เกี่ยวข้อง
ก่อนอื่นและนักเทียบท่าเขียนจะดูแลการรวมทั้งสองไฟล์
ความแตกต่างระหว่างไฟล์การพัฒนาและไฟล์ที่ใช้งานจริง
ในระหว่างการพัฒนา คุณมักจะต้องการตรวจสอบการเปลี่ยนแปลงโค้ด
เวลาจริง เมื่อต้องการทำเช่นนี้ โดยปกติแล้วโวลุ่มที่มีซอร์สโค้ดจะถูกเมาท์เข้าไป
คอนเทนเนอร์ที่มีรันไทม์สำหรับแอปพลิเคชันของคุณ แต่สำหรับสภาพแวดล้อมการผลิต
วิธีนี้ไม่เหมาะ
ในการใช้งานจริง คุณมีคลัสเตอร์ที่มีโหนดจำนวนมาก และวอลุ่มอยู่ในเครื่อง
สัมพันธ์กับโหนดที่คอนเทนเนอร์ (หรือบริการ) ของคุณทำงานอยู่ ดังนั้นคุณจึงไม่ทำเช่นนั้น
คุณสามารถเมานต์ซอร์สโค้ดได้โดยไม่ต้องดำเนินการที่ซับซ้อนซึ่งรวมถึง
การซิงโครไนซ์รหัส สัญญาณ ฯลฯ
แต่โดยปกติแล้วเราต้องการสร้างรูปภาพด้วยโค้ดเวอร์ชันเฉพาะของคุณแทน
เป็นเรื่องปกติที่จะทำเครื่องหมายด้วยแท็กที่เหมาะสม (คุณสามารถใช้ความหมายได้
เวอร์ชันหรือระบบอื่นขึ้นอยู่กับดุลยพินิจของคุณ)
แทนที่การกำหนดค่า
เมื่อพิจารณาถึงความแตกต่างและการขึ้นต่อกันของคุณอาจแตกต่างกันในสถานการณ์ต่างๆ
การพัฒนาและการผลิตเป็นที่ชัดเจนว่าเราต้องการไฟล์การกำหนดค่าที่แตกต่างกัน
Docker compose รองรับการรวมไฟล์เขียนที่แตกต่างกันเข้าด้วยกัน
รับการกำหนดค่าขั้นสุดท้าย วิธีการทำงานสามารถดูได้จากตัวอย่าง:
$ cat docker-compose.yml
version: "3.2"
services:
whale:
image: docker/whalesay
command: ["cowsay", "hello!"]
$ docker-compose up
Creating network "composeconfigs_default" with the default driver
Starting composeconfigs_whale_1
Attaching to composeconfigs_whale_1
whale_1 | ________
whale_1 | < hello! >
whale_1 | --------
whale_1 |
whale_1 |
whale_1 |
whale_1 | ## .
whale_1 | ## ## ## ==
whale_1 | ## ## ## ## ===
whale_1 | /""""""""""""""""___/ ===
whale_1 | ~~~ {~~ ~~~~ ~~~ ~~~~ ~~ ~ / ===- ~~~
whale_1 | ______ o __/
whale_1 | __/
whale_1 | __________/
composeconfigs_whale_1 exited with code 0
ดังที่ได้กล่าวไปแล้ว docker compose รองรับการรวมหลายการเขียน -
ซึ่งจะทำให้คุณสามารถแทนที่พารามิเตอร์ต่างๆ ในไฟล์ที่สองได้ ตัวอย่างเช่น:
$ cat docker-compose.second.yml
version: "3.2"
services:
whale:
command: ["cowsay", "bye!"]
$ docker-compose -f docker-compose.yml -f docker-compose.second.yml up
Creating composeconfigs_whale_1
Attaching to composeconfigs_whale_1
whale_1 | ______
whale_1 | < bye! >
whale_1 | ------
whale_1 |
whale_1 |
whale_1 |
whale_1 | ## .
whale_1 | ## ## ## ==
whale_1 | ## ## ## ## ===
whale_1 | /""""""""""""""""___/ ===
whale_1 | ~~~ {~~ ~~~~ ~~~ ~~~~ ~~ ~ / ===- ~~~
whale_1 | ______ o __/
whale_1 | __/
whale_1 | __________/
composeconfigs_whale_1 exited with code 0
ไวยากรณ์นี้ไม่สะดวกมากในระหว่างการพัฒนาเมื่อมีคำสั่ง
จะต้องทำหลายครั้ง
โชคดีที่นักเทียบท่าเขียนจะค้นหาไฟล์พิเศษที่เรียกว่าโดยอัตโนมัติ
นักเทียบท่า-compose.override.yml เพื่อแทนที่ค่า นักเทียบท่า-compose.yml. ถ้า
เปลี่ยนชื่อไฟล์ที่สอง คุณจะได้ผลลัพธ์เดียวกัน โดยใช้คำสั่งดั้งเดิมเท่านั้น:
$ mv docker-compose.second.yml docker-compose.override.yml
$ docker-compose up
Starting composeconfigs_whale_1
Attaching to composeconfigs_whale_1
whale_1 | ______
whale_1 | < bye! >
whale_1 | ------
whale_1 |
whale_1 |
whale_1 |
whale_1 | ## .
whale_1 | ## ## ## ==
whale_1 | ## ## ## ## ===
whale_1 | /""""""""""""""""___/ ===
whale_1 | ~~~ {~~ ~~~~ ~~~ ~~~~ ~~ ~ / ===- ~~~
whale_1 | ______ o __/
whale_1 | __/
whale_1 | __________/
composeconfigs_whale_1 exited with code 0
โอเค จำง่ายกว่า
การประมาณค่าของตัวแปร
รองรับไฟล์การกำหนดค่า
ตัวแปร
services:
my-service:
build:
context: .
image: private.registry.mine/my-stack/my-service:${MY_SERVICE_VERSION:-latest}
...
และถ้าคุณทำ บิลด์นักเทียบท่าเขียน (หรือพุช) โดยไม่มีตัวแปรสภาพแวดล้อม
$MY_SERVICE_VERSIONจะใช้ค่านี้ ล่าสุดแต่ถ้าคุณตั้งค่า
ค่าของตัวแปรสภาพแวดล้อมก่อนการ build จะถูกใช้เมื่อสร้างหรือผลัก
ไปที่ทะเบียน private.registry.mine.
หลักการของฉัน
แนวทางที่ใช้ได้ผลสำหรับฉันอาจใช้ได้ผลสำหรับคุณเช่นกัน ฉันติดตามสิ่งเหล่านี้
กฎง่ายๆ:
- สแต็กทั้งหมดของฉันสำหรับการผลิต การพัฒนา (หรือสภาพแวดล้อมอื่นๆ) ได้รับการกำหนดผ่าน
ไฟล์นักเทียบท่าเขียน - ไฟล์การกำหนดค่าที่จำเป็นเพื่อให้ครอบคลุมสภาพแวดล้อมทั้งหมดของฉันให้มากที่สุด
หลีกเลี่ยงการทำซ้ำ - ฉันต้องการคำสั่งง่ายๆ หนึ่งคำสั่งเพื่อทำงานในแต่ละสภาพแวดล้อม
- การกำหนดค่าหลักถูกกำหนดไว้ในไฟล์ นักเทียบท่า-compose.yml.
- ตัวแปรสภาพแวดล้อมใช้เพื่อกำหนดแท็กรูปภาพหรืออื่นๆ
ตัวแปรที่อาจแตกต่างกันไปตามสภาพแวดล้อม (การจัดเตรียม การบูรณาการ
การผลิต). - ค่าของตัวแปรการผลิตจะถูกใช้เป็นค่าสำหรับ
โดยค่าเริ่มต้น สิ่งนี้จะช่วยลดความเสี่ยงหากสแต็กถูกเปิดใช้งานในการใช้งานจริงโดยไม่มี
ตั้งค่าตัวแปรสภาพแวดล้อม - หากต้องการเริ่มบริการในสภาพแวดล้อมการใช้งานจริง ให้ใช้คำสั่ง การปรับใช้ docker stack - เขียนไฟล์ docker-compose.yml -with-registry-auth my-stack-name.
- สภาพแวดล้อมการทำงานเริ่มต้นโดยใช้คำสั่ง docker-compose ขึ้น -d.
ลองดูตัวอย่างง่ายๆ
# docker-compose.yml
...
services:
my-service:
build:
context: .
image: private.registry.mine/my-stack/my-service:${MY_SERVICE_VERSION:-latest}
environment:
API_ENDPOINT: ${API_ENDPOINT:-https://production.my-api.com}
...
И
# docker-compose.override.yml
...
services:
my-service:
ports: # This is needed for development!
- 80:80
environment:
API_ENDPOINT: https://devel.my-api.com
volumes:
- ./:/project/src
...
ฉันสามารถใช้ นักเทียบท่าเขียน (นักเทียบท่าเขียน)เพื่อรันสแต็กเข้าไป
โหมดการพัฒนาพร้อมซอร์สโค้ดที่ติดตั้งอยู่ /โครงการ/src.
ฉันสามารถใช้ไฟล์เดียวกันนี้ในการผลิตได้! และฉันก็ใช้ได้แน่นอน
ไฟล์เดียวกัน นักเทียบท่า-compose.yml สำหรับการแสดงละคร เพื่อขยายเรื่องนี้ไปสู่
การผลิต ฉันแค่ต้องสร้างและส่งภาพด้วยแท็กที่กำหนดไว้ล่วงหน้า
ในระยะ CI:
export MY_SERVICE_VERSION=1.2.3
docker-compose -f docker-compose.yml build
docker-compose -f docker-compose.yml push
ในการผลิต สามารถรันได้โดยใช้คำสั่งต่อไปนี้:
export MY_SERVICE_VERSION=1.2.3
docker stack deploy my-stack --compose-file docker-compose.yml --with-registry-auth
และถ้าคุณต้องการทำแบบเดียวกันบนเวที คุณก็แค่ต้องกำหนด
ตัวแปรสภาพแวดล้อมที่จำเป็นสำหรับการทำงานในสภาพแวดล้อมการแสดงละคร:
export MY_SERVICE_VERSION=1.2.3
export API_ENDPOINT=http://staging.my-api.com
docker stack deploy my-stack --compose-file docker-compose.yml --with-registry-auth
ด้วยเหตุนี้ เราจึงใช้ไฟล์ docker-compose สองไฟล์ที่แตกต่างกัน ซึ่งไม่มี
การกำหนดค่าที่ซ้ำกันสามารถใช้ได้กับทุกสภาพแวดล้อมที่คุณมี!
เรียนรู้เพิ่มเติมเกี่ยวกับหลักสูตร
ที่มา: will.com