CI ಅಥವಾ ಪರೀಕ್ಷಾ ಪರಿಸರಕ್ಕಾಗಿ ಡಾಕರ್-ಇನ್-ಡಾಕರ್ ಅನ್ನು ಬಳಸುವ ಮೊದಲು ಎಚ್ಚರಿಕೆಯಿಂದ ಯೋಚಿಸಿ

CI ಅಥವಾ ಪರೀಕ್ಷಾ ಪರಿಸರಕ್ಕಾಗಿ ಡಾಕರ್-ಇನ್-ಡಾಕರ್ ಅನ್ನು ಬಳಸುವ ಮೊದಲು ಎಚ್ಚರಿಕೆಯಿಂದ ಯೋಚಿಸಿ

ಡಾಕರ್-ಇನ್-ಡಾಕರ್ ಎಂಬುದು ಧಾರಕ ಚಿತ್ರಗಳನ್ನು ನಿರ್ಮಿಸಲು ಕಂಟೇನರ್‌ನಲ್ಲಿಯೇ ಚಾಲನೆಯಲ್ಲಿರುವ ವರ್ಚುವಲೈಸ್ಡ್ ಡಾಕರ್ ಡೀಮನ್ ಪರಿಸರವಾಗಿದೆ. ಡಾಕರ್-ಇನ್-ಡಾಕರ್ ಅನ್ನು ರಚಿಸುವ ಮುಖ್ಯ ಉದ್ದೇಶವು ಡಾಕರ್ ಅನ್ನು ಅಭಿವೃದ್ಧಿಪಡಿಸಲು ಸಹಾಯ ಮಾಡುವುದು. ಜೆಂಕಿನ್ಸ್ ಸಿಐ ಅನ್ನು ಚಲಾಯಿಸಲು ಅನೇಕ ಜನರು ಇದನ್ನು ಬಳಸುತ್ತಾರೆ. ಇದು ಮೊದಲಿಗೆ ಸಾಮಾನ್ಯವೆಂದು ತೋರುತ್ತದೆ, ಆದರೆ ನಂತರ ಜೆಂಕಿನ್ಸ್ ಸಿಐ ಕಂಟೇನರ್‌ನಲ್ಲಿ ಡಾಕರ್ ಅನ್ನು ಸ್ಥಾಪಿಸುವ ಮೂಲಕ ಸಮಸ್ಯೆಗಳನ್ನು ತಪ್ಪಿಸಬಹುದು. ಇದನ್ನು ಹೇಗೆ ಮಾಡಬೇಕೆಂದು ಈ ಲೇಖನವು ನಿಮಗೆ ಹೇಳುತ್ತದೆ. ವಿವರಗಳಿಲ್ಲದೆ ಅಂತಿಮ ಪರಿಹಾರದಲ್ಲಿ ನೀವು ಆಸಕ್ತಿ ಹೊಂದಿದ್ದರೆ, "ಸಮಸ್ಯೆಯನ್ನು ಪರಿಹರಿಸುವುದು" ಎಂಬ ಲೇಖನದ ಕೊನೆಯ ವಿಭಾಗವನ್ನು ಓದಿ.

CI ಅಥವಾ ಪರೀಕ್ಷಾ ಪರಿಸರಕ್ಕಾಗಿ ಡಾಕರ್-ಇನ್-ಡಾಕರ್ ಅನ್ನು ಬಳಸುವ ಮೊದಲು ಎಚ್ಚರಿಕೆಯಿಂದ ಯೋಚಿಸಿ

ಡಾಕರ್-ಇನ್-ಡಾಕರ್: "ಗುಡ್"

ಎರಡು ವರ್ಷಗಳ ಹಿಂದೆ ನಾನು ಡಾಕರ್‌ಗೆ ಸೇರಿಸಿದೆ ಧ್ವಜ - ಸವಲತ್ತು ಮತ್ತು ಬರೆದರು ಡಿಂಡಿನ ಮೊದಲ ಆವೃತ್ತಿ. ಡಾಕರ್ ಅನ್ನು ವೇಗವಾಗಿ ಅಭಿವೃದ್ಧಿಪಡಿಸಲು ಕೋರ್ ತಂಡಕ್ಕೆ ಸಹಾಯ ಮಾಡುವುದು ಗುರಿಯಾಗಿದೆ. ಡಾಕರ್-ಇನ್-ಡಾಕರ್ ಮೊದಲು, ವಿಶಿಷ್ಟ ಅಭಿವೃದ್ಧಿ ಚಕ್ರವು ಈ ರೀತಿ ಕಾಣುತ್ತದೆ:

  • ಹ್ಯಾಕಿಟಿ ಹ್ಯಾಕ್;
  • ನಿರ್ಮಿಸಲು;
  • ಚಾಲನೆಯಲ್ಲಿರುವ ಡಾಕರ್ ಡೀಮನ್ ಅನ್ನು ನಿಲ್ಲಿಸುವುದು;
  • ಹೊಸ ಡಾಕರ್ ಡೀಮನ್ ಅನ್ನು ಪ್ರಾರಂಭಿಸುವುದು;
  • ಪರೀಕ್ಷೆ;
  • ಚಕ್ರವನ್ನು ಪುನರಾವರ್ತಿಸಿ.

ನೀವು ಸುಂದರವಾದ, ಪುನರುತ್ಪಾದಿಸಬಹುದಾದ ಜೋಡಣೆಯನ್ನು ಮಾಡಲು ಬಯಸಿದರೆ (ಅಂದರೆ, ಕಂಟೇನರ್ನಲ್ಲಿ), ನಂತರ ಅದು ಹೆಚ್ಚು ಜಟಿಲವಾಗಿದೆ:

  • ಹ್ಯಾಕಿಟಿ ಹ್ಯಾಕ್;
  • ಡಾಕರ್‌ನ ಕೆಲಸದ ಆವೃತ್ತಿಯು ಚಾಲನೆಯಲ್ಲಿದೆ ಎಂದು ಖಚಿತಪಡಿಸಿಕೊಳ್ಳಿ;
  • ಹಳೆಯ ಡಾಕರ್‌ನೊಂದಿಗೆ ಹೊಸ ಡಾಕರ್ ಅನ್ನು ನಿರ್ಮಿಸಿ;
  • ಡಾಕರ್ ಡೀಮನ್ ನಿಲ್ಲಿಸಿ;
  • ಹೊಸ ಡಾಕರ್ ಡೀಮನ್ ಅನ್ನು ಪ್ರಾರಂಭಿಸಿ;
  • ಪರೀಕ್ಷೆ;
  • ಹೊಸ ಡಾಕರ್ ಡೀಮನ್ ನಿಲ್ಲಿಸಿ;
  • ಪುನರಾವರ್ತಿಸಿ.

ಡಾಕರ್-ಇನ್-ಡಾಕರ್ ಆಗಮನದೊಂದಿಗೆ, ಪ್ರಕ್ರಿಯೆಯು ಸರಳವಾಗಿದೆ:

  • ಹ್ಯಾಕಿಟಿ ಹ್ಯಾಕ್;
  • ಜೋಡಣೆ + ಒಂದು ಹಂತದಲ್ಲಿ ಉಡಾವಣೆ;
  • ಚಕ್ರವನ್ನು ಪುನರಾವರ್ತಿಸಿ.

ಈ ರೀತಿಯಲ್ಲಿ ಹೆಚ್ಚು ಉತ್ತಮ ಅಲ್ಲವೇ?

CI ಅಥವಾ ಪರೀಕ್ಷಾ ಪರಿಸರಕ್ಕಾಗಿ ಡಾಕರ್-ಇನ್-ಡಾಕರ್ ಅನ್ನು ಬಳಸುವ ಮೊದಲು ಎಚ್ಚರಿಕೆಯಿಂದ ಯೋಚಿಸಿ

ಡಾಕರ್-ಇನ್-ಡಾಕರ್: "ಕೆಟ್ಟದು"

ಆದಾಗ್ಯೂ, ಜನಪ್ರಿಯ ನಂಬಿಕೆಗೆ ವಿರುದ್ಧವಾಗಿ, ಡಾಕರ್-ಇನ್-ಡಾಕರ್ 100% ನಕ್ಷತ್ರಗಳು, ಕುದುರೆಗಳು ಮತ್ತು ಯುನಿಕಾರ್ನ್‌ಗಳಲ್ಲ. ನನ್ನ ಪ್ರಕಾರ ಡೆವಲಪರ್‌ಗಳು ತಿಳಿದಿರಬೇಕಾದ ಹಲವಾರು ಸಮಸ್ಯೆಗಳಿವೆ.

ಅವುಗಳಲ್ಲಿ ಒಂದು AppArmor ಮತ್ತು SELinux ನಂತಹ LSM ಗಳಿಗೆ (ಲಿನಕ್ಸ್ ಭದ್ರತಾ ಮಾಡ್ಯೂಲ್‌ಗಳು) ಸಂಬಂಧಿಸಿದೆ: ಕಂಟೇನರ್ ಅನ್ನು ಚಾಲನೆ ಮಾಡುವಾಗ, "ಆಂತರಿಕ ಡಾಕರ್" ಭದ್ರತಾ ಪ್ರೊಫೈಲ್‌ಗಳನ್ನು ಅನ್ವಯಿಸಲು ಪ್ರಯತ್ನಿಸಬಹುದು ಅದು ಸಂಘರ್ಷ ಅಥವಾ "ಬಾಹ್ಯ ಡಾಕರ್" ಅನ್ನು ಗೊಂದಲಗೊಳಿಸುತ್ತದೆ. ಸವಲತ್ತು ಹೊಂದಿರುವ ಧ್ವಜದ ಮೂಲ ಅನುಷ್ಠಾನವನ್ನು ವಿಲೀನಗೊಳಿಸಲು ಪ್ರಯತ್ನಿಸುವಾಗ ಪರಿಹರಿಸಲು ಇದು ಅತ್ಯಂತ ಕಷ್ಟಕರವಾದ ಸಮಸ್ಯೆಯಾಗಿದೆ. ನನ್ನ ಬದಲಾವಣೆಗಳು ಕಾರ್ಯನಿರ್ವಹಿಸಿದವು ಮತ್ತು ಎಲ್ಲಾ ಪರೀಕ್ಷೆಗಳು ನನ್ನ ಡೆಬಿಯನ್ ಯಂತ್ರ ಮತ್ತು ಉಬುಂಟು ಪರೀಕ್ಷಾ VM ಗಳಲ್ಲಿ ಹಾದುಹೋಗುತ್ತವೆ, ಆದರೆ ಅವು ಮೈಕೆಲ್ ಕ್ರಾಸ್ಬಿಯ ಯಂತ್ರದಲ್ಲಿ ಕ್ರ್ಯಾಶ್ ಆಗುತ್ತವೆ ಮತ್ತು ಬರ್ನ್ ಆಗುತ್ತವೆ (ನಾನು ನೆನಪಿಸಿಕೊಳ್ಳುವಂತೆ ಅವನು ಫೆಡೋರಾವನ್ನು ಹೊಂದಿದ್ದನು). ಸಮಸ್ಯೆಯ ನಿಖರವಾದ ಕಾರಣ ನನಗೆ ನೆನಪಿಲ್ಲ, ಆದರೆ ಮೈಕ್ SELINUX=enforce (ನಾನು AppArmor ಅನ್ನು ಬಳಸಿದ್ದೇನೆ) ಜೊತೆಗೆ ಕೆಲಸ ಮಾಡುವ ಬುದ್ಧಿವಂತ ವ್ಯಕ್ತಿಯಾಗಿರಬಹುದು ಮತ್ತು ನನ್ನ ಬದಲಾವಣೆಗಳು SELinux ಪ್ರೊಫೈಲ್‌ಗಳನ್ನು ಗಣನೆಗೆ ತೆಗೆದುಕೊಳ್ಳಲಿಲ್ಲ.

ಡಾಕರ್-ಇನ್-ಡಾಕರ್: "ದುಷ್ಟ"

ಎರಡನೆಯ ಸಮಸ್ಯೆಯು ಡಾಕರ್ ಸ್ಟೋರೇಜ್ ಡ್ರೈವರ್‌ಗಳೊಂದಿಗೆ. ನೀವು ಡಾಕರ್-ಇನ್-ಡಾಕರ್ ಅನ್ನು ರನ್ ಮಾಡಿದಾಗ, ಬಾಹ್ಯ ಡಾಕರ್ ಸಾಮಾನ್ಯ ಫೈಲ್ ಸಿಸ್ಟಮ್ (EXT4, BTRFS, ಅಥವಾ ನೀವು ಹೊಂದಿರುವ ಯಾವುದಾದರೂ) ಮೇಲೆ ಚಲಿಸುತ್ತದೆ ಮತ್ತು ಆಂತರಿಕ ಡಾಕರ್ ಕಾಪಿ-ಆನ್-ರೈಟ್ ಸಿಸ್ಟಮ್ (AUFS, BTRFS, ಡಿವೈಸ್ ಮ್ಯಾಪರ್) ಮೇಲೆ ಚಲಿಸುತ್ತದೆ. , ಇತ್ಯಾದಿ). , ಬಾಹ್ಯ ಡಾಕರ್ ಅನ್ನು ಬಳಸಲು ಕಾನ್ಫಿಗರ್ ಮಾಡಿರುವುದನ್ನು ಅವಲಂಬಿಸಿ). ಇದು ಕೆಲಸ ಮಾಡದ ಅನೇಕ ಸಂಯೋಜನೆಗಳನ್ನು ರಚಿಸುತ್ತದೆ. ಉದಾಹರಣೆಗೆ, ನೀವು AUFS ಮೇಲೆ AUFS ಅನ್ನು ಚಲಾಯಿಸಲು ಸಾಧ್ಯವಾಗುವುದಿಲ್ಲ.

ನೀವು BTRFS ನ ಮೇಲೆ BTRFS ಅನ್ನು ಚಲಾಯಿಸಿದರೆ, ಅದು ಮೊದಲಿಗೆ ಕೆಲಸ ಮಾಡಬೇಕು, ಆದರೆ ನೆಸ್ಟೆಡ್ ಉಪಸಂಪುಟಗಳಿದ್ದರೆ, ಮೂಲ ಉಪ ಸಂಪುಟವನ್ನು ಅಳಿಸುವುದು ವಿಫಲಗೊಳ್ಳುತ್ತದೆ. ಡಿವೈಸ್ ಮ್ಯಾಪರ್ ಮಾಡ್ಯೂಲ್ ಯಾವುದೇ ನೇಮ್‌ಸ್ಪೇಸ್ ಹೊಂದಿಲ್ಲ, ಆದ್ದರಿಂದ ಅನೇಕ ಡಾಕರ್ ನಿದರ್ಶನಗಳು ಅದನ್ನು ಒಂದೇ ಗಣಕದಲ್ಲಿ ರನ್ ಮಾಡುತ್ತಿದ್ದರೆ, ಅವೆಲ್ಲವೂ ಪರಸ್ಪರ ಮತ್ತು ಕಂಟೇನರ್ ಬ್ಯಾಕಪ್ ಸಾಧನಗಳಲ್ಲಿ ಚಿತ್ರಗಳನ್ನು ನೋಡಲು (ಮತ್ತು ಪ್ರಭಾವ) ಸಾಧ್ಯವಾಗುತ್ತದೆ. ಇದು ಕೆಟ್ಟದ್ದು.

ಈ ಹಲವು ಸಮಸ್ಯೆಗಳನ್ನು ಪರಿಹರಿಸಲು ಪರಿಹಾರೋಪಾಯಗಳಿವೆ. ಉದಾಹರಣೆಗೆ, ನೀವು ಆಂತರಿಕ ಡಾಕರ್‌ನಲ್ಲಿ AUFS ಅನ್ನು ಬಳಸಲು ಬಯಸಿದರೆ, /var/lib/docker ಫೋಲ್ಡರ್ ಅನ್ನು ವಾಲ್ಯೂಮ್ ಆಗಿ ಪರಿವರ್ತಿಸಿ ಮತ್ತು ನೀವು ಚೆನ್ನಾಗಿರುತ್ತೀರಿ. ಡಾಕರ್ ಕೆಲವು ಬೇಸ್ ನೇಮ್‌ಸ್ಪೇಸ್‌ಗಳನ್ನು ಡಿವೈಸ್ ಮ್ಯಾಪರ್ ಟಾರ್ಗೆಟ್ ನೇಮ್‌ಗಳಿಗೆ ಸೇರಿಸಿದೆ ಆದ್ದರಿಂದ ಒಂದೇ ಗಣಕದಲ್ಲಿ ಅನೇಕ ಡಾಕರ್ ಕರೆಗಳು ಚಾಲನೆಯಲ್ಲಿದ್ದರೆ, ಅವು ಒಂದಕ್ಕೊಂದು ಹೆಜ್ಜೆ ಹಾಕುವುದಿಲ್ಲ.

ಆದಾಗ್ಯೂ, ಅಂತಹ ಸೆಟಪ್ ಸರಳವಾಗಿಲ್ಲ, ಇವುಗಳಿಂದ ನೋಡಬಹುದಾಗಿದೆ ಲೇಖನಗಳು GitHub ನಲ್ಲಿನ ಡಿಂಡ್ ರೆಪೊಸಿಟರಿಯಲ್ಲಿ.

ಡಾಕರ್-ಇನ್-ಡಾಕರ್: ಇದು ಕೆಟ್ಟದಾಗುತ್ತದೆ

ಬಿಲ್ಡ್ ಕ್ಯಾಶ್ ಬಗ್ಗೆ ಏನು? ಇದು ಸಹ ಸಾಕಷ್ಟು ಕಷ್ಟಕರವಾಗಿರುತ್ತದೆ. "ನಾನು ಡಾಕರ್-ಇನ್-ಡಾಕರ್ ಅನ್ನು ಚಾಲನೆ ಮಾಡುತ್ತಿದ್ದರೆ, ಎಲ್ಲವನ್ನೂ ನನ್ನ ಆಂತರಿಕ ಡಾಕರ್‌ಗೆ ಹಿಂತಿರುಗಿಸುವ ಬದಲು ನನ್ನ ಹೋಸ್ಟ್‌ನಲ್ಲಿ ಹೋಸ್ಟ್ ಮಾಡಲಾದ ಚಿತ್ರಗಳನ್ನು ನಾನು ಹೇಗೆ ಬಳಸಬಹುದು" ಎಂದು ಜನರು ನನ್ನನ್ನು ಆಗಾಗ್ಗೆ ಕೇಳುತ್ತಾರೆ?

ಕೆಲವು ಉದ್ಯಮಶೀಲ ಜನರು ಹೋಸ್ಟ್‌ನಿಂದ ಡಾಕರ್-ಇನ್-ಡಾಕರ್ ಕಂಟೈನರ್‌ಗೆ /var/lib/docker ಅನ್ನು ಬಂಧಿಸಲು ಪ್ರಯತ್ನಿಸಿದ್ದಾರೆ. ಕೆಲವೊಮ್ಮೆ ಅವರು /var/lib/docker ಅನ್ನು ಬಹು ಧಾರಕಗಳೊಂದಿಗೆ ಹಂಚಿಕೊಳ್ಳುತ್ತಾರೆ.

CI ಅಥವಾ ಪರೀಕ್ಷಾ ಪರಿಸರಕ್ಕಾಗಿ ಡಾಕರ್-ಇನ್-ಡಾಕರ್ ಅನ್ನು ಬಳಸುವ ಮೊದಲು ಎಚ್ಚರಿಕೆಯಿಂದ ಯೋಚಿಸಿ
ನಿಮ್ಮ ಡೇಟಾವನ್ನು ಭ್ರಷ್ಟಗೊಳಿಸಲು ನೀವು ಬಯಸುವಿರಾ? ಏಕೆಂದರೆ ಇದು ನಿಖರವಾಗಿ ನಿಮ್ಮ ಡೇಟಾವನ್ನು ಹಾನಿಗೊಳಿಸುತ್ತದೆ!

ಡಾಕರ್ ಡೀಮನ್ ಅನ್ನು /var/lib/docker ಗೆ ವಿಶೇಷ ಪ್ರವೇಶವನ್ನು ಹೊಂದಲು ಸ್ಪಷ್ಟವಾಗಿ ವಿನ್ಯಾಸಗೊಳಿಸಲಾಗಿದೆ. ಈ ಫೋಲ್ಡರ್‌ನಲ್ಲಿರುವ ಯಾವುದೇ ಡಾಕರ್ ಫೈಲ್‌ಗಳನ್ನು ಬೇರೆ ಯಾವುದೂ "ಸ್ಪರ್ಶ ಮಾಡಬಾರದು, ಇರಿ, ಅಥವಾ ಪ್ರಾಡ್" ಮಾಡಬಾರದು.

ಯಾಕೆ ಹೀಗೆ? ಏಕೆಂದರೆ ಇದು ಡಾಟ್‌ಕ್ಲೌಡ್ ಅನ್ನು ಅಭಿವೃದ್ಧಿಪಡಿಸುವಾಗ ಕಲಿತ ಕಠಿಣ ಪಾಠಗಳ ಫಲಿತಾಂಶವಾಗಿದೆ. ಡಾಟ್‌ಕ್ಲೌಡ್ ಕಂಟೇನರ್ ಎಂಜಿನ್ ಏಕಕಾಲದಲ್ಲಿ /var/lib/dotcloud ಅನ್ನು ಪ್ರವೇಶಿಸುವ ಬಹು ಪ್ರಕ್ರಿಯೆಗಳನ್ನು ಹೊಂದುವ ಮೂಲಕ ಕಾರ್ಯನಿರ್ವಹಿಸುತ್ತದೆ. ಪರಮಾಣು ಫೈಲ್ ರಿಪ್ಲೇಸ್‌ಮೆಂಟ್ (ಇನ್-ಪ್ಲೇಸ್ ಎಡಿಟಿಂಗ್‌ನ ಬದಲಿಗೆ), ಸಲಹಾ ಮತ್ತು ಕಡ್ಡಾಯ ಲಾಕ್‌ಗಳೊಂದಿಗೆ ಪೆಪ್ಪರಿಂಗ್ ಕೋಡ್ ಮತ್ತು SQLite ಮತ್ತು BDB ಯಂತಹ ಸುರಕ್ಷಿತ ವ್ಯವಸ್ಥೆಗಳೊಂದಿಗೆ ಇತರ ಪ್ರಯೋಗಗಳಂತಹ ಕುತಂತ್ರ ತಂತ್ರಗಳು ಯಾವಾಗಲೂ ಕೆಲಸ ಮಾಡಲಿಲ್ಲ. ನಾವು ನಮ್ಮ ಕಂಟೇನರ್ ಎಂಜಿನ್ ಅನ್ನು ಮರುವಿನ್ಯಾಸಗೊಳಿಸುವಾಗ, ಅದು ಅಂತಿಮವಾಗಿ ಡಾಕರ್ ಆಯಿತು, ಎಲ್ಲಾ ಏಕಕಾಲಿಕ ಅಸಂಬದ್ಧತೆಯನ್ನು ತೊಡೆದುಹಾಕಲು ಒಂದೇ ಡೀಮನ್ ಅಡಿಯಲ್ಲಿ ಎಲ್ಲಾ ಕಂಟೇನರ್ ಕಾರ್ಯಾಚರಣೆಗಳನ್ನು ಏಕೀಕರಿಸುವುದು ದೊಡ್ಡ ವಿನ್ಯಾಸ ನಿರ್ಧಾರಗಳಲ್ಲಿ ಒಂದಾಗಿದೆ.

ನನ್ನನ್ನು ತಪ್ಪಾಗಿ ಅರ್ಥಮಾಡಿಕೊಳ್ಳಬೇಡಿ: ಬಹು ಪ್ರಕ್ರಿಯೆಗಳು ಮತ್ತು ಆಧುನಿಕ ಸಮಾನಾಂತರ ನಿಯಂತ್ರಣವನ್ನು ಒಳಗೊಂಡಿರುವ ಯಾವುದನ್ನಾದರೂ ಉತ್ತಮ, ವಿಶ್ವಾಸಾರ್ಹ ಮತ್ತು ವೇಗವಾಗಿ ಮಾಡಲು ಇದು ಸಂಪೂರ್ಣವಾಗಿ ಸಾಧ್ಯ. ಆದರೆ ಡಾಕರ್ ಅನ್ನು ಏಕೈಕ ಆಟಗಾರನಾಗಿ ಬಳಸಿಕೊಂಡು ಕೋಡ್ ಅನ್ನು ಬರೆಯುವುದು ಮತ್ತು ನಿರ್ವಹಿಸುವುದು ಸರಳ ಮತ್ತು ಸುಲಭ ಎಂದು ನಾವು ಭಾವಿಸುತ್ತೇವೆ.

ಇದರರ್ಥ ನೀವು ಬಹು ಡಾಕರ್ ನಿದರ್ಶನಗಳ ನಡುವೆ /var/lib/docker ಡೈರೆಕ್ಟರಿಯನ್ನು ಹಂಚಿಕೊಂಡರೆ, ನೀವು ಸಮಸ್ಯೆಗಳನ್ನು ಎದುರಿಸಬೇಕಾಗುತ್ತದೆ. ಸಹಜವಾಗಿ, ಇದು ವಿಶೇಷವಾಗಿ ಪರೀಕ್ಷೆಯ ಆರಂಭಿಕ ಹಂತಗಳಲ್ಲಿ ಕೆಲಸ ಮಾಡಬಹುದು. "ಕೇಳು, ಮಾ, ನಾನು ಡಾಕರ್ ಆಗಿ ಉಬುಂಟು ಓಡಿಸಬಲ್ಲೆ!" ಆದರೆ ಎರಡು ವಿಭಿನ್ನ ನಿದರ್ಶನಗಳಿಂದ ಒಂದೇ ಚಿತ್ರವನ್ನು ಎಳೆಯುವಂತಹ ಹೆಚ್ಚು ಸಂಕೀರ್ಣವಾದದ್ದನ್ನು ಪ್ರಯತ್ನಿಸಿ ಮತ್ತು ಜಗತ್ತು ಸುಡುವುದನ್ನು ನೀವು ನೋಡುತ್ತೀರಿ.

ಇದರರ್ಥ ನಿಮ್ಮ CI ಸಿಸ್ಟಮ್ ಬಿಲ್ಡ್‌ಗಳು ಮತ್ತು ಮರುನಿರ್ಮಾಣಗಳನ್ನು ನಿರ್ವಹಿಸಿದರೆ, ನೀವು ಪ್ರತಿ ಬಾರಿ ನಿಮ್ಮ ಡಾಕರ್-ಇನ್-ಡಾಕರ್ ಕಂಟೇನರ್ ಅನ್ನು ಮರುಪ್ರಾರಂಭಿಸಿದರೆ, ನೀವು ಅದರ ಸಂಗ್ರಹಕ್ಕೆ ನ್ಯೂಕ್ ಅನ್ನು ಬೀಳಿಸುವ ಅಪಾಯವಿದೆ. ಇದು ತಂಪಾಗಿಲ್ಲ!

ನಿವಾರಣೆ

ಒಂದು ಹೆಜ್ಜೆ ಹಿಂದಕ್ಕೆ ಇಡೋಣ. ನಿಮಗೆ ನಿಜವಾಗಿಯೂ ಡಾಕರ್-ಇನ್-ಡಾಕರ್ ಅಗತ್ಯವಿದೆಯೇ ಅಥವಾ ಆ CI ಸಿಸ್ಟಮ್ ಸ್ವತಃ ಕಂಟೇನರ್‌ನಲ್ಲಿರುವಾಗ ಡಾಕರ್ ಅನ್ನು ರನ್ ಮಾಡಲು ಮತ್ತು ನಿಮ್ಮ CI ಸಿಸ್ಟಮ್‌ನಿಂದ ಕಂಟೈನರ್‌ಗಳು ಮತ್ತು ಇಮೇಜ್‌ಗಳನ್ನು ನಿರ್ಮಿಸಲು ಮತ್ತು ರನ್ ಮಾಡಲು ನೀವು ಬಯಸುತ್ತೀರಾ?

ಹೆಚ್ಚಿನ ಜನರು ನಂತರದ ಆಯ್ಕೆಯನ್ನು ಬಯಸುತ್ತಾರೆ ಎಂದು ನಾನು ಬಾಜಿ ಮಾಡುತ್ತೇನೆ, ಅಂದರೆ ಜೆಂಕಿನ್ಸ್‌ನಂತಹ ಸಿಐ ಸಿಸ್ಟಮ್ ಕಂಟೇನರ್‌ಗಳನ್ನು ಚಲಾಯಿಸಲು ಸಾಧ್ಯವಾಗುತ್ತದೆ ಎಂದು ಅವರು ಬಯಸುತ್ತಾರೆ. ಮತ್ತು ಇದನ್ನು ಮಾಡಲು ಸುಲಭವಾದ ಮಾರ್ಗವೆಂದರೆ ನಿಮ್ಮ CI ಕಂಟೇನರ್‌ಗೆ ಡಾಕರ್ ಸಾಕೆಟ್ ಅನ್ನು ಸೇರಿಸುವುದು ಮತ್ತು ಅದನ್ನು -v ಫ್ಲ್ಯಾಗ್‌ನೊಂದಿಗೆ ಸಂಯೋಜಿಸುವುದು.

ಸರಳವಾಗಿ ಹೇಳುವುದಾದರೆ, ಡಾಕರ್-ಇನ್-ಡಾಕರ್ ಜೊತೆಗೆ ಏನನ್ನಾದರೂ ಹ್ಯಾಕ್ ಮಾಡುವ ಬದಲು ನಿಮ್ಮ CI ಕಂಟೇನರ್ (ಜೆಂಕಿನ್ಸ್ ಅಥವಾ ಇತರೆ) ಅನ್ನು ನೀವು ರನ್ ಮಾಡಿದಾಗ, ಅದನ್ನು ಸಾಲಿನಿಂದ ಪ್ರಾರಂಭಿಸಿ:

docker run -v /var/run/docker.sock:/var/run/docker.sock ...

ಈ ಕಂಟೇನರ್ ಈಗ ಡಾಕರ್ ಸಾಕೆಟ್‌ಗೆ ಪ್ರವೇಶವನ್ನು ಹೊಂದಿರುತ್ತದೆ ಮತ್ತು ಆದ್ದರಿಂದ ಕಂಟೇನರ್‌ಗಳನ್ನು ಚಲಾಯಿಸಲು ಸಾಧ್ಯವಾಗುತ್ತದೆ. "ಮಕ್ಕಳ" ಕಂಟೈನರ್‌ಗಳನ್ನು ಚಲಾಯಿಸುವ ಬದಲು, ಅದು "ಸಹೋದರ" ಕಂಟೇನರ್‌ಗಳನ್ನು ಪ್ರಾರಂಭಿಸುತ್ತದೆ.

ಅಧಿಕೃತ ಡಾಕರ್ ಚಿತ್ರವನ್ನು ಬಳಸಿಕೊಂಡು ಇದನ್ನು ಪ್ರಯತ್ನಿಸಿ (ಇದು ಡಾಕರ್ ಬೈನರಿಯನ್ನು ಒಳಗೊಂಡಿದೆ):

docker run -v /var/run/docker.sock:/var/run/docker.sock 
           -ti docker

ಇದು ಡಾಕರ್-ಇನ್-ಡಾಕರ್‌ನಂತೆ ಕಾಣುತ್ತದೆ ಮತ್ತು ಕಾರ್ಯನಿರ್ವಹಿಸುತ್ತದೆ, ಆದರೆ ಇದು ಡಾಕರ್-ಇನ್-ಡಾಕರ್ ಅಲ್ಲ: ಈ ಕಂಟೇನರ್ ಹೆಚ್ಚುವರಿ ಕಂಟೇನರ್‌ಗಳನ್ನು ರಚಿಸಿದಾಗ, ಅವುಗಳನ್ನು ಉನ್ನತ ಮಟ್ಟದ ಡಾಕರ್‌ನಲ್ಲಿ ರಚಿಸಲಾಗುತ್ತದೆ. ಗೂಡುಕಟ್ಟುವಿಕೆಯ ಅಡ್ಡ ಪರಿಣಾಮಗಳನ್ನು ನೀವು ಅನುಭವಿಸುವುದಿಲ್ಲ ಮತ್ತು ಅಸೆಂಬ್ಲಿ ಸಂಗ್ರಹವನ್ನು ಬಹು ಕರೆಗಳಲ್ಲಿ ಹಂಚಿಕೊಳ್ಳಲಾಗುತ್ತದೆ.

ಗಮನಿಸಿ: ಈ ಲೇಖನದ ಹಿಂದಿನ ಆವೃತ್ತಿಗಳು ಡಾಕರ್ ಬೈನರಿಯನ್ನು ಹೋಸ್ಟ್‌ನಿಂದ ಕಂಟೇನರ್‌ಗೆ ಲಿಂಕ್ ಮಾಡಲು ಸಲಹೆ ನೀಡಿವೆ. ಡಾಕರ್ ಎಂಜಿನ್ ಇನ್ನು ಮುಂದೆ ಸ್ಟ್ಯಾಟಿಕ್ ಅಥವಾ ಸ್ಟ್ಯಾಟಿಕ್ ಲೈಬ್ರರಿಗಳನ್ನು ಒಳಗೊಂಡಿರುವುದಿಲ್ಲವಾದ್ದರಿಂದ ಇದು ಈಗ ವಿಶ್ವಾಸಾರ್ಹವಲ್ಲ.

ಆದ್ದರಿಂದ, ನೀವು ಜೆಂಕಿನ್ಸ್ CI ನಿಂದ ಡಾಕರ್ ಅನ್ನು ಬಳಸಲು ಬಯಸಿದರೆ, ನಿಮಗೆ 2 ಆಯ್ಕೆಗಳಿವೆ:
ಮೂಲ ಇಮೇಜ್ ಪ್ಯಾಕೇಜಿಂಗ್ ವ್ಯವಸ್ಥೆಯನ್ನು ಬಳಸಿಕೊಂಡು ಡಾಕರ್ CLI ಅನ್ನು ಸ್ಥಾಪಿಸುವುದು (ಅಂದರೆ ನಿಮ್ಮ ಚಿತ್ರವು ಡೆಬಿಯನ್ ಅನ್ನು ಆಧರಿಸಿದ್ದರೆ, .deb ಪ್ಯಾಕೇಜ್‌ಗಳನ್ನು ಬಳಸಿ), ಡಾಕರ್ API ಅನ್ನು ಬಳಸಿ.

ಕೆಲವು ಜಾಹೀರಾತುಗಳು 🙂

ನಮ್ಮೊಂದಿಗೆ ಇರುವುದಕ್ಕೆ ಧನ್ಯವಾದಗಳು. ನೀವು ನಮ್ಮ ಲೇಖನಗಳನ್ನು ಇಷ್ಟಪಡುತ್ತೀರಾ? ಹೆಚ್ಚು ಆಸಕ್ತಿದಾಯಕ ವಿಷಯವನ್ನು ನೋಡಲು ಬಯಸುವಿರಾ? ಆರ್ಡರ್ ಮಾಡುವ ಮೂಲಕ ಅಥವಾ ಸ್ನೇಹಿತರಿಗೆ ಶಿಫಾರಸು ಮಾಡುವ ಮೂಲಕ ನಮ್ಮನ್ನು ಬೆಂಬಲಿಸಿ, $4.99 ರಿಂದ ಡೆವಲಪರ್‌ಗಳಿಗಾಗಿ ಕ್ಲೌಡ್ VPS, ಪ್ರವೇಶ ಮಟ್ಟದ ಸರ್ವರ್‌ಗಳ ಅನನ್ಯ ಅನಲಾಗ್, ಇದನ್ನು ನಿಮಗಾಗಿ ನಾವು ಕಂಡುಹಿಡಿದಿದ್ದೇವೆ: $5 ರಿಂದ VPS (KVM) E2697-3 v6 (10 ಕೋರ್‌ಗಳು) 4GB DDR480 1GB SSD 19Gbps ಬಗ್ಗೆ ಸಂಪೂರ್ಣ ಸತ್ಯ ಅಥವಾ ಸರ್ವರ್ ಅನ್ನು ಹೇಗೆ ಹಂಚಿಕೊಳ್ಳುವುದು? (RAID1 ಮತ್ತು RAID10, 24 ಕೋರ್‌ಗಳವರೆಗೆ ಮತ್ತು 40GB DDR4 ವರೆಗೆ ಲಭ್ಯವಿದೆ).

ಆಮ್‌ಸ್ಟರ್‌ಡ್ಯಾಮ್‌ನಲ್ಲಿರುವ Equinix Tier IV ಡೇಟಾ ಸೆಂಟರ್‌ನಲ್ಲಿ Dell R730xd 2x ಅಗ್ಗವಾಗಿದೆಯೇ? ಇಲ್ಲಿ ಮಾತ್ರ $2 ರಿಂದ 2 x Intel TetraDeca-Ceon 5x E2697-3v2.6 14GHz 64C 4GB DDR4 960x1GB SSD 100Gbps 199 TV ನೆದರ್ಲ್ಯಾಂಡ್ಸ್ನಲ್ಲಿ! Dell R420 - 2x E5-2430 2.2Ghz 6C 128GB DDR3 2x960GB SSD 1Gbps 100TB - $99 ರಿಂದ! ಬಗ್ಗೆ ಓದು ಮೂಲಸೌಕರ್ಯ ನಿಗಮವನ್ನು ಹೇಗೆ ನಿರ್ಮಿಸುವುದು ಒಂದು ಪೆನ್ನಿಗೆ 730 ಯುರೋಗಳಷ್ಟು ಮೌಲ್ಯದ Dell R5xd E2650-4 v9000 ಸರ್ವರ್‌ಗಳ ಬಳಕೆಯೊಂದಿಗೆ ವರ್ಗ?

ಮೂಲ: www.habr.com

ಕಾಮೆಂಟ್ ಅನ್ನು ಸೇರಿಸಿ