ಎಲ್ಲರಿಗು ನಮಸ್ಖರ! ಅವನಲ್ಲಿ
Начало
ಮಳೆಗಾಲದ ಸೆಪ್ಟೆಂಬರ್ ಸಂಜೆ ನಾನು ಡಿಜಿಟಲ್ ಓಷನ್ನಲ್ಲಿ $5 ಗೆ ಬಾಡಿಗೆಗೆ ಪಡೆದ ಯಂತ್ರವನ್ನು ಸ್ವಚ್ಛಗೊಳಿಸುತ್ತಿರುವಾಗ ಇದು ಪ್ರಾರಂಭವಾಯಿತು, ಡಾಕರ್ ಎಲ್ಲಾ 24 ಗಿಗಾಬೈಟ್ಗಳ ಲಭ್ಯವಿರುವ ಡಿಸ್ಕ್ ಜಾಗವನ್ನು ಅದರ ಚಿತ್ರಗಳು ಮತ್ತು ಕಂಟೈನರ್ಗಳೊಂದಿಗೆ ತುಂಬಿದ ಕಾರಣ ಅದನ್ನು ಫ್ರೀಜ್ ಮಾಡಲಾಗಿದೆ. ವಿಪರ್ಯಾಸವೆಂದರೆ ಈ ಎಲ್ಲಾ ಚಿತ್ರಗಳು ಮತ್ತು ಕಂಟೈನರ್ಗಳು ಕ್ಷಣಿಕವಾಗಿದ್ದವು ಮತ್ತು ಪ್ರತಿ ಬಾರಿ ಲೈಬ್ರರಿ ಅಥವಾ ಫ್ರೇಮ್ವರ್ಕ್ನ ಹೊಸ ಆವೃತ್ತಿಯನ್ನು ಬಿಡುಗಡೆ ಮಾಡಿದಾಗ ನನ್ನ ಅಪ್ಲಿಕೇಶನ್ನ ಕಾರ್ಯಕ್ಷಮತೆಯನ್ನು ಪರೀಕ್ಷಿಸಲು ಮಾತ್ರ ಅಗತ್ಯವಿದೆ. ನಾನು ಶೆಲ್ ಸ್ಕ್ರಿಪ್ಟ್ಗಳನ್ನು ಬರೆಯಲು ಮತ್ತು ಕಸವನ್ನು ಸ್ವಚ್ಛಗೊಳಿಸಲು ಕ್ರಾನ್ ವೇಳಾಪಟ್ಟಿಯನ್ನು ಹೊಂದಿಸಲು ಪ್ರಯತ್ನಿಸಿದೆ, ಆದರೆ ಅದು ಸಹಾಯ ಮಾಡಲಿಲ್ಲ: ಪ್ರತಿ ಬಾರಿ ಅದು ಅನಿವಾರ್ಯವಾಗಿ ನನ್ನ ಸರ್ವರ್ನ ಡಿಸ್ಕ್ ಜಾಗವನ್ನು ತಿನ್ನುವುದರೊಂದಿಗೆ ಮತ್ತು ಸರ್ವರ್ ನೇತಾಡುವುದರೊಂದಿಗೆ ಕೊನೆಗೊಂಡಿತು (ಅತ್ಯುತ್ತಮವಾಗಿ). ಕೆಲವು ಹಂತದಲ್ಲಿ, ಜೆಂಕಿನ್ಸ್ ಅನ್ನು ಕಂಟೇನರ್ನಲ್ಲಿ ಹೇಗೆ ಓಡಿಸುವುದು ಮತ್ತು ಅದರೊಳಗೆ ಫಾರ್ವರ್ಡ್ ಮಾಡಲಾದ ಡಾಕರ್ ಡೀಮನ್ ಸಾಕೆಟ್ ಮೂಲಕ ಬಿಲ್ಡ್ ಪೈಪ್ಲೈನ್ಗಳನ್ನು ಹೇಗೆ ರಚಿಸಬಹುದು ಮತ್ತು ಅಳಿಸಬಹುದು ಎಂಬುದರ ಕುರಿತು ನಾನು ಲೇಖನವನ್ನು ನೋಡಿದೆ. ನಾನು ಈ ಕಲ್ಪನೆಯನ್ನು ಇಷ್ಟಪಟ್ಟೆ, ಆದರೆ ನಾನು ಮುಂದೆ ಹೋಗಲು ನಿರ್ಧರಿಸಿದೆ ಮತ್ತು ಡಾಕರ್ನಲ್ಲಿ ನೇರವಾಗಿ ಡಾಕರ್ ಅನ್ನು ಚಲಾಯಿಸುವ ಪ್ರಯೋಗವನ್ನು ಮಾಡಲು ಪ್ರಯತ್ನಿಸಿದೆ. ಆ ಸಮಯದಲ್ಲಿ, ಡಾಕರ್ ಚಿತ್ರಗಳನ್ನು ಡೌನ್ಲೋಡ್ ಮಾಡುವುದು ಮತ್ತು ಇನ್ನೊಂದು ಕಂಟೇನರ್ನಲ್ಲಿ ಪರೀಕ್ಷೆಗೆ ಅಗತ್ಯವಿರುವ ಎಲ್ಲಾ ಅಪ್ಲಿಕೇಶನ್ಗಳಿಗೆ ಕಂಟೇನರ್ಗಳನ್ನು ರಚಿಸುವುದು ಸಂಪೂರ್ಣವಾಗಿ ತಾರ್ಕಿಕ ಪರಿಹಾರವೆಂದು ನನಗೆ ತೋರುತ್ತದೆ (ಇದನ್ನು ಸ್ಟೇಜಿಂಗ್ ಕಂಟೇನರ್ ಎಂದು ಕರೆಯೋಣ). -rm ಫ್ಲ್ಯಾಗ್ನೊಂದಿಗೆ ಸ್ಟೇಜಿಂಗ್ ಕಂಟೇನರ್ ಅನ್ನು ಪ್ರಾರಂಭಿಸುವುದು ಕಲ್ಪನೆಯಾಗಿತ್ತು, ಅದು ಸಂಪೂರ್ಣ ಕಂಟೇನರ್ ಮತ್ತು ಅದರ ಎಲ್ಲಾ ವಿಷಯಗಳನ್ನು ನಿಲ್ಲಿಸಿದಾಗ ಸ್ವಯಂಚಾಲಿತವಾಗಿ ಅಳಿಸುತ್ತದೆ. ನಾನು ಡಾಕರ್ನಿಂದಲೇ ಡಾಕರ್ ಚಿತ್ರದೊಂದಿಗೆ ಟಿಂಕರ್ ಮಾಡಿದ್ದೇನೆ (
ಅಭ್ಯಾಸ ಮಾಡಿ. ಶಂಕುಗಳು
ಕಂಟೇನರ್ ಅನ್ನು ನನಗೆ ಬೇಕಾದ ರೀತಿಯಲ್ಲಿ ಕೆಲಸ ಮಾಡಲು ನಾನು ಹೊರಟೆ ಮತ್ತು ನನ್ನ ಪ್ರಯೋಗಗಳನ್ನು ಮುಂದುವರೆಸಿದೆ, ಇದು ಅಸಂಖ್ಯಾತ ಮೊಗ್ಗುಗಳಿಗೆ ಕಾರಣವಾಯಿತು. ನನ್ನ ಸ್ವಯಂ-ಹಿಂಸೆಯ ಫಲಿತಾಂಶವು ಈ ಕೆಳಗಿನ ಅಲ್ಗಾರಿದಮ್ ಆಗಿತ್ತು:
-
ನಾವು ಸಂವಾದಾತ್ಮಕ ಕ್ರಮದಲ್ಲಿ ಡಾಕರ್ ಕಂಟೇನರ್ ಅನ್ನು ಪ್ರಾರಂಭಿಸುತ್ತೇವೆ.
docker run --privileged -it docker:18.09.6
ಕಂಟೇನರ್ನ ಆವೃತ್ತಿಗೆ ಗಮನ ಕೊಡಿ, ಬಲ ಅಥವಾ ಎಡಕ್ಕೆ ಹೆಜ್ಜೆ ಹಾಕಿ ಮತ್ತು ನಿಮ್ಮ DinD ಕುಂಬಳಕಾಯಿಯಾಗಿ ಬದಲಾಗುತ್ತದೆ. ವಾಸ್ತವವಾಗಿ, ಹೊಸ ಆವೃತ್ತಿಯನ್ನು ಬಿಡುಗಡೆ ಮಾಡಿದಾಗ ವಿಷಯಗಳು ಆಗಾಗ್ಗೆ ಒಡೆಯುತ್ತವೆ.
ನಾವು ತಕ್ಷಣ ಶೆಲ್ ಒಳಗೆ ಪಡೆಯಬೇಕು. -
ಯಾವ ಕಂಟೇನರ್ಗಳು ಚಾಲನೆಯಲ್ಲಿವೆ ಎಂಬುದನ್ನು ಕಂಡುಹಿಡಿಯಲು ನಾವು ಪ್ರಯತ್ನಿಸುತ್ತಿದ್ದೇವೆ (ಉತ್ತರ: ಯಾವುದೂ ಇಲ್ಲ), ಆದರೆ ಹೇಗಾದರೂ ಆಜ್ಞೆಯನ್ನು ಚಲಾಯಿಸೋಣ:
docker ps
ನಿಮಗೆ ಸ್ವಲ್ಪ ಆಶ್ಚರ್ಯವಾಗುತ್ತದೆ, ಆದರೆ ಡಾಕರ್ ಡೀಮನ್ ಸಹ ಚಾಲನೆಯಲ್ಲಿಲ್ಲ ಎಂದು ಅದು ತಿರುಗುತ್ತದೆ:
error during connect: Get http://docker:2375/v1.40/containers/json: dial tcp: lookup docker on 192.168.65.1:53: no such host
-
ಅದನ್ನು ನಾವೇ ನಡೆಸೋಣ:
dockerd &
ಮತ್ತೊಂದು ಅಹಿತಕರ ಆಶ್ಚರ್ಯ:
failed to start daemon: Error initializing network controller: error obtaining controller instance: failed to create NAT chain DOCKER: Iptables not found
-
iptables ಮತ್ತು ಬ್ಯಾಷ್ ಪ್ಯಾಕೇಜ್ಗಳನ್ನು ಸ್ಥಾಪಿಸಿ (sh ಗಿಂತ ಬ್ಯಾಷ್ನಲ್ಲಿ ಕೆಲಸ ಮಾಡಲು ಎಲ್ಲವೂ ಹೆಚ್ಚು ಆಹ್ಲಾದಕರವಾಗಿರುತ್ತದೆ):
apk add --no-cache iptables bash
-
ಬ್ಯಾಷ್ ಅನ್ನು ಪ್ರಾರಂಭಿಸೋಣ. ಅಂತಿಮವಾಗಿ ನಾವು ಸಾಮಾನ್ಯ ಶೆಲ್ಗೆ ಮರಳಿದ್ದೇವೆ
-
ಡಾಕರ್ ಅನ್ನು ಮತ್ತೆ ಪ್ರಾರಂಭಿಸಲು ಪ್ರಯತ್ನಿಸೋಣ:
dockerd &
ಇದರೊಂದಿಗೆ ಕೊನೆಗೊಳ್ಳುವ ಲಾಗ್ಗಳ ದೀರ್ಘ ಹಾಳೆಯನ್ನು ನಾವು ನೋಡಬೇಕು:
INFO[2019-11-25T19:51:19.448080400Z] Daemon has completed initialization INFO[2019-11-25T19:51:19.474439300Z] API listen on /var/run/docker.sock
-
ಎಂಟರ್ ಒತ್ತಿರಿ. ನಾವು ಬ್ಯಾಷ್ಗೆ ಹಿಂತಿರುಗಿದ್ದೇವೆ.
ಇಂದಿನಿಂದ, ನಾವು ನಮ್ಮ ಡಾಕರ್ ಕಂಟೈನರ್ನಲ್ಲಿ ಇತರ ಕಂಟೈನರ್ಗಳನ್ನು ಪ್ರಾರಂಭಿಸಲು ಪ್ರಯತ್ನಿಸಬಹುದು, ಆದರೆ ನಾವು ನಮ್ಮ ಡಾಕರ್ ಕಂಟೇನರ್ನೊಳಗೆ ಮತ್ತೊಂದು ಡಾಕರ್ ಕಂಟೇನರ್ ಅನ್ನು ಪ್ರಾರಂಭಿಸಲು ಬಯಸಿದರೆ ಅಥವಾ ಏನಾದರೂ ತಪ್ಪಾದಲ್ಲಿ ಮತ್ತು ಕಂಟೇನರ್ ಕ್ರ್ಯಾಶ್ ಆಗಿದ್ದರೆ ಏನು ಮಾಡಬೇಕು? ಮತ್ತೆ ಎಲ್ಲವನ್ನು ಪ್ರಾರಂಭಿಸಿ.
ಸ್ವಂತ DinD ಕಂಟೇನರ್ ಮತ್ತು ಹೊಸ ಪ್ರಯೋಗಗಳು
ಮೇಲಿನ ಹಂತಗಳನ್ನು ಪದೇ ಪದೇ ಪುನರಾವರ್ತಿಸುವುದನ್ನು ತಪ್ಪಿಸಲು, ನಾನು ನನ್ನದೇ ಆದ DinD ಕಂಟೇನರ್ ಅನ್ನು ರಚಿಸಿದ್ದೇನೆ:
ಕಾರ್ಯನಿರ್ವಹಿಸುತ್ತಿರುವ DinD ಪರಿಹಾರವು ಡಾಕರ್ನೊಳಗೆ ಡಾಕರ್ ಅನ್ನು ಪುನರಾವರ್ತಿತವಾಗಿ ಚಲಾಯಿಸುವ ಮತ್ತು ಹೆಚ್ಚು ಸಾಹಸಮಯ ಪ್ರಯೋಗಗಳನ್ನು ಮಾಡುವ ಸಾಮರ್ಥ್ಯವನ್ನು ನನಗೆ ನೀಡಿತು.
ನಾನು ಈಗ MySQL ಮತ್ತು Nodej ಗಳನ್ನು ಚಲಾಯಿಸುವುದರೊಂದಿಗೆ ಅಂತಹ ಒಂದು (ಯಶಸ್ವಿ) ಪ್ರಯೋಗವನ್ನು ವಿವರಿಸಲಿದ್ದೇನೆ.
ಅತ್ಯಂತ ಅಸಹನೆಯು ಇಲ್ಲಿ ಹೇಗಿತ್ತು ಎಂಬುದನ್ನು ನೋಡಬಹುದು
ಆದ್ದರಿಂದ, ಪ್ರಾರಂಭಿಸೋಣ:
-
ನಾವು DinD ಅನ್ನು ಸಂವಾದಾತ್ಮಕ ಮೋಡ್ನಲ್ಲಿ ಪ್ರಾರಂಭಿಸುತ್ತೇವೆ. DinD ನ ಈ ಆವೃತ್ತಿಯಲ್ಲಿ, ನಮ್ಮ ಮಕ್ಕಳ ಕಂಟೇನರ್ಗಳು ಬಳಸಬಹುದಾದ ಎಲ್ಲಾ ಪೋರ್ಟ್ಗಳನ್ನು ನಾವು ಹಸ್ತಚಾಲಿತವಾಗಿ ಮ್ಯಾಪ್ ಮಾಡಬೇಕಾಗಿದೆ (ನಾನು ಈಗಾಗಲೇ ಈ ಕುರಿತು ಕೆಲಸ ಮಾಡುತ್ತಿದ್ದೇನೆ)
docker run --privileged -it -p 80:8080 -p 3306:3306 alekslitvinenk/dind
ನಾವು ಬ್ಯಾಷ್ಗೆ ಹೋಗುತ್ತೇವೆ, ಅಲ್ಲಿಂದ ನಾವು ತಕ್ಷಣ ಮಕ್ಕಳ ಪಾತ್ರೆಗಳನ್ನು ಪ್ರಾರಂಭಿಸಬಹುದು.
-
MySQL ಅನ್ನು ಪ್ರಾರಂಭಿಸಿ:
docker run --name mysql -e MYSQL_ROOT_PASSWORD=strongpassword -d -p 3306:3306 mysql
-
ನಾವು ಡೇಟಾಬೇಸ್ ಅನ್ನು ಸ್ಥಳೀಯವಾಗಿ ಸಂಪರ್ಕಿಸುವ ರೀತಿಯಲ್ಲಿಯೇ ನಾವು ಸಂಪರ್ಕಿಸುತ್ತೇವೆ. ಎಲ್ಲವೂ ಕಾರ್ಯನಿರ್ವಹಿಸುತ್ತದೆ ಎಂದು ಖಚಿತಪಡಿಸಿಕೊಳ್ಳೋಣ.
-
ಎರಡನೇ ಕಂಟೇನರ್ ಅನ್ನು ಪ್ರಾರಂಭಿಸಿ:
docker run -d --rm -p 8080:8080 alekslitvinenk/hello-world-nodejs-server
ಪೋರ್ಟ್ ಮ್ಯಾಪಿಂಗ್ ನಿಖರವಾಗಿ ಇರುತ್ತದೆ ಎಂಬುದನ್ನು ದಯವಿಟ್ಟು ಗಮನಿಸಿ 8080:8080, ನಾವು ಈಗಾಗಲೇ ಪೋರ್ಟ್ 80 ಅನ್ನು ಹೋಸ್ಟ್ನಿಂದ ಪೋಷಕ ಕಂಟೇನರ್ಗೆ ಪೋರ್ಟ್ 8080 ಗೆ ಮ್ಯಾಪ್ ಮಾಡಿದ್ದೇವೆ.
-
ನಾವು ಬ್ರೌಸರ್ನಲ್ಲಿ ಲೋಕಲ್ ಹೋಸ್ಟ್ಗೆ ಹೋಗುತ್ತೇವೆ, ಸರ್ವರ್ "ಹಲೋ ವರ್ಲ್ಡ್!" ಎಂದು ಪ್ರತಿಕ್ರಿಯಿಸುತ್ತದೆ ಎಂದು ಖಚಿತಪಡಿಸಿಕೊಳ್ಳಿ.
ನನ್ನ ಸಂದರ್ಭದಲ್ಲಿ, ನೆಸ್ಟೆಡ್ ಡಾಕರ್ ಕಂಟೇನರ್ಗಳ ಪ್ರಯೋಗವು ಸಾಕಷ್ಟು ಸಕಾರಾತ್ಮಕವಾಗಿದೆ ಮತ್ತು ನಾನು ಯೋಜನೆಯನ್ನು ಅಭಿವೃದ್ಧಿಪಡಿಸುವುದನ್ನು ಮುಂದುವರಿಸುತ್ತೇನೆ ಮತ್ತು ಅದನ್ನು ವೇದಿಕೆಗಾಗಿ ಬಳಸುತ್ತೇನೆ. ಇದು ಕುಬರ್ನೆಟ್ಸ್ ಮತ್ತು ಜೆಂಕಿನ್ಸ್ X ಗಿಂತ ಹೆಚ್ಚು ಹಗುರವಾದ ಪರಿಹಾರವಾಗಿದೆ ಎಂದು ನನಗೆ ತೋರುತ್ತದೆ. ಆದರೆ ಇದು ನನ್ನ ವ್ಯಕ್ತಿನಿಷ್ಠ ಅಭಿಪ್ರಾಯವಾಗಿದೆ.
ಇಂದಿನ ಲೇಖನಕ್ಕೆ ಅಷ್ಟೆ ಎಂದು ನಾನು ಭಾವಿಸುತ್ತೇನೆ. ಮುಂದಿನ ಲೇಖನದಲ್ಲಿ ನಾನು ಡಾಕರ್ನಲ್ಲಿ ಪುನರಾವರ್ತಿತವಾಗಿ ಡಾಕರ್ ಅನ್ನು ಚಾಲನೆ ಮಾಡುವ ಮತ್ತು ಡೈರೆಕ್ಟರಿಗಳನ್ನು ನೆಸ್ಟೆಡ್ ಕಂಟೈನರ್ಗಳಲ್ಲಿ ಆಳವಾಗಿ ಜೋಡಿಸುವ ಪ್ರಯೋಗಗಳನ್ನು ಹೆಚ್ಚು ವಿವರವಾಗಿ ವಿವರಿಸುತ್ತೇನೆ.
ಪಿಎಸ್ ಈ ಯೋಜನೆಯು ನಿಮಗೆ ಉಪಯುಕ್ತವಾಗಿದ್ದರೆ, ದಯವಿಟ್ಟು GitHub ನಲ್ಲಿ ನಕ್ಷತ್ರವನ್ನು ನೀಡಿ, ಅದನ್ನು ಫೋರ್ಕ್ ಮಾಡಿ ಮತ್ತು ನಿಮ್ಮ ಸ್ನೇಹಿತರಿಗೆ ತಿಳಿಸಿ.
ಸಂಪಾದಿಸು 1 ದೋಷಗಳನ್ನು ಸರಿಪಡಿಸಲಾಗಿದೆ, 2 ವೀಡಿಯೊಗಳ ಮೇಲೆ ಕೇಂದ್ರೀಕರಿಸಲಾಗಿದೆ
ಮೂಲ: www.habr.com