ืื™ืš ื”ืจืฆืชื™ ืืช Docker ื‘ืชื•ืš Docker ื•ืžื” ื™ืฆื ืžื–ื”

ืฉืœื•ื ืœื›ื•ืœื! ื‘ื• ืžืืžืจ ืงื•ื“ื, ื”ื‘ื˜ื—ืชื™ ืœื“ื‘ืจ ืขืœ ื”ืคืขืœืช Docker ื‘-Docker ื•ืขืœ ื”ื”ื™ื‘ื˜ื™ื ื”ืžืขืฉื™ื™ื ืฉืœ ื”ืฉื™ืžื•ืฉ ื‘ืฉื™ืขื•ืจ ื–ื”. ื”ื’ื™ืข ื”ื–ืžืŸ ืœืงื™ื™ื ืืช ื”ื‘ื˜ื—ืชืš. Devopser ืžื ื•ืกื” ื›ื ืจืื” ื™ืชื ื’ื“ ืœื›ืš ืฉืžื™ ืฉืฆืจื™ืš Docker ื‘ืชื•ืš Docker ืคืฉื•ื˜ ืžืขื‘ื™ืจ ืืช ืฉืงืข Docker daemon ืžื”ืžืืจื— ืœืชื•ืš ื”ืงื•ื ื˜ื™ื™ื ืจ ื•ื–ื” ื™ืกืคื™ืง ื‘-99% ืžื”ืžืงืจื™ื. ืื‘ืœ ืืœ ืชืžื”ืจื• ืœื–ืจื•ืง ืขืœื™ ืขื•ื’ื™ื•ืช, ื›ื™ ืื ื—ื ื• ื ื“ื‘ืจ ืขืœ ื”ืคืขืœืช Docker ื‘ืชื•ืš Docker. ืœืคืชืจื•ืŸ ื”ื–ื” ื™ืฉ ื”ืจื‘ื” ื™ื™ืฉื•ืžื™ื ืืคืฉืจื™ื™ื ื•ื”ืžืืžืจ ื”ื–ื” ืขื•ืกืง ื‘ืื—ื“ ืžื”ื, ืื– ื”ืฉื‘ ืœืื—ื•ืจ ื•ื™ื™ืฉืจ ืืช ื”ื™ื“ื™ื™ื ืœืคื ื™ืš.

ืื™ืš ื”ืจืฆืชื™ ืืช Docker ื‘ืชื•ืš Docker ื•ืžื” ื™ืฆื ืžื–ื”

ื”ื—ืœ

ื”ื›ืœ ื”ืชื—ื™ืœ ื‘ืขืจื‘ ื’ืฉื•ื ืฉืœ ืกืคื˜ืžื‘ืจ ื›ืฉื ื™ืงื™ืชื™ ืืช ื”ืžื›ื•ื ื” ืฉืฉื›ืจืชื™ ื‘-$5 ื‘-Digital Ocean, ืฉื”ื•ืงืคืื” ื‘ืฉืœ ื”ืขื•ื‘ื“ื” ืฉื“ื•ืงืจ ืžื™ืœืื” ืืช ื›ืœ 24 ื”ื’ื™ื’ื”-ื‘ื™ื™ื˜ ืฉืœ ืฉื˜ื— ื“ื™ืกืง ืคื ื•ื™ ื‘ืชืžื•ื ื•ืช ื•ื‘ืžื›ื•ืœื•ืช ืฉืœื”. ื”ืื™ืจื•ื ื™ื” ื”ื™ื™ืชื” ืฉื›ืœ ื”ืชืžื•ื ื•ืช ื•ื”ืžื™ื›ืœื™ื ื”ืœืœื• ื”ื™ื• ืืจืขื™ื™ื ื•ื”ื™ื• ื ื—ื•ืฆื™ื ืจืง ื›ื“ื™ ืœื‘ื“ื•ืง ืืช ื”ื‘ื™ืฆื•ืขื™ื ืฉืœ ื”ืืคืœื™ืงืฆื™ื” ืฉืœื™ ื‘ื›ืœ ืคืขื ืฉื’ืจืกื” ื—ื“ืฉื” ืฉืœ ืกืคืจื™ื™ื” ืื• ืžืกื’ืจืช ืฉื•ื—ืจืจื”. ื ื™ืกื™ืชื™ ืœื›ืชื•ื‘ ืกืงืจื™ืคื˜ื™ื ืฉืœ ืžืขื˜ืคืช ื•ืœื”ื’ื“ื™ืจ ืœื•ื— ื–ืžื ื™ื ืฉืœ ืงืจื•ืŸ ืœื ื™ืงื•ื™ ื–ื‘ืœ, ืื‘ืœ ื–ื” ืœื ืขื–ืจ: ื›ืœ ืคืขื ื–ื” ื”ืกืชื™ื™ื ื‘ื”ื›ืจื— ื‘ื›ืš ืฉืฉื˜ื— ื”ื“ื™ืกืง ืฉืœ ื”ืฉืจืช ืฉืœื™ ื ืื›ืœ ื•ื”ืฉืจืช ื ืชืงืข (ื‘ืžืงืจื” ื”ื˜ื•ื‘). ื‘ืฉืœื‘ ืžืกื•ื™ื, ื ืชืงืœืชื™ ื‘ืžืืžืจ ืขืœ ืื™ืš ืœื”ืคืขื™ืœ ืืช Jenkins ื‘ืงื•ื ื˜ื™ื™ื ืจ ื•ื›ื™ืฆื“ ื”ื•ื ื™ื›ื•ืœ ืœื™ืฆื•ืจ ื•ืœืžื—ื•ืง ืฆื™ื ื•ืจื•ืช ื‘ื ื™ื™ื” ื“ืจืš ืฉืงืข Docker daemon ื”ืžื•ืขื‘ืจ ืืœื™ื•. ืื”ื‘ืชื™ ืืช ื”ืจืขื™ื•ืŸ, ืื‘ืœ ื”ื—ืœื˜ืชื™ ืœืœื›ืช ืจื—ื•ืง ื™ื•ืชืจ ื•ืœื ืกื•ืช ืœื”ืชื ืกื•ืช ื‘ื”ืคืขืœืช Docker ื™ืฉื™ืจื•ืช ื‘ืชื•ืš Docker. ื‘ืื•ืชื• ื–ืžืŸ ื ืจืื” ืœื™ ืคืชืจื•ืŸ ื”ื’ื™ื•ื ื™ ืœื—ืœื•ื˜ื™ืŸ ืœื”ื•ืจื™ื“ ืชืžื•ื ื•ืช Docker ื•ืœื™ืฆื•ืจ ืงื•ื ื˜ื™ื™ื ืจื™ื ืœื›ืœ ื”ืืคืœื™ืงืฆื™ื•ืช ืฉื”ื™ื™ืชื™ ืฆืจื™ืš ืœื‘ื“ื™ืงื” ื‘ืชื•ืš ืงื•ื ื˜ื™ื™ื ืจ ืื—ืจ (ื‘ื•ืื• ื ืงืจื ืœื–ื” ืงื•ื ื˜ื™ื™ื ืจ ืกื˜ื™ื™ื™ื ื’). ื”ืจืขื™ื•ืŸ ื”ื™ื” ืœื”ืชื—ื™ืœ ืงื•ื ื˜ื™ื™ื ืจ ืกื˜ื™ื™ื™ื ื’ ืขื ื”ื“ื’ืœ -rm, ืฉืžื•ื—ืง ืื•ื˜ื•ืžื˜ื™ืช ืืช ื›ืœ ื”ืงื•ื ื˜ื™ื™ื ืจ ื•ืืช ื›ืœ ืชื›ื•ืœืชื• ื›ืืฉืจ ื”ื•ื ื ืขืฆืจ. ื”ืชืขืกืงืชื™ ื‘ืชืžื•ื ืช Docker ืž-Docker ืขืฆืžื” (https://hub.docker.com/_/docker), ืื‘ืœ ื”ืชื‘ืจืจ ืฉื–ื” ืžืกื•ืจื‘ืœ ืžื“ื™ ื•ืžืขื•ืœื ืœื ื”ืฆืœื—ืชื™ ืœื’ืจื•ื ืœื–ื” ืœืขื‘ื•ื“ ื›ืžื• ืฉื”ื™ื™ืชื™ ืฆืจื™ืš ืืช ื–ื” ื•ืจืฆื™ืชื™ ืœืœื›ืช ืขื“ ื”ืกื•ืฃ ื‘ืขืฆืžื™.

ืชืจื’ื•ืœ. ืงื•ื ื•ืกื™ื

ื™ืฆืืชื™ ืœื’ืจื•ื ืœืžื™ื›ืœ ืœืขื‘ื•ื“ ื›ืžื• ืฉื”ื™ื™ืชื™ ืฆืจื™ืš ื•ื”ืžืฉื›ืชื™ ื‘ื ื™ืกื•ื™ื™ื ืฉืœื™, ืฉื”ื ื™ื‘ื• ืื™ื ืกืคื•ืจ ื ื™ืฆื ื™ื. ื”ืชื•ืฆืื” ืฉืœ ื”ืขื™ื ื•ื™ ื”ืขืฆืžื™ ืฉืœื™ ื”ื™ื™ืชื” ื”ืืœื’ื•ืจื™ืชื ื”ื‘ื:

  1. ืื ื• ืžืฉื™ืงื™ื ืืช ืžื™ื›ืœ Docker ื‘ืžืฆื‘ ืื™ื ื˜ืจืืงื˜ื™ื‘ื™.

    docker run --privileged -it docker:18.09.6

    ืฉื™ืžื• ืœื‘ ืœื’ืจืกื” ืฉืœ ื”ืžื™ื›ืœ, ืฆืขื“ื• ื™ืžื™ื ื” ืื• ืฉืžืืœื” ื•ื”-DinD ืฉืœื›ื ื”ื•ืคืš ืœื“ืœืขืช. ืœืžืขืฉื”, ื“ื‘ืจื™ื ื ืฉื‘ืจื™ื ืœืขืชื™ื ืงืจื•ื‘ื•ืช ืœืžื“ื™ ื›ืืฉืจ ื’ืจืกื” ื—ื“ืฉื” ืžืฉื•ื—ืจืจืช.
    ืขืœื™ื ื• ืœื”ื™ื›ื ืก ืžื™ื“ ืœืงืœื™ืคื”.

  2. ืื ื—ื ื• ืžื ืกื™ื ืœื‘ืจืจ ืื™ืœื• ืงื•ื ื˜ื™ื™ื ืจื™ื ืคื•ืขืœื™ื (ืชืฉื•ื‘ื”: ืื™ืŸ), ืื‘ืœ ื‘ื•ื ื ืจื™ืฅ ืืช ื”ืคืงื•ื“ื” ื‘ื›ืœ ื–ืืช:

    docker ps

    ืชืชืคืœืื• ืงืฆืช, ืื‘ืœ ืžืกืชื‘ืจ ืฉื“ืžื•ืŸ ื”-Docker ืืคื™ืœื• ืœื ืคื•ืขืœ:

    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 (ื”ื›ืœ ื™ื•ืชืจ ื ืขื™ื ืœืขื‘ื•ื“ ื‘-bash ืžืืฉืจ ื‘-sh):

    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. ืœื—ืฅ ืื ื˜ืจ. ื—ื–ืจื ื• ืœื‘ื•ืฉื”.

ืžืขืชื”, ื ื•ื›ืœ ืœื ืกื•ืช ืœื”ืฉื™ืง ืงื•ื ื˜ื™ื™ื ืจื™ื ืื—ืจื™ื ื‘ืชื•ืš ืงื•ื ื˜ื™ื™ื ืจ Docker ืฉืœื ื•, ืื‘ืœ ืžื” ืื ื ืจืฆื” ืœื”ืฉื™ืง ืงื•ื ื˜ื™ื™ื ืจ Docker ื ื•ืกืฃ ื‘ืชื•ืš ืงื•ื ื˜ื™ื™ื ืจ Docker ืฉืœื ื• ืื• ืฉืžืฉื”ื• ืžืฉืชื‘ืฉ ื•ื”ืžื›ื•ืœื” ืงื•ืจืกืช? ืชืชื—ื™ืœ ืžื”ืชื—ืœื”.

ืžื™ื›ืœ DinD ืžืฉืœื• ื•ื ื™ืกื•ื™ื™ื ื—ื“ืฉื™ื

ืื™ืš ื”ืจืฆืชื™ ืืช Docker ื‘ืชื•ืš Docker ื•ืžื” ื™ืฆื ืžื–ื”
ื›ื“ื™ ืœื”ื™ืžื ืข ืžื—ื–ืจื” ืขืœ ื”ืฉืœื‘ื™ื ืœืขื™ืœ ืฉื•ื‘ ื•ืฉื•ื‘, ื™ืฆืจืชื™ ืžื™ื›ืœ DinD ืžืฉืœื™:

https://github.com/alekslitvinenk/dind

ืคืชืจื•ืŸ DinD ื”ืขื•ื‘ื“ ื ืชืŸ ืœื™ ืืช ื”ื™ื›ื•ืœืช ืœื”ืคืขื™ืœ ืืช Docker ื‘ืชื•ืš Docker ื‘ืื•ืคืŸ ืจืงื•ืจืกื™ื‘ื™ ื•ืœืขืฉื•ืช ื ื™ืกื•ื™ื™ื ื”ืจืคืชืงื ื™ื™ื ื™ื•ืชืจ.
ืื ื™ ื”ื•ืœืš ืœืชืืจ ื ื™ืกื•ื™ ืื—ื“ ื›ื–ื” (ืžื•ืฆืœื—) ื‘ื”ืคืขืœืช MySQL ื•-Nodejs ืขื›ืฉื™ื•.
ื—ืกืจื™ ื”ืกื‘ืœื ื•ืช ื‘ื™ื•ืชืจ ื™ื›ื•ืœื™ื ืœืจืื•ืช ืื™ืš ื”ื™ื” ื›ืืŸ

P โ€šะ  ยฐ ะ ั”, ะ ะ…ะ  ยฐ ะก โ€ก ะ ะ…ะ ฮผะ ั˜:

  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!"

ื‘ืžืงืจื” ืฉืœื™, ื”ื ื™ืกื•ื™ ืขื ืžื™ื›ืœื™ Docker ืžืงื•ื ื ื™ื ื”ืชื‘ืจืจ ื›ื—ื™ื•ื‘ื™ ืœืžื“ื™ ื•ืื ื™ ืืžืฉื™ืš ืœืคืชื— ืืช ื”ืคืจื•ื™ื™ืงื˜ ื•ืœื”ืฉืชืžืฉ ื‘ื• ืœื‘ื™ืฆื•ืข. ื ืจืื” ืœื™ ืฉื–ื”ื• ืคืชืจื•ืŸ ืงืœ ื‘ื”ืจื‘ื” ืžืงื•ื‘ืจื ื˜ืก ื•ื’'ื ืงื™ื ืก X. ืื‘ืœ ื–ื• ื“ืขืชื™ ื”ืกื•ื‘ื™ื™ืงื˜ื™ื‘ื™ืช.

ืื ื™ ื—ื•ืฉื‘ ืฉื–ื” ื”ื›ืœ ืœืžืืžืจ ืฉืœ ื”ื™ื•ื. ื‘ืžืืžืจ ื”ื‘ื ืืชืืจ ื‘ื™ืชืจ ืคื™ืจื•ื˜ ื ื™ืกื•ื™ื™ื ื‘ื”ืคืขืœืช Docker ื‘ืื•ืคืŸ ืจืงื•ืจืกื™ื‘ื™ ื‘-Docker ื•ื”ืจื›ื‘ืช ืกืคืจื™ื•ืช ืขืžื•ืง ืœืชื•ืš ืงื•ื ื˜ื™ื™ื ืจื™ื ืžืงื•ื ื ื™ื.

ื .ื‘. ืื ืืชื” ืžื•ืฆื ืืช ื”ืคืจื•ื™ืงื˜ ื”ื–ื” ืฉื™ืžื•ืฉื™, ื‘ื‘ืงืฉื” ืชืŸ ืœื• ื›ื•ื›ื‘ ื‘-GitHub, ืขื–ื•ื‘ ืื•ืชื• ื•ืกืคืจ ืœื—ื‘ืจื™ื ืฉืœืš.

Edit1 ืชื•ืงืŸ ืฉื’ื™ืื•ืช, ื”ืชืžืงื“ ื‘-2 ืกืจื˜ื•ื ื™ื

ืžืงื•ืจ: www.habr.com

ื”ื•ืกืคืช ืชื’ื•ื‘ื”