මම Docker එක ඇතුලට Docker දුවපු හැටි සහ ඒකෙන් ආපු දේ

ආයුබෝවන් සියල්ලටම! ඔහුගේ තුළ පෙර ලිපිය, Docker හි Docker ධාවනය කිරීම සහ මෙම පාඩම භාවිතා කිරීමේ ප්‍රායෝගික පැති ගැන කතා කිරීමට මම පොරොන්දු වුනා. ඔබේ පොරොන්දුව ඉටු කිරීමට කාලයයි. පළපුරුදු devopser කෙනෙක් සමහරවිට Docker එක ඇතුලේ Docker අවශ්‍ය අය Docker daemon socket එක ධාරකයේ සිට බහාලුමට යොමු කරනවාට විරුද්ධ වනු ඇති අතර මෙය 99% අවස්ථා වලදී ප්‍රමාණවත් වේ. නමුත් මට කුකීස් විසි කිරීමට ඉක්මන් නොවන්න, මන්ද අපි ඩොකර් තුළ ඩොකර් ධාවනය කිරීම ගැන කතා කරමු. මෙම විසඳුමෙහි බොහෝ යෙදුම් ඇති අතර මෙම ලිපිය ඉන් එකක් ගැන වේ, එබැවින් ඔබ ඉදිරියෙහි වාඩි වී ඔබේ දෑත් කෙළින් කරන්න.

මම Docker එක ඇතුලට Docker දුවපු හැටි සහ ඒකෙන් ආපු දේ

නිවස

මේ සියල්ල ආරම්භ වූයේ වර්ෂා සහිත සැප්තැම්බර සැන්දෑවක, මම ඩිජිටල් සාගරයේ ඩොලර් 5 කට කුලියට ගත් යන්ත්‍රය පිරිසිදු කරන විට, ඩොකර් එහි පින්තූර සහ බහාලුම්වලින් ලබා ගත හැකි ගිගාබයිට් 24 ක තැටි අවකාශය පුරවා තිබීම හේතුවෙන් එය ශීත කළ බැවිනි. උත්ප්‍රාසය නම්, මෙම සියලු පින්තූර සහ බහාලුම් තාවකාලික වූ අතර පුස්තකාලයක හෝ රාමුවක නව අනුවාදයක් නිකුත් කරන සෑම අවස්ථාවකම මගේ යෙදුමේ ක්‍රියාකාරිත්වය පරීක්ෂා කිරීමට පමණක් අවශ්‍ය විය. මම ෂෙල් ස්ක්‍රිප්ට් ලිවීමට සහ කුණු කසළ පිරිසිදු කිරීමට ක්‍රෝන් කාලසටහනක් සැකසීමට උත්සාහ කළ නමුත් එය උදව් කළේ නැත: සෑම අවස්ථාවකම එය අනිවාර්යයෙන්ම අවසන් වූයේ මගේ සේවාදායකයේ තැටි ඉඩ කා දමා සේවාදායකය එල්ලීමෙනි (හොඳම නම්). යම් අවස්ථාවක දී, කන්ටේනරයක ජෙන්කින්ස් ධාවනය කරන්නේ කෙසේද සහ එයට යොමු කරන ලද ඩොකර් ඩීමන් සොකට් එකක් හරහා ගොඩනඟන නල මාර්ග නිර්මාණය කිරීම සහ මකා දැමිය හැකි ආකාරය පිළිබඳ ලිපියක් මට හමු විය. මම අදහසට කැමතියි, නමුත් මම තවත් ඉදිරියට ගොස් Docker තුළ සෘජුවම Docker ධාවනය කිරීම අත්හදා බැලීමට තීරණය කළෙමි. එකල මට පෙනුනේ Docker images බාගත කර වෙනත් කන්ටේනරයක් තුළ පරීක්ෂා කිරීමට අවශ්‍ය සියලුම යෙදුම් සඳහා බහාලුම් නිර්මාණය කිරීම සම්පූර්ණයෙන්ම තාර්කික විසඳුමක් ලෙසිනි (අපි එය වේදිකාගත බහාලුමක් ලෙස කියමු). අදහස වූයේ -rm ධජය සහිත වේදිකාගත බහාලුමක් ආරම්භ කිරීමයි, එය නතර කළ විට සම්පූර්ණ බහාලුම සහ එහි සියලුම අන්තර්ගතය ස්වයංක්‍රීයව මකා දමයි. මම ඩොකර් එකෙන්ම ඩොකර් රූපය ටින්කර් කළා (https://hub.docker.com/_/docker), නමුත් එය ඉතා අපහසු දෙයක් බවට පත් වූ අතර මට එය අවශ්‍ය ආකාරයට ක්‍රියාත්මක කිරීමට කිසි විටෙකත් සමත් නොවූ අතර මට අවශ්‍ය වූයේ තනිවම යාමටයි.

පුරුදු කරන්න. කේතු

මට අවශ්‍ය ආකාරයට කන්ටේනරය ක්‍රියාත්මක කිරීමට මම සූදානම් වූ අතර මගේ අත්හදා බැලීම් දිගටම කරගෙන ගිය අතර, එහි ප්‍රතිඵලයක් ලෙස අංකුර සංඛ්‍යාවක් ඇති විය. මගේ ස්වයං වධහිංසාවේ ප්‍රතිඵලය වූයේ පහත ඇල්ගොරිතමයයි.

  1. අපි ඩොකර් කන්ටේනරය අන්තර්ක්‍රියාකාරී ආකාරයෙන් දියත් කරමු.

    docker run --privileged -it docker:18.09.6

    බහාලුම් අනුවාදය වෙත අවධානය යොමු කරන්න, දකුණට හෝ වමට පියවර ගන්න, එවිට ඔබේ DinD වට්ටක්කා බවට පත්වේ. ඇත්ත වශයෙන්ම, නව අනුවාදයක් නිකුත් කරන විට දේවල් බොහෝ විට කැඩී යයි.
    අපි වහාම කවචයට ඇතුළු විය යුතුයි.

  2. අපි ක්‍රියාත්මක වන්නේ කුමන බහාලුම්දැයි සොයා බැලීමට උත්සාහ කරන්නෙමු (පිළිතුර: කිසිවක් නැත), නමුත් අපි කෙසේ හෝ විධානය ක්‍රියාත්මක කරමු:

    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

  3. අපි එය අප විසින්ම ධාවනය කරමු:

    dockerd &

    තවත් අප්රසන්න පුදුමයක්:

    failed to start daemon: Error initializing network controller: error obtaining controller instance: failed 
    to create NAT chain DOCKER: Iptables not found

  4. iptables සහ bash පැකේජ ස්ථාපනය කරන්න (හැම දෙයක්ම sh වලට වඩා bash වල වැඩ කිරීමට ප්‍රසන්න වේ):

    apk add --no-cache iptables bash

  5. අපි bash දියත් කරමු. අන්තිමට අපි ආපහු සුපුරුදු කටුවට ආවා

  6. අපි නැවත Docker දියත් කිරීමට උත්සාහ කරමු:

    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

  7. Enter ඔබන්න. අපි ආපහු බැෂ් එකට ආවා.

මෙතැන් සිට, අපට අපගේ ඩොකර් කන්ටේනරය තුළ වෙනත් බහාලුම් දියත් කිරීමට උත්සාහ කළ හැකිය, නමුත් අපට අපගේ ඩොකර් කන්ටේනරය තුළ තවත් ඩොකර් කන්ටේනරයක් දියත් කිරීමට අවශ්‍ය නම් හෝ යමක් වැරදී කන්ටේනරය කඩා වැටුණහොත් කුමක් කළ යුතුද? සියල්ල නැවත ආරම්භ කරන්න.

DinD කන්ටේනරය සහ නව අත්හදා බැලීම්

මම Docker එක ඇතුලට Docker දුවපු හැටි සහ ඒකෙන් ආපු දේ
ඉහත පියවර නැවත නැවතත් නොකිරීමට, මම මගේම DinD බහාලුමක් නිර්මාණය කළෙමි:

https://github.com/alekslitvinenk/dind

ක්‍රියාකාරී DinD විසඳුම මට Docker එක ප්‍රත්‍යාවර්තීව Docker එක තුල ධාවනය කිරීමට සහ තවත් වික්‍රමාන්විත අත්හදා බැලීම් කිරීමට හැකියාව ලබා දුන්නා.
මම දැන් MySQL සහ Nodejs ධාවනය කිරීම සම්බන්ධයෙන් එවැනි (සාර්ථක) අත්හදා බැලීමක් විස්තර කිරීමට යන්නේ.
නොඉවසිලිමත්ම අයට පේනවා මෙතන කොහොමද කියලා

එබැවින්, ආරම්භ කරමු:

  1. අපි අන්තර් ක්රියාකාරී ආකාරයෙන් DinD දියත් කරමු. DinD හි මෙම අනුවාදයේ, අපගේ ළමා බහාලුම් භාවිතා කළ හැකි සියලුම වරායන් අපි අතින් සිතියම්ගත කිරීමට අවශ්‍යයි (මම දැනටමත් මේ පිළිබඳව වැඩ කරමින් සිටිමි)

    docker run --privileged -it 
    -p 80:8080 
    -p 3306:3306 
    alekslitvinenk/dind

    අපි වහාම ළමා බහාලුම් දියත් කිරීම ආරම්භ කළ හැකි ස්ථානයට ඇතුළු වෙමු.

  2. MySQL දියත් කරන්න:

    docker run --name mysql -e MYSQL_ROOT_PASSWORD=strongpassword -d -p 3306:3306 mysql

  3. අපි දත්ත සමුදායට දේශීයව සම්බන්ධ වන ආකාරයටම සම්බන්ධ කරමු. සෑම දෙයක්ම ක්‍රියාත්මක වන බවට වග බලා ගනිමු.

  4. දෙවන කන්ටේනරය දියත් කරන්න:

    docker run -d --rm -p 8080:8080 alekslitvinenk/hello-world-nodejs-server

    වරාය සිතියම්කරණය හරියටම වනු ඇති බව කරුණාවෙන් සලකන්න 8080:8080, අපි දැනටමත් පෝට් 80 ධාරකයේ සිට මව් කන්ටේනරය දක්වා වරාය 8080 දක්වා සිතියම්ගත කර ඇති බැවින්.

  5. අපි බ්‍රවුසරයේ localhost වෙත යමු, සේවාදායකය “Hello World!” ප්‍රතිචාර දක්වන බවට වග බලා ගන්න.

මගේ නඩුවේදී, කැදලි ඩොකර් බහාලුම් සමඟ අත්හදා බැලීම තරමක් ධනාත්මක වූ අතර මම ව්‍යාපෘතිය දිගටම සංවර්ධනය කර එය වේදිකාගත කිරීම සඳහා භාවිතා කරමි. මෙය Kubernetes සහ Jenkins X වලට වඩා සැහැල්ලු විසඳුමක් බව මට පෙනේ. නමුත් මෙය මගේ ආත්මීය මතයයි.

මම හිතන්නේ අද ලිපියට එච්චරයි. මීළඟ ලිපියෙන් මම Docker හි ප්‍රත්‍යාවර්තීව Docker ධාවනය කිරීම සහ ඩිරෙක්ටරි ගැඹුරින් කූඩු සහිත බහාලුම් තුළට සවි කිරීම පිළිබඳ වඩාත් සවිස්තරාත්මක අත්හදා බැලීම් විස්තර කරමි.

ප්රාදේශීය සභා ඔබට මෙම ව්‍යාපෘතිය ප්‍රයෝජනවත් යැයි හැඟේ නම්, කරුණාකර එයට GitHub හි තරුවක් ලබා දෙන්න, එය දෙබල කර ඔබේ මිතුරන්ට කියන්න.

සංස්කරණය 1 නිවැරදි කරන ලද දෝෂ, වීඩියෝ 2කට අවධානය යොමු කර ඇත

මූලාශ්රය: www.habr.com

අදහස් එක් කරන්න