Compose: рдЪрд▓рд╛рдиреЗ рдХреЗ рдмрд╛рдж рдПрдХ рдХрдорд╛рдВрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░реЗрдВ

рдХреЛ рдирд┐рд░реНрдорд┐рдд 5 рдЕрдЧре░ 2015  ┬╖  131рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: docker/compose

рдирдорд╕реНрддреЗ,

рдпрд╣ YAML рдореЗрдВ "onrun" рдЬреИрд╕рд╛ рдХреБрдЫ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдорджрджрдЧрд╛рд░ рд╣реЛрдЧрд╛ рддрд╛рдХрд┐ рд░рди рдХреЗ рдмрд╛рдж рдХрдорд╛рдВрдб рдЪрд▓рд╛рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛред Https://github.com/docker/docker/issues/8860 рдХреЗ рд╕рдорд╛рди

mongodb:
    image: mongo:3.0.2
    hostname: myhostname
    domainname: domain.lan
    volumes:
        - /data/mongodb:/data
    ports:
        - "27017:27017" 
    onrun:
        - mongodump --host db2dump.domain.lan --port 27017 --out /data/mongodb/dumps/latest
        - mongorestore -d database /data/mongodb/dumps/latest/database

рдореЛрдВрдЧреЛрдбрдм рд╢реБрд░реВ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж, рдпрд╣ db2dump.domain.lan рдХреЛ рдбрдВрдк рдХрд░реЗрдЧрд╛ рдФрд░ рдЗрд╕реЗ рдкреБрдирд░реНрд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдЧрд╛ред

рдЬрдм рдореИрдВ рд░реБрдХ рдЬрд╛рдКрдВрдЧрд╛ рдФрд░ рдлрд┐рд░ рдХрдВрдЯреЗрдирд░ рд╢реБрд░реВ рдХрд░ рджреВрдВрдЧрд╛, рддреЛ рдмреЗрдХрд╛рд░ рднрд╛рдЧ рдХреЛ рд╕рдВрд░рдХреНрд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЪрд╛рд▓реВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

EDIT 15 рдЬреВрди 2020

5 рд╕рд╛рд▓ рдмрд╛рдж, рд╡рд┐рд╢рд┐рд╖реНрдЯрддрд╛рдУрдВ рдХреЛ "рдорд╛рдирдХреАрдХреГрдд" рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рд▓рд┐рдЦреЗрдВ,
рдХреГрдкрдпрд╛ https://github.com/compose-spec/compose-spec/issues/84 рджреЗрдЦреЗрдВ

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рдЗрд╕рд▓рд┐рдП, рдореЗрд░реЗ рдбреЙрдХрдЯрд░ рдХреЛ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк рдореБрдЭреЗ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдпрд╛ рдореЗрдХрдлрд╛рдЗрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджреЗрдВрдЧреЗред рддреЛ рдХрдореНрдкреЛрдЬ рдХреНрдпреЛрдВ рдмрдирд╛рдпрд╛ рдЧрдпрд╛
? рд╣рдо рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд╕рд╛рде рдХрдВрдЯреЗрдирд░, рд╕реНрдХреЗрд▓ рдЖрджрд┐ рдХрд╛ рдкреНрд░рдмрдВрдзрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ || рдХрд╛рдордЪреЛрд░

рдареАрдХ рд╣реИ, рдореИрдВ рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдХреЛ рд▓реЗрддрд╛ рд╣реВрдВ, рдпрд╣ рд╡рд╣реА рд╣реИ рдЬреЛ рдореИрдВрдиреЗ рд╕реАрдЖрдИ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдЕрдкрдиреЗ рдЖрд╡реЗрджрди рдкрд░реАрдХреНрд╖рдг рд╡рд╛рддрд╛рд╡рд░рдг рдХреЛ рддреИрдирд╛рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдерд╛ред

rabbitmq:
    image: rabbitmq:3.5.1-management
    environment:
        RABBITMQ_NODENAME: rabbit
    hostname: rabbitmq
    domainname: domain.lan
    volumes:
        - /data/rabbitmq/db:/var/lib/rabbitmq
    ports:
        - "5672:5672" 
        - "15672:15672"
        - "25672:25672"
        - "4369:4369"

mongodb:
    image: mongo:3.0.2
    hostname: mongo
    domainname: domain.lan
    volumes:
        - /data/mongodb:/data
    ports:
        - "27017:27017" 

appmaster:
    image: appmaster
    hostname: master
    domainname: domain.lan
    environment:
        ...
    ports:
        - "80:80" 
        - "8080:8080"
    links:
        - mongodb
        - rabbitmq

celery:
    image: celery
    hostname: celery
    domainname: domain.lan
    environment:
        ...
    links:
        - rabbitmq

рдХрдВрдЯреЗрдирд░ рд╢реБрд░реВ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж, рдореБрдЭреЗ рдордирдЧреЛрдбрдм рдХрд╛ рдкреНрд░рд╛рд╡рдзрд╛рди рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЦрд░рдЧреЛрд╢реЛрдВ рдореЗрдВ рдХрддрд╛рд░ рдФрд░ рдЦрд╛рддреЗ рдХрд╛ рдкреНрд░рдмрдВрдзрди рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП

рдЖрдЬ рдореИрдВ рдЬреЛ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рд╡рд╣ рдПрдХ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╣реИ:

#!/bin/bash
PROJECT=appmaster
docker-compose -f appmaster.yml -p appmaster up -d
docker exec appmaster_rabbitmq_1 rabbitmqctl add_user user password
docker exec appmaster_rabbitmq_1 rabbitmqctl add_vhost rabbitmq.domain.lan
docker exec appmaster_rabbitmq_1 rabbitmqctl set_permissions -p rabbitmq.domain.lan password ".*" ".*" ".*"
docker exec appmaster_mongodb_1 mongodump --host mongo-prd.domain.lan --port 27017 --out /data/mongodb/dumps/latest
docker exec appmaster_mongodb_1 mongorestore -d database /data/mongodb/dumps/latest/database

onrun рдирд┐рд░реНрджреЗрд╢ рдХреЗ рд╕рд╛рде рдореИрдВ рд╕реАрдзреЗ docker-compose -f appmaster.yml -p appmaster up -d рдмрдирд╛ рд╕рдХрддрд╛ рд╣реВрдВ
рдФрд░ yml рдлрд╝рд╛рдЗрд▓ рдЕрдзрд┐рдХ рдкрдардиреАрдп рд╣реЛ рдЬрд╛рддреА рд╣реИ

rabbitmq:
    ...
    onrun:
        - rabbitmqctl add_user user password
        - rabbitmqctl add_vhost rabbitmq.domain.lan
        - rabbitmqctl set_permissions -p rabbitmq.domain.lan password ".*" ".*" ".*"

mongodb:
    ...
    onrun:
        - mongodump --host mongo-prd.domain.lan --port 27017 --out /data/mongodb/dumps/latest
        - mongorestore -d database /data/mongodb/dumps/latest/database

рд╕рднреА 131 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпреЗ рдбреЙрдХрд░рдлрд╛рдЗрд▓ рдореЗрдВ рдХрджрдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП

FROM mongo:3.0.2
ADD data/mongodb/dumps/latest /data/mongodb/dumps/latest
RUN mongorestore -d database /data/mongodb/dumps/latest/database

рдЗрд╕ рддрд░рд╣ рд╕реЗ рдЬрдм рдЖрдк рдкреБрдирд░реНрдирд┐рд░реНрдорд╛рдг рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдЖрдк рдЗрд╕реЗ рдХреИрд╢ рднреА рдХрд░рд╡рд╛рддреЗ рд╣реИрдВред

рд╕рд╛рднрд╛рд░ @dnephin
рдмреЗрд╢рдХ рдореИрдВ рдПрдХ рдбреЙрдХрдлрд╝рд┐рд▓ рдмрдирд╛ рд╕рдХрддрд╛ рд╣реВрдВ рдФрд░ рдЗрд╕реЗ рдЪрд┐рддреНрд░реЛрдВ рдХреЗ рдмрдЬрд╛рдп рдмрд┐рд▓реНрдб рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ, рдпрд╛ рдореИрдВ рдбреЙрдХ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВред
MongoDB рд╕рд┐рд░реНрдл рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ, рдЖрдк рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдХреЛ mysql рдФрд░ рдЦрд╛рддрд╛ рдирд┐рд░реНрдорд╛рдг рдХреЗ рд╕рд╛рде, рдпрд╛ rabbitmq рдФрд░ рдХрддрд╛рд░ рдЖрджрд┐ рдХреЗ рд╕рд╛рде рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред

onrun рдСрд░реНрдХреЗрд╕реНрдЯреНрд░реЗрд╢рди рдкрд░ рд▓рдЪреАрд▓реЗрдкрди рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛, рдХрдВрдкреЛрдЬрд╝ рдСрдирд░реВрди рд╕реВрдЪреА рдХреЛ рдкрдврд╝реЗрдЧрд╛ рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рдЖрдЗрдЯрдо рдкрд░ docker exec ред

рдореБрджреНрджрд╛ рдпрд╣ рд╣реИ рдХрд┐ docker exec docker-compose.yml рдореЗрдВ рдХрдорд╛рдВрдбреНрд╕ рдбрд╛рд▓рдирд╛ рдЕрдирд╛рд╡рд╢реНрдпрдХ рд╣реИ рдЬрдм рдЖрдк рдпрд╛ рддреЛ рдбреЙрдХрдлрд╝рд┐рд▓реЗ рдореЗрдВ рдпрд╛ рдХрдВрдЯреЗрдирд░ рдХреЗ рд╕реНрдЯрд╛рд░реНрдЯрдЕрдк рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдпреЗ рджреЛрдиреЛрдВ рдЖрдкрдХреЗ рдХрдВрдЯреЗрдирд░ рдХреЛ рдФрд░ рднреА рдЙрдкрдпреЛрдЧреА рдмрдирд╛ рджреЗрдВрдЧреЗ рдЬрдм рдиреЛрдЯ рдирд╣реАрдВ рд╣реЛрдЧрд╛ рдХрдореНрдкреЛрдЬ рдХреЗ рд╕рд╛рде рдЪрд▓рд╛рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИред

рд╡реИрдХрд▓реНрдкрд┐рдХ рд░реВрдк рд╕реЗ, рдЕрдкрдиреЗ рдРрдк рдХреЛ рд╢реЗрд▓ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдпрд╛ рдореЗрдХрдлрд╛рдЗрд▓ рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХрд░реЗрдВ рдЬреЛ рдЙрдкрдпреБрдХреНрдд docker рдФрд░ docker-compose рдХрдорд╛рдВрдб рдЪрд▓рд╛рддрд╛ рд╣реИред

рдЬрдм рддрдХ рдпрд╣ рдЙрди рджреЛрдиреЛрдВ рдореЗрдВ рд╕реЗ рдХреЛрдИ рднреА рдорд╣рддреНрд╡рдкреВрд░реНрдг рдХрд╛рд░реНрдп рдирд╣реАрдВ рдХрд░реЗрдЧрд╛, рддрдм рддрдХ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд╛рдпрдХ рдирд╣реАрдВ рд╣реИ, рдФрд░ рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдпрд╣ рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдорд╛рдорд▓реЛрдВ рдХреЗ рд▓рд┐рдП рд╣реИред

рдЗрд╕рд▓рд┐рдП, рдореЗрд░реЗ рдбреЙрдХрдЯрд░ рдХреЛ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк рдореБрдЭреЗ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдпрд╛ рдореЗрдХрдлрд╛рдЗрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджреЗрдВрдЧреЗред рддреЛ рдХрдореНрдкреЛрдЬ рдХреНрдпреЛрдВ рдмрдирд╛рдпрд╛ рдЧрдпрд╛
? рд╣рдо рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд╕рд╛рде рдХрдВрдЯреЗрдирд░, рд╕реНрдХреЗрд▓ рдЖрджрд┐ рдХрд╛ рдкреНрд░рдмрдВрдзрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ || рдХрд╛рдордЪреЛрд░

рдареАрдХ рд╣реИ, рдореИрдВ рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдХреЛ рд▓реЗрддрд╛ рд╣реВрдВ, рдпрд╣ рд╡рд╣реА рд╣реИ рдЬреЛ рдореИрдВрдиреЗ рд╕реАрдЖрдИ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдЕрдкрдиреЗ рдЖрд╡реЗрджрди рдкрд░реАрдХреНрд╖рдг рд╡рд╛рддрд╛рд╡рд░рдг рдХреЛ рддреИрдирд╛рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдерд╛ред

rabbitmq:
    image: rabbitmq:3.5.1-management
    environment:
        RABBITMQ_NODENAME: rabbit
    hostname: rabbitmq
    domainname: domain.lan
    volumes:
        - /data/rabbitmq/db:/var/lib/rabbitmq
    ports:
        - "5672:5672" 
        - "15672:15672"
        - "25672:25672"
        - "4369:4369"

mongodb:
    image: mongo:3.0.2
    hostname: mongo
    domainname: domain.lan
    volumes:
        - /data/mongodb:/data
    ports:
        - "27017:27017" 

appmaster:
    image: appmaster
    hostname: master
    domainname: domain.lan
    environment:
        ...
    ports:
        - "80:80" 
        - "8080:8080"
    links:
        - mongodb
        - rabbitmq

celery:
    image: celery
    hostname: celery
    domainname: domain.lan
    environment:
        ...
    links:
        - rabbitmq

рдХрдВрдЯреЗрдирд░ рд╢реБрд░реВ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж, рдореБрдЭреЗ рдордирдЧреЛрдбрдм рдХрд╛ рдкреНрд░рд╛рд╡рдзрд╛рди рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЦрд░рдЧреЛрд╢реЛрдВ рдореЗрдВ рдХрддрд╛рд░ рдФрд░ рдЦрд╛рддреЗ рдХрд╛ рдкреНрд░рдмрдВрдзрди рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП

рдЖрдЬ рдореИрдВ рдЬреЛ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рд╡рд╣ рдПрдХ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╣реИ:

#!/bin/bash
PROJECT=appmaster
docker-compose -f appmaster.yml -p appmaster up -d
docker exec appmaster_rabbitmq_1 rabbitmqctl add_user user password
docker exec appmaster_rabbitmq_1 rabbitmqctl add_vhost rabbitmq.domain.lan
docker exec appmaster_rabbitmq_1 rabbitmqctl set_permissions -p rabbitmq.domain.lan password ".*" ".*" ".*"
docker exec appmaster_mongodb_1 mongodump --host mongo-prd.domain.lan --port 27017 --out /data/mongodb/dumps/latest
docker exec appmaster_mongodb_1 mongorestore -d database /data/mongodb/dumps/latest/database

onrun рдирд┐рд░реНрджреЗрд╢ рдХреЗ рд╕рд╛рде рдореИрдВ рд╕реАрдзреЗ docker-compose -f appmaster.yml -p appmaster up -d рдмрдирд╛ рд╕рдХрддрд╛ рд╣реВрдВ
рдФрд░ yml рдлрд╝рд╛рдЗрд▓ рдЕрдзрд┐рдХ рдкрдардиреАрдп рд╣реЛ рдЬрд╛рддреА рд╣реИ

rabbitmq:
    ...
    onrun:
        - rabbitmqctl add_user user password
        - rabbitmqctl add_vhost rabbitmq.domain.lan
        - rabbitmqctl set_permissions -p rabbitmq.domain.lan password ".*" ".*" ".*"

mongodb:
    ...
    onrun:
        - mongodump --host mongo-prd.domain.lan --port 27017 --out /data/mongodb/dumps/latest
        - mongorestore -d database /data/mongodb/dumps/latest/database

рдпрд╣ рдмрд▓реНрдХрд┐ рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛ рдФрд░ рдПрдХ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдХреЛ рд╣рд▓ рдХрд░рддрд╛ рд╣реИред

: +1:

рдпрд╣ рдПрдХ рд╕реАрдбреА рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдХреЗ рд╣рд┐рд╕реНрд╕реЗ рдХреЗ рд░реВрдк рдореЗрдВ gated рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рд▓рд┐рдП docker-compose рдЕрдзрд┐рдХ рд╡реНрдпрд╡рд╣рд╛рд░реНрдп рдмрдирд╛ рджреЗрдЧрд╛

: +1:

рдпрд╣ # 877, # 1341, # 468 (рдФрд░ рдХреБрдЫ рдЕрдиреНрдп) рдХреА рдирдХрд▓ рд╣реИред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХрд╛ рд╕рд╣реА рддрд░реАрдХрд╛ # 1510 рд╣реИ рдФрд░ рдЬрдм рдЖрдк рдЬрд┐рд╕ рдЗрд╡реЗрдВрдЯ рдХреЛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдЙрд╕реЗ рд╣рд┐рдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╛рд╣рд░реА рдЙрдкрдХрд░рдгреЛрдВ рдХреЛ рд╕рдВрдЪрд╛рд▓рди рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВред

рдирдХрд▓ рдХреЗ рд░реВрдк рдореЗрдВ рдмрдВрдж рдХрд░рдирд╛

рдпрд╣ рдмрд╣реБрдд рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛ред рдореБрдЭреЗ рд╕рдордЭ рдореЗрдВ рдирд╣реАрдВ рдЖрддрд╛ рдХрд┐ "рдУрд╣ рдЖрдк рдЗрд╕реЗ рдПрдХ рдмреИрд╢ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд╕рд╛рде рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ"ред рдмреЗрд╢рдХ рд╣рдо рдЗрд╕реЗ рдмреИрд╢ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд╕рд╛рде рдХрд░ рд╕рдХрддреЗ рдереЗред рдореИрдВ рд╡рд╣ рд╕рдм рдХреБрдЫ рднреА рдХрд░ рд╕рдХрддрд╛ рдерд╛ рдЬреЛ рдбреЙрдХрд░-рд░рдЪрдирд╛ рдмреИрд╢ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд╕рд╛рде рдХрд░рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдореБрджреНрджрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдПрдХ рдПрдХрд▓ YAML рдлрд╛рдЗрд▓ рд╣реИ рдЬреЛ рдЖрдкрдХреЗ рдкрд░реАрдХреНрд╖рдг рд╡рд╛рддрд╛рд╡рд░рдг рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рддреА рд╣реИ рдФрд░ рдЗрд╕реЗ рдПрдХ рд╕рд░рд▓ docker-compose up рдХрдорд╛рдВрдб рдХреЗ рд╕рд╛рде рдорд┐рд▓рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдпрд╣ _everything_ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдореНрдкреЛрдЬрд╝ рдХрд╛ рд░рд┐рдорд┐рдЯ рдирд╣реАрдВ рд╣реИред рдЗрд╕реЗ рд╢реЗрд▓ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдпрд╛ рдореЗрдХрдлрд╛рдЗрд▓ рдХреЗ рд╕рд╛рде рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ - рд╣рдореЗрдВ рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдФрд░ рдмреНрд▓реЛрдЯ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рдмреАрдЪ рд╕рдВрддреБрд▓рди рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд░реЗрдЦрд╛ рдЦреАрдВрдЪрдиреА рд╣реЛрдЧреАред

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдХрдВрдкреЛрдЬрд╝ рдлрд╝рд╛рдЗрд▓ рдХреА рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╕рдВрдкрддреНрддрд┐ рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рдореИрдХ, рд▓рд┐рдирдХреНрд╕ рдФрд░ рд╡рд┐рдВрдбреЛрдЬ рдорд╢реАрдиреЛрдВ - рдорд╢реАрдиреЛрдВ рдХреЗ рдкрд╛рд░ рдХрд╛рдлреА рдкреЛрд░реНрдЯреЗрдмрд▓ рд╣реИред рдпрджрд┐ рд╣рдо рдХрдВрдкреЛрдЬрд╝ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд▓реЛрдЧреЛрдВ рдХреЛ рдордирдорд╛рдиреЗ рдврдВрдЧ рд╕реЗ рд╢реЗрд▓ рдХрдорд╛рдВрдб рдбрд╛рд▓рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЙрдиреНрд╣реЗрдВ рдмрд╣реБрдд рдХрдо рдкреЛрд░реНрдЯреЗрдмрд▓ рдорд┐рд▓рдиреЗ рд╡рд╛рд▓рд╛ рд╣реИред

@рдЖрдирдВрдж рдирд┐рд╖реНрдкрдХреНрд╖ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдХ docker exec рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдиреЗ рдХреЗ рдирд╛рддреЗ рдПрдХреНрд╕-рдкреНрд▓реЗрдЯ рдЕрдкреВрд░реНрдгрддрд╛ рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред

рдорд╛рдлреА - рдореИрдВрдиреЗ рд╣реЛрд╕реНрдЯ рдорд╢реАрди рдкрд░ рдХрдорд╛рдВрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдЧрд▓рдд рдмрддрд╛рдпрд╛ рд╣реИред рдлрд┐рд░ рднреА, рдореЗрд░рд╛ рдкрд╣рд▓рд╛ рдмрд┐рдВрджреБ рдЦрдбрд╝рд╛ рд╣реИред

рдореБрдЭреЗ рдЖрдкрдХреА рдмрд╛рдд рд╕рдордЭ рдореЗрдВ рдЖрддреА рд╣реИ @aanand рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рдЧреБрдВрдЬрд╛рдЗрд╢ рд╕реЗ рдмрд╛рд╣рд░ рдирд╣реАрдВ рд▓рдЧрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА docker-compose рдмрд╣реБрдд рдХреБрдЫ рдРрд╕рд╛ рд╣реА рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдирд┐рдпрдорд┐рдд docker рдЗрдВрдЬрди рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХрд░рддрд╛ рд╣реИ, рдЬреИрд╕реЗ command , expose , ports , build , рдЖрджрд┐ exec рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рд╕реЗ docker-compose рдЕрдзрд┐рдХ рд╢рдХреНрддрд┐ рдЬреБрдбрд╝ рдЬрд╛рдПрдЧреА, рдЬрд┐рд╕рд╕реЗ рдпрд╣ рд╕реЗрдЯрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд╣реА рд╕реНрдЯреЙрдк рд╢реЙрдк рдмрди рдЬрд╛рдПрдЧреАред рджреЗрд╡ рд╡рд╛рддрд╛рд╡рд░рдгред

@ рджреЗрд╡рд╛рдирдВрдж рдХрдИ

рддреЛ рдЖрдк рдмрд╕ рдХреБрдЫ рдирд┐рд╖реНрдкрд╛рджрди рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдореЗрдХрдлрд┐рд▓ рдпрд╛ рдмреИрд╢рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджреЗрддреЗ рд╣реИрдВ https://github.com/docker/compose/issues/1809#issuecomment -128073224

рдЬреЛ рдореИрдВ рдореВрд▓ рд░реВрдк рд╕реЗ рд╕реБрдЭрд╛рддрд╛ рд╣реВрдВ рд╡рд╣ onrun (рдпрд╛ oncreate) рд╣реЛрддрд╛ рд╣реИ рдЬреЛ рдЖрд▓рд╕реНрдп рд░рдЦрддрд╛ рд╣реИред рдмрд╕ рдкрд╣рд▓реА рд╢реБрд░реБрдЖрдд рдореЗрдВ рджреМрдбрд╝реЗрдВред рдпрджрд┐ рдХрдВрдЯреЗрдирд░ рдХреЛ рд░реЛрдХрд╛ рдпрд╛ рд░реЛрдХрд╛ рдЧрдпрд╛ рд╣реИ, рддреЛ рдирдИ рд╢реБрд░реБрдЖрдд onrun (рдпрд╛ oncreate) рдирд╣реАрдВ рдЪрд▓реЗрдЧреА

рдЕрдВрдд рдореЗрдВ, рдореЗрд░реЗ рдЧрд┐рдЯ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рдХрдВрдкреЛрдЬрд╝ рдлрд╛рдЗрд▓, рдПрдХ рдбреЙрдХрдлрд╛рдЗрд▓ рдФрд░ рдПрдХ рдореЗрдореНрдлрд╛рдЗрд▓ рдЗрдореНрдкреЛрдЯреЗрдиреНрд╕реА рдореИрдиреЗрдЬрдореЗрдВрдЯ рд╣реЛрдЧрд╛ (рдореЗрдХрдлрд╛рдЗрд▓ рд╕реНрдЯреЗрдЯрдлрд╛рдЗрд▓ рдмрдирд╛ рд╕рдХрддрд╛ рд╣реИ)ред рдкреНрд░рддрд┐рднрд╛рд╢рд╛рд▓реА!

command , expose , рдЖрджрд┐ рдФрд░ exec рдмреАрдЪ рдПрдХ рдмрдбрд╝рд╛ рдЕрдВрддрд░ рд╣реИред рдкрд╣рд▓реЗ рд╕рдореВрд╣ рдореЗрдВ рдХрдВрдЯреЗрдирд░ рд╡рд┐рдХрд▓реНрдк рд╣реИрдВ, exec рдПрдХ рдХрдорд╛рдВрдб / рдПрдкреАрдЖрдИ рд╕рдорд╛рдкрди рдмрд┐рдВрджреБ рд╣реИред рдпрд╣ рдПрдХ рдЕрд▓рдЧ рдлрд╝рдВрдХреНрд╢рди рд╣реИ, рдХрдВрдЯреЗрдирд░ рдлрд╝рдВрдХреНрд╢рди рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рдХрд▓реНрдк рдирд╣реАрдВред

рдХрдореНрдкреЛрдЬрд╝ (https://github.com/docker/compose/issues/1809#issuecomment-128059030) рдХреЗ рд╕рд╛рде рдЗрд╕реЗ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХреБрдЫ рддрд░реАрдХреЗ рд╣реИрдВред onrun рдкрд╣рд▓реЗ рд╕реЗ рдореМрдЬреВрдж рд╣реИред рдпрд╣ command ред

рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рдбреЗрдЯрд╛ рдбрдВрдкрд┐рдВрдЧ рдпрд╛ рд▓реЛрдб рдХрд░рдиреЗ рдХреА рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕рдорд╕реНрдпрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ, рд╡реЗ рдЕрдзрд┐рдХ "рд╡рд░реНрдХрдлрд╝реНрд▓реЛ" рдпрд╛ "рдмрд┐рд▓реНрдб рдСрдЯреЛрдореЗрд╢рди" рдкреНрд░рдХрд╛рд░ рдХреЗ рдХрд╛рд░реНрдп рд╣реИрдВ, рдЬреЛ рдЖрдо рддреМрд░ рдкрд░ рдореЗрдХрдлрд╛рдЗрд▓ рдореЗрдВ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЙрди рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдЯреВрд▓ рдХрд╛ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдмрдирд╛ рд░рд╣рд╛ рд╣реВрдВ рдЬрд┐рд╕реЗ рдбреЛрдмреА рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдХрдВрдЯреЗрдирд░реЛрдВ рдореЗрдВ рд╕рднреА рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдЪрд▓рд╛рддрд╛ рд╣реИред рдпрд╣ рдХрдВрдкреЛрдЬрд╝ рдХреЗ рд╕рд╛рде рднреА рдмрд╣реБрдд рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдПрдХреАрдХреГрдд рдХрд░рддрд╛ рд╣реИред рдпрджрд┐ рдЖрдк Makefiles рд╕реЗ рдЦреБрд╢ рдирд╣реАрдВ рд╣реИрдВ, рддреЛ рдЖрдк рдЗрд╕реЗ рдЖрдЬрд╝рдорд╛рдиреЗ рдореЗрдВ рджрд┐рд▓рдЪрд╕реНрдкреА рд▓реЗ рд╕рдХрддреЗ рд╣реИрдВред рдореИрдВ рдПрдХ рдбреЗрдЯрд╛рдмреЗрд╕ init / load use рдХреЗрд╕ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдкрд░ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реВрдБред

@dnephin onrun рдПрдХ рд╕рд╛рдзрд╛рд░рдг command рдХреНрдпреЛрдВрдХрд┐ рдЖрдк рд╕рд┐рд░реНрдл рдмреЗрдХрд╛рд░ рдпрд╛рдж рдХрд░рддреЗ рд╣реИрдВред

рдЖрдЗрдП рдХрд▓реНрдкрдирд╛ рдХрд░рддреЗ рд╣реИрдВред рдХрдВрдЯреЗрдирд░ рдирд┐рд░реНрдорд╛рдг рдкрд░ create рдФрд░ рдлрд┐рд░ рдХрднреА рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ (рдбрдВрдк рдФрд░ рдкреБрдирд░реНрд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ)ред

exec:
    create:
        - echo baby
    destroy:
        - echo keny
    start:
        - echo start
    stop:
        - echo bye

рдпрджрд┐ рдЖрдкрдХреЛ рдФрд░ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:

  • рдЗрд╕ рдореБрджреНрджреЗ рдХреЗ рд╕рд╛рде рдПрдХ cmd рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдПрдВ https://github.com/LarryEitel/phpdock/blob/master/dc.cmd -> juste compose up + exec
  • рдпрд╣ рд╡реНрдпрдХреНрддрд┐ рдЗрд╕ https://stackoverflow.com/questions/29303904/docker-compose-initialize-vs-run рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ 'рдЯреНрд░реЙрд╡реЗрд▓' рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдЧрд╛

рдбреЙрдмреА рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдЖрдкрдХреЛ рд░рдЪрдирд╛ рдХреЛ рдмрдврд╝рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрдкрдХрд░рдг рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рд░рдЪрдирд╛ рдЦрд░рд╛рдм рд╣реИ рдФрд░ рдЕрдзрд┐рдХ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рдЯреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рд╣реИред

рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдЖрдкрдХреЛ рд░рдЪрдирд╛ рдХреЛ рдмрдврд╝рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрдкрдХрд░рдг рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рд░рдЪрдирд╛ рдЦрд░рд╛рдм рд╣реИ рдФрд░ рдЕрдзрд┐рдХ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рдЙрдкрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рд╣реИред

рдпрд╣ рдХрд╣рдиреЗ рдЬреИрд╕рд╛ рд╣реИ рдХрд┐ "рдпрджрд┐ рдЖрдкрдХреЛ рдЕрдкрдиреЗ рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдХреЛ рдмрдврд╝рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдЖрдкрдХрд╛ рдУрдПрд╕ рдЦрд░рд╛рдм рд╣реИ"ред рдХреЛрдИ рднреА рдЙрдкрдХрд░рдг рд╕рдм рдХреБрдЫ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдпреВрдирд┐рдХреНрд╕ рджрд░реНрд╢рди рдПрдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдЗрд╕реЗ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдХрд░рддрд╛ рд╣реИ ред рдпрд╣реА рд╣рдо рдпрд╣рд╛рдВ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдХрдореНрдкреЛрдЬрд╝ рдЕрдкрдиреА рдПрдХ рдЪреАрдЬрд╝ "рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдСрд░реНрдХреЗрд╕реНрдЯреНрд░реЗрдЯ рдХрдВрдЯреЗрдирд░" рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдмрд┐рд▓реНрдб рдСрдЯреЛрдореЗрд╢рди рдЯреВрд▓ рдирд╣реАрдВ рд╣реИред

рдпрд╣ рдХрд╣рдиреЗ рдЬреИрд╕рд╛ рд╣реИ рдХрд┐ "рдпрджрд┐ рдЖрдкрдХреЛ рдЕрдкрдиреЗ рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдХреЛ рдмрдврд╝рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдЖрдкрдХрд╛ рдУрдПрд╕ рдЦрд░рд╛рдм рд╣реИ"ред рдХреЛрдИ рднреА рдЙрдкрдХрд░рдг рд╕рдм рдХреБрдЫ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдпреВрдирд┐рдХреНрд╕ рджрд░реНрд╢рди рдПрдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдЗрд╕реЗ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдХрд░рддрд╛ рд╣реИред рдпрд╣реА рд╣рдо рдпрд╣рд╛рдВ рдХрд░ рд░рд╣реЗ рд╣реИрдВред

рд╡рд╛рд╣ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рд╕рдмрд╕реЗ рдЦрд░рд╛рдм рд╡рд┐рд╢реНрд╡рд╛рд╕ рдкрд░ рдкрд╣реБрдВрдЪ рдЧрдПред

  • рддреЛ рдХреЛрдб рдФрд░ рдХреНрдпреВрдИ рд╕рдВрджрд░реНрдн рдореЗрдВ рдирд┐рд╖реНрдкрд╛рджрди рдХреНрдпреЛрдВ рд╣реИ? https://docs.docker.com/compose/reference/exec/ ?
  • рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рд▓рдВрдмрд╛ рд╕рдордп рд╣реИ рдХрд┐ doix рдпреВрдирд┐рдХреНрд╕ рджрд░реНрд╢рди рдХрд╛ рд╕рдореНрдорд╛рди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ https://coreos.com/blog/rocket

рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдПрдХ рд╕рд░рд▓ рдкреБрди: рдкреНрд░рдпреЛрдЬреНрдп рдШрдЯрдХ рдпрд╣ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЪреАрдЬреЗрдВ рдХреИрд╕реЗ рдЦреЗрд▓ рд░рд╣реА рд╣реИрдВред рдбреЙрдХрд░ рдЕрдм рдХреНрд▓рд╛рдЙрдб рд╕рд░реНрд╡рд░ рд▓реЙрдиреНрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдХрд░рдг рдмрдирд╛ рд░рд╣рд╛ рд╣реИ, рдХреНрд▓рд╕реНрдЯрд░рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рд╕рд┐рд╕реНрдЯрдо, рдФрд░ рдХрд╛рд░реНрдпреЛрдВ рдХреА рдПрдХ рд╡рд┐рд╕реНрддреГрдд рд╢реНрд░реГрдВрдЦрд▓рд╛: рдЫрд╡рд┐рдпрд╛рдВ рдмрдирд╛рдирд╛, рдЫрд╡рд┐рдпрд╛рдВ рдЪрд▓рд╛рдирд╛, рдЕрдкрд▓реЛрдб рдХрд░рдирд╛, рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдирд╛, рдФрд░ рдЕрдВрддрддрдГ рдУрд╡рд░рд▓реЗ рдиреЗрдЯрд╡рд░реНрдХрд┐рдВрдЧ, рд╕рднреА рдЖрдкрдХреЗ рд╕рд░реНрд╡рд░ рдкрд░ рдореВрд▓ рд░реВрдк рд╕реЗ рдЪрд▓ рд░рд╣реЗ рдПрдХ рдЕрдЦрдВрдб рджреНрд╡рд┐рдЖрдзрд╛рд░реА рдореЗрдВ рд╕рдВрдХрд▓рд┐рдд рд╣реИрдВред ред рдорд╛рдирдХ рдХрдВрдЯреЗрдирд░ рдШреЛрд╖рдгрд╛рдкрддреНрд░ рдХреЛ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рд╣рдореЗрдВ рдбреЙрдХрдЯрд░ рдХрдВрдЯреЗрдирд░реЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рдирд╛ рдмрдВрдж рдХрд░ рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдП, рдФрд░ рдбреЙрдХрд░ рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрд╣ рд╕рд░рд▓ рд░рдЪрдирд╛ рдпреЛрдЧреНрдп рдмрд┐рд▓реНрдбрд┐рдВрдЧ рдмреНрд▓реЙрдХ рдирд╣реАрдВ рдмрди рд░рд╣рд╛ рд╣реИ, рдЬрд┐рд╕рдХреА рд╣рдордиреЗ рдХрд▓реНрдкрдирд╛ рдХреА рдереАред

рдЗрд╕рд▓рд┐рдП рдЖрдк рдЗрд╕ рдмрд╛рдд рдХреА рдЧрд╛рд░рдВрдЯреА рджреЗ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд╣рдо рдпреВрдирд┐рдХреНрд╕ рдХреЗ рджрд░реНрд╢рди рдХреЛ рдмрдирд╛рдП рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЧреЛ рдбреЙрдХ рдореЗрдВ рд▓рд┐рдЦреЗ рдЧрдП "рдбреВрдХрд░ рдХрдВрдкреЛрдЬрд╝" рдХреЛ рдХрднреА рдЕрдВрджрд░ рдирд╣реАрдВ рджреЗрдЦреЗрдВрдЧреЗ? https://www.orchardup.com/blog/orchard-is-joining-docker

рдЙрд╕ рдореВрд▓ рд▓рдХреНрд╖реНрдп рдХреА рдУрд░ рдмрдврд╝рддреЗ рд░рд╣рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдбреЙрдХрд░ рд╕реЗ рдЬреБрдбрд╝ рд░рд╣реЗ рд╣реИрдВред рдЕрдиреНрдп рдмрд╛рддреЛрдВ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╣рдо Docker рдХреЛ рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рджреЗрдЦреЗ рдЧрдП рд╕рд░реНрд╡рд╢реНрд░реЗрд╖реНрда рд╡рд┐рдХрд╛рд╕ рдЕрдиреБрднрд╡ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рддреЗ рд░рд╣реЗрдВрдЧреЗ - рджреЛрдиреЛрдВ Fig рдХреЗ рд╕рд╛рде, рдФрд░ рдЕрдВрдЬреАрд░ рдХреЗ рд╕рд░реНрд╡рд╢реНрд░реЗрд╖реНрда рднрд╛рдЧреЛрдВ рдХреЛ Docker рдореЗрдВ рд╣реА рд╢рд╛рдорд┐рд▓ рдХрд░рдХреЗред

рддреЛ рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рдХрдВрдкреЛрдЬ рдХреЗ рд╕рд╛рде рдЬреБрдбрд╝рдирд╛рд░ рд▓реЛрдб рдХрд░рдиреЗ рдЬреИрд╕реА рдЪреАрдЬреЗрдВ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИ ..? рдореБрдЭреЗ рдХрд╣рдирд╛ рд╣реИ рдХрд┐ рдореИрдВ рд╣реИрд░рд╛рди рд╣реВрдБ ..
рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рддрд░реАрдХрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдореЗрд░реЗ рдЙрддреНрдкрд╛рджрди рдХрдВрдЯреЗрдирд░ рдореЗрдВ рдлрд╝рд┐рдХреНрдЪрд░ рд▓реЛрдбрд┐рдВрдЧ рдХреЛ рдЬреЛрдбрд╝рд╛ рдЬрд╛рдП? рдпрд╛ рдореЗрд░реА рд░рдЪрдирд╛ рдлрд╝рд╛рдЗрд▓ рдХреЗ рдЪрд╛рд░реЛрдВ рдУрд░ рдПрдХ рд╢реЗрд▓ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП? рдмрд╛рдж рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдореИрдВ рднреА 'рдбреЙрдХ рд░рди' рдХреЛ рдЕрдВрдЬрд╛рдо рджреЗ рд╕рдХрддрд╛ рдерд╛ рдЬреИрд╕рд╛ рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рдХрд┐рдпрд╛ рдерд╛ред

@ рдбрд┐рдбреЙрд░реНрдбрд┐рдпрдирдлрд╝рд┐рд╢ , рдпрджрд┐, рдХрд┐рд╕реА рддрд░рд╣, рдХреЛрдИ рдЗрд╕ рддрдереНрдп рдХреЛ

рдЖрдЦрд┐рд░ рдирд┐рд░реНрдорд╛рдг рдХреЗ рд╕рдордп рдХреНрдпрд╛ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдпрд╣ рд░рдирдЯрд╛рдЗрдо рдХреЗ рд╕рдордп рдХреА рдЬрд░реВрд░рдд рд╕реЗ рдЕрд▓рдЧ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рд░рдирдЯрд╛рдЗрдо рдХреЗ рджреМрд░рд╛рди рдЗрд╕рдХреА рдЬрд░реВрд░рдд рдЕрдХреНрд╕рд░ рддреИрдирд╛рддреА рдХреЗ рдорд╛рд╣реМрд▓ рд╕реЗ рднрд┐рдиреНрди рд╣реЛрддреА рд╣реИ ...

рдпрд╣ рдореЗрд░реА рдмрд╛рд╣рд░реА рд▓рд┐рдкрд┐рдпреЛрдВ рдХреЛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╖реНрдЯрдкреНрд░рдж рдХрд╛рдо рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдХреЛрдИ рдХрдВрдЯреЗрдирд░ рдмрдирд╛рдиреЗ рдпрд╛ рд╢реБрд░реВ рдХрд░рдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реИ ...

рдФрд░ рд╡реЗ рдЪреАрдЬреЗрдВ рд╣реИрдВ рдЬреЛ рдХреБрдЫ рдЬреАрд╡рди рдЪрдХреНрд░ рд╣реБрдХ + рдЖрджреЗрд╢ + рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░ рдХреЗ рд╕рд╛рде рдорджрдж рдХрд░ рд╕рдХрддреА рд╣реИрдВред

рдЖрдк рдЗрд╕реЗ рд╕реЗрд╡рд╛ рдкреНрд░рдмрдВрдзрди рдврд╛рдВрдЪреЗ рдФрд░ рдЕрдиреНрдп рдСрд░реНрдХреЗрд╕реНрдЯреНрд░реЗрд╢рди рдЯреВрд▓ рдореЗрдВ рджреЗрдЦрддреЗ рд╣реИрдВ ... рдбреЙрдХрдЯрд░-рдХрдВрдкреЛрдЬ рдореЗрдВ рдХреНрдпреЛрдВ рдирд╣реАрдВ?

рдЖрдкрдХреЛ https://github.com/dnephin/dobi рдореЗрдВ рджрд┐рд▓рдЪрд╕реНрдкреА рд╣реЛ рд╕рдХрддреА рд╣реИ, рдЬреЛ рдПрдХ рдРрд╕рд╛ рдЙрдкрдХрд░рдг рд╣реИ рдЬрд┐рд╕ рдкрд░ рдореИрдВ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдЬреЛ рдЙрди рд╡рд░реНрдХрдлрд╝реНрд▓реЛрдЬрд╝ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред

@dnephin рдЕрдкрдиреЗ рдЯреВрд▓реНрд╕ рдХреЗ рд╕рд╛рде рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рд╕реНрдкреИрдо

рдЖрдкрдХреА рд░рдЪрдирд╛рддреНрдордХ рдЯрд┐рдкреНрдкрдгреА рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред рдореБрдЭреЗ рдПрд╣рд╕рд╛рд╕ рдирд╣реАрдВ рдерд╛ рдХрд┐ рдореИрдВрдиреЗ рдЗрд╕ рдзрд╛рдЧреЗ рдкрд░ 8 рдорд╣реАрдиреЗ рдкрд╣рд▓реЗ рд╣реА рдбреЛрдмреА рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдерд╛ред

рдпрджрд┐ рдЖрдк Makefile / bash рд╕реЗ рдЦреБрд╢ рд╣реИрдВ рддреЛ рдпрд╣ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реИ! рдореБрдЭреЗ рдЦреБрд╢реА рд╣реИ рдХрд┐ рдЖрдкрдХреА рд╕рдорд╕реНрдпрд╛ рд╣рд▓ рд╣реЛ рдЧрдИ рд╣реИред

рдЗрд╕ рд╡рд┐рд╖рдп рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдпрд╣рд╛рдБ рдЬреЛрдбрд╝реЗ: https://github.com/docker/compose/issues/1341#issuecomment -295300246

рдЗрд╕рдХреЗ рд▓рд┐рдП

рдЗрд╕рд▓рд┐рдП рджреБрдЦрдж рд╣реИ рдХрд┐ рд╡рд┐рдХрд╛рд╕ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдЕрдкрд╡рд░реНрддрдХрддрд╛ рдХреЗ рдХрд╛рд░рдг рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдмрдВрдж рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ: рдирд┐рд░рд╛рд╢:

рдбреЙрдХ рдХрдВрдкреЛрдЬрд╝ рд╣реЛрдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рдмрдбрд╝рд╛ рдореВрд▓реНрдп рдорд╛рдирдХреАрдХрд░рдг рд╣реИ

рдпрд╣реА рддреЛ рдмрд╛рдд рд╣реИред рдЕрдЧрд░ рд╣рдо "ред" рдлрд╝рд╛рдЗрд▓ рдХреЛ .sh рдлрд╝рд╛рдЗрд▓ рдпрд╛ рдЬреЛ рднреА рдХрд╛рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдмрд┐рдирд╛ рдбреЙрдХрд░ рдХрдореНрдкреЛрдЬрд╝ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ, рддреЛ рдбреЙрдХрд░ рдХрдВрдкреЛрдЬрд╝ рдХреНрдпреЛрдВ рдореМрдЬреВрдж рд╣реИ? : рднреНрд░рдорд┐рдд:

рд╣рдо рд╕рдордЭ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдПрдХ рдмрдбрд╝рд╛ рдХрд╛рдо рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ @ рд╢рд┐рди рдиреЗ рдХрд╣рд╛:

рдпрд╣ рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рдЙрд╕ рд╕реНрддрд░ рдкрд░ рд╕рдорд░реНрдерди рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЕрдзрд┐рдХ рдмреЛрдЭ рд╣реИ

:рджрд┐рд▓:

рд▓реЗрдХрд┐рди рдЖрдк рдпрд╣ рдирд╣реАрдВ рдХрд╣ рд╕рдХрддреЗ рдХрд┐ "рдПрдХ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдмрдирд╛рдПрдВ" рдХрд╛ рдЕрд░реНрде рд╣реИ "рдЕрд░реЗ, рдпрд╣ рдмрд╣реБрдд рдХрдард┐рди рд╣реИ, рд╣рдо рдЗрд╕реЗ рдмрдирд╛рдиреЗ рдирд╣реАрдВ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВ"ред

рдпрджрд┐ рдРрд╕рд╛ рдХрд░рдирд╛ рдХрдард┐рди рд╣реИ, рддреЛ рдмрд╕ рдХрд╣реЗрдВ "рдЖрдкрдХрд╛ рд╡рд┐рдЪрд╛рд░ рджрд┐рд▓рдЪрд╕реНрдк рд╣реИ, рдФрд░ рдпрд╣ рдХреБрдЫ рдЬрд░реВрд░рддреЛрдВ рдХреЛ рдкреВрд░рд╛ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдРрд╕рд╛ рдХрд░рдирд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдореБрд╢реНрдХрд┐рд▓ рд╣реИ рдФрд░ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЗрд╕ рд╕рдордп рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрд╕рд╛рдзрди рдирд╣реАрдВ рд╣реИрдВ ... рд╢рд╛рдпрдж рдЖрдк рдЗрд╕реЗ рд╡рд┐рдХрд╕рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдкреВрдЫ рд╕рдХрддреЗ рд╣реИрдВред рдкреБрд▓ рдЕрдиреБрд░реЛрдз "рдпрд╛ рдРрд╕рд╛ рдХреБрдЫ: рдмрд▓реНрдм:

# 1341 рдореЗрдВ, рдореИрдВ "рдХреЗрд╡рд▓" docker-compose.yml рдХрдорд╛рдВрдб рдореЗрдВ рд▓рд┐рдЦрдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рджреЗрдЦрддрд╛ рд╣реВрдВ рдЬреИрд╕реЗ nmp install рдЬреЛ рдХреБрдЫ рдШрдЯрдирд╛рдУрдВ (рдЬреИрд╕реЗ рдХрдВрдЯреЗрдирд░ рдирд┐рд░реНрдорд╛рдг) рд╕реЗ рдкрд╣рд▓реЗ рдпрд╛ рдмрд╛рдж рдореЗрдВ рдЪрд▓рд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдЬреИрд╕реЗ рдЖрдк docker exec <container id> npm install рд╕рд╛рде рдХрд░реЗрдВрдЧреЗред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП

рдЙрджрд╛рд╣рд░рдг

рдореИрдВ рдПрдХ рдХрд╕реНрдЯрдо NodeJS рдЫрд╡рд┐ рд╣реИ рдФрд░ рдореИрдВ рдЪрд▓рд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ npm install рдПрдХ рд╕рд╛рде рдпрд╣ рд╕реЗ рдмрдирд╛рдП рдЧрдП, рдХрдВрдЯреЗрдирд░ рдореЗрдВ docker-compose up --build ред

рдореЗрд░реА рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ: рдХрдВрдЯреЗрдирд░ рдореЗрдВ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛрдб рдирд╣реАрдВ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рд╣реИ, рдпрд╣ docker-compose.yml рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рд╡реЙрд▓реНрдпреВрдо рдХреЗ рд╕рд╛рде рдЗрд╕рдореЗрдВ рд▓рдЧрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ:

custom-node:
    build: ../my_app-node/
    tty: true
    #command: bash -c "npm install && node"
    volumes:
     - /var/www/my_app:/usr/share/nginx/html/my_app

рдЗрд╕рд▓рд┐рдП рдореИрдВ Dockerfile рдореЗрдВ npm install рдирд╣реАрдВ рдЪрд▓рд╛ рд╕рдХрддрд╛ рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕реЗ рдирд┐рд░реНрднрд░рддрд╛ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛрдб рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдореИрдВрдиреЗ рдпрд╣рд╛рдБ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд╛ рд╡рд░реНрдгрди рдХрд┐рдпрд╛: http://stackoverflow.com/questions/43498098/what-is-the-order-of-events-in-docker-compose

npm install рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдореБрдЭреЗ рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб, command рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реЛрдЧрд╛:

command: bash -c "npm install && node"

рдЬреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рд╛рдл рдирд╣реАрдВ рд╣реИ: рдирд┐рд░рд╛рд╢: рдФрд░ рдЬреЛ рдореИрдВ рдЕрд▓реНрдкрд╛рдЗрди рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдкрд░ рдирд╣реАрдВ рдЪрд▓рд╛ рд╕рдХрддрд╛ (рдЙрдирдХреЗ рдкрд╛рд╕ рдЗрд╕рдореЗрдВ рдмреИрд╢ рд╕реНрдерд╛рдкрд┐рдд рдирд╣реАрдВ рд╣реИ)ред

рдореИрдВрдиреЗ рд╕реЛрдЪрд╛ рдерд╛ рдХрд┐ рдбреЙрдХрдЯрд░ рдХрдВрдкреЛрдЬ рдХрдВрдЯреЗрдирд░, рдИрдЬреА рдкрд░ рдирд┐рд╖реНрдкрд╛рджрди рдХрдорд╛рдВрдб рдЪрд▓рд╛рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рдкреНрд░рджрд╛рди рдХрд░реЗрдЧрд╛:

custom-node:
    build: ../my_app-node/
    tty: true
    command: node
    volumes:
     - /var/www/my_app:/usr/share/nginx/html/my_app
    exec:
     - npm install

рд▓реЗрдХрд┐рди рдпрд╣ рдирд╣реАрдВ рд╣реИ, рдФрд░ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЧрд╛рдпрдм рд╣реИ!

рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рд░рдЪрдирд╛ рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХреА рдЧрдИ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рд╢рд╛рдпрдж рдЧрд▓рдд рд╣реВрдВ рдФрд░ рд╕реНрдерд╛рдиреАрдп рд╡рд┐рдХрд╛рд╕ рдЖрджрд┐ рдХреЗ рд▓рд┐рдП рдЗрд╕рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп рдЕрдзрд┐рдХ рд╣реИред рдореИрдВ рдЕрдирд╛рде рдХрдВрдЯреЗрдирд░реЛрдВ рдЬреИрд╕реЗ рдХрдИ рдЕрдиреНрдп рдЦреБрд░рджрд░реЗ рдХрд┐рдирд╛рд░реЛрдВ рдореЗрдВ рднрд╛рдЧ рдЧрдпрд╛ рдФрд░ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХрд╛ рдирд╛рдо, рдкрде рдФрд░ рдпрд╣ рд╕реНрд╡рд╛рдорд┐рддреНрд╡ рдХреА рдкрд╣рдЪрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреИрд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдХреЗ рдмреАрдЪ рд╕реНрдкрд╖реНрдЯ рд╕рдВрдмрдВрдз рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИ рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдПрдХ рд╣реА рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдЖрджрд┐ рдореЗрдВ рдХрдИ рдХрдВрдкреЛрдЬрд╝ рдлрд╛рдЗрд▓реНрд╕ рд╣реИрдВ, рддреЛ рд╕рднреА рдореЗрдВ рдпрд╣ рд╕реАрдЖрдИ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдЪреНрдЫрд╛ рдлрд┐рдЯ рдирд╣реАрдВ рд▓рдЧрддрд╛ рд╣реИред
рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдореИрдВ рдХреНрдпреВрдмрд▓реЗрдЯ рд╕реНрдЯреИрдВрдбрдЕрд▓реЛрди рдЪрд▓рд╛рдХрд░ рд╕реАрдЖрдИ рдореЗрдВ рдЕрдкрдиреЗ рдЙрддреНрдкрд╛рджрди k8 рдХреЗ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛ рд░рд╣рд╛ рд╣реВрдВред рдЗрд╕рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рд╕рд╛рд░реЗ рдЧреЛрдВрдж рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА, рд▓реЗрдХрд┐рди рдХрдо рд╕реЗ рдХрдо рдЗрд╕ рддрд░рд╣ рдореИрдВ рджреЗрд╡, рдкрд░реАрдХреНрд╖рдг рдФрд░ рдареЗрд╕ рдХреЗ рд▓рд┐рдП рд╕рдорд╛рди рдШреЛрд╖рдгрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВред

@ рдЖрдХрд░реНрд╖рдХ-рдЪрд┐рдкрдЪрд┐рдкрд╛ рдЖрдк рдЕрд▓реНрдкрд╛рдЗрди рдореЗрдВ sh -c рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдЬреЛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рд╡рд╣ "рдмрд┐рд▓реНрдб рдСрдЯреЛрдореЗрд╢рди" рд╣реИ рдЬреЛ рдбреЙрдХрдЯрд░-рдХрдВрдкреЛрдЬрд╝ рдХреА рднреВрдорд┐рдХрд╛ рдирд╣реАрдВ рд╣реИред рдХреНрдпрд╛ рдЖрдкрдиреЗ рдбреЛрдмреА рдХреЛ рджреЗрдЦрд╛ рд╣реИ?

рджреЛ рд╕рд╡рд╛рд▓:

  • рдпрд╣ рдбреЙрдХрдЯрд░ рд░рдЪрдирд╛ рдХреА рднреВрдорд┐рдХрд╛ рдХреНрдпреЛрдВ рдирд╣реАрдВ рд╣реИ?
  • рдпрджрд┐ рдмрд┐рдВрджреБ рдХреЗ рдкрд╛рд╕ рдЙрди рд╕рднреА рдкрд░ рд╢рд╛рд╕рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ рдПрдХ рдЙрдкрдХрд░рдг рд╣реИ, рддреЛ рдореИрдВ рдПрдХ рдЕрдиреНрдп рдЙрдкрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рд╕реА рдХрд╛рд░реНрдп рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреНрдпреЛрдВ рдХрд░реВрдВрдЧрд╛ рдЬреЛ рдбреЙрдХрд░ рдХрдореНрдкреЛрдЬ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рд╣реИ?

рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХреА рдЕрддреНрдпрдзрд┐рдХ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ!

@ рд▓реНрдпреБрд╕рд┐рд▓ рдЪрд┐рдкрдЪрд┐рдкрд╛

рдпрд╣ рдбреЙрдХрдЯрд░ рд░рдЪрдирд╛ рдХреА рднреВрдорд┐рдХрд╛ рдХреНрдпреЛрдВ рдирд╣реАрдВ рд╣реИ?

рдХреНрдпреЛрдВрдХрд┐ рдХрдореНрдкреЛрдЬрд╝ рдХреА рднреВрдорд┐рдХрд╛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рд╣реИ рдФрд░ рдЗрд╕рдореЗрдВ рдЙрди рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

рдХрдореНрдкреЛрдЬ рдорд▓реНрдЯреА-рдХрдВрдЯреЗрдирд░ рдбреЙрдХрдЯрд░ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдФрд░ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрдкрдХрд░рдг рд╣реИред Compose рдХреЗ рд╕рд╛рде, рдЖрдк рдЕрдкрдиреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреА рд╕реЗрд╡рд╛рдУрдВ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ Compose рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рдлрд┐рд░, рдПрдХ рд╣реА рдЖрджреЗрд╢ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рдЖрдк рдЕрдкрдиреЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╕реЗ рд╕рднреА рд╕реЗрд╡рд╛рдУрдВ рдХреЛ рдмрдирд╛рддреЗ рд╣реИрдВ рдФрд░ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ

рдпрджрд┐ рдмрд┐рдВрджреБ рдХреЗ рдкрд╛рд╕ рдЙрди рд╕рднреА рдкрд░ рд╢рд╛рд╕рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ рдПрдХ рдЙрдкрдХрд░рдг рд╣реИ, рддреЛ рдореИрдВ рдПрдХ рдЕрдиреНрдп рдЙрдкрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рд╕реА рдХрд╛рд░реНрдп рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреНрдпреЛрдВ рдХрд░реВрдВрдЧрд╛ рдЬреЛ рдбреЙрдХрд░ рдХрдореНрдкреЛрдЬ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рд╣реИ?

рд╣рдо рдЙрди рд╕рднреА рдкрд░ рд╢рд╛рд╕рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрдкрдХрд░рдг рдирд╣реАрдВ рдмрдирдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рд╣рдо UNIX рджрд░реНрд╢рди рдХрд╛ рдЕрдиреБрд╕рд░рдг рдХрд░рддреЗ рд╣реИрдВ рдФрд░ "mak [ing] рдореЗрдВ рд╡рд┐рд╢реНрд╡рд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдХрд╛рд░реНрдпрдХреНрд░рдо рдПрдХ рдХрд╛рдо рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдХрд░рддрд╛ рд╣реИред рдПрдХ рдирдпрд╛ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдирдИ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЛ рдЬреЛрдбрд╝рдХрд░ рдкреБрд░рд╛рдиреЗ рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рдХреЛ рдЬрдЯрд┐рд▓ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп рдирдП рд╕рд┐рд░реЗ рд╕реЗ рдирд┐рд░реНрдорд╛рдг рдХрд░реЗрдВред"
рдЙрд╕ рджрд░реНрд╢рди рд╕реЗ рдЕрд╕рд╣рдордд рд╣реЛрдирд╛ рдареАрдХ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣реА рдХрд┐ рд╣рдо рдбреЙрдХрд░ рдореЗрдВ рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рддреЗ рд╣реИрдВред

рдореИрдВ рдпрд╣ рдореБрджреНрджрд╛ рдмрдирд╛рддрд╛ рд╣реВрдВ, рдЕрдЧрд╕реНрдд 2015 рдореЗрдВ, рдкреНрд░рддреНрдпреЗрдХ рд╡рд░реНрд╖ рдХреЛрдИ рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдЬреЛрдбрд╝рддрд╛ рд╣реИ рдФрд░ рд╣рдо рдПрдХ рд╣реА рдЙрддреНрддрд░реЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рд╣реА рд╕рд╡рд╛рд▓ рдкрд░ рд▓реВрдк рдХрд░ рд░рд╣реЗ рд╣реИрдВ (рдФрд░ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЖрдк @dnephin рдХреЛ рдЕрдкрдиреЗ рдЯреВрд▓ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рдЬреНрдЮрд╛рдкрди рдмрдирд╛рддреЗ рд╣реБрдП рджреЗрдЦреЗрдВрдЧреЗ)ред

@ рдирд▓реА

рдСрд░реНрдХреЗрд╕реНрдЯреНрд░реЗрд╢рди рдЯреВрд▓ рдореЗрдВ рдЖрдк "рдмрд┐рд▓реНрдб" рдФрд░ "рдкреНрд░рд╛рд╡рдзрд╛рди" рдХреЛ рдЕрд▓рдЧ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗред

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХреНрдпрд╛ рдЖрдк рдЙрдирдореЗрдВ рд╕реЗ рдПрдХ рдХреЛ рдЬрд╛рди рд╕рдХрддреЗ рд╣реИрдВ:

рдЬрдм рдЖрдк рдХрд┐рд╕реА рд╕реЗрд╡рд╛ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдЖрдкрдХреЛ рдЙрд╕реЗ рдкреНрд░рд╛рд╡рдзрд╛рди рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдпрджрд┐ рдореИрдВ рдПрдХ рдЯреЙрдордХреИрдЯ рдХреЛ рддреИрдирд╛рдд рдХрд░рддрд╛ рд╣реВрдВ, рддреЛ рдореБрдЭреЗ рдЗрд╕реЗ рдПрдХ рдпреБрджреНрдз рдХреЗ рд╕рд╛рде рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдЕрдЧрд░ рдореИрдВ рдПрдХ рдбреАрдмреА рдмрдирд╛рддрд╛ рд╣реВрдВ, рддреЛ рдореБрдЭреЗ рдбреЗрдЯрд╛ рдЖрджрд┐ рдХреЛ рдЗрдВрдЬреЗрдХреНрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдЪрд╛рд╣реЗ рдХрдВрдЯреЗрдирд░ рдХреЛ рдХреИрд╕реЗ рд╢реБрд░реВ рдХрд┐рдпрд╛ рдЬрд╛рдП (рдЫрд╡рд┐ рдЕрдиреБрд░рдХреНрд╖рдХ рдЗрд╕реЗ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░реЗрдВ)ред рдХрдореНрдкреЛрдЬрд╝ рдорд╛рдорд▓реЗ рдореЗрдВ рдПрдХ "рдкреНрд░рд╛рд╡рдзрд╛рдирдХрд░реНрддрд╛" рдХрд╛ рдореБрдЦреНрдп рдЙрджреНрджреЗрд╢реНрдп "рдореЗрд░реЗ рдХрдВрдЯреЗрдирд░ рдХреЛ рд╢реБрд░реВ рдХрд░рдирд╛" рдФрд░ "рдпрд╣ рдХреНрдпрд╛ рдкреНрд░рд╛рд╡рдзрд╛рди рд╣реИ" рдХреЗ рдмреАрдЪ рдЧрд▓рддрдлрд╣рдореА рд╕реЗ рдмрдЪрдирд╛ рд╣реИред

рдЬреИрд╕реЗ рдХрд┐ рдХрдВрдкреЛрдЬрд╝ рдбреЙрдХ рдореЗрдВ рдЖрдкрдХрд╛ рдЙрджреНрдзрд░рдг "рдХрдВрдкреЛрдЬрд╝ рдХреЗ рд╕рд╛рде, рдЖрдк рдЕрдкрдиреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреА рд╕реЗрд╡рд╛рдУрдВ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдХрдВрдкреЛрдЬрд╝ рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рдлрд┐рд░ , рдПрдХрд▓ рдХрдорд╛рдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рдЖрдк рдЕрдкрдиреЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╕реЗ рд╕рднреА рд╕реЗрд╡рд╛рдУрдВ рдХреЛ рдмрдирд╛рддреЗ рдФрд░ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ"

рдпреВрдирд┐рдХреНрд╕ рджрд░реНрд╢рди? рдореБрдЭреЗ рд╣рдВрд╕рдиреЗ рджреЛред рдореИрдВ рдЖрдкрдХреЛ рдЙрд╕реА рдЙрддреНрддрд░ рдХреА рдУрд░ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реВрдВ рдЬреЛ рдореИрдВрдиреЗ рдЗрд╕ рдЕрдВрдХ рдореЗрдВ рдХрд┐рдпрд╛ рдерд╛ https://github.com/docker/compose/issues/1809#issuecomment -237195021ред
рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рдпреВрдирд┐рдХреНрд╕ рджрд░реНрд╢рди рдореЗрдВ "рдЧрддрд┐рд╢реАрд▓рддрд╛" рдХреИрд╕реЗ рд╡рд┐рдХрд╕рд┐рдд рд╣реЛрдЧреАред

@ рд╢рд┐рди- docker- рд░рдЪрдирд╛ рдХрд▓реНрдкрдирд╛ рдХреЗ рдХрд┐рд╕реА рднреА рдЦрдВрдб рджреНрд╡рд╛рд░рд╛ рдпреВрдирд┐рдХреНрд╕ рджрд░реНрд╢рди рдХрд╛ рдкрд╛рд▓рди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдпрджрд┐ рдбреЙрдХрдЯрд░-рдХрдореНрдкреЛрдЬрд╝ рдиреЗ рдпреВрдирд┐рдХреНрд╕ рджрд░реНрд╢рди рдХрд╛ рдкрд╛рд▓рди рдХрд┐рдпрд╛ рддреЛ рдирд┐рд░реНрдорд╛рдг, рдЕрдк, рдЖрд░рдПрдо, рд╕реНрдЯрд╛рд░реНрдЯ, рд╕реНрдЯреЙрдк, рдЖрджрд┐ рдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдХреЗ рд▓рд┐рдП рдЕрд╕рддрдд рдХрдорд╛рдВрдб рд╣реЛрдВрдЧреЗ рдФрд░ рдЙрдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдореЗрдВ рдПрдХ рдкреНрд░рдпреЛрдЧ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рд╕реНрдЯрдб, рд╕реНрдЯрдбрдЖрдЙрдЯ, рдФрд░ рд╕реНрдЯреИрдбрд░ рдХрд╛ рд╡реНрдпрд╡рд╣рд╛рд░ рд▓рдЧрд╛рддрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рд╕рд┐рд╕реНрдЯрдо рд╡реА, рдПрдЪрдкреА-рдпреВрдПрдХреНрд╕, рдПрдЖрдИрдПрдХреНрд╕, рд╕реЛрд▓рд╛рд░рд┐рд╕, рдФрд░ рд▓рд┐рдирдХреНрд╕ рд╕рд╣рд┐рдд 20 рд╕реЗ рдЕрдзрд┐рдХ рд╡рд░реНрд╖реЛрдВ рдХреЗ рдЕрдиреБрднрд╡ рдХреЗ рд╕рд╛рде рдпреВрдирд┐рдХреНрд╕ рд╕рд┐рд╕рд╛рдбрдорд┐рди рдХрд╣рддреЗ рд╣реИрдВ

рдЖрдЗрдП рд░рдЪрдирд╛ рдХреЗ рд▓рд┐рдП рдЕрд╡рд▓реЛрдХрди рдкрд░ рд╡рд╛рдкрд╕ рдЬрд╛рдПрдВ

рдХрдореНрдкреЛрдЬ рдорд▓реНрдЯреА-рдХрдВрдЯреЗрдирд░ рдбреЙрдХрдЯрд░ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдФрд░ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрдкрдХрд░рдг рд╣реИред Compose рдХреЗ рд╕рд╛рде, рдЖрдк рдЕрдкрдиреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреА рд╕реЗрд╡рд╛рдУрдВ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ Compose рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рдлрд┐рд░, рдПрдХ рд╣реА рдЖрджреЗрд╢ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рдЖрдк рдЕрдкрдиреЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╕реЗ рд╕рднреА рд╕реЗрд╡рд╛рдУрдВ рдХреЛ рдмрдирд╛рддреЗ рд╣реИрдВ рдФрд░ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред

рдЕрдВрдд рдореЗрдВ, docker- рд░рдЪрдирд╛ docker рдЫрд╡рд┐рдпреЛрдВ рд╕реЗ рдирд┐рд░реНрдорд┐рдд рдХрдВрдЯреЗрдирд░реЛрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╕реЗрд╡рд╛рдУрдВ рдХреЗ рд╕рдореВрд╣ рдХреЗ рдкреНрд░рдмрдВрдзрди рдХреЗ рд▓рд┐рдП рдПрдХ рдСрд░реНрдХреЗрд╕реНрдЯреНрд░реЗрд╢рди рдЙрдкрдХрд░рдг рд╣реИред рдбреЙрдХрдЯрд░-рдХрдВрдкреЛрдЬ.рдЖрдИрдПрдордПрд▓ рдлрд╛рдЗрд▓ рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рд╕реЗрд╡рд╛рдУрдВ рдХреЛ 'рдХреНрд░рд┐рдПрдЯ', 'рд╕реНрдЯрд╛рд░реНрдЯ', 'рд╕реНрдЯреЙрдк', 'рд╕реНрдХреЗрд▓' рдФрд░ 'рд░рд┐рдореВрд╡' рдХрд░рдирд╛ рдкреНрд░рд╛рдердорд┐рдХ рдХрд╛рд░реНрдп рд╣реИрдВред

рдХрдИ рд╕реЗрд╡рд╛рдУрдВ рдХреЛ рдЗрди рдЬреАрд╡рди рдЪрдХреНрд░ рд╕рдВрдХреНрд░рдордгреЛрдВ рдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдХреЗ рджреМрд░рд╛рди рдЕрддрд┐рд░рд┐рдХреНрдд рдХрдорд╛рдВрдб рдЪрд▓рд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рд╕реНрдХреЗрд▓рд┐рдВрдЧ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреНрд▓рд╕реНрдЯрд░ рдХреЛ рдЕрдХреНрд╕рд░ рдХреНрд▓рд╕реНрдЯрд░ рд╕реЗ рд╕рджрд╕реНрдпреЛрдВ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдпрд╛ рд╣рдЯрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рд╕реНрдХреЗрд▓рд┐рдВрдЧ рд╡реЗрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдЕрдХреНрд╕рд░ рдПрдХ рд▓реЛрдб рдмреИрд▓реЗрдВрд╕рд░ рдХреЛ рд╕реВрдЪрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рдЬрд┐рд╕реЗ рдЖрдкрдиреЗ рдПрдХ рд╕рджрд╕реНрдп рдЬреЛрдбрд╝рд╛ рдпрд╛ рд╣рдЯрд╛рдпрд╛ рд╣реИред рдХреБрдЫ рд▓рдХрд╡рд╛рдЧреНрд░рд╕реНрдд sysadmins рдЕрдкрдиреЗ рдбреЗрдЯрд╛рдмреЗрд╕ рд▓реЙрдЧ рдХреЛ рдЬрдмрд░рди рдлреНрд▓рд╢ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЕрдкрдиреЗ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЛ рдмрдВрдж рдХрд░рддреЗ рд╕рдордп рдЪреМрдХрд┐рдпреЛрдВ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рддреЗ рд╣реИрдВред

рдЕрдзрд┐рдХрд╛рдВрд╢ рдСрд░реНрдХреЗрд╕реНрдЯреНрд░реЗрд╢рди рдЯреВрд▓ рдХреЗ рд▓рд┐рдП рд░рд╛рдЬреНрдп рд╕рдВрдХреНрд░рдордг рдкрд░ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред рдЖрдкрдХреЛ рдпрд╣ AWS рдХреЗ рдЯреВрд▓, Google рдХреЗ рдЯреВрд▓, рдлреЛрд░рдореИрди, рд╢реЗрдл рдЖрджрд┐ рдореЗрдВ рдорд┐рд▓реЗрдЧрд╛ред рдЕрдзрд┐рдХрд╛рдВрд╢ рдЪреАрдЬреЗрдВ рдЬреЛ рдЗрд╕ рдСрд░реНрдХреЗрд╕реНрдЯреНрд░реЗрд╢рди рд╕реНрдкреЗрд╕ рдореЗрдВ рд░рд╣рддреА рд╣реИрдВ, рдЙрдирдореЗрдВ рдХреБрдЫ рдкреНрд░рдХрд╛рд░ рдХреЗ рдЬреАрд╡рдирдЪрдХреНрд░ рд╣реБрдХ рд╣реЛрддреЗ рд╣реИрдВред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдордЬрд╝рдмреВрддреА рд╕реЗ рдбреЙрдХрдЯрд░-рдХрдВрдкреЛрдЬрд╝ рдХреЗ рджрд╛рдпрд░реЗ рдореЗрдВ рд╣реИ, рдпрд╣ рдПрдХ рдСрд░реНрдХреЗрд╕реНрдЯреНрд░реЗрд╢рди рдЯреВрд▓ рд╣реИ рдФрд░ рдпрд╣ рд░рд╛рдЬреНрдп рдХреЗ рдмрджрд▓рд╛рд╡реЛрдВ рд╕реЗ рдЕрд╡рдЧрдд рд╣реИред рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдШрдЯрдирд╛рдУрдВ рдпрд╛ рдмрд╛рд╣рд░реА рд▓рд┐рдкрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдорд╛рдорд▓реЗ рдореЗрдВ рдлрд┐рдЯ рдмреИрдарддрд╛ рд╣реИред рд╡реЗ рдмреЗрдХрд╛рд░ рдирд╣реАрдВ рд╣реИрдВ, рдШрдЯрдирд╛рдУрдВ рдХрд╛ рдкрд╛рд▓рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд░рдЪрдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ 'рджреВрд╕рд░реА' рд╕реЗрд╡рд╛ рд╢реБрд░реВ рдХрд░рдирд╛ рдмрд╣реБрдд рдХрдард┐рди рд╣реИред рдХрдВрдЯреЗрдирд░ рдХреЗ рдЕрдВрджрд░ рдпрд╛ рдХрдВрдЯреЗрдирд░ рдХреЗ рдмрд╛рд╣рд░ рдЪрд▓рдиреЗ рд╡рд╛рд▓реЗ рд╣реБрдХ рдПрдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╡рд┐рд╡рд░рдг рд╣реИред

рджрд┐рди рдХреЗ рдЕрдВрдд рдореЗрдВ рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬреЛ docker - @aanand , @dnephin , @

рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдореЗрд░реЗ рдкрд░реАрдХреНрд╖рдг рдФрд░ рдЙрддреНрдкрд╛рджрди рдЙрддреНрдкрд╛рджрди рдХреА рддреИрдирд╛рддреА рдореЗрдВ рдбреЙрдХрдЯрд░ рдХреЗ рдореЗрд░реЗ рдЧреЛрдж рд▓реЗрдиреЗ рдХреЛ рд░реЛрдХ рд░рд╣реА рд╣реИред рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕реЗ рдЦрд╛рд░рд┐рдЬ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп рдХреБрдЫ рдлреИрд╢рди рдореЗрдВ рд╕рдВрдмреЛрдзрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдмрд╣реБрдд рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛!

рдореЗрд░реЗ рд▓рд┐рдП рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдЬрдм рдХреЛрдИ рдРрдк рдХрдВрдЯреЗрдирд░ A рд░рдирд┐рдВрдЧ рд╕рд░реНрд╡рд┐рд╕ 'a' db рдХрдВрдЯреЗрдирд░ B рд░рдирд┐рдВрдЧ рд╕рд░реНрд╡рд┐рд╕ b рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИред рддрдм A рдХрдВрдЯреЗрдирд░ рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм рддрдХ рдХрд┐ рдЙрд╕рдХрд╛ b рд╕реЗрдЯрдЕрдк рди рд╣реЛред
рдореИрдВ рдЕрдкрдиреЗ рдЦреБрдж рдХреЗ рдбреЙрдХрд░рдлрд╛рдЗрд▓реНрд╕ рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрдиреЗ рдХреЗ рдмрдЬрд╛рдп рдбреЙрдХ рд╣рдм рдЫрд╡рд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдкрд╕рдВрдж рдХрд░реВрдВрдЧрд╛ред рд▓реЗрдХрд┐рди рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ A рд╡рд┐рдлрд▓ рд░рд╣рддрд╛ рд╣реИ рдФрд░ рдХреЛрдИ рдХрдВрдЯреЗрдирд░ рдирд╣реАрдВ рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдХреЗрд╡рд▓ рд╡рд┐рдХрд▓реНрдк рдЕрдиреНрдпрдерд╛ рд╣реИ

  1. рдЖрдзрд╛рд░ рдЫрд╡рд┐ рдХреЗ рд░реВрдк рдореЗрдВ рдмреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ рдФрд░ рдЕрдкрдиреА рдЦреБрдж рдХреА рдбреЙрдХрд░рдлрд╛рдЗрд▓ рдмрдирд╛рдПрдВред
  2. A рдХреЛ рд╡рд┐рдлрд▓ рдХрд░реЗрдВ рдФрд░ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ b рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░реЗрдВ рдФрд░ A рдХреЛ рдкреБрдирд░рд╛рд░рдВрдн рдХрд░реЗрдВред

рдореИрдВ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ @ рд▓реНрдпреВрд╕реА-рдЪрд┐рдкрдЪрд┐рдкрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рд╣реА рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рд╣реВрдВред

@lekhnath рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдХреЗ рд▓рд┐рдП, рдореИрдВ рдЗрд╕реЗ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рдХреЗ рд╣рд▓ command рдореЗрд░реА рдореЗрдВ рд╡рд┐рдХрд▓реНрдк docker-compose.yml :

command: bash -c "npm install && node"

рд▓реЗрдХрд┐рди рдпрд╣ soooo рдмрджрд╕реВрд░рдд рдЯреАрдЯреА рд╣реИ

@ рдЖрдХрд░реНрд╖рдХ-рдЪрд┐рдкрдЪрд┐рдкрд╛ рдпрд╣ рдзреНрдпрд╛рди рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдпрд╣ рдХрдВрдЯреЗрдирд░ рдХреЗ Dockerfile рдореЗрдВ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рд╕реА рднреА рдЖрджреЗрд╢ рдХреЛ рдкрд▓рдЯ рджреЗрддрд╛ рд╣реИред рдореИрдВрдиреЗ volumes рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдХрд╕реНрдЯрдо рд╢реЗрд▓ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдЖрдЧреЗ рдмрдврд╝рд╛рддреЗ рд╣реБрдП рдХрд╛рдо рдХрд┐рдпрд╛, command рдХреЛ рдЕрдкрдиреА Docker Compose рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдЙрд╕ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдФрд░ рдЗрд╕рдореЗрдВ рдореВрд▓ CMD Dockerfile ред

рдпрд╣ рдореБрджреНрджрд╛ рдХреНрдпреЛрдВ рдмрдВрдж рд╣реИ? _ bash script_ рдпрд╛ _use рдЗрд╕ рдЯреВрд▓ рдХреЛ рдореИрдВрдиреЗ рд▓рд┐рдЦрд╛ рдерд╛_ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдмрдВрдж рдХрд░рдиреЗ рдХрд╛ рдПрдХ рд╡реИрдз рдХрд╛рд░рдг рдирд╣реАрдВ рд╣реИред

рдпрд╣ рдПрдХ рдмрд╣реБрдд рд╣реА рдЙрдкрдпреЛрдЧреА рдФрд░ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реИ рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрд╣рд╛рдВ рд░рдЪрдирд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

@dnephin рдХреНрдпрд╛ рдЖрдкрдХреЛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ init рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЪрд▓рд╛рдирд╛ рдХрдВрдЯреЗрдирд░ рдЖрдзрд╛рд░рд┐рдд рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдкрд░рд┐рдирд┐рдпреЛрдЬрди рдХреЗ рджрд╛рдпрд░реЗ рд╕реЗ рдмрд╛рд╣рд░ рд╣реИ? рд╕рдм рдХреЗ рдмрд╛рдж, рд░рдЪрдирд╛ "рдбреЙрдХрд░ рдХреЗ рд╕рд╛рде рдорд▓реНрдЯреА-рдХрдВрдЯреЗрдирд░ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдФрд░ рдЪрд▓рд╛рдиреЗ" рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИред

рдХреНрдпрд╛ рдХрд┐рд╕реА рдиреЗ рдбреЛрдмреА рдХреЛ рджреЗрдЦрд╛ рд╣реИ рдпрджрд┐ рдЖрдк рдХреГрдкрдпрд╛ рдпрд╣рд╛рдБ рдРрд╕рд╛ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ рддреЛ :)
image

рдЗрд╕рдХреЗ рд╕рд╛рде рдХрднреА рдХреБрдЫ рдирд╣реАрдВ рд╣реБрдЖред рдореИрдВ docker-compose рдлрд╝рд╛рдЗрд▓ рдХреЗ рднреАрддрд░ рдХреБрдЫ рдкреНрд░рдХрд╛рд░ рдХреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рджреЗрдЦрдирд╛ рдкрд╕рдВрдж рдХрд░реВрдВрдЧрд╛, рдЬрд╣рд╛рдВ рд╣рдо рдпрд╣ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЬрдм рдХрдорд╛рдВрдб рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬреИрд╕реЗ рдХрд┐ @ ahmet2mir рдиреЗ рджрд┐рдпрд╛ рдерд╛ред

рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд╛рдЧреВ рди рд╣реЛрдиреЗ рд╕реЗ рдмрд╣реБрдд рджреБрдЦреА рд╣реИрдВред

рдХреГрдкрдпрд╛ рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХреЛ рд▓рд╛рдЧреВ рдХрд░реЗрдВ, рдореБрдЭреЗ рдбреЙрдХрдЯрд░-рдХрдВрдкреЛрдЬрд╝ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЬрд┐рди рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдлрд╝рд╛рдЗрд▓ рдХреА рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдмрдирд╛рдИ рдЬрд╛рдиреА рдЪрд╛рд╣рд┐рдП, рд╡реЗ рдХрдВрдЯреЗрдирд░реЛрдВ рдХреЗ рдЖрд░рдВрдн рдХреЗ рдмрд╛рдж рдмрдирд╛рдП рдЬрд╛рддреЗ рд╣реИрдВред
рдзрдиреНрдпрд╡рд╛рдж

рдпрд╣ рдЕрд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рд╣реИ рдХрд┐ рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХреЛ рдЕрднреА рддрдХ рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ!

рдпрд╣ рдмрд╣реБрдд рдЦрд░рд╛рдм рдлреЙрд░реНрдо рд╣реИ @dnephinред рдЖрдкрдиреЗ рдЗрд╕ рддрд░рд╣ рдХреА рдЕрддрд┐ рдорд╛рдВрдЧ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкрд░ рд░реЛрдХ рд▓рдЧрд╛ рджреА рд╣реИ, рдЬреЛ рдХрд┐ рдЬреНрдпрд╛рджрд╛рддрд░ рдЖрддреНрдо рд╕рдВрд╡рд░реНрдзрди рд▓рдЧрддрд╛ рд╣реИ, рдФрд░ рдЖрдк рдмрд╛рддрдЪреАрдд рдЬрд╛рд░реА рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рднреА рддреИрдпрд╛рд░ рдирд╣реАрдВ рд╣реИрдВред

рдореБрдЭреЗ рдЦреЗрдж рд╣реИ, рдореИрдВ рдЗрд╕реЗ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рджреБрдзрд╛рд░реВ рднрд╛рд╖рд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рд╕реЛрдЪ рд╕рдХрддрд╛ рдерд╛, рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХреА рдХрдореА рдиреЗ рд╣рдорд╛рд░реЗ рд╡рд░реНрдХрдлрд╝реНрд▓реЛ рдореЗрдВ рдХреБрдЫ рдЕрдиреНрдп рдбреЗрд╡рд▓рдкрд░ рдФрд░ рдЯреАрдореЛрдВ рдХреА рддрд░рд╣ рдЕрдВрд╢ рдЬреЛрдбрд╝рд╛ рд╣реИ, рдФрд░ рдЖрдк рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдореЗрдВ рдмрд╛рдзрд╛ рдмрдиреЗ рд╣реИрдВред

рдУрд╣, рдЪрд▓реЛ рдЗрд╕реЗ unix-way рдмрдирд╛рддреЗ рд╣реИрдВред
_Just_ (рдорд▓реНрдЯреАрдкреНрд▓реЗрдХреНрд╕ рддрдм) рдкреНрд░рддреНрдпреЗрдХ рдХрдВрдЯреЗрдирд░ рдХреЗ рд▓рд┐рдП docker-compose up рд╕реНрдЯрдб рдкрд╛рдЗрдк CMD ?
рддрд╛рдХрд┐ рдРрд╕реА рдпрдорд▓ рдлрд╝рд╛рдЗрд▓

services:
  node:
    command: sh -

рдпрд╣ рдХрд╛рдо рдХрд░реЗрдЧрд╛: cat provision.sh | docker-compose up
рдХрдВрдЯреЗрдирд░ рдХрд╛рд░реНрдпрдХрд╛рд░реА uting рдмрд╛рддреЛрдВ рдХреЗ рд▓рд┐рдП, рдореИрдВ рд╕рд╛рде рдЖрджреЗрд╢реЛрдВ рдЧреБрдЬрд░ рд╕реЗ stdin рдХрд╛ рдмреЗрд╣рддрд░ рдЗрд╕реНрддреЗрдорд╛рд▓ рдирд╣реАрдВ рджрд┐рдЦ рд░рд╣рд╛ рд╣реИ рдХрд░ рд░рд╣реЗ рд╣реИрдВред

рдПрдХ рд╡рд┐рдХрд▓реНрдк рд╣реЛ рд╕рдХрддрд╛ рд╣реИ:

services:
  node:
    localscript: provision.sh

рд╣рд╛рд▓рд╛рдВрдХрд┐ рдПрдХ рдмрд┐рдЯ рд╢реЗрд▓-рд╕реЗрдВрдЯреНрд░рд┐рдХ рдЬреЛ 99% рдкреНрд░рд╛рд╡рдзрд╛рди рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЛрдВ рдХреЛ рд╣рд▓ рдХрд░реЗрдЧрд╛ред

рднрд▓реЗ рд╣реА рд╡реИрдз рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рд╣реИрдВ, рдФрд░ рдЗрд╕ рдкрд░ рдмрд╣реБрдд рд╕рд╛рд░реЗ ... рдпрд╣ рдЕрднреА рднреА рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЗрдирдХрд╛рд░ рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдореБрдЭреЗ рд╢рд░реНрдо рдЖрддреА рд╣реИ, рдпрд╣рд╛рдБ рдХрдИ рдЕрдиреНрдп рд▓реЛрдЧреЛрдВ рдХреА рддрд░рд╣, рдпрд╣ рдмреЗрд╣рдж рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛ред

рдореЗрд░реЗ +1 рдХреЛ рдореМрдЬреВрджрд╛ + рдХреЗ рдмрдбрд╝реЗ рдвреЗрд░ рдореЗрдВ рдЬреЛрдбрд╝ рд░рд╣рд╛ рд╣реИ

... рдПрдХ рдФрд░ +1 рдпрд╣рд╛рдБ!

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЕрдЧрд░ рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП рдРрд╕рд╛ рдХреЛрдИ рдЕрдиреБрд░реЛрдз рд╣реИ рддреЛ рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЙрдкрдХрд░рдг рд╣рдорд╛рд░реЗ рдЙрджреНрджреЗрд╢реНрдпреЛрдВ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдореЗрдВ рд╣рдорд╛рд░реА рд╕рд╣рд╛рдпрддрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣рд╛рдВ рд╣реИрдВ рдФрд░ рд╣рдореЗрдВ рдЙрдиреНрд╣реЗрдВ рдЕрдкрдиреЗ рдЬреАрд╡рди рдХреЛ рдХрдард┐рди рдирд╣реАрдВ рдмрдирд╛рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдврд╛рд▓рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдореИрдВ рдЙрд╕ рджрд░реНрд╢рди рдХреЛ рд╕рдордЭрддрд╛ рд╣реВрдВ рдЬрд┐рд╕рдХрд╛ рдХреЛрдИ рдкрд╛рд▓рди рдХрд░рддрд╛ рд╣реИ рд▓реЗрдХрд┐рди рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХреЗ "рд╣реБрдХ рдХрдорд╛рдВрдб" рдХреЛ рдЬреЛрдбрд╝рдирд╛ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред

+1 +1

рдЬрдм рдореИрдВ рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рддрд╛ рд╣реВрдВ, рддреЛ рдореИрдВ рдПрдХ рд╕рдорд╛рди рдХрд╛рд░реНрдп рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рдореНрди рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ:

docker-start.sh

#!/usr/bin/env bash

set -e
set -x

docker-compose up -d
sleep 5

# #Fix1: Fix "iptable service restart" error

echo 'Fix "iptable service restart" error'
echo 'https://github.com/moby/moby/issues/16137#issuecomment-160505686'

for container_id in $(docker ps --filter='ancestor=reduardo7/my-image' -q)
  do
    docker exec $container_id sh -c 'iptables-save > /etc/sysconfig/iptables'
  done

# End #Fix1

echo Done

@ reduardo7 рддрдм рдЖрдк

@ рдЖрдк рд╕рд╣реА рд╣реИрдВ! рдпрд╣ рдПрдХ рд╕рдорд╛рди рдХрд╛рд░реНрдп рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдорд╛рдзрд╛рди рд╣реИ, рдХреНрд╖рдорд╛ рдХрд░реЗрдВ!

@ reduardo7 рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдкреЛрд╕реНрдЯ рдХреА рдЧрдИ рдорд╛рдлреА рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рд╢рд╛рдпрдж рдХреБрдЫ рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реЛрдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реИред
рдореИрдВ рд╕рд┐рд░реНрдл рдЗрд╢рд╛рд░рд╛ рдХрд░ рд░рд╣рд╛ рдерд╛ рдХрд┐ рдореВрд▓ рдореБрджреНрджрд╛ рдЕрднреА рднреА рдЦрдбрд╝рд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рдмрдВрдж рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдерд╛ред :)

рдореИрдВ рд╕рдордЭрддрд╛ рд╣реВрдВ рдХрд┐ @dnephin рдХрд╛ рд╕реНрдЯреИрдВрдб, рдпрд╣рд╛рдВ рдмрддрд╛рдП рдЧрдП рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдкрд░реНрдпрд╛рдкреНрдд рд░реВрдк рд╕реЗ рд╡рд┐рднрд┐рдиреНрди рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдмрджрд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЕрдЧрд░ рдЗрд╕ рддрд░рд╣ рдХреЗ рдкреИрдЯрд░реНрди рдХрд╛ рдЕрдХреНрд╕рд░ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдХреИрд╕реЗ рдПрдХ рдЧрд╛рдЗрдб (рдпрд╛ рдХреБрдЫ рдкрд░реАрдХреНрд╖рдг) рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рддрд╛рдХрд┐ рджреВрд╕рд░реЛрдВ рдХреЛ рдЖрд╕рд╛рдиреА рд╕реЗ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХреЗрдВ?

рдХреЛрдИ рдЕрд╕рд╣рдорддрд┐ рдирд╣реАрдВ рд▓рдЧрддреА рд╣реИ рдХрд┐ рдЗрд╕ рдкреИрдЯрд░реНрди рдХрд╛ рдЕрдХреНрд╕рд░ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

@MaybeS рдХреЗрд╡рд▓ рдЕрд╕рд╣рдорддрд┐ рдпрд╣ рд╣реИ рдХрд┐ @dnephin рдЕрдкрдиреЗ

@ рд╕рдЪ рдореЗрдВ рд╣рд╛рдБред

onrun рдХрд╛ рдХреБрдЫ рд░реВрдк рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд░рдЪрдирд╛ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рдЪрд╛рд╣рдиреЗ рдХрд╛ рдЖрдЬ рдХрд╛ рдЙрджрд╛рд╣рд░рдг

version: "3.3"
services:
  gitlab:
    image: 'gitlab/gitlab-ce:latest'
    restart: always
    hostname: 'gitlab'
    environment:
      GITLAB_OMNIBUS_CONFIG: |
        # NOTE: this URL needs to be right both for users, and for the runner to be able to resolve :() - as its the repo URL that is used for the ci-job, and the pull url for users.
        external_url 'http://gitlab:9090'
        gitlab_rails['gitlab_shell_ssh_port'] = 2224
    ports:
      - '9090:9090'
      - '2224:22'
  gitlab-runner:
    image: gitlab/gitlab-runner:latest
    volumes:
    - /var/run/docker.sock:/var/run/docker.sock

рдФрд░ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдзрд╛рд╡рдХ рдкрдВрдЬреАрдХреГрдд рдирд╣реАрдВ рд╣реИ - рдФрд░ рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ

  1. Gitlab рдореЗрдВ рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рдЯреЛрдХрди рдмрд╛рд╣рд░ рдЦреАрдВрдЪреЗрдВ
  2. рд░рди рдХрдВрдЯреЗрдирд░ рдореЗрдВ рд░рдЬрд┐рд╕реНрдЯрд░

рдЗрд╕рд▓рд┐рдП рдХреЗрд╡рд▓ рдбреЙрдХ-рдХрдореНрдкреЛрдЬрд╝ рдореЗрдВ рдЕрдкрдиреЗ рдорд▓реНрдЯреА-рдХрдВрдЯреЗрдирд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреА рддреИрдирд╛рддреА рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп, рдореБрдЭреЗ рдХреБрдЫ рдорд╛рдзреНрдпрдорд┐рдХ рд╕рд╛рдзрдиреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ - рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ ... рдбреЙрдХреНрд╕?

export GL_TOKEN=$(docker-compose exec -u gitlab-psql gitlab sh -c 'psql -h /var/opt/gitlab/postgresql/ -d gitlabhq_production -t -A -c "SELECT runners_registration_token FROM application_settings ORDER BY id DESC LIMIT 1"')
docker-compose exec gitlab-runner gitlab-runner register -n \
  --url http://gitlab:9090/ \
  --registration-token ${GL_TOKEN} \
  --executor docker \
  --description "Docker Runner" \
  --docker-image "docker:latest" \
  --docker-volumes /var/run/docker.sock:/var/run/docker.sock \
  --docker-network-mode  "network-based-on-dirname-ew_default"

рдПрдордПрдордПрдо, рдореИрдВ рдХреБрдЫ рд╣реИрдХ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛ рд╕рдХрддрд╛ рд╣реВрдВ, рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рдФрд░ рдХрдВрдЯреЗрдирд░ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдбреЙрдХ рд╕реЙрдХреЗрдЯ рд╣реИ, рдФрд░ docker exec's

рдХреНрдпрд╛ рд╢рд░реНрдд рд╣реИ рдПрдХ рд░рд╛рд╕реНрддрд╛ рд╣реИ ...ред

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдореИрдВ рдЬреЛрдбрд╝ рд╕рдХрддрд╛ рд╣реВрдВ:

  gitlab-initializer:
    image: docker/compose:1.18.0
    restart: "no"
    volumes:
    - /var/run/docker.sock:/var/run/docker.sock
    - ./gitlab-compose.yml:/docker-compose.yml
    entrypoint: bash
    command: -c "sleep 200 && export GL_TOKEN=$(docker-compose -p sima-austral-deployment exec -T -u gitlab-psql gitlab sh -c 'psql -h /var/opt/gitlab/postgresql/ -d gitlabhq_production -t -A -c \"SELECT runners_registration_token FROM application_settings ORDER BY id DESC LIMIT 1\"') && docker-compose exec gitlab-runner gitlab-runner register -n --url http://gitlab:9090/ --registration-token ${GL_TOKEN} --executor docker --description \"Docker Runner\" --docker-image \"docker:latest\" --docker-volumes /var/run/docker.sock:/var/run/docker.sock --docker-network-mode  \"simaaustraldeployment_default\""

рдореЗрд░реА рд░рдЪрдирд╛ рдлрд╝рд╛рдЗрд▓ рдХреЗ рд▓рд┐рдП - рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореБрдЭреЗ рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓реВрдк / рдкреНрд░рддреАрдХреНрд╖рд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЧрд┐рдЯрд▓реИрдм рд╕реАрдзреЗ рддреИрдпрд╛рд░ рдирд╣реАрдВ рд╣реИ - sleep 200 рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

рддреЛ - рдЖрдк __can__ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рдХреЗ рдкреИрдЯрд░реНрди рдХреЛ рд╕реАрдзреЗ docker-compose.yml рд╣реИрдХ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ - рд▓реЗрдХрд┐рди рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ, рдореИрдВ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдХреБрдЫ рдХреНрд▓реАрдирд░ рд╕рдорд░реНрдерди рдЪрд╛рд╣рддрд╛ рд╣реВрдБ :)

@SvenDowideit onrun рдкрд╣рд▓реЗ рд╕реЗ рдореМрдЬреВрдж рд╣реИ, рдпрд╣ entrypoint рдпрд╛ cmd ред

рдЗрд╕ рдЫрд╡рд┐ рдХреЗ рд▓рд┐рдП рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдмрд┐рдВрджреБ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЖрдкрдХреЗ рд▓рд┐рдП рдПрдХ рд╣реБрдХ рднреА рдкреНрд░рджрд╛рди рдХрд░рддреА рд╣реИред $GITLAB_POST_RECONFIGURE_SCRIPT рдХреЛ рдПрдХ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рдкрде рдкрд░ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рд╕рднреА рд╕реЗрдЯрдЕрдк рдкреВрд░рд╛ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рдЪрд▓реЗрдЧрд╛ (рдЫрд╡рд┐ рдореЗрдВ /assets/wrapper )ред рдЕрдкрдиреА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рдкрде рдкрд░ env рдЪрд░ рд╕реЗрдЯ рдХрд░реЗрдВ рдЬреЛ psql + рд░рдЬрд┐рд╕реНрдЯрд░ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЖрдк рд╕рднреА рд╕реЗрдЯ рд╣реИрдВред

рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЕрдЧрд░ рдЫрд╡рд┐ рдЗрд╕ рд╣реБрдХ рдкреНрд░рджрд╛рди рдирд╣реАрдВ рдХрд┐рдпрд╛, рдпрд╣ рдХреБрдЫ рдРрд╕рд╛ рд╣реИ рдЬреЛ рдЫрд╡рд┐ рдХреЛ рдмрдврд╝рд╛рдХрд░ рдЖрд╕рд╛рдиреА рд╕реЗ рдЬреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореБрдЭреЗ рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓реВрдк / рдкреНрд░рддреАрдХреНрд╖рд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЧрд┐рдЯрд▓реИрдм рд╕реАрдзреЗ рддреИрдпрд╛рд░ рдирд╣реАрдВ рд╣реИ - рдиреАрдВрдж 200 рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рд╣реЛ рд╕рдХрддреА рд╣реИред

рдпрд╣ "рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рдмрд╛рдж рд╢реБрд░реВ" рд╡рд┐рдХрд▓реНрдк рдХреЗ рд╕рд╛рде рднреА рдЖрд╡рд╢реНрдпрдХ рд╣реЛрдЧрд╛ред рдЪреВрдВрдХрд┐ рдПрдВрдЯреНрд░реАрдкреЙрдЗрдВрдЯ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рд╣реБрдХ рдкреНрд░рджрд╛рди рдХрд░рддреА рд╣реИ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╕рдВрднрд╡рддрдГ рдЙрд╕ рд╕рдорд╛рдзрд╛рди рдХреЗ рд╕рд╛рде рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИред

рдирд╣реАрдВ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдиреЗ рдЬреЛ рд╕рдорд╕реНрдпрд╛ рджрд┐рдЦрд╛рдИ рд╣реИ, рдЙрд╕рдХрд╛ рдПрдХ рд╣рд┐рд╕реНрд╕рд╛ рдЖрдкрдХреЛ рдпрд╛рдж рд╣реЛ рдЧрдпрд╛ рд╣реИ:

рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдореБрдЭреЗ рджреЛрдиреЛрдВ рдХрдВрдЯреЗрдирд░реЛрдВ рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рди рдХрд┐ рдХреЗрд╡рд▓ рдПрдХ - рддреЛ рдПрдВрдЯреНрд░реАрдкреЙрдЗрдВрдЯ / рдХрдорд╛рдВрдб _not_ рдореБрдЭреЗ рдпрд╣ рджреЗрддрд╛ рд╣реИред

GL_TOKEN gitlab рдХрдВрдЯреЗрдирд░ рд╕реЗ рдЖрддрд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ рд░рдЬрд┐рд╕реНрдЯрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП gitlab-runner рдХрдВрдЯреЗрдирд░ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдЗрд╕рд▓рд┐рдП рдЬреЛ рд╣реИрдХ рдореИрдВ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рд╡рд╣ рддреАрд╕рд░реЗ рдХрдВрдЯреЗрдирд░ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП docker/compose рдЫрд╡рд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реИ - рдпрд╣ рдРрд╕рд╛ рдХреБрдЫ рдирд╣реАрдВ рд╣реИ рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдЖрдк рдПрдХ рдХрдВрдЯреЗрдирд░ рдХреЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди / рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ / рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдПрдХ (рддреБрдЪреНрдЫ) рдЙрджрд╛рд╣рд░рдг рд╣реИ рдмрд╣реБ-рдХрдВрдЯреЗрдирд░ рд╕рдордиреНрд╡рдп рдЬрд┐рд╕рдореЗрдВ рдЕрдзрд┐рдХ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред

рдореИрдВ рдЙрдиреНрд╣реЗрдВ рдереЛрдбрд╝рд╛ рдФрд░ рдЬрд╛рджреБрдИ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЪреАрдЬреЛрдВ рдкрд░ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реВрдВ - рдЬрд┐рд╕рдХрд╛ рдореВрд▓ рд░реВрдк рд╕реЗ рдорддрд▓рдм рд╣реИ рдХрд┐ рдореЗрд░реЗ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдХрдВрдЯреЗрдирд░ рдореЗрдВ рдХреБрдЫ рд╕реНрд▓реАрдк рд▓реВрдк рд╣реЛрддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдореЗрдВ рдЧрд┐рдЯрд▓реИрдм рдХреЗ рд▓рд┐рдП рдХреБрдЫ рд╕рдордп рд▓рдЧрддрд╛ рд╣реИред

TBH, рдореБрдЭреЗ рд▓рдЧрдиреЗ рд▓рдЧрд╛ рд╣реИ рдХрд┐ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рдПрдХ init-container рдЪрд▓ рд░рд╣рд╛ рд╣реИ рдЬреЛ рдЦреБрдж рдХрдВрдкреЛрдЬрд╝ рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ рдФрд░ docker / рдХрдВрдкреЛрдЬрд╝ рдЗрдореЗрдЬ, _is_ рдЗрд╕ рддрд░рд╣ рдХреА рдЬрдЯрд┐рд▓рддрд╛ рдХреЛ рдЫрд┐рдкрд╛рдиреЗ рдХрд╛ рд╕рд╣реА рддрд░реАрдХрд╛ рд╣реИ - рдиреЙрди-рдкреНрд░реЛрдбрдХреНрд╢рди рдХреЗ рд▓рд┐рдП "рдХреЛрд╢рд┐рд╢" рдореБрдЭреЗ рдмрд╛рд╣рд░, рдФрд░ рдпрд╣ рд╕рд┐рд░реНрдл рдЗрд╕ рддрд░рд╣ рдХреА рд╕реНрдерд┐рддрд┐рдпреЛрдВ "рдХрд╛рдо рдХрд░реЗрдВрдЧреЗ"ред

_IF_ рдореИрдВ рдорджрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдЕрдЬреАрдм рд╡рд╛рдХреНрдпрд╛рддреНрдордХ рдЪреАрдиреА рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдерд╛, рд╢рд╛рдпрдж рдореИрдВ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдЬрд╛рдКрдВрдЧрд╛:

gitlab-initializer:
    image: docker/compose:1.18.0
    restart: "no"
    volumes:
    - /var/run/docker.sock:/var/run/docker.sock
    - ./gitlab-compose.yml:/docker-compose.yml
    entrypoint: ['/bin/sh']
    command: ['/init-gitlab.sh']
    file:
      path: /init-gitlab.sh
      content: |
            for i in $(seq 1 10); do
                export GL_TOKEN=$(docker-compose -f gitlab-compose.yml -p sima-austral-deployment exec -T -u gitlab-psql gitlab sh -c 'psql -h /var/opt/gitlab/postgresql/ -d gitlabhq_production -t -A -c "SELECT runners_registration_token FROM application_settings ORDER BY id DESC LIMIT 1"')
                echo "$i: token($?) == $GL_TOKEN"
                ERR=$?

                if [[ "${#GL_TOKEN}" == "20" ]]; then
                    break
                fi
                sleep 10
            done
            echo "GOT IT: token($ERR) == $GL_TOKEN"

            for i in $(seq 1 10); do
                if  docker-compose -f gitlab-compose.yml  -p sima-austral-deployment exec -T gitlab-runner \
                    gitlab-runner register -n \
                    --url http://gitlab:9090/ \
                    --registration-token ${GL_TOKEN} \
                    --executor docker \
                    --description "Docker Runner" \
                    --docker-image "docker:latest" \
                    --docker-volumes '/var/run/docker.sock:/var/run/docker.sock' \
                    --docker-network-mode  "simaaustraldeployment_default" ; then
                        echo "YAY"
                        break
                fi
                sleep 10
            done

рдпрд╛рдиреА, рдЬреИрд╕реЗ рдХреНрд▓рд╛рдЙрдб-рдЗрдирд┐рдЯ: http://cloudinit.readthedocs.io/en/latest/topics/examples.html#writing -out-рдордирдорд╛рдиреА-рдлрд╛рдЗрд▓реЗрдВ

рд▓реЗрдХрд┐рди рдЬрдм рдпрд╣ рдиреАрдЪреЗ рдЖрддрд╛ рд╣реИ - рд╣рдо _have_ рдПрдХ рдбреЙрдХрдЯрд░-рдХрдореНрдкреЛрдЬ-рд╡рд╛рдИрдПрдордПрд▓ рдХреЗ рдЕрдВрджрд░ рд╕реЗ рдЬрдЯрд┐рд▓ рдорд▓реНрдЯреА-рдХрдВрдЯреЗрдирд░ рдЪреАрдЬреЛрдВ рдХрд╛ рд╕рдордиреНрд╡рдп рдХрд░рдиреЗ рдХрд╛ рдПрдХ рд╕рдорд╛рдзрд╛рди рд╣реИред

рдпрджрд┐ рдЖрдк рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдЯреЛрдХрди рд╕реЗрдЯ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реИрдВ, рддреЛ рдЖрдк рдЗрд╕реЗ gitlab-runner рдПрдВрдЯреНрд░реАрдкреЙрдЗрдВрдЯ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕реЗ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдХреНрдпрд╛ рдЙрд╕ рд╕рдордп рдХреЗ рдкреНрд░рдореБрдЦ рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИ?

@dnephin рдЬрд┐рд╕ рдХреНрд╖рдг рдЖрдк рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд░рддреЗ рд╣реИрдВ, рдЖрдк рдПрдХ рдкреНрд░рдХрд╛рд╢ рд╡рд░реНрд╖ рдФрд░ рдлрд┐рд░ рдХреБрдЫ рдХреЗ рдирд┐рд╢рд╛рди рд╕реЗ рджреВрд░ рд╣реЛрддреЗ рд╣реИрдВред

onrun entrypoint рдпрд╛ cmd ред

entrypoint / cmd рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИ рдЬреЛ рдХрдВрдЯреЗрдирд░ init / PID 1 рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд▓реЗрдЧрд╛ред

рдЗрд╕ рдФрд░ рдХрдИ рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ рдореЗрдВ рд╡рд░реНрдгрд┐рдд рд╡рд┐рдЪрд╛рд░ init scripts , рдЬреЛ рдмреВрдЯрд┐рдВрдЧ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ init рд╕реЗ рдЕрд▓рдЧ рд╣реИ, рдФрд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЗрдирд┐рдЯ рд▓рд┐рдкрд┐рдпреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИ, рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗрдЯрдЕрдк рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪреЛред

рдпрд╣ @dnephin рд╢рд╛рдпрдж рдЕрдзрд┐рдХ рдЙрдкрдпреЛрдЧреА рд╣реИ рдЕрдЧрд░ рдЖрдк, рд╕рд╛рдорд╛рдиреНрдп рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╕реЗрдЯ рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдирд╣реАрдВ рдмрд▓реНрдХрд┐ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдХрдВрдЯреЗрдирд░ рд╕реЗрдЯ рдХреЗ рдореБрджреНрджреЛрдВ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╕реЗ рд╣реЛрдЧреАред

рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореИрдВрдиреЗ рдХреНрдпрд╛ рджреЗрдЦрд╛ рд╣реИ, рдирд╣реАрдВ, рдЗрд╕рдХрд╛ рдПрдХ рдЙрддреНрдкрдиреНрди рд░рд╣рд╕реНрдп - рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдпрд╣ рдХреЗрд╡рд▓ рдорд▓реНрдЯреА-рдХрдВрдЯреЗрдирд░ рд╕рдордиреНрд╡рдп рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЗрд╕ рдЫреЛрдЯреЗ рд╕реЗ рдкреНрд▓реЗ рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рднреА рд╣реЛрдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ - рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рддреЗрдЬрд╝ рд╣реИ рдЬрдирддрд╛ рдореЗрдВ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдкред

рдпрд╣ рдХреИрд╕реЗ рд╕рдВрднрд╡ рд╣реИ рдХрд┐ рд╣рдо v1 (https://docs.docker.com/compose/compose-comile/compose-file) рдХреЗ рдмрд╛рдж рд╕реЗ рдПрдХ рдХрдВрдкреЛрдЬрд╝ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ entrypoint рдФрд░ command рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реИрдВ -v1 / # рдПрдВрдЯреНрд░реАрдкреЙрдЗрдВрдЯ) рдФрд░ рдЕрднреА рднреА рдПрдХ рдирд┐рд░реНрджреЗрд╢ рдирд╣реАрдВ рд╣реИ рдЬреИрд╕реЗ рдХрд┐ рдХрдВрдЯреЗрдирд░ рдЪрд▓рд╛рдиреЗ рдкрд░ onrun рдХрдорд╛рдВрдб рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП?

TBH, рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ onrun рдкреНрд░рд╢рдВрд╕рдиреАрдп рд╣реИ - рдбреЙрдХрд░, рдпрд╛ рдСрд░реНрдХреЗрд╕реНрдЯреНрд░реЗрдЯрд░ рдХреЛ рдпрд╣ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ "рдХрдВрдЯреЗрдирд░ рд╕рднреА рдКрдкрд░ рд╣реИрдВ" рдХрд╛ рдЕрд░реНрде рд╣реИ - рдореЗрд░реЗ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдЬрдм рддрдХ рдореИрдВ рдРрд╕рд╛ рдирд╣реАрдВ рдХрд░рддрд╛, рддрдм рддрдХ рд╡рд┐рдлрд▓ рд░рд╣реЗрдЧрд╛ред рдХреБрдЫ рдЕрддрд┐рд░рд┐рдХреНрдд "рд╕рд╛рдорд╛рди" рдЬрд╣рд╛рдВ рдореБрдЭреЗ рдПрдХ рдХрдВрдЯреЗрдирд░ рд╕реЗ рдЬрд╛рдирдХрд╛рд░реА рдорд┐рд▓рддреА рд╣реИ, рдФрд░ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдЕрдиреНрдп рдХрдВрдЯреЗрдирд░реЛрдВ рдореЗрдВ рдХреБрдЫ рдЕрдиреНрдп рдЪреАрдЬреЛрдВ рдХреЛ рдХрд┐рдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдФрд░ _if_ рдореИрдВрдиреЗ рд╕рд╣реА рдХрд┐рдпрд╛, рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдореБрдЭреЗ рдореВрд▓ рд░реВрдк рд╕реЗ рдПрдХ рдСрдкрд░реЗрдЯрд░ рдХрдВрдЯреЗрдирд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдХреЛрдб рд╢рд╛рдорд┐рд▓ рд╣реИ рдЬреЛ рдкрддрд╛ рд▓рдЧрд╛рддрд╛ рд╣реИ рдХрд┐ рдорд▓реНрдЯреА-рдХрдВрдЯреЗрдирд░ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рдХреБрдЫ рд╣рд┐рд╕реНрд╕реЗ рдЗрд╕рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд░реВрдк рд╕реЗ рддреИрдпрд╛рд░ рд╣реИрдВ, рдХреБрдЫ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, (рдХреБрд▓реНрд▓рд╛ рдФрд░ рджреЛрд╣рд░рд╛рдПрдВ), рдЬрдм рддрдХ рдХрд┐ рдпрд╣ рдпрд╛ рддреЛ рдЕрдкрдиреА рдиреМрдХрд░реА рдкреВрд░реА рдХрд░ рд▓реЗрддрд╛ рд╣реИ рдФрд░ рдмрд╛рд╣рд░ рдирд┐рдХрд▓ рдЬрд╛рддрд╛ рд╣реИ, рдпрд╛ рд╢рд╛рдпрдж рдЪреАрдЬреЛрдВ рдкрд░ рдирдЬрд╝рд░ рд░рдЦрддрд╛ рд╣реИ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдареАрдХ рдХрд░рддрд╛ рд╣реИред

рдФрд░ рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рдПрдХ рдиреМрдХрд░реА рдХреА рддрд░рд╣ рд▓рдЧрддрд╛ рд╣реИ рдЬреЛ рдХреЛрдб рдХреЗ рд╕рд╛рде рдбреЙрдХрдЯрд░-рдХрдВрдкреЛрдЬ рдХрдВрдЯреЗрдирд░ рджреНрд╡рд╛рд░рд╛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдореИрдВ рд╢рд╛рдпрдж рдЗрд╕ рд╕рдВрдЪрд╛рд▓рдХ рдХреЗ рд╕рд╛рде рдЦреЗрд▓рдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реВрдВ, рдлрд┐рд░ рдЗрд╕ рдСрдкрд░реЗрдЯрд░ рдХреЛ рдХрд┐рд╕реА рдРрд╕реА рдЪреАрдЬ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ рдЬреЛ рдбреЙрдХрдЯрд░ рдЭреБрдВрдб рдХреЗ рдвреЗрд░ (рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреА рдЕрдиреНрдп рдЬрд░реВрд░рддреЛрдВ рдХреЗ рдХрд╛рд░рдг) рд╕реЗ рдирд┐рдкрдЯ рд╕рдХрддреА рд╣реИред

рдореБрдЭреЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдорд╛рддреНрд░рд╛ рдореЗрдВ рдЪреАрдиреА рд╣реИ рдЬреЛ рдбреЙрдХрдЯрд░-рдХрдореНрдкреЛрдЬрд╝ рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬрдм рддрдХ рдХрд┐ рдЗрд╕рдХреЗ рдХрдВрдЯреЗрдирд░ рдХреЛ "рдпрд╣ рдПрдХ рдСрдкрд░реЗрдЯрд░ рд╣реИ, рдЗрд╕реЗ рдЬрд╛рджреВ рдХреА рдХреНрд╖рдорддрд╛ рджреЗрдВ" рдЬреИрд╕реЗ рдХреБрдЫ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░реЗрдВред

рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рджреЗрдЦрд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рд╕реБрдирдирд╛ рдирд╣реАрдВ рдЪрд╛рд╣рддреЗ рд╣реИрдВ .. рдореИрдВ рдХрд┐рд╕реА рдЕрдиреНрдп рдЯреВрд▓ рдХреЛ рджреЗрдЦреВрдВрдЧрд╛ ... рдбреЙрдХ-рдХрдореНрдкреЛрдЬрд╝ рдПрдХ рдмрдбрд╝рд╛ рджрд░реНрдж рд╣реИ .. рдореБрдЭреЗ рд╕рдордЭ рдирд╣реАрдВ рдЖрддрд╛ рдХрд┐ рдЖрдк рдпрд╣ рдХреНрдпреЛрдВ рдирд╣реАрдВ рд╕рдордЭ рд╕рдХрддреЗ рдХрд┐ рдХреЗрд╡рд▓ рдЙрдкрдпреЛрдЧреА рдЪреАрдЬ рдЬреЛ рдЖрддреА рд╣реИ рдбреЙрдХ-рдХрдореНрдкреЛрдЬрд░ рдПрдХ рдмрд┐рд▓реНрдб рдЯреВрд▓ рд╣реИ ... рдореИрдВрдиреЗ рд╕рдХреНрд░рд┐рдп рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдПрдХ рдХрдВрдЯреЗрдирд░ рдХреЗ рдЕрдВрджрд░ рдЕрдиреБрдорддрд┐рдпреЛрдВ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рддрдирд╛ рд╕рдордп рдмрд┐рддрд╛рдпрд╛ рд╣реИ рдХрд┐ рдХреИрд╕реЗ рдореИрдВ SIMPLE рдХрдорд╛рдВрдб рдЪрд▓рд╛ рд╕рдХрддрд╛ рд╣реВрдВред

рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдбреЙрдХ-рдХрдореНрдкреЛрдЬрд░ рдиреЗ рдЕрднреА рддрдХ рд░рд╛рдЬреНрдп рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ ...

рдореИрдВ рднреА рдХреБрдЫ рдРрд╕рд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдЬреЛ рдореЗрд░реА рд░рдЪрдирд╛ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ onrun рд╣реЛ

__BUT__, рди рддреЛ рдХрдВрдЯреЗрдирд░, рдФрд░ рди рд╣реА рдпрд╣ рдЬрд╛рдирдиреЗ рдХрд╛ рддрд░реАрдХрд╛ рд╣реИ рдХрд┐ onrun рдорддрд▓рдм рд╣реИред рдпрд╣реА рдХрд╛рд░рдг рд╣реИ рдХрд┐ рдСрдкрд░реЗрдЯрд░ рдкреИрдЯрд░реНрди рдореМрдЬреВрдж рд╣реИ, рдФрд░ рдореИрдВрдиреЗ https://github.com/docker/compose/issues/1809#issuecomment -362126930 рдореЗрдВ рдЙрджрд╛рд╣рд░рдг рдХреНрдпреЛрдВ рдмрдирд╛рдП

рдпрд╣ __is__ рдЖрдЬ рддрдХ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ - рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ, рдЖрдк рдПрдХ onrun рд╕реЗрд╡рд╛ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ рдЬреЛ рддрдм рддрдХ рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рддреА рд╣реИ рдЬрдм рддрдХ рдХрд┐ рдЕрдиреНрдп рд╕реЗрд╡рд╛рдПрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ (рдЧреАрддрд╛рд▓рд╛рдм рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЬреЛ рдХрд┐ рдереЛрдбрд╝рд╛ рд╕рдордп рд▓рдЧрддрд╛ рд╣реИ) рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реИрдВ, рдФрд░ рдлрд┐рд░ рдХрд░реЗрдВ рдЪреАрдЬреЛрдВ рдХреЛ рд╕рдореЗрдЯрдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдЬреЛ рдХреБрдЫ рднреА рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред

рдЕрдЧрд░ рд╡рд╣рд╛рдБ _is_ рдХреБрдЫ рдРрд╕рд╛ рд╣реИ рдЬреЛ рдЙрд╕рдХреЗ рд╕рд╛рде рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдХреГрдкрдпрд╛ рд╣рдореЗрдВ рдмрддрд╛рдПрдВ, рдФрд░ рд╣рдо рджреЗрдЦреЗрдВрдЧреЗ рдХрд┐ рдХреНрдпрд╛ рд╣рдо рдХреБрдЫ рдкрддрд╛ рд▓рдЧрд╛ рд╕рдХрддреЗ рд╣реИрдВ!

рдореИрдВ рднреА рдХреБрдЫ рдРрд╕рд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдЬреЛ рдореЗрд░реЗ рдХрдВрдкреЛрдЬ рдХреА рдЧрдИ рдлрд╛рдЗрд▓ рдХреЛ рдЖрдЧреЗ рдмрдврд╝рд╛рдП

рд▓реЗрдХрд┐рди, рди рддреЛ рдХрдВрдЯреЗрдирд░, рдФрд░ рди рд╣реА рд░рдЪрдирд╛ рдХреЗ рдкрд╛рд╕ рдпрд╣ рдЬрд╛рдирдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рд╣реИ рдХрд┐ рдСрдирд░реВрди рдХрд╛ рдорддрд▓рдм рдХреНрдпрд╛ рд╣реИред

рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВ рдЗрд╕реЗ рджреЗрдЦрддрд╛ рд╣реВрдВ, onrun рдкреНрд░рддрд┐ рд╕реЗрд╡рд╛, рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдЬрдм рдкрд╣рд▓реЗ рдХрдВрдЯреЗрдирд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╢реБрд░реВ рд╣реЛрддреА рд╣реИред рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдХрдВрдЯреЗрдирд░ рдХреЗрд╡рд▓ рдПрдХ рд╣реА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдЪрд▓рд╛ рд░рд╣рд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдХрдВрдЯреЗрдирд░ рдЪрд▓рд╛рдиреЗ рдХрд╛ рдЕрдиреБрд╢рдВрд╕рд┐рдд рддрд░реАрдХрд╛ рд╣реИред

рдХреНрд░реЙрд╕-рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рд╕рдорд░реНрдерди рдХрд╛ рдореБрджреНрджрд╛ рдкрд╣рд▓реЗ рд╣рд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдХреНрдпреЛрдВрдХрд┐ рдХрдорд╛рдВрдб docker exec рдорд╛рдзреНрдпрдо рд╕реЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдУрдПрд╕ рдЕрдЬреНрдЮреЗрдпрд╡рд╛рджреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдЙрд╕реА рддрд░рд╣ рдЬреИрд╕реЗ рдХрд┐ RUN рдХрд╛ рдорддрд▓рдм рдбреЙрдХрдлреЗрд░рд╛рдЗрд▓ рдореЗрдВ рдПрдХ рд▓рд┐рдирдХреНрд╕ рдХрдорд╛рдВрдб рд╕реЗ рдирд╣реАрдВ рд╣реИред
https://docs.microsoft.com/en-us/virtualization/windowscontainers/manage-docker/manage-windows-dockerfile

рдЕрднреА рднреА onrun рд╕реБрд╡рд┐рдзрд╛ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рд╣реИ

рдореБрдЭреЗ рдЗрд╕ onrun рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреА рднреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдореИрдВрдиреЗ рд╕реЛрдЪрд╛ рдХрд┐ рдпрд╣ рдЗрд╕ рдЙрдкрдХрд░рдг рдореЗрдВ рдерд╛ред рдЗрд╕ рдЕрднрд╛рд╡ рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рдХрд╛рд░рдг рдЕрдм рдореБрдЭреЗ 2 рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореИрди рдмрдирд╛рдП рд░рдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рджреЛрд╕реНрддреЛрдВ, рдЕрдЧрд░ рдореИрдВ рдЗрд╕ docker-compose рдЖрд╕рдкрд╛рд╕ рдПрдХ рд░реИрдкрд░ рдмрдирд╛рдКрдВ рдФрд░ рдЗрд╕ onrun рд╕реБрд╡рд┐рдзрд╛ рдХреА рдЕрдиреБрдорддрд┐ рджреВрдВ? рдХреНрдпрд╛ рдЖрдк рд▓реЛрдЧ рдЗрд╕рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░реЗрдВрдЧреЗ?

@wongjiahau рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ? https://github.com/docker/compose/issues/1809#issuecomment -348497289

@ reduardo7 рд╣рд╛рдВ, рдореИрдВрдиреЗ рдЗрд╕реЗ docker-composei рдирд╛рдордХ рдПрдХ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рдЕрдВрджрд░ рд▓рдкреЗрдЯрдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрд╛, рдФрд░ docker-composei.yml рдЬрд┐рд╕рдореЗрдВ onrun рд╡рд┐рд╢реЗрд╖рддрд╛ рд╢рд╛рдорд┐рд▓ рд╣реИред
Btw, docker-composei рдЕрд░реНрде docker-compose improved ред

рдЕрд╕рд▓реА рд╕рдорд╛рдзрд╛рди рд╕рдВрднрд╡рддрдГ рдПрдХ 'рдСрд░реНрдХреЗрд╕реНрдЯреНрд░реЗрдЯрд░' рдЫрд╡рд┐ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рдирд╛ рд╣реИ рдЬреЛ рдЖрдВрддрд░рд┐рдХ рд░реВрдк рд╕реЗ 'рдРрдк рдЗрдореЗрдЬреЗрд╕' (рд╕рдВрднрд╡рддрдГ рдбреЙрдХрд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ) рдХреЛ рдЪрд▓рд╛рддреА рд╣реИ (рдмреИрд╢ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ) рдФрд░ рдЪрд▓рддреА рд╣реИред рдЕрдиреНрдпрдерд╛ рд╣рдо рд╣рдореЗрд╢рд╛ рдПрдХ рдЙрдкрдХрд░рдг рдХреЗ рд▓рд┐рдП рдФрд░ рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдкреВрдЫреЗрдВрдЧреЗ рдЬреЛ "рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рд╣реИ рдЬреЛ рд╣рдо рдЗрд╕реЗ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ"ред

рддреЛ рд╣рдореЗрдВ рднреА рдбреЛрдХрд░ рдХреЗ рднреАрддрд░ рдбреЙрдХрдЯрд░ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП ...

рдмрд╕ рдЗрд╕ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП рдореЗрд░рд╛ рд╕рдорд░реНрдерди рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдПред onrun рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╕рдВрднрд╛рд╡рд┐рдд рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдФрд░ рднрд╡рд┐рд╖реНрдп рдХреЗ рдкреНрд░рдорд╛рдг рдХреЛ рдереЛрдбрд╝рд╛ рдЪреМрдбрд╝рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╢рд╛рдпрдж рдХрд┐рд╕реА рдХреЛ рдЕрдзрд┐рдХ рд╡реНрдпрд╛рдкрдХ 'рд╡рдирд╡реЗрдВрдЯ' рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдХреЛ рджреЗрдЦрдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рд╕реЗ рдПрдХ onrun рд╣реЛрдЧрд╛ред

рдХрдВрдЯреЗрдирд░реЛрдВ рдХреЗ рд▓рд┐рдП рдкреНрд░рдЪрд▓рд┐рдд рджрд┐рд╢рд╛ рдХреЛ рдЖрддреНрдо-рдирд┐рд╣рд┐рдд, рдкреНрд░рддрд┐ рдХрдВрдЯреЗрдирд░ рдПрдХ-рд╕реЗрд╡рд╛ рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП, рдХрдВрдЯреЗрдирд░ рдХреЛ рдЕрдкрдиреЗ рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рдВрджрд░реНрдн рдЬрд╛рдЧрд░реВрдХрддрд╛ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдЖрддреНрдордирд┐рд░реНрднрд░ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдЙрд╕ рд╕реЗ рдХреНрдпрд╛ рдмрд╣рддрд╛ рд╣реИ рдХрдореНрдкреЛрдЬрд╝ рдлрд╝рд╛рдЗрд▓ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдорд╛рдзреНрдпрдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рди рдХрд┐ рдмреЛрд▓реНрдЯ-рдСрди рд╕реНрдХреНрд░рд┐рдкреНрдЯред рдЙрд╕ рдХреЗ рдЦрд┐рд▓рд╛рдл рдмрд╣рд╕ рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИ, рдЬрдм рддрдХ рдХрд┐ рдЖрдк рдХреБрдЫ рдЖрддреНрдо-рдЕрд╡рд╢реЛрд╖рд┐рдд рдЬрд╝реАрд▓реЛрдЯ рдирд╣реАрдВ рд╣реИрдВред

рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рд░реЗрдбрд┐рд╕ рд╕рд░реНрд╡рд░ рд╢реБрд░реВ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рдореЗрд░реЗ рд░реЗрдбрд┐рд╕ рдХрдВрдЯреЗрдирд░реЛрдВ рдиреЗ рд▓реБрдЖ рд▓рд┐рдкрд┐рдпреЛрдВ рдХреЛ рд▓реЛрдб рдХрд┐рдпрд╛ред рд╕рд╛рдорд╛рдиреНрдп рдЧреИрд░ рдХрдВрдЯреЗрдирд░ рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рдореБрдЭреЗ рдкреЛрд╕реНрдЯ-рд╕реНрдЯрд╛рд░реНрдЯрдЕрдк рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд┐рд╕реНрдЯрдордб рдорд┐рд▓рддрд╛ рд╣реИред рд╕рд┐рд╕реНрдЯреЗрдо рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдХреЗ рд╕рд╛рде рд╕рд░рд▓ рдФрд░ рд╕реБрд╕рдВрдЧрддред рдХрдВрдЯреЗрдирд░реЛрдВ рдХреЛ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрджрд░реНрдн рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдореЗрдВ рдЕрдкрдиреА рднреВрдорд┐рдХрд╛ рдХреЗ рд▓рд┐рдП рдЗрд╕реА рддрд░рд╣ рдХреЗ рд╕рд┐рджреНрдзрд╛рдВрдд рдореМрдЬреВрдж рд╣реЛрдиреЗ рдЪрд╛рд╣рд┐рдПред

рдЕрдиреБрд░рдХреНрд╖рдХреЛрдВ рдХреЛ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рд╕рд▓рд╛рд╣ рдХреЗ рд░реВрдк рдореЗрдВ, рдХреГрдкрдпрд╛ рд╕рд┐рджреНрдз рд╕рдВрдЪрд╛рд▓рди рд╕рд┐рджреНрдзрд╛рдВрддреЛрдВ рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░реЗрдВ рди рдХрд┐ рд╡реНрдпрдХреНрддрд┐рдЧрдд рдкреНрд░рд╛рдердорд┐рдХрддрд╛рдПрдВред

рдЗрд╕рд▓рд┐рдП рд╕рдорд╛рдзрд╛рди (рдЗрд╕ рд╕рд╛рд░реЗ рдзрд╛рдЧреЗ рдХреЛ рдкрдврд╝рдиреЗ рдХреЗ рдмрд╛рдж) рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдмреИрд╢ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИ ... рдЙрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдореИрдВ docker- рд░рдЪрдирд╛ рдХреЛ рд╣рдЯрд╛ рджреВрдВрдЧрд╛ (рд╣рдо docker cmd рдХреЗ рд╕рд╛рде рд╕рдм рдХреБрдЫ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ ...)

рдЙрди рд▓реЛрдЧреЛрдВ рдХреА рдмрд╛рдд рд╕реБрдирдиреЗ рдХреЗ рд▓рд┐рдП рджреЗрд╡ рдЬреЛ рдЖрдкрдХреА рдЪреАрдЬреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ :)

рддрд░реНрдХреЛрдВ рдФрд░ рдкреНрд░рддрд┐рд╡рд╛рджреЛрдВ рд╡рд╛рд▓реЗ рд╕рдВрджреЗрд╢реЛрдВ рдХреА рдорд╛рддреНрд░рд╛ рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП рд╕рд░рд▓ рдкреНрд░рд╕реНрддрд╛рд╡реЛрдВ (рдЬреИрд╕реЗ рдХрд┐ рдПрдХ рдШрдЯрдирд╛ рд╣реЛрдиреЗ рдХреЗ рдирд╛рддреЗ ) рд╕реЗ

рдХреГрдкрдпрд╛, рдУрдкрди рд╕реЛрд░реНрд╕ рдХреЛ рд╕рд╣реА рдорд╛рдпрдиреЗ рдореЗрдВ _open_ рдмрдирд╛рддреЗ рд╣реИрдВред

рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдкрд░ рдХреЛрдИ рдЕрджреНрдпрддрди? рд╕рдорд╕реНрдпрд╛ рдХреНрдпрд╛ рд╣реИ?

@ v0lume рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реЗрд╢рд╛рди рдирд╣реАрдВ рдереЗ

рд╡рд╣рд╛рдБ рдЕрднреА рднреА рдПрдХ рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рд▓рдЧрддрд╛ ... рдореИрдВ рдПрдХ hacky workaround рд╕рд╛рдЭрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рд╣рд╛рд▓рд╛рдВрдХрд┐ред
Docker-compose.yml рдореЗрдВ рд╕рдВрд╕реНрдХрд░рдг "2.1" рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдХреЗ рдЖрдк рдЗрдореЗрдЬ рдХреЗ рдЕрдВрджрд░ рдЕрддрд┐рд░рд┐рдХреНрдд рдХреЛрдб рдХреЛ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рд╛рд╕реНрдереНрдп рдкрд░реАрдХреНрд╖рдг рдХрд╛ рджреБрд░реБрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрдм рдЗрд╕реЗ рд╢реБрд░реВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣рд╛рдБ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ:

version: '2.1'
services:
    elasticsearch:
        image: docker.elastic.co/elasticsearch/elasticsearch:5.4.3
        healthcheck:
            test: |
                curl -X PUT elasticsearch:9200/scheduled_actions -H "ContentType: application/json" -d '{"settings":{"index":{"number_of_shards":'1',"number_of_replicas":'0'}}}' &&
                curl --silent --fail localhost:9200/_cat/health ||
                exit 1
            interval: 11s 
            timeout: 10s 
            retries: 3
        environment:
            - discovery.type=single-node
            - ES_JAVA_OPTS=-Xms1g -Xmx1g
            - xpack.security.enabled=false
    main:
        image: alpine
        depends_on:
            elasticsearch:
                condition: service_healthy

рдпрджрд┐ рдЖрдк рдЬреЛ рд╕реНрд╡рд╛рд╕реНрдереНрдп рдкрд░реАрдХреНрд╖рдг рдкрд░реАрдХреНрд╖рдг рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд▓рд┐рдЦрддреЗ рд╣реИрдВ, рд╡рд╣ рдХреЛрдб> = 1 рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓рддрд╛ рд╣реИ, рддреЛ рдЗрд╕реЗ рдХрдИ рдмрд╛рд░ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдХрд┐рд╕реА рд╕реЗрд╡рд╛ рдХрд╛ рд╕реНрд╡рд╛рд╕реНрдереНрдп рдкрд░реАрдХреНрд╖рдг рдХреЗрд╡рд▓ рддрднреА рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдЬрдм рдХреЛрдИ рдЕрдиреНрдп рд╕реЗрд╡рд╛ рдЙрд╕ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддреА рд╣реИ рдФрд░ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рджреЗрдЦреА рдЧрдИ service_healthy рд╕реНрдерд┐рддрд┐ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддреА рд╣реИред

рдореБрдЭреЗ @ рдЯреА-рд╡реАрдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдкрд╕рдВрдж рд╣реИ рдФрд░ рдкрд╣рд▓реЗ рднреА рдЗрд╕рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдореИрдВ рдПрдХ рдФрд░ рд╕рд╛рдЭрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ ... рд╣реИрдХ:

# Run Docker container here

until echo | nc --send-only 127.0.0.1 <PORT_EXPOSED_BY_DOCKER>; do
  echo "Waiting for <YOUR_DOCKER> to start..."
  sleep 1
done

# Do your docker exec stuff here

+1
рдореИрдВ рдЗрд╕ рдкрд░ рдкреВрд░реА рддрд░рд╣ рд╕рд╣рдордд рд╣реВрдВ рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдФрд░ рдпрд╣ рдХреБрдмреЗрд░рдиреЗрдЯ рдЬреИрд╕реЗ рдЕрдиреНрдп рдбреЙрдХрдЯрд░ рдСрд░реНрдХреЗрд╕реНрдЯреНрд░реЗрдЯрд░ рджреНрд╡рд╛рд░рд╛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд▓рд╛рдЧреВ рд╣реИред рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХрдВрдЯреЗрдирд░реЛрдВ рдХреЗ рд▓рд┐рдП рдЬреАрд╡рди рдЪрдХреНрд░ рд╣реБрдХ рд╣реИ рдФрд░ рдпрд╣рд╛рдВ рдкреНрд░рд▓реЗрдЦрд┐рдд

рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдПрдХ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдпреЛрдЧрджрд╛рди рдХрд░рдиреЗ рджреЗрдВ рдЬреЛ рдЖрдк рдбреЙрдХрдлрд╛рдЗрд▓реНрд╕ рдХреЗ рд╕рд╛рде рд╣рд▓ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗред

рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рдЖрдкрдХреЛ рд░рдирдЯрд╛рдЗрдо рдкрд░ рдПрдХ рд╡реЙрд▓реНрдпреВрдо рдорд╛рдЙрдВрдЯ рдХрд░рдиреЗ рдФрд░ рдкрд╣рд▓реЗ рд╕реЗ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХреЗ рд╕рдЯреАрдХ рдирд╛рдо рдХреЛ рдЬрд╛рдирдиреЗ рдХреЗ рдмрд┐рдирд╛ рдЕрдкрдиреЗ рдХрдВрдЯреЗрдирд░ рд╕реЗ рд╡реЙрд▓реНрдпреВрдо рддрдХ рдПрдХ рдкреНрд░рддреАрдХрд╛рддреНрдордХ рд▓рд┐рдВрдХ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рдорд╛рдорд▓рд╛ рдерд╛ рдХрд┐ рдбреАрдЖрдИрдЖрд░ рдирд╛рдо рдЙрд╕ рд╡рд╛рддрд╛рд╡рд░рдг рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЧрддрд┐рд╢реАрд▓ рдерд╛ рдЬрд┐рд╕ рдкрд░ рдореИрдВ рддреИрдирд╛рдд рдерд╛ рдФрд░ рдореИрдВ рдЗрд╕реЗ рдПрдХ рдЪрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рд░рд┐рдд рдХрд░ рд░рд╣рд╛ рдерд╛ред

рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдореБрдЭреЗ рдЗрд╕реЗ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб рдорд┐рд▓рд╛ рдФрд░ рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ рд╣реИред рджреВрд╕рд░реА рддрд░рдл рд╣реБрдХ рдореБрдЭреЗ рд▓рдЪреАрд▓рд╛рдкрди рдФрд░ рдмреЗрд╣рддрд░ рддрд░реАрдХреЗ рд╕реЗ рдЪреАрдЬреЛрдВ рдХреЛ рд╣реИрдХ рдХрд░рдиреЗ рдФрд░ рдбреЙрдХрд░рдлрд╛рдЗрд▓ рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рдЖрдЧреНрд░рд╣ рдХреЗ рдмрд┐рдирд╛ рдмрджрд▓рд╛рд╡ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рджреЗрдВрдЧреЗред

рдореБрдЭреЗ рдЦреБрд╢реА рд╣реИ рдХрд┐ рдореБрдЭреЗ рдпрд╣ рдореБрджреНрджрд╛ рдорд┐рд▓ рдЧрдпрд╛ рд╣реИред рдореИрдВ рдПрдХ-рджреЛ рд╕рд╛рд▓ рд╕реЗ рдбреЙрдХрдЯрд░ рдФрд░ рдбреЙрдХрд░ рдХрдВрдкреЛрдЬрд╝ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рдЕрдм рдЧрдВрднреАрд░рддрд╛ рд╕реЗ рдПрдХ рдкреНрд░рдгрд╛рд▓реА рдХреЛ рд╕реНрдХреЗрд▓рд┐рдВрдЧ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрдкрдХрд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЙрдореНрдореАрдж рдХрд░ рд░рд╣рд╛ рдерд╛ред рдореИрдВ рд╣рд░ рд╕рд╛рд▓ рдпрд╛ рджреЛ рд╕рд╛рд▓ рдореЗрдВ рд╡рд╛рдкрд╕ рдЬрд╛рдВрдЪ рдХрд░реВрдВрдЧрд╛, рд▓реЗрдХрд┐рди рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВрдЯреЗрдирд░реНрд╕ рдХреЗ рд░рд╡реИрдпреЗ рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рдореИрдВ рдмрд╕ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдпрд╛ рдХрд┐рд╕реА рдЕрдиреНрдп рдЯреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреНрд░рд╛рдкреНрдд рдХрд░реВрдВрдЧрд╛ред рдЦреБрд╢реА рд╣реИ рдХрд┐ рдЬреНрдпрд╛рджрд╛ рд╕рдордп рдирд┐рд╡реЗрд╢ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдФрд░ рдЗрд╕ рд╢реБрд░реБрдЖрдд рдХреЛ рдмрд╣реБрдд рдХрдо рдкрд╛рдпрд╛ред

рдкреНрд░реЛ рдЯрд┐рдк: рдпрджрд┐ рдХреЛрдИ рд╡реНрдпрдХреНрддрд┐ рдЬреЛ рдЕрдкрдиреЗ рд╡рд░реНрдХрдлрд╝реНрд▓реЛ рдХреЛ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреЗ рдЯреВрд▓ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рд░рд╣рд╛ рд╣реИ, рдЙрд╕реЗ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдпрд╣рд╛рдБ рд╡рд░реНрдгрд┐рдд рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдЖрдкрдХреЗ рднрд╡рди рдХреЗ 'рдХреНрдпреЛрдВ' рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдлрд┐рд░ рд╕реЗ рд╕реЛрдЪрдиреЗ рдХреЗ рд▓рд╛рдпрдХ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рд╣рд╛рдВ, рдЖрдк рд╕рдлрд▓ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рдЗрд╕рд▓рд┐рдП рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рд▓реЛрдЧреЛрдВ рдиреЗ рдкрд╣рд▓реА рдЬрдЧрд╣ рдореЗрдВ рдЗрд╕ рдЪреАрдЬ рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдерд╛, рдФрд░ рдЖрдк рд╢рд╛рдпрдж рдЙрдиреНрд╣реЗрдВ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рд╕реБрдкрд░ рдУрдкрди рдереЗред

рд╢реБрднрдХрд╛рдордирд╛рдПрдВред

рдпрджрд┐ рдЖрдк рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХреЛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдореИрдВ рдЖрдкрдХреЛ рдЬреЛ рдХреБрдЫ рднреА рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рдЙрд╕реЗ рджреЗрдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реВрдВред

рдмрд╕ рдЗрд╕ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП рдореЗрд░рд╛ рд╕рдорд░реНрдерди рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдПред onrun рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╕рдВрднрд╛рд╡рд┐рдд рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдФрд░ рднрд╡рд┐рд╖реНрдп рдХреЗ рдкреНрд░рдорд╛рдг рдХреЛ рдереЛрдбрд╝рд╛ рдЪреМрдбрд╝рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╢рд╛рдпрдж рдХрд┐рд╕реА рдХреЛ рдЕрдзрд┐рдХ рд╡реНрдпрд╛рдкрдХ 'рд╡рдирд╡реЗрдВрдЯ' рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдХреЛ рджреЗрдЦрдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рд╕реЗ рдПрдХ onrun рд╣реЛрдЧрд╛ред

рдпрд╣ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ред

рдЗрд╕реЗ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рджрд┐рдП рдЧрдП рд╣реИрдВ:

services:
    web:
        image: node:8-alpine
        depends_on:
            - db
    db:
        image: postgres:alpine
        onrun: "echo hi"

рдХреНрд░реЙрд╕-рдИрд╡реЗрдВрдЯ рд╕реНрдХреНрд░реИрдк рдХреЛ рдЬреЛрдбрд╝рдирд╛ рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╣реЛрдЧрд╛?

    web:
        events:
            db_onrun: "connectAndMigrate.sh"

рдореЗрд░реА рд░рд╛рдп рдореЗрдВ рдЗрд╕реЗ рдбреЙрдХрдЯрд░-рдХрдВрдкреЛрдЬрд╝ рдореЗрдВ рдЬреЛрдбрд╝рдирд╛ рд╕реАрдзрд╛ рд╣реИ рдХрд┐ рди рдХреЗрд╡рд▓ рдЖрдк, рдЬреЛ рдХрдВрдкреЛрдЬрд╝ рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдФрд░ рд╕реНрдЯреИрдХ рдХреА рд░рдЪрдирд╛ рдХрд░рддреЗ рд╣реИрдВ, рдмрд▓реНрдХрд┐ рдЖрдкрдХреА рдЯреАрдо рдХреЗ рдЕрдиреНрдп рдбреЗрд╡рд▓рдкрд░реНрд╕ рднреАред

  • рдЕрд▓рдЧ-рдЕрд▓рдЧ рдХрдВрдЯреЗрдирд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ - рд╣рд░ рдХрд┐рд╕реА рдХреЛ рдкрддрд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдЙрдиреНрд╣реЗрдВ рдЙрдиреНрд╣реЗрдВ рдЪрд▓рд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
  • рдХрд╕реНрдЯрдо рдбреЙрдХрд░реАрдлрд╛рдЗрд▓ рд▓рд┐рдЦреЗрдВ - рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд▓рдЧрднрдЧ 20 рд╕реЗрд╡рд╛рдПрдВ рд╣реИрдВ рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рд╕реЗрд╡рд╛ рдХреЗ рд▓рд┐рдП рдореБрдЭреЗ рдХреБрдЫ рдХрдорд╛рдВрдб рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдбреЙрдХрд░рдлрд╛рдЗрд▓ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рдкреНрд░рдорд╛рдгрдкрддреНрд░реЛрдВ рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рд╡рд╛рддрд╛рд╡рд░рдг рдкрд░ mkcert рд╕реНрдерд╛рдкрд┐рдд рдФрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдпрд╣ рдХрдВрдЯреЗрдирд░ рдпрд╛ рдбреЙрдХрд░реАрдлрд╛рдЗрд▓ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдирд╣реАрдВ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕реЗ рд╕реНрдЯреЗрдЬ / рдкреНрд░реЛрдбрдХреНрд╢рди рдХреА рдЬрд░реВрд░рдд рдирд╣реАрдВ рд╣реИред рдЙрдкрдХрд░рдг рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣рд╛рдВ рдХреНрдпрд╛ рдЙрдЪрд┐рдд рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╣реИ рдФрд░ рд╣рд░ рдХреЛрдИ рдЬреЛ рдХрдВрдкреЛрдЬрд╝ рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реИ, рдЙрд╕рдХреЗ рдкрд╛рд╕ рднреА рдХреЛрдИ рд╕реБрд░рд╛рдЧ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдкрд░реНрджреЗ рдХреЗ рдкреАрдЫреЗ рдХреНрдпрд╛ рдЪрд▓ рд░рд╣рд╛ рд╣реИ?

рдПрдХ рдФрд░ рдЙрдкрдпреЛрдЧ рдорд╛рдорд▓рд╛ рдЬреЛрдбрд╝рдирд╛:

рдПрдХ WordPress рдЙрджрд╛рд╣рд░рдг рдХреА рдЬрд░реВрд░рдд рд╣реИред рдореЗрд░рд╛ рдбреЙрдХрдЯрд░-рдХрдВрдкреЛрдЬрд╝ рд▓рд┐рдЦрд╛ред docker-compose up - рдЙрдлрд╝! рдкреНрд▓рдЧрдЗрдиреНрд╕ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХреА рдлрд╝рд╛рдЗрд▓ рдЕрдиреБрдорддрд┐рдпрд╛рдБ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ ... рдЗрд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рдЕрдиреНрдп рддрд░реАрдХрд╛ рдирд╣реАрдВ рдорд┐рд▓ рд╕рдХрддрд╛ рд╣реИ, рдХрдВрдЯреЗрдирд░ рдХреЗ рдЪрд▓рдиреЗ рдХреЗ рдмрд╛рдж рдЕрдиреБрдорддрд┐рдпрд╛рдБ рд╕реЗрдЯ рдХрд░реЗрдВ рдХреНрдпреЛрдВрдХрд┐ рдореИрдВ рд╣реЛрд╕реНрдЯ рд╕реЗ рдХреБрдЫ рдлрд╝рд╛рдЗрд▓реЗрдВ рдмрд╛рдЗрдВрдб рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдФрд░ рдпрд╣ рдПрдХрдорд╛рддреНрд░ рддрд░реАрдХрд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрдВрдЯреЗрдирд░ рдХреЗ рдЕрдВрджрд░ рд╕реЗ chown -Rf www-data.www-data /var/www/wp-content рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП fs рдЕрдиреБрдорддрд┐рдпреЛрдВ рдХреЛ рдареАрдХ рдХрд░рдирд╛ рд╣реИред рдореЗрд░рд╛ рдЕрдкрдирд╛ рдбреЙрдХрд░реАрдлрд╛рдЗрд▓ рд▓рд┐рдЦреЗрдВ рдФрд░ рдирд┐рд░реНрдорд╛рдг рдХрд░реЗрдВ, рдмрд╕ рдЗрд╕рдХреЗ рд▓рд┐рдП? рдЬреЛ рдореБрдЭреЗ рдмреЗрд╡рдХреВрдлреА рд▓рдЧрддреА рд╣реИред

рд╕реМрднрд╛рдЧреНрдп рд╕реЗ рдореЗрд░реЗ рд▓рд┐рдП, рдКрдкрд░ рджрд┐рдП рдЧрдП healthcheck рд╣реИрдХ рдиреЗ рдореБрдЭреЗ рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреАред рдореИрдВ рд╡реЗрдм рдкрд░ рдЕрдиреНрдп рдкреГрд╖реНрдареЛрдВ рдХреЛ рдбреЙрдХрдЯрд░ рд╡реЙрд▓реНрдпреВрдо рдкрд░ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдЕрдиреБрдорддрд┐рдпреЛрдВ рдХреЗ рдореБрджреНрджреЗ рдкрд░ рдмрд╛рдд рдХрд░рддреЗ рд╣реБрдП рджреЗрдЦрддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рд╕реБрдЭрд╛рдП рдЧрдП рд╕рдорд╛рдзрд╛рди рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддреЗред

рдЦреБрд╢реА рд╣реИ рдХрд┐ рдпреЗ рдЧреЗрдЯрдХреАрдкрд░, @dnephin , @aanand , @
01) рд╢рд╢рд┐рд╢реЛрд╡
режреи) рдлрд╛рд╕реЛрдмрд╛рд░
03) рдмрд▓реБрдЖ 11
режрек) рд╡реЗрдм-рдЯреЗрдб
05) v0lume
06) рд╡реЗрдмрдкреЙрд▓рд┐рд╕
07) Skull0ne
08) рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕реЗрд╡рд╛
09) рд╡реЛрдВрдЧрдЬрд┐рд╣рд╛рдК
10) рдПрдордПрдлрдХреНрдпреВ
11) рдпреЛрд╕реЗрдлреНрд░реЛ
резреи) рдмрдЧреЗрд░рдо
13) рджрдХрд╕рдо
14) рдУрдореНрд┐рдб
резрел) рджрдВрддреЗрд░рдмрд░рд╛
16) рд╡рд┐рд▓реАрдВрдЧ
17) рд╢рд╛рд░реНрдкрдбреЗрдордорд╛рд░реНрд╢рд▓
18) рдЦреЛ-рд╡рд╛рд╣рдХ
19) рднреВрдд
20) рд░реЙрдбрд░рд┐рдЧреЛрд░реЛрдбреНрд░рд┐рдЧреНрд╕рдХреЛрд╕реНрдЯрд╛
21) рдбреЗрдЯрд╛рдЯрд╛рдЗрдкрд╡реЙрдЗрдб
реиреи) рдбреЗрдХреНрд╕рдЯреНрд░рдореНрдм
реирей) рд▓рдЦрдирд╛рде
24) рдЖрдХрд░реНрд╖рдХ-рдЪрд┐рдкрдЪрд┐рдкрд╛
реирел) рд░рд╡ 84рек
26) рдбреЛрдкреНрд░реА
27) рдЕрд╣рдордореЗрдЯ 2рдореАрд░
28) рдореЛрдирдЯреЗрд░ 82
29) рдбрд┐рд╕реЙрд░реНрдбрд┐рдпрдирдлрд╝рд┐рд╢
30) рдЬрд╕реЛрдиреНрд╣рд░рд╕
рейрез) рдлрд╝рдлрд╝рд░рд╛рд░рд┐рд╕
32) рд╣рд╛рдЗрдкрд░рдЧрд┐рдЧ
33) рд╕реВрд░реНрдпрд╛рд╕реНрдд
34) sthulb

рдФрд░ рд╕рдВрдЦреНрдпрд╛ рдЬрд┐рдиреНрд╣реЛрдВрдиреЗ рдХрд╣рд╛ рдирд╣реАрдВ? рдПрдХ 3:
01) dnephin
режреи) рдЖрдирдВрдж
03) рдкрд┐рдВрдбрд▓реА-

рд╣рдореНрдордо ... 34 рд╕реЗ 3 ...

@ rm-rf-etc рдЕрдЪреНрдЫреА рдПрдирд╛рд▓рд┐рдЯрд┐рдХреНрд╕ ... рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ @dnephin рдпрд╛ @aand рдЕрдм рдбреЙрдХрдЯрд░ - рдХрдВрдкреЛрдЬ рдкрд░ рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВред рднрд╛рдЧреНрдп рдХреЗ рд╕рд╛рде, рдбреЛрдХрд░ рдвреЗрд░ рдХреЗ рдкрдХреНрд╖ рдореЗрдВ рд░рдЪрдирд╛ рдХреЛ рдЪрд┐рддреНрд░рд┐рдд рдХрд░рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛ рд░рд╣рд╛ рд╣реИ рдФрд░ рд╢рд┐рдХрд╛рдпрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣рд╛рдВ рдХреЛрдИ рдЯреАрдо рдирд╣реАрдВ рдмрдЪреЗрдЧреА рдФрд░ рд╣рдо рдлрд┐рд░ рд╕реЗ рдЙрддреНрдкрд╛рдж рдкрд░ рдЖрдЧреЗ рдХреА рдкреНрд░рдЧрддрд┐ рджреЗрдЦрдирд╛ рд╢реБрд░реВ рдХрд░реЗрдВрдЧреЗред

рдПрдХ рдФрд░ рдЙрдкрдпреЛрдЧ рдорд╛рдорд▓рд╛ рдЬреЛрдбрд╝рдирд╛:

рдПрдХ WordPress рдЙрджрд╛рд╣рд░рдг рдХреА рдЬрд░реВрд░рдд рд╣реИред рдореЗрд░рд╛ рдбреЙрдХрдЯрд░-рдХрдВрдкреЛрдЬрд╝ рд▓рд┐рдЦрд╛ред docker-compose up - рдЙрдлрд╝! рдкреНрд▓рдЧрдЗрдиреНрд╕ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХреА рдлрд╝рд╛рдЗрд▓ рдЕрдиреБрдорддрд┐рдпрд╛рдБ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ ... рдЗрд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рдЕрдиреНрдп рддрд░реАрдХрд╛ рдирд╣реАрдВ рдорд┐рд▓ рд╕рдХрддрд╛ рд╣реИ, рдХрдВрдЯреЗрдирд░ рдХреЗ рдЪрд▓рдиреЗ рдХреЗ рдмрд╛рдж рдЕрдиреБрдорддрд┐рдпрд╛рдБ рд╕реЗрдЯ рдХрд░реЗрдВ рдХреНрдпреЛрдВрдХрд┐ рдореИрдВ рд╣реЛрд╕реНрдЯ рд╕реЗ рдХреБрдЫ рдлрд╝рд╛рдЗрд▓реЗрдВ рдмрд╛рдЗрдВрдб рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдФрд░ рдпрд╣ рдПрдХрдорд╛рддреНрд░ рддрд░реАрдХрд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрдВрдЯреЗрдирд░ рдХреЗ рдЕрдВрджрд░ рд╕реЗ chown -Rf www-data.www-data /var/www/wp-content рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП fs рдЕрдиреБрдорддрд┐рдпреЛрдВ рдХреЛ рдареАрдХ рдХрд░рдирд╛ рд╣реИред

рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдЖрдк рдЕрдкрдиреА рд░рдЪрдирд╛ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ user рд╕рдВрдкрддреНрддрд┐ рднреА

рдореЗрд░рд╛ рдЕрдкрдирд╛ рдбреЙрдХрд░реАрдлрд╛рдЗрд▓ рд▓рд┐рдЦреЗрдВ рдФрд░ рдирд┐рд░реНрдорд╛рдг рдХрд░реЗрдВ, рдмрд╕ рдЗрд╕рдХреЗ рд▓рд┐рдП? рдЬреЛ рдореБрдЭреЗ рдмреЗрд╡рдХреВрдлреА рд▓рдЧрддреА рд╣реИред

рд▓рдЧрддрд╛ рд╣реИ рдЬреИрд╕реЗ рдЖрдкрдиреЗ рдПрдХ рдордЬрдмреВрдд рд░рд╛рдп рдмрдирд╛рдИ рд╣реИ; рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд░реВрдк рд╕реЗ, рдЕрдкрдиреА рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЖрдзрд╛рд░ рдЫрд╡рд┐ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбреЙрдХрдлрд╛рдЗрд▓ рд▓рд┐рдЦрдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ "рдмреЗрд╡рдХреВрдл" рдХреБрдЫ рднреА рдирд╣реАрдВ рд╣реЛрдЧрд╛ред рд╕рднреА рдЖрдзрд╛рд░ рдЪрд┐рддреНрд░реЛрдВ рдХрд╛ рдореВрд▓ рдЖрд╢рдп рдпрд╣реА рд╣реИред

рд╕реМрднрд╛рдЧреНрдп рд╕реЗ рдореЗрд░реЗ рд▓рд┐рдП, рдКрдкрд░ рджрд┐рдП рдЧрдП healthcheck рд╣реИрдХ рдиреЗ рдореБрдЭреЗ рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреАред рдореИрдВ рд╡реЗрдм рдкрд░ рдЕрдиреНрдп рдкреГрд╖реНрдареЛрдВ рдХреЛ рдбреЙрдХрдЯрд░ рд╡реЙрд▓реНрдпреВрдо рдкрд░ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдЕрдиреБрдорддрд┐рдпреЛрдВ рдХреЗ рдореБрджреНрджреЗ рдкрд░ рдмрд╛рдд рдХрд░рддреЗ рд╣реБрдП рджреЗрдЦрддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рд╕реБрдЭрд╛рдП рдЧрдП рд╕рдорд╛рдзрд╛рди рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддреЗред

рдЦреБрд╢реА рд╣реИ рдХрд┐ рдпреЗ рдЧреЗрдЯрдХреАрдкрд░, @dnephin , @aanand , @

рд╣рд╛рдБ, рдЕрдЪреНрдЫрд╛ рд░рд╡реИрдпрд╛ рджреЛрд╕реНрддред : рдбреА


@ rm-rf-etc рдЕрдЪреНрдЫреА рдПрдирд╛рд▓рд┐рдЯрд┐рдХреНрд╕ ... рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ @dnephin рдпрд╛ @aand рдЕрдм рдбреЙрдХрдЯрд░ - рдХрдВрдкреЛрдЬ рдкрд░ рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВред

рд╣рд╛рдБ, рдЕрдм рдХреБрдЫ рд╕рд╛рд▓ рд╣реЛ рдЧрдП рд╣реИрдВ - рдЙрдиреНрд╣реЗрдВ рдкреБрд░рд╛рдиреЗ рдореБрджреНрджреЛрдВ рдкрд░ рдзреНрдпрд╛рди рджреЗрдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рдирд╣реАрдВ рд╣реИред

рднрд╛рдЧреНрдп рдХреЗ рд╕рд╛рде, рдбреЛрдХрд░ рдвреЗрд░ рдХреЗ рдкрдХреНрд╖ рдореЗрдВ рд░рдЪрдирд╛ рдХреЛ рдЪрд┐рддреНрд░рд┐рдд рдХрд░рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛ рд░рд╣рд╛ рд╣реИ рдФрд░ рд╢рд┐рдХрд╛рдпрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣рд╛рдВ рдХреЛрдИ рдЯреАрдо рдирд╣реАрдВ рдмрдЪреЗрдЧреА рдФрд░ рд╣рдо рдлрд┐рд░ рд╕реЗ рдЙрддреНрдкрд╛рдж рдкрд░ рдЖрдЧреЗ рдХреА рдкреНрд░рдЧрддрд┐ рджреЗрдЦрдирд╛ рд╢реБрд░реВ рдХрд░реЗрдВрдЧреЗред

ЁЯЩД

@ рдкрд┐рдВрдбрд▓реА- рд▓реЗрдХрд┐рди рдЖрдкрдиреЗ рдЗрд╕реЗ рдЙрд╕ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЗ рд╕рд╛рде рдкрд┐рдВрдЧ рдХрд┐рдпрд╛

рдореИрдВ рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдлрд┐рд░ рд╕реЗ рдЗрд╕ рдореБрджреНрджреЗ рдкрд░ рднрд╛рдЧрд╛ рдФрд░ рднрд▓реЗ рд╣реА рдЗрд╕реЗ рдореЗрд░реЗ рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб рдореЗрдВ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдпрд╣ рдХреЗрд╡рд▓ рддрднреА рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдЬрдм рдЖрдк 2.1 рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ imo рдХреЛ рдмрджрдмреВ рджреЗрддрд╛ рд╣реИред

рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рдХреЗрд╡рд▓ рдордирдореМрдЬреА рд╣реИ рдХрд┐ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рд░реБрдЦ рд╕реЗ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рд╣рд░ рдЪреАрдЬрд╝ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреА рдЦреБрдж рдХреА рдбреЙрдХрдЯрд░ рдЫрд╡рд┐рдпрд╛рдВ рдмрдирд╛рдиреА рдЪрд╛рд╣рд┐рдПред
рдореЗрд░реЗ рд▓рд┐рдП рдпрд╣ рд╢рд╛рдмреНрджрд┐рдХ рд░реВрдк рд╕реЗ рдпрд╣ рдХрд╣рдирд╛ рд╣реИ рдХрд┐ "рдпрджрд┐ рдЖрдк рдХрд┐рд╕реА рдкреНрд░реЛрдЧреНрд░рд╛рдо рдореЗрдВ рд╕реЗрдЯрд┐рдВрдЧ рдмрджрд▓рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рд╕реНрд░реЛрдд рдХреЛрдб рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдФрд░ рдЙрд╕реЗ рдкреБрдирдГ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред"
рд╣рд░ рдмрд╛рд░ рдЬрдм рдЖрдк рдХреЛрдИ рдирдИ рд╕реЗрд╡рд╛ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ рдпрд╛ рдЖрдк рдирдП рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдЕрдкрдЧреНрд░реЗрдб рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ .. рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП MongoDB рдпрд╛ MySQL рдбреЙрдХрд░ рдХреА рдЫрд╡рд┐, рддреЛ рдЖрдкрдХреЛ рдПрдХ рдирдИ рдбреЙрдХрдлрд╛рдЗрд▓ рдмрдирд╛рдирд╛ рд╣реЛрдЧрд╛, рдЗрд╕рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдФрд░ рд╕рдВрднрд╡рддрдГ рдЗрд╕реЗ рдЕрдкрдиреА рд░рдЬрд┐рд╕реНрдЯреНрд░реА рдореЗрдВ рдзрдХреЗрд▓рдирд╛ рд╣реЛрдЧрд╛ред
рдпрд╣ рд╕рдордп рдФрд░ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреА рдмрдбрд╝реЗ рдкреИрдорд╛рдиреЗ рдкрд░ рдмрд░реНрдмрд╛рджреА рд╣реИ, рдЕрдЧрд░ рдЖрдк рд╕рд┐рд░реНрдл image: mongo:3.0.2 image: mongo:3.0.3 рдЕрдкрдиреЗ docker-compose.yml рдореЗрдВ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВ, рддреЛ рдЗрд╕рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдпрд╣ рдмреЗрдХрд╛рд░ рд╣реИред
рдореИрдВ рд▓рдВрдмреЗ рд╕рдордп рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рдХрд╣ рд░рд╣рд╛ рд╣реВрдВ, рдореИрдВ рдЗрд╕ рддрдереНрдп рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХрд╣ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рдЖрдкрдХреЛ рдбреЙрдХрд░рдлрд╛рдЗрд▓реНрд╕ рдФрд░ docker build рд╕рд╛рде рдкрд░реЗрд╢рд╛рди рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдЬрдм рдЖрдк рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рдХрд┐рд╕реА рд╕реЗрд╡рд╛ рдХреЗ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ рдЕрдкрдбреЗрдЯ рдпрд╛ рдмрджрд▓рдирд╛ рд╣реИ рдЬреЛ рд╕рдВрднрд╡рддрдГ рднреА рдирд╣реАрдВ рд╣реИ рдПрдХ рдЖрдзрд╛рд░ рдЫрд╡рд┐ рдХреЗ рд░реВрдк рдореЗрдВ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдФрд░ рддрд░реНрдХ рдпрд╣ рд╣реИ рдХрд┐ рд╣рд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдПрдХ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдХреЗрд╡рд▓ рдПрдХ рдЪреАрдЬ, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рднреА рдмрджрдмреВ рдЖ рд░рд╣реА рд╣реИред рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдирдИ рд╕реБрд╡рд┐рдзрд╛ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рднреА рдирд╣реАрдВ рд╣реИ рдпрд╣ рд╕рд┐рд░реНрдл docker рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХ рдФрд░ рдкреИрд░рд╛рдореАрдЯрд░ рдкрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИред рдпрд╣ рднреА рд╕рд╡рд╛рд▓ рд╣реИ рдХрд┐ рдХреНрдпреЛрдВ docker run , docker build , docker exec , docker pull рдЖрджрд┐ рд╕рднреА рдПрдХ рд╣реА рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИрдВред рддрд░реНрдХ рдЕрдм рдкрд╛рдЦрдВрдбреА рдХреА рддрд░рд╣ рд▓рдЧ рд░рд╣рд╛ рд╣реИ, рд╣реИ рдирд╛?

@ shin-, рдореИрдВрдиреЗ рдЖрдкрдХреЗ рд▓рд┐рдВрдХ рдХрд╛ рдЕрдиреБрд╕рд░рдг рдХрд┐рдпрд╛ рдФрд░ рдореИрдВ рдпрд╣ рдирд╣реАрдВ рджреЗрдЦрддрд╛ рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреА рд╕рдВрдкрддреНрддрд┐ рдмрд╛рдЗрдВрдб рдорд╛рдЙрдВрдЯреЗрдб рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдХреЗ рдорд╛рд▓рд┐рдХ рдХреЗ рд▓рд┐рдП рдХреИрд╕реЗ рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рд╣реИред рдмрдВрджрд░рдЧрд╛рд╣реЛрдВ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИред

рдкреБрди: рд░рд╡реИрдпрд╛: рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд▓реЛрдЧ рдореБрдЭрд╕реЗ рд╕рд╣рдордд рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ рдордЬрдмреВрдд рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рд▓реЗрдВред рдХреНрд╖рдорд╛ рдХрд░реЗрдВ рдпрджрд┐ рдЖрдкрдХреЛ рдпрд╣ рдкрд╕рдВрдж рдирд╣реАрдВ рд╣реИ рдХрд┐ рдореИрдВ рдЗрд╕реЗ рдХреИрд╕реЗ рд╡реНрдпрдХреНрдд рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреА рдорд╛рдВрдЧреЛрдВ рдХреЛ рдЕрдирджреЗрдЦрд╛ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ, рддреЛ рдЖрдк рдФрд░ рдХреНрдпрд╛ рдЙрдореНрдореАрдж рдХрд░рддреЗ рд╣реИрдВ?

рдореИрдВ рдЗрд╕ рддрд░рд╣ рдХреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЗ рд▓рд┐рдП рдЙрдореНрдореАрдж рдХрд░ рд░рд╣рд╛ рдерд╛ рдЬреИрд╕реЗ рдХрд┐ onrun: рд╕реБрдЭрд╛рд╡ рджрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдореИрдВ рдХрдВрдкреЛрдЬрд╝ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рдХреЗрд╡рд▓ рджреЛ рджрд┐рди рдХрд╛ рд╣реВрдВ рдФрд░ рдореЗрд░реЗ рд▓рд┐рдП рдЗрд╕ рддрд░рд╣ рдХрд╛ рдПрдХ рдЙрдкрдХрд░рдг рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрд▓рдЧ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд╕рд╛рде рдкреНрд░рддреНрдпреЗрдХ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореЗрд░реЗ docker рдлрд╝рд╛рдЗрд▓реЛрдВ рдкрд░ рд╡рд╛рдкрд╕ рдЬрд╛рдирд╛ рдмреЗрдорд╛рдиреА рд▓рдЧрддрд╛ рд╣реИред рдореИрдВ рдХреЗрд╡рд▓ рдПрдХ рдЕрдиреНрдп рдХрдВрдЯреЗрдирд░ рд╕реЗ рдПрдХ рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░ рдореЗрдВ рдПрдХ рдЯреЛрдХрди рдЗрдВрдЬреЗрдХреНрд╖рди рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рдЬрд╣рд╛рдВ рдореЗрд░рд╛ рдбреЙрдХрдлрд╛рдЗрд▓ рдкрд╣рд▓реЗ рд▓рдЪреАрд▓рд╛ рдерд╛, рдЕрдм рдбреЙрдХ-рдХрдВрдкреЛрдЬрд░ рдХреЗ рд▓рд┐рдП рдпреБрдЧреНрдорд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдПрдХ рд╕рд░рд▓ рдЙрджреНрджреЗрд╢реНрдп рдХреЗ рд▓рд┐рдП рд╕рдорд╛рдзрд╛рди рдФрд░ рд╕рдорд╛рдзрд╛рдиред

рд▓рд╛рдирдд рд╣реИ, рдореИрдВрдиреЗ рдЬрд╡рд╛рдм "рдареАрдХ рд╣реИ рджреЛрд╕реНрддреЛрдВ, рдЦреЛрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдкреВрд░реЗ рдзрд╛рдЧреЗ рдХреА рд╣реЛрдкрд┐рдВрдЧ рдкрдврд╝реА, рд╣рдордиреЗ рдЖрдЦрд┐рд░рдХрд╛рд░ рдорд╣рд╕реВрд╕ рдХрд┐рдпрд╛ рдХрд┐ рдпрд╣ рдЕрдЪреНрдЫрд╛ рд╣реИ рдФрд░ рд╣рдо рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд░реЗрдВрдЧреЗ"ред рдпрд╣ рджреЗрдЦрдХрд░ рджреБрдЦреА рд╣реЛрдХрд░ рдЖрдЧреЗ рдирд╣реАрдВ рдмрдврд╝реЗред
+1 рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП!

@fabiomolinar , рд╕рдорд╛рдзрд╛рди рдХрд╛ рдПрдХ рдкреНрд░рдХрд╛рд░ рд╣реИ, рдХрд┐ рд╣рдо рдЕрдкрдиреЗ рдЙрддреНрдкрд╛рджрди swarms рдореЗрдВ рдмрдбрд╝реЗ рдкреИрдорд╛рдиреЗ рдкрд░ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рдПрдХ рдШрдЯрдирд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рдлреА рдЕрдЪреНрдЫрд╛ рдирд╣реАрдВ рд╣реИред

рд╣рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдПрдВрдХрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ

#### configure a service to run only a single instance until success
x-task: &task
  # for docker stack (not supported by compose)
  deploy:
    restart_policy:
      condition: on-failure
    replicas: 1
  # for compose (not supported by stack)
  restart: on-failure

рдЬрдм рддрдХ рд╡реЗ рд╕рдлрд▓ рди рд╣реЛрдВ рддрдм рддрдХ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рджреЛрд╣рд░рд╛рдирд╛ред рд╣рдо рдорд╛рдЗрдЧреНрд░реЗрд╢рди рдФрд░ рд╕реЗрдЯрдЕрдк рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдХрдВрдЯреЗрдирд░реЛрдВ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рддреЗ рд╣реИрдВ рдЬрд┐рдирдХреЗ рдкрд╛рд╕ рд╕реБрдЦрдж рдкрд░рд┐рдгрд╛рдо рд╣реИрдВ рдФрд░ рдЙрдиреНрд╣реЗрдВ рд╣рдорд╛рд░реЗ рд╕реНрдерд╛рдиреАрдп рдХрдВрдкреЛрдЬ рдФрд░ рд╣рдорд╛рд░реЗ рд╕реНрдЯреИрдХ рдореЗрдВ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдЪрд▓рд╛рддреЗ рд╣реИрдВред

рдЬреЛ рд╕реЗрд╡рд╛ рдХрд╛рд░реНрдп рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддреА рд╣реИ рдЙрд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХрд╛рд░реНрдп рдкреВрд░рд╛ рди рд╣реЛрдиреЗ рдкрд░ рдХреБрдЫ рдЗрдирд╛рдпрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЕрдзрд┐рдХрд╛рдВрд╢ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдЬрдм рддрдХ рдЖрдк рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рд╕рдорд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдЧрд▓рддрд┐рдпрд╛рдБ рдХрд░рддреЗ рд╣реИрдВ, рддрдм рддрдХ рдпрд╣ рдареАрдХ рд╣реИ, рдЗрд╕рд╕реЗ рдЖрдкрдХреЛ рдПрдХ рдЕрдВрддрд┐рдо рд╕реНрдерд┐рд░рддрд╛ рдорд┐рд▓рддреА рд╣реИ рдЬреЛ рдЕрдзрд┐рдХрд╛рдВрд╢ рд╡рд╛рддрд╛рд╡рд░рдгреЛрдВ рдореЗрдВ рдЕрдЪреНрдЫрд╛ рдХрд╛рдо рдХрд░реЗрдЧреАред

рдпрд╣ рднреА рдорд╛рдирддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЗ рд╕рд░реНрд╡рд┐рд╕ рдХрдВрдЯреЗрдирд░ рдкреНрд░реА рдФрд░ рдкреЛрд╕реНрдЯ рдЯрд╛рд╕реНрдХ рдкреВрд░рд╛ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд░рд╛рдЬреНрдпреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдбреЗрдЯрд╛рдмреЗрд╕ рдорд╛рдЗрдЧреНрд░реЗрд╢рди рдЬреИрд╕реЗ рдЙрдкрдпреЛрдЧ-рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдЖрд╢реНрд░рд┐рдд рд╕реЗрд╡рд╛рдПрдВ рдкреНрд░реА-рдФрд░ рдкреЛрд╕реНрдЯ-рдорд╛рдЗрдЧреНрд░реЗрд╢рди рд╕реНрдХреАрдорд╛ рджреЛрдиреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП .. рдЬрд╛рд╣рд┐рд░ рд╣реИ рдХрд┐ рдХреБрдЫ рд╕реЛрдЪ рдХреЛ рд╡рд┐рдХрд╛рд╕ рдФрд░ рдкрд░рд┐рдирд┐рдпреЛрдЬрди рд╕рдордиреНрд╡рдп рдореЗрдВ рд░рдЦрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рд▓реЗрдХрд┐рди рдпрд╣ рдХрд┐рд╕реА рдХреЗ рд▓рд┐рдП рднреА рдЬреАрд╡рди рдХрд╛ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рддрдереНрдп рд╣реИ рд╕реЗрд╡рд╛рдУрдВ рдХреЗ рд░реЛрд▓рд┐рдВрдЧ рдЕрджреНрдпрддрди рдХрд░рдирд╛ред

@fabiomolinar , рдпрд╣рд╛рдБ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ рдХрд┐ рд╣рдо рдЕрдкрдиреА

#### configure a service to run only a single instance until success
x-task: &task
  # for docker stack (not supported by compose)
  deploy:
    restart_policy:
      condition: on-failure
    replicas: 1
  # for compose (not supported by stack)
  restart: on-failure

#### configure a service to always restart
x-service: &service
  # for docker stack (not supported by compose)
  deploy:
    restart_policy:
      condition: any
  # for compose (not supported by stack)
  restart: always

services: 
  accounts: &accounts
    <<: *service
    image: internal/django
    ports:
      - "9000"
    networks:
      - service
    environment:
      DATABASE_URL: "postgres://postgres-master:5432/accounts"
      REDIS_URL: "hiredis://redis:6379/"

  accounts-migrate:
    <<: *accounts
    <<: *task
    command: ./manage.py migrate --noinput

@Dopry рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред рд▓реЗрдХрд┐рди рдореЗрд░рд╛ рдорд╛рдорд▓рд╛ рдХреБрдЫ рд╕рд░рд▓ рдерд╛ред рдореБрдЭреЗ рдЕрдкрдиреЗ рд╕рд░реНрд╡рд░ рдХреЛ рдЪрд╛рд▓реВ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереА рдФрд░ рдЙрд╕рдХреЗ рдмрд╛рдж, рдХреЗрд╡рд▓ рдКрдкрд░ рдФрд░ рдЪрд▓рдиреЗ рдХреЗ рдмрд╛рдж, рдореБрдЭреЗ рдХреБрдЫ рдкрд░рд┐рдирд┐рдпреЛрдЬрди рдХрд╛рд░реНрдп рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереАред рдЖрдЬ рдореБрдЭреЗ рдРрд╕рд╛ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рдорд┐рд▓рд╛, рдЬреЛ рдХрд┐ рдПрдХ рдПрдХрд▓ CMD рд▓рд╛рдЗрди рдХреЗ рднреАрддрд░ рдХреБрдЫ рдЫреЛрдЯреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдкреНрд░рдмрдВрдзрди рдХрд░ рд░рд╣рд╛ рдерд╛ред рдХрд▓реНрдкрдирд╛ рдХреАрдЬрд┐рдП рдХрд┐ рд╕рд░реНрд╡рд░ рдФрд░ рддреИрдирд╛рддреА рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рдХреНрд░рдорд╢рдГ server рдФрд░ deploy рдЬрд╛рддрд╛ рд╣реИред рдореИрдВрдиреЗ рддрдм рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛:

CMD set -m; server $ deploy && fg server

рдКрдкрд░ рджреА рдЧрдИ рд▓рд╛рдЗрди рдкрд░ рдмреЙрд╢ рдХрд╛ рдореЙрдиреАрдЯрд░ рдореЛрдб рд╕реЗрдЯ рд╣реЛрддрд╛ рд╣реИ, рдлрд┐рд░ рдпрд╣ рдмреИрдХрдЧреНрд░рд╛рдЙрдВрдб рдкрд░ server рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╢реБрд░реВ рдХрд░рддрд╛ рд╣реИ, рдлрд┐рд░ рдпрд╣ deploy рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдЪрд▓рд╛рддрд╛ рд╣реИ рдФрд░ рдЕрдВрдд рдореЗрдВ рдпрд╣ server рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд▓рд╛рддрд╛ рд╣реИред рдЕрдЧреНрд░рднреВрдорд┐ рдлрд┐рд░ рд╕реЗ Docker рдХрдВрдЯреЗрдирд░ рдХреЛ рдорд╛рд░рдиреЗ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдПред

рдЬрдм рд╣рдо рдЗрд╕ рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдХрд┐рд╕реА рдХреЗ рдкрд╛рд╕ docker-compose up рдЪрд▓рд╛рдиреЗ рдкрд░ рдХрдВрдЯреЗрдирд░ рдпрд╛ рд╣реЛрд╕реНрдЯ рдкрд░ рдХрдорд╛рдВрдб рдЪрд▓рд╛рдиреЗ рдХрд╛ рдХреЛрдИ рдЯрд┐рдк рд╣реИ?

рдореИрдВ рд╕рдордЭрддрд╛ рд╣реВрдВ рдХрд┐ рдореЗрдЬрдмрд╛рди рдкрд░ рдХрд┐рд╕реА рднреА рдХрдорд╛рдВрдб рдХреЛ рдЪрд▓рд╛рдиреЗ рд╕реЗ рд╕реБрд░рдХреНрд╖рд╛ рдХреА рдкрд░рддреЗрдВ рд╕рдордЭреМрддрд╛ рд╣реЛ рдЬрд╛рдПрдВрдЧреА, рд▓реЗрдХрд┐рди рдореИрдВ рд╕рд┐рд░реНрдл рдПрдХ рдХрдВрдЯреЗрдирд░ рд╕реЗ рдкрд╣рд▓реЗ rm рдПрдХ рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдпрд╛ рд╕реНрдЯрд╛рд░реНрдЯрдЕрдк рдХреЗ рджреМрд░рд╛рди рд▓реЗрдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ред рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдЬрдмрд╛рди рдФрд░ рдХрдВрдЯреЗрдирд░ рджреЛрдиреЛрдВ рдкрд░ рд╕реБрд▓рдн рд╣реИред рдореИрдВ рдПрдХ рдХрд╕реНрдЯрдо рдбреЙрдХрд░ рдЫрд╡рд┐ рдирд╣реАрдВ рдмрдирд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдпрд╛ рдПрдХ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╣реИ рдЬреЛ рдкрд╣рд▓реЗ rm рдФрд░ рдлрд┐рд░ docker-compose рдЪрд▓реЗред

рдзрдиреНрдпрд╡рд╛рдж!

@fabiomolinar , рдЖрдкрдХреЗ рдкреНрд░рд╕реНрддрд╛рд╡ рдХрд╛ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреБрдЫ 12 рдХрд╛рд░рдХ рдРрдк рдкреНрд░рд┐рдВрд╕рд┐рдкрд▓реЛрдВ рдХрд╛ рдЙрд▓реНрд▓рдВрдШрди рдХрд░рддрд╛ рд╣реИред рдпрджрд┐ рдЖрдк рдЕрдкрдиреЗ рдмреБрдирд┐рдпрд╛рджреА рдврд╛рдБрдЪреЗ рдХреЛ рдмреЗрд╣рддрд░ рдмрдирд╛ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдореИрдВ рджреГрдврд╝рддрд╛ рд╕реЗ рдЙрдирдХреЗ рд╕рд╛рде рдкрд╛рд▓рди рдХрд░рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреВрдВрдЧрд╛ред

рдХреБрдЫ рд╕рдорд╕реНрдпрд╛рдПрдВ рдЬреЛ рдЖрдкрдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ рдЙрддреНрдкрдиреНрди рд╣реЛ рд╕рдХрддреА рд╣реИрдВ

  1. рдзреАрдореА рдЧрддрд┐ рд╕реЗ рдХрдВрдЯреЗрдирд░ рд╕реНрдЯрд╛рд░реНрдЯ-рдЕрдкред
  2. рдЬрдм рдХрдВрдЯреЗрдирд░ рдХреЗ рд╕рд╛рде рдХрд┐рд╕реА рд╕реЗрд╡рд╛ рдХреЛ рд╕реНрдХреЗрд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рддреИрдирд╛рддреА рд╣рд░ рдмрд╛рд░ рдПрдХ рдмрд╛рд░ рдЪрд▓реЗрдЧреА, рд╕рдВрднрд╡рддрдГ рдХреБрдЫ рджрд┐рд▓рдЪрд╕реНрдк рд╕рдВрдЧрд╛рдорд┐рддрд┐ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдЕрдЧреНрд░рдгреА рд╣реЛрдЧреАред
  3. рдкреНрд░рдмрдВрдзрди рдФрд░ рдбреАрдмрдЧрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП 'рдХрд╛рд░реНрдп' рдФрд░ рд╕реЗрд╡рд╛ рд╕реЗ рд▓реЙрдЧ рдХреЛ рд╕реЙрд░реНрдЯ рдХрд░рдирд╛ рдХрдард┐рди рд╣реИред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ рдкрд╣рд▓реА рдмрд╛рд░ рдореЗрдВ рдХрд╛рдЙрдВрдЯрд░-рд╕рд╣рдЬ рдЬреНрдЮрд╛рди рдХреА рд╕рд┐рдлрд╛рд░рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рдпрд╣ рд╣рдорд╛рд░реЗ рд╕реНрдерд╛рдиреАрдп рд╡рд┐рдХрд╛рд╕ рдХреЗ рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рдкреНрд░реИрдХреНрдЯрд┐рд╕ рдореЗрдВ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдЬреИрд╕реЗ рдбреЙрдХ-рдХрдВрдкреЛрдЬрд╝, рдбреЙрдХрд░реНрд╕ рд╕реНрд╡рд╛рд░реНрдореНрд╕ рдФрд░ рдореЗрд╕реЛрд╕ / рдореИрд░рд╛рдерди рдХреНрд▓рд╕реНрдЯрд░ред рдпрд╣ рдкреНрд░рднрд╛рд╡реА рд░реВрдк рд╕реЗ 'рдСрдирд░рди' рдХреА рдХрдореА рдХреЗ рдЖрд╕рдкрд╛рд╕ рднреА рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

рдореИрдВрдиреЗ рдЬрд┐рд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рд╣реИ рд╡рд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдмрд╣реБрдд рдмрджрд╕реВрд░рдд рд╣реИред рдореИрдВрдиреЗ рдЗрд╕реЗ рдЕрдкрдиреЗ рджреЗрд╡ рд╡рд╛рддрд╛рд╡рд░рдг рдХреЛ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдереЛрдбрд╝реА рджреЗрд░ рдХреЗ рд▓рд┐рдП рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ред рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рдмрджрд▓ рджрд┐рдпрд╛ рд╣реИ рдХрд┐ рд╕рд░реНрд╡рд░ рдХреЗ рдЙрдардиреЗ рдФрд░ рдЪрд▓рдиреЗ рдХреЗ рдмрд╛рдж рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдВрдЯреНрд░реАрдкреЙрдЗрдВрдЯ рд╕реНрдХреНрд░рд┐рдкреНрдЯреНрд╕ рдФрд░ at рдХрдорд╛рдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИред рдЕрдм рдореЗрд░рд╛ рдХрдВрдЯреЗрдирд░ PID 1 рдХреЗ рд░реВрдк рдореЗрдВ рд╕рд╣реА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рд╕рд╛рде рдЪрд▓ рд░рд╣рд╛ рд╣реИ рдФрд░ рд╕рднреА рд╕рдВрдХреЗрддреЛрдВ рдХрд╛ рдареАрдХ рд╕реЗ рдЬрд╡рд╛рдм рджреЗ рд░рд╣рд╛ рд╣реИред

рд╣рдореЗрдВ рдЕрднреА рднреА рдЗрд╕рдХреА рдЬрд░реВрд░рдд рд╣реИред рдореБрдЭреЗ рдРрд╕рд╛ рдХреЛрдИ рд░рд╛рд╕реНрддрд╛ рдирд╣реАрдВ рдорд┐рд▓ рд░рд╣рд╛ рд╣реИ, рдХрд┐ рдХреИрд╕реЗ рдореИрдВ рдЕрдкрдиреЗ рдбреЗрдЯрд╛рдмреЗрд╕ рд░реЛрд▓рдЕрдк рдХреЛ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдореЗрдХрдлрд╛рдЗрд▓реНрд╕ рдХреЗ рдЭреБрдВрдб рдореЗрдВ рдмрдирд╛рдП рдмрд┐рдирд╛ рдХрдВрдЯреЗрдирд░ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВред

@ рд╡рд┐рдЬреЗрддрд╛-рдкреЗрд░реЛрд╡ рд░реЛрд▓-рдЕрдк рдХрд╛рд░реНрдп рдХреЗ рд▓рд┐рдП рдПрдХ рдФрд░ рдХрдВрдЯреЗрдирд░ рдмрдирд╛рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рдЕрд▓рдЧ рд╕реЗрд╡рд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддреЗ рд╣реИрдВ

рдбреЗрдЯрд╛рдмреЗрд╕ рдорд╛рдЗрдЧреНрд░реЗрд╢рди рдХреЛ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрдп рд╕реЗрд╡рд╛ рджрд┐рдЦрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдорд╛рд░реА рдХреБрдЫ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рд╕реЗ рдХреБрдЫ рд╕реНрдирд┐рдкреЗрдЯ рдпрд╣рд╛рдБ рджрд┐рдП рдЧрдП рд╣реИрдВред

x-task: &task
  # run once deploy policy for tasks
  deploy:
    restart_policy: 
      condition: none
    replicas: 1

service:
  automata-auth-migrate:
    <<: *automata-auth
    <<: *task
    # without the sleep it can't lookup the host postgres.  maybe the command is ran before the network set is complete.
    command: sleep 5 && python /code/manage.py migrate --noinput

рдЦреИрд░, рдпрд╣ рдЪреМрдерд╛ рд╡рд░реНрд╖ рд╣реИ рдЬрд┐рд╕ рдкрд░ рдЪрд░реНрдЪрд╛ рд╣реБрдИ рд╣реИред рддреЛ рдореБрдЭреЗ onrun рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЗ рдЗрд╕ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдЕрдкрдирд╛ +1 рдЬреЛрдбрд╝рдиреЗ рджреЗрдВред рдкреБрдирд╢реНрдЪ: рдореБрдЭреЗ рдкреВрд░реЗ рдзрд╛рдЧреЗ рдХреЗ рд▓рд┐рдП рдкреЙрдкрдХреЙрд░реНрди рдЦрд░реАрджрдирд╛ рдЪрд╛рд╣рд┐рдП рдерд╛ред

рдореИрдВ рднреА onrun рдпрд╛ рд╕рдорддреБрд▓реНрдп (рдкреЛрд╕реНрдЯ-рд░рди?) рдПрдХ рд╕реЛрдЪреВрдВрдЧрд╛ред рдПрдХ рдЖрд╡рд░рдг рд▓рд┐рдкрд┐ рдЬреЛрдбрд╝рдирд╛ рдФрд░ рдХрдВрдЯреЗрдирд░ рдореЗрдВ рдбреЙрдХ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдирд╛ рд╕рд┐рд░реНрдл ... рдмрджрд╕реВрд░рдд рд╣реИред

IMO docker рдХрдВрдкреЛрдЬрд╝ рдиреЗ рд▓реЛрдЧреЛрдВ рдХреЛ рдпрд╣ рд╕рдордЭрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдорд╣рд╛рди рдХрдВрдЯреЗрдирд░ рдСрд░реНрдХреЗрд╕реНрдЯреНрд░реЗрд╢рди MVP рдерд╛ рдХрд┐ рдХрдВрдЯреЗрдирд░реЛрдВ рдХрд╛ рдкреНрд░рдмрдВрдзрди рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рд╣рдо, рд╕рдореБрджрд╛рдп, рдЗрд╕реЗ "рд░рдЦрд░рдЦрд╛рд╡ рдореЛрдб" рдХреЗ рд░реВрдк рдореЗрдВ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ рдХреНрдпреЛрдВрдХрд┐ рдЙрддреНрдкрд╛рджрди-рддреИрдпрд╛рд░ рдСрд░реНрдХреЗрд╕реНрдЯреНрд░реЗрд╢рди рд╕рдорд╛рдзрд╛рди (рдпрд╛рдиреА рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕) рдХрд╛ рдкреНрд░рд╕рд╛рд░ рд╣реБрдЖ рд╣реИред рдЬрдм рдЖрдкрдХреЗ рдкрд╛рд╕ рдХрдВрдЯреЗрдирд░ рдирд┐рд░реНрднрд░рддрд╛ рдЬреИрд╕реА рдЙрдиреНрдирдд рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рд╣реЛрддреА рд╣реИрдВ, рддреЛ "рдХрдВрдЯреЗрдирд░ рдХреЗ рдКрдкрд░ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рдЗрд╕ рдмрд╛рдд рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░реЗрдВ" рдЬреИрд╕реА рдЕрдиреБрдкрд╕реНрдерд┐рдд рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЗ рд╕рд╛рде рд╕рдВрдпреБрдХреНрдд, рдпрд╣ рдХрдерд╛ рдХреЛ рдлрд┐рдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╡рд┐рдХрд╛рд╕ рдХреА рдЧрддрд┐ рдореЗрдВ рдХреЗрд╡рд▓ рдЧрд┐рд░рд╛рд╡рдЯ рдЖрдИ рд╣реИред рдмрд╣реБрдд рдХрдо рд╕реЗ рдХрдо, рдпрд╣ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ _should be_ рдХреЛ рджрд╛рдпрд░реЗ рд╕реЗ рдмрд╛рд╣рд░ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИред

рдЖрдк Dockerfile рдХреЗ рд╕рд╛рде рд╕рдм рдХреБрдЫ рдЖрд╕рд╛рдиреА рд╕реЗ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗред рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рдЖрдк рдПрдХ рдХрдВрдЯреЗрдирд░ рдореЗрдВ рдЕрдкрдиреА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЬреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП mysql рдХрдВрдЯреЗрдирд░ рд▓реЗрдВ рдФрд░ рдХрд┐рд╕реА рдШрдЯрдирд╛ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ API рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд░рд▓ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВред
рдЖрдк рдЗрд╕реЗ рдпрд╛ рддреЛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

  • Mysql рдХреЗ Dockerfile рдХреЛ рдмрджрд▓рдирд╛ рдФрд░ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рд╕реЗ рдкрд╣рд▓реЗ рдХрдВрдЯреЗрдирд░ рдореЗрдВ рдЕрдкрдиреА рдЦреБрдж рдХреА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЬреЛрдбрд╝рдирд╛ред рдЖрдк рдПрдХ рдирд╣реАрдВ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ CMD рдореЗрдВ Dockerfile , рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рддрд░реНрдХ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ ENTRYPOINT ред
  • рдЖрдк рдХрдВрдЯреЗрдирд░ рдЪрд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдлрд┐рд░ рдЕрдкрдиреА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдЪрд▓ рд░рд╣реЗ рдХрдВрдЯреЗрдирд░ рдореЗрдВ рдХреЙрдкреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ [ docker cp , docker exec ] рдЪрд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВред

рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рднреА рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдбреЙрдХрд░рдлрд╛рдЗрд▓ рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП onrun рдЬреИрд╕реА рд╕реБрд╡рд┐рдзрд╛ рдлрд╛рдпрджреЗрдордВрдж рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╣рдореЗрд╢рд╛ рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред

рдбрдВрдк, рдпрд╣ рдХреНрдпреЛрдВ рдмрдВрдж рд╣реИ? рд╕реНрдерд┐рддрд┐ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ, рдЬрдм рдЖрдк рдХреИрд╕реЗрдВрдбреНрд░рд╛ рдХреА рддрд░рд╣ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рдбреЙрдХрдЯрд░ рдЫрд╡рд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рд╕реНрдХреАрдорд╛ рдХреЛ рд▓реЛрдб рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ ... рдЗрд╕рдХреЗ рд▓рд┐рдП рдЕрдкрдирд╛ рд╕реНрд╡рдпрдВ рдХрд╛ рдмреИрд╢ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕рдорд╛рдзрд╛рди рд▓рд╛рдЧреВ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ ... рдЙрд╣, рдпрд╣ рдмрджрд╕реВрд░рдд рд╣реИ

@somebi рдХреЛ рд▓рдЧрд╛ рдЬреИрд╕реЗ

рдмрд╕ рдореЗрд░реЗ рджреЛ рд╕реЗрдВрдЯ: рдореИрдВ рдпрд╣рд╛рдВ рдЗрд╕рд▓рд┐рдП рдЙрддрд░рд╛ рдХреНрдпреЛрдВрдХрд┐ рдореИрдВ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдХрдВрдЯреЗрдирд░ рдХреЛ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рд╕рдХреНрд╖рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЪрд╛рд▓реВ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдЬрдм рднреА рдореИрдВ рдХрдВрдЯреЗрдирд░ рдХреЛ рдЪрд╛рд▓реВ рдХрд░рддрд╛ рд╣реВрдВ (рдПрд╕рдПрд╕рдПрд▓ рдбреЙрдХрд░ рд╣рдм wordpress рдЫрд╡рд┐ рдореЗрдВ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ)ред рджреБрдирд┐рдпрд╛ рдХрд╛ рдЕрдВрдд рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдЬрдм рднреА рдпрд╣ рдКрдкрд░ рдЬрд╛рддрд╛ рд╣реИ рддреЛ рдореИрдВ рдПрдХ рдЬреЛрдбрд╝реА рдХрдорд╛рдВрдб рдЪрд▓рд╛рдиреЗ рдХреА рдЙрдореНрдореАрдж рдХрд░ рд░рд╣рд╛ рдерд╛ рддрд╛рдХрд┐ рдореИрдВ рдмрд╕ рдмрд┐рдирд╛ рдбрдВрдк рдХрд┐рдП рдХрдВрдЯреЗрдирд░ рдХреЛ рдКрдкрд░ рдФрд░ рдиреАрдЪреЗ рд▓реЗ рдЬрд╛ рд╕рдХреВрдВред

рдмрд╕ рдореЗрд░реЗ рджреЛ рд╕реЗрдВрдЯ: рдореИрдВ рдпрд╣рд╛рдВ рдЗрд╕рд▓рд┐рдП рдЙрддрд░рд╛ рдХреНрдпреЛрдВрдХрд┐ рдореИрдВ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдХрдВрдЯреЗрдирд░ рдХреЛ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рд╕рдХреНрд╖рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЪрд╛рд▓реВ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдЬрдм рднреА рдореИрдВ рдХрдВрдЯреЗрдирд░ рдХреЛ рдЪрд╛рд▓реВ рдХрд░рддрд╛ рд╣реВрдВ (рдПрд╕рдПрд╕рдПрд▓ рдбреЙрдХрд░ рд╣рдм wordpress рдЫрд╡рд┐ рдореЗрдВ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ)ред рджреБрдирд┐рдпрд╛ рдХрд╛ рдЕрдВрдд рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдЬрдм рднреА рдпрд╣ рдКрдкрд░ рдЬрд╛рддрд╛ рд╣реИ рддреЛ рдореИрдВ рдПрдХ рдЬреЛрдбрд╝реА рдХрдорд╛рдВрдб рдЪрд▓рд╛рдиреЗ рдХреА рдЙрдореНрдореАрдж рдХрд░ рд░рд╣рд╛ рдерд╛ рддрд╛рдХрд┐ рдореИрдВ рдмрд╕ рдмрд┐рдирд╛ рдбрдВрдк рдХрд┐рдП рдХрдВрдЯреЗрдирд░ рдХреЛ рдКрдкрд░ рдФрд░ рдиреАрдЪреЗ рд▓реЗ рдЬрд╛ рд╕рдХреВрдВред

рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдпрд╣ рдЖрд╕рд╛рдиреА рд╕реЗ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдпрджрд┐ рдЖрдк рд╡рд░реНрдбрдкреНрд░реЗрд╕ рдЫрд╡рд┐ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдПрдХ рдирдИ рдЫрд╡рд┐ рдмрдирд╛рддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдореЗрдВ рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рд╕рдХреНрд╖рдо рдореЙрдбреНрдпреВрд▓ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рддреЛ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдПрдХ dockerfile рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ:

FROM wordpress:php7.1
RUN a2enmod ssl

рдПрдХ рдФрд░ рдЙрдкрд╛рдп рдпрд╣ рд╣реЛрдЧрд╛ рдХрд┐ рд╡рд░реНрдбрдкреНрд░реЗрд╕ рдбреЙрдХрд░рдлрд╛рдЗрд▓ рдХреЛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛рдП рдФрд░ рдЙрд╕рдореЗрдВ рдореЙрдбреНрдпреВрд▓ рдПрдХреНрдЯрд┐рд╡реЗрд╢рди рдХреЛ рдЬреЛрдбрд╝рд╛ рдЬрд╛рдПред рдлрд┐рд░ рдбреЙрдХ рдмрд┐рд▓реНрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрдкрдиреЗ рд▓рд┐рдП рдПрдХ рдирдИ рдЫрд╡рд┐ рдмрдирд╛рдПрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдпрд╣ php 7.1 рдХреЗ рд╕рд╛рде рд╡рд░реНрдбрдкреНрд░реЗрд╕ 5.2 рдХреЗ рд▓рд┐рдП рдбреЙрдХрд░реАрдлрд╛рдЗрд▓ рд╣реИ:

рд╡рд░реНрдбрдкреНрд░реЗрд╕ dockerfile

рдЖрдк рд▓рд╛рдЗрди 63 рдореЗрдВ рдЕрдзрд┐рдХ рдореЙрдбреНрдпреВрд▓ рд╕рдХреНрд╖рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдпрд╛ ssl genaration рдЪрд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВред

рдпрд╣ рд╕рдм рдорд╛рдорд▓рд╛ рдРрд╕рд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдпрд╣рд╛рдВ рдЪрд░реНрдЪрд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рд╕рдорд╕реНрдпрд╛ рдХрдВрдЯреЗрдирд░ рдЬреАрд╡рди рдЪрдХреНрд░ рдореЗрдВ рдЧрддрд┐рд╢реАрд▓ рд╣реБрдХ рдмрдирд╛ рд░рд╣реА рд╣реИ рдЬреИрд╕реЗ рдХрд┐ рдпрд╣ рдХрдм рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ рдЖрджрд┐ред

рдпрд╣ рдбреЙрдХрдЯрд░-рдХрдореНрдкреЛрдЬрд╝ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдЪреНрдЫрд╛ рдЬреЛрдбрд╝ рд╣реЛрдЧрд╛!

рдЗрд╕ рдереНрд░реЗрдб рдкрд░ рдЙрддреНрддрд░ рджреЗрдиреЗ рд╡рд╛рд▓реЗ рдРрд╕реЗ рдХрд╛рд░рдг рд╣реИрдВ рдХрд┐ рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ "рд╕рд╛рд░рд╛" рдкреИрд╕рд╛ рд░рдЦ рд░рд╣реЗ рд╣реИрдВ (рдбреЙрдХрд░) рдЙрддреНрдкрд╛рджрди рдХрд░ рд░рд╣рд╛ рд╣реИ, рдФрд░ рдпрд╣ рдмреБрд░реА рдмрд╛рдд рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдХреЛрдИ рдЬрд▓реНрдж рд╣реА рдбреЙрдХрд░ (рдХрдВрдкрдиреА) рдХреЛ рдЦрд░реАрдж рд▓реЗрдЧрд╛ рдФрд░ рд╕рдореБрджрд╛рдп рдХреЗ рдкреНрд░рд╕реНрддрд╛рд╡реЛрдВ рдХреЗ рдЕрдиреБрд░реЛрдз рдХреЛ рдмрджрд▓ рджреЗрдЧрд╛ред / рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд┐рдпрд╛ ...

рдЗрд╕ рдзрд╛рдЧреЗ рдкрд░ рдЙрддреНрддрд░ рджреЗрдиреЗ рд╡рд╛рд▓реЗ рдХрд╛рд░рдг рд╣реИрдВ рдХрд┐ рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ _ "рд╕рднреА" _ рдореЛрдиреА рдбреЛрдХрд░ (рддрдХрдиреАрдХ) рдХрд╛ рдЙрддреНрдкрд╛рджрди рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдФрд░ рдпрд╣ рдХреЛрдИ рдмреБрд░реА рдмрд╛рдд рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдХреЛрдИ рдЬрд▓реНрдж рд╣реА рдбреЙрдХрд░ (рдХрдВрдкрдиреА) рдХреЛ рдЦрд░реАрдж рд▓реЗрдЧрд╛ рдФрд░ рд░рд╛рд╕реНрддреЗ рдХреЗ рдкреНрд░рд╕реНрддрд╛рд╡реЛрдВ / рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рдмрджрд▓ рджреЗрдЧрд╛ред рд╕реНрд╡рд╛рдЧрдд рд╣реИ / рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд┐рдпрд╛ ...

рдореИрдВрдиреЗ рдмрд┐рдирд╛ рдХрд┐рд╕реА рдЖрдкрддреНрддрд┐рдЬрдирдХ рдмрдпрд╛рди рдХреЗ рдПрдХ рд╕рдорд╛рди рдЖрд▓реЛрдЪрдХ рд▓рд┐рдЦрд╛, (рдпрд╣ _open рд╕реНрд░реЛрдд рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреА рддрд░реНрдЬ рдкрд░ рдерд╛, рдЬреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЦреБрд▓реЗ рд╕реНрд░реЛрдд рдирд╣реАрдВ рд╣реИрдВ, рдЬрд┐рдирдХреЗ рдЕрдиреБрд░рдХреНрд╖рдХ рдХрд┐рд╕реА рднреА рдЕрдиреНрдп рддрд░реНрдХ рдХреЗ рдмрд┐рдирд╛ рддрд░реНрдХ рдХреЛ рдЕрдирджреЗрдЦрд╛ рдХрд░рддреЗ рд╣реИрдВ, рдпрд╣ рджрд┐рдЦрд╛рдиреЗ рдХреЗ рдмрдЬрд╛рдп рдХрд┐ рдЙрдирдХреЗ рдкрд╛рд╕ рдХрд┐рддрдирд╛ рддрдХрдиреАрдХреА рдЖрд░реНрдЧрди рд╣реИ_), рдЗрд╕рдХрд╛ рдмрд╣реБрдд рд╕рдорд░реНрдерди рд╣реИ , рдФрд░ рд╕рдВрджреЗрд╢ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред

рдЗрд╕рд╕реЗ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ рдЗрд╕рдХреЗ рдкреАрдЫреЗ рдХрд┐рд╕ рддрд░рд╣ рдХреЗ рдЕрднрд┐рдорд╛рдиреА рд╡реНрдпрдХреНрддрд┐ рд╣реИрдВред

рдЬрдм рдЖрдкрдХрд╛ рд╕рдореБрджрд╛рдп 4 рд╕рд╛рд▓ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдорд╛рдВрдЧрддрд╛ рд╣реИ рдФрд░ рдЖрдк (рдбреЛрдХрд░) рдЕрдкрдиреА рдЖрдБрдЦреЗрдВ рдмрдВрдж рдХрд░ рд▓реЗрддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рджрд░реНрд╢рд╛рддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдЙрдиреНрд╣реЗрдВ рдЙрд╕реА рджрд┐рд╢рд╛ рдореЗрдВ рдирд╣реАрдВ рджреЗрдЦ рд░рд╣реЗ рд╣реИрдВ:

рдФрд░ рдЕрдм рдбреЙрдХрдЯрд░ рдиреЗ рдмреЗрдЪ рджрд┐рдпрд╛ рдФрд░ рдмреЗрдЪ рджрд┐рдпрд╛ред
рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рд╕реБрди рдирд╣реАрдВ рд╕рдХрддреЗ рдереЗ ... рд╡реЗ рд╣рд╛рд░ рдЧрдПред

рд╢рд░реНрдо - рд▓реЗрдХрд┐рди рд╣реЗ рд╣реЛред

рдпрд╣ рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╢рд░реНрдо рдХреА рдмрд╛рдд рд╣реИ рдХрд┐ рдРрд╕рд╛ рдХреБрдЫ рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ onFailure рд╣реБрдХ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрдпрд╛рд░ рдХрд░рддрд╛ рдерд╛, рдЬреЛ рддрдм рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдЬрдм рд╕реНрд╡рд╛рд╕реНрдереНрдп рдХреА рдЬрд╛рдБрдЪ рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рддреА рд╣реИред

рдЕрд░реНрдерд╛рдд

services:
  app:
    image: myapp:latest
    hooks:
      onFailure:
        - # Call a monitoring service (from the host machine) to tell it that the service is offline.

рдпрд╣ рдРрд╕реЗ рд╕рдордп рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛ рдЬрд╣рд╛рдВ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕реЙрдХреЗрдЯ / рдкреЛрд░реНрдЯ рд╕реЗ рдирд╣реАрдВ рдЬреБрдбрд╝рд╛ рд╣реЛред рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рд╢рд╛рдпрдж рдпрд╣рд╛рдБ рдЬрд╛рдиреЗ рдХрд╛ рд░рд╛рд╕реНрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдПрдХ рдмрд╣реБрдд рдмрдбрд╝рд╛ рдмреБрдирд┐рдпрд╛рджреА рдврд╛рдБрдЪрд╛ рд╣реИ рдФрд░ рдмрд╣реБрдд рдЫреЛрдЯреЗ рдкрд░реНрдпрд╛рд╡рд░рдг рдХреЗ рд▓рд┐рдП рдУрд╡рд░рдХрд┐рд▓ рд╣реИред

рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ:
рдЗрд╕рдХреЗ рдЪрд╛рд░реЛрдВ рдУрд░ рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдЕрдкрдиреЗ рдХрдВрдЯреЗрдирд░ рдХреЗ рдПрдВрдЯреНрд░реАрдкреЙрдЗрдВрдЯ рдХреЛ рдореЙрдирд┐рдЯрд░рд┐рдВрдЧ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ "рд░реИрдк" рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ред рдЕрд░реНрдерд╛рдд

# /app/bin/run_with_monitor
#!/bin/bash
set -eE

updateMonitoringSystem() {
 # do something here... This is run from the container, though, unfortunately.
 if [[ $? -eq 1 ]]; then
  # Failed!
 else
  # All is good!
 fi
}

trap 'updateMonitoringSystem' EXIT

$@
# Dockerfile
....
CMD ["/app/bin/run_with_monitor", "./my-app"

рдлрд┐рд░ рднреА, рдЫрд╡рд┐ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣ _without_ рдХрд░рдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ред

: man_shrugging: рдЗрд╕ рдмреБрдирд┐рдпрд╛рджреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреА рддрд▓рд╛рд╢ рдореЗрдВ рдЖрдпрд╛, рдХрд┐ рдкреНрд░рддрд┐рдпреЛрдЧреА (рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕) рдХреЗ рдкрд╛рд╕ рд╣реИ, рдФрд░ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдореБрдЭреЗ рдПрдХ рдбрдВрдкрд╕реНрдЯрд░ рдЖрдЧ рдорд┐рд▓реАред

рдпрд╣ рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╢рд░реНрдо рдХреА рдмрд╛рдд рд╣реИ, рдЕрдм рдореБрдЭреЗ рд╕реНрдерд╛рдиреАрдп рд░реВрдк рд╕реЗ рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рдЕрд▓рдЧ-рдЕрд▓рдЧ рдбреЙрдХрд░реЛрдВ рдХреА рдЫрд╡рд┐рдпреЛрдВ рдХреЛ рдмрдирд╛рдП рд░рдЦрдирд╛ рд╣реИред

рдирдпрд╛ рд╕рд╛рд▓ рдореБрдмрд╛рд░рдХ рд╣реЛ: roll_eyes:

image

@LukeStonehm рд╡рд╣реАред рдХрдВрдЯреЗрдирд░ рдЦрдбрд╝реЗ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рд╡рди рдХрдорд╛рдВрдб рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереА, рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдЧрд░реНрдо рдХрдЪрд░реЗ рдХреЗ рд╕рд╛рде рдЗрд▓рд╛рдЬ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрдкрдиреА рдЦреБрдж рдХреА рдЫрд╡рд┐рдпреЛрдВ рдФрд░ рдбреЙрдХ рдлрд╛рдЗрд▓реЛрдВ рдХреЛ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдЕрдиреБрднрд╡ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реВрдВ рдЬрдм рдПрдХ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рдЫрд╡рд┐ рдореБрдЭреЗ 90% рдпрд╛ рдЙрд╕рд╕реЗ рдЕрдзрд┐рдХ рддрд░реАрдХреЗ рд╕реЗ рдорд┐рд▓рддреА рд╣реИред

рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рдХреА рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд░рд╛рд╢рд┐ рд╕реНрдЯрд╛рд░реНрдЯрдЕрдк рдкрд░ рдореМрдЬреВрдж рдХреБрдЫ рд╕реЗрд╡рд╛рдУрдВ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддреА рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдПрдХ MySQL рдпрд╛ MongoDB рдбреЗрдЯрд╛рдмреЗрд╕ред

рдЗрд╕рд▓рд┐рдП рдЗрди рдорд╛рдорд▓реЛрдВ рдореЗрдВ docker-compose рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рд╕рдордЭрджрд╛рд░ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИред

рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рд╕реЗ рдЕрдкреЗрдХреНрд╖рд╛ рдХреА рдЬрд╛рддреА рд╣реИ:

  • Dockerfiles (рдФрд░ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ) рд▓рд┐рдЦрдирд╛ рд╕реАрдЦреЗрдВ
  • Docker images рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рдирд╛ рд╕реАрдЦреЗрдВ
  • рдХрдВрдЯреЗрдирд░ рдХреЛ рдореВрд▓ рдЫрд╡рд┐рдпреЛрдВ рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓рд╛рддреЗ рд╣реБрдП Dockerfiles рдмрдирд╛рдПрдВ, рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдб рдЬреЛрдбрд╝рддреЗ рд╣реБрдП рдХрд┐ рдХрдВрдЯреЗрдирд░ рдПрдХ рджреВрд╕рд░реЗ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рддреЗ рд╣реИрдВ
  • рдЖрдзрд╛рд░ рдЫрд╡рд┐рдпреЛрдВ рдХреА рд╕реБрд░рдХреНрд╖рд╛ рдЕрдкрдбреЗрдЯ рдХреЗ рд▓рд┐рдП рдирд┐рдпрдорд┐рдд рд░реВрдк рд╕реЗ рдЬрд╛рдВрдЪ рдХрд░реЗрдВ
  • рдЕрджреНрдпрддрдиреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП Dockerfiles рдХреЛ рдирд┐рдпрдорд┐рдд рд░реВрдк рд╕реЗ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░реЗрдВ
  • рдЙрди Dockerfiles рд╕реЗ рдирд┐рдпрдорд┐рдд рд░реВрдк рд╕реЗ Docker images рдирд┐рд░реНрдорд╛рдг рдХрд░реЗрдВ

рдФрд░ рдпрд╣ рдмреЗрдХрд╛рд░ рд╣реИ рдХреНрдпреЛрдВрдХрд┐:

  • рдЖрдк рд╕рдордп рдХреА рднрд╛рд░реА рдорд╛рддреНрд░рд╛ рдореЗрдВ рд╕рд╛рдорд╛рди рдХреА рдмрд░реНрдмрд╛рджреА рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдЖрдкрдХреЛ рдЕрдиреНрдпрдерд╛ рдЖрд╡рд╢реНрдпрдХрддрд╛ рднреА рдирд╣реАрдВ рд╣реЛ рд╕рдХрддреА рд╣реИ
  • рдЖрдк рдирд┐рдпрдорд┐рдд рд░реВрдк рд╕реЗ Docker images рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЕрдкрд▓реЛрдб рдХрд░рдиреЗ / рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ (рдЦреАрдВрдЪрдиреЗ / рдзрдХреНрдХрд╛ рджреЗрдиреЗ) рдкрд░ рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЛ рдмрд░реНрдмрд╛рдж рдХрд░ рд░рд╣реЗ рд╣реИрдВред
  • рдЖрдк рдирд┐рдпрдорд┐рдд рд░реВрдк рд╕реЗ рдЙрди Dockerfiles рд▓рд┐рдЦрдиреЗ рдкрд░ рд╕рдордп рдмрд░реНрдмрд╛рдж рдХрд░рддреЗ рд╣реИрдВ, рдЙрдирдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рддреЗ рд╣реИрдВ, рдЙрдирдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рддреЗ рд╣реИрдВ, рдЙрдиреНрд╣реЗрдВ рдареАрдХ рдХрд░рддреЗ рд╣реИрдВ ... рдЖрджрд┐ред
  • рдЖрдк рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ рдЕрдкрдиреА рдЫрд╡рд┐рдпреЛрдВ рдХреА рд╕реБрд░рдХреНрд╖рд╛ рд╕реЗ рд╕рдордЭреМрддрд╛ рдХрд░рддреЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдЖрдк рдирд╣реАрдВ рдЬрд╛рдирддреЗ рдХрд┐ рдЖрдк рдХреНрдпрд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВ
  • рдЖрдк рдХреЗрд╡рд▓ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ рд╕рддреНрдпрд╛рдкрд┐рдд / рд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд Docker images рдЪрд▓рд╛рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдЦреЛ рджреЗрддреЗ рд╣реИрдВ

рдЕрдЧрд░ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рд╕реНрдЯрд╛рд░реНрдЯрдЕрдк рдХреА рдЬрд╛рдБрдЪ рд╣реЛрддреА рд╣реИ, рддреЛ рдпрд╣ рд╕рдм рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реЛрдЧрд╛ рдФрд░ рд╣рдо рдЬрдм рдЪрд╛рд╣реЗрдВ image: mysql:8.0.18 рд╕реЗ image: mysql:8.0.19 рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ!

рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд░реВрдк рд╕реЗ рдпрд╣ рд╡рд╣реА рд╣реИ рдЬреЛ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рджреБрдирд┐рдпрд╛ рдореЗрдВ рд╣реЛ рд░рд╣рд╛ рд╣реИ:

  • рд▓реЛрдЧ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ Dockerfiles рдкрд░рд┐рд╡рд░реНрддрди рдХрд░ рд░рд╣реЗ рд╣реИрдВ рддрд╛рдХрд┐ рд╡реЗ docker-compose рд╕рд╛рде рдХрд╛рдо рдХрд░реЗрдВ
  • рд╡реЗ рдПрдХ рдмрд╛рд░ рдЕрдкрдиреА рдЫрд╡рд┐рдпреЛрдВ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рддреЗ рд╣реИрдВ
  • рдФрд░ рдЙрдиреНрд╣реЗрдВ рдирд┐рдпрдорд┐рдд рд░реВрдк рд╕реЗ рдкреИрдЪ рди рдХрд░реЗрдВ
  • рд╣реИрдХрд░ рдЦреБрд╢ рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВ

рдФрд░ рдЖрдк рдпрд╣ рдирд╣реАрдВ рдХрд╣ рд╕рдХрддреЗ рдХрд┐ docker-compose рдХреЗрд╡рд▓ "рдПрдХ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП" рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╕рдм рдХреБрдЫ рдХрд░рддрд╛ рд╣реИред depends_on рд╕рдВрдкрддреНрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддреЗ рд╣реБрдП, рдФрд░ рднреА рдорд╣рддреНрд╡рдкреВрд░реНрдг рд░реВрдк рд╕реЗ рдЫрд╡рд┐рдпреЛрдВ рдХреЛ рдЦреАрдВрдЪрдирд╛ рдФрд░ рдирд┐рд░реНрдорд╛рдг рдХрд░рдирд╛ рд╢рд╛рдорд┐рд▓ рд╣реИред рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдирдИ рд╕реБрд╡рд┐рдзрд╛ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рднреА рдирд╣реАрдВ рд╣реИ рдпрд╣ рд╕рд┐рд░реНрдл docker рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХ рдФрд░ рдкреИрд░рд╛рдореАрдЯрд░ рдкрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИред

@ binman-рдбреЛрдХрд░ @crosbymichael @dmcgowan @ebriney @ehazlett @eunomie @guillaumerose @jeanlaurent @justincormack @lorenrh @manishtomar @olegburov @routelastresort @spencerhcheng @StefanScherer @thaJeztah @tonistiigi @ulyssessouza @aiordache @ рдХреНрд░рд┐рд╕-рдмреБрдврд╝реАрдпрд╛ @ndeloof
рдХреГрдкрдпрд╛ рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдкрд░ рдкреБрдирд░реНрд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ рдпрд╛ рдХрдо рд╕реЗ рдХрдо рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдЙрдЪрд┐рдд рдЪрд░реНрдЪрд╛ рдХрд░реЗрдВред

task service рддрдХрдиреАрдХ рдореЗрд░реЗ рд▓рд┐рдП рдЗрд╕ рдореЛрдбрд╝ рдкрд░ рдмрд╣реБрдд рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рддреА рд╣реИ, рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рдпрд╣ рдЖрдЗрдбрд┐рдУрд╕рд┐рдВрдХрд░реЗрдХреНрдЯрд┐рд╕ рд╣реИред рд╣рдордиреЗ рдмрдбрд╝реЗ рдкреИрдорд╛рдиреЗ рдкрд░ рдорд╛рдЗрдЧреНрд░реЗрд╢рди рдФрд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдХреЗ рд▓рд┐рдП рдЕрдкрдиреА рдХрдВрдкреЛрдЬрд╝ рдлрд╝рд╛рдЗрд▓реНрд╕ рдореЗрдВ рдкреИрдЯрд░реНрди рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдореИрдВ рдПрдХ рдмреЗрд╣рддрд░ 'depend_on' рд╕рд╣рдордд рд╣реВрдВ рдЬреЛ рдПрдХ рд╕рдлрд▓ рд╣реЗрд▓реНрдердЪреЗрдХ рдпрд╛ рд╕рдлрд▓ рдирд┐рдХрд╛рд╕ / рдХрд╛рд░реНрдп рдкреВрд░рд╛ рд╣реЛрдиреЗ рдкрд░ рдЗрдВрддрдЬрд╛рд░ рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕рд╕реЗ рдХрдИ рдХрд╛рд░реНрдп рдЖрд╕рд╛рди рдФрд░ рдЕрдзрд┐рдХ рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рд╣реЛ рдЬрд╛рдПрдВрдЧреЗред

рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рд╕рд╣рд╛рдпрдХ рдЬреЛрдбрд╝ рд╣реЛрдЧрд╛ред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЬреЛрд░ рджреЗрдиреЗ рд▓рд╛рдпрдХ рд╣реИ рдХрд┐ рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдХреЗ рдкрд╛рд╕ рдЬреАрд╡рди рдЪрдХреНрд░ рдкреЛрд╕реНрдЯрд╕реНрдЯрд╛рд░реНрдЯ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдпрд╣ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рд╣реИред

k8s! = docker-composeред рдЧрд▓рдд рдЪреИрдирд▓

рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдЦреЗрдж рд╣реИ, рд▓реЗрдХрд┐рди рдореЗрд░реА рдмрд╛рдд рдереА: рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдЗрд╕рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдХреНрдпреЛрдВрдХрд┐ рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдФрд░ рдбреЛрдХрд░ рдХрдВрдкреЛрдЬ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдХрдИ рдорд╛рдорд▓реЗ / рдЙрджреНрджреЗрд╢реНрдп рд╣реИрдВ, рдЬреЛ рдЗрд╕реЗ рдХрдВрдкреЛрдЬ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рддрд░реНрдХ рд╣реЛрдЧрд╛ред рдХреНрд╖рдорд╛ рдХрд░реЗрдВ рдпрджрд┐ рдореИрдВ рдЕрд╕реНрдкрд╖реНрдЯ рдерд╛ред

рдЦреБрд╢рдЦрдмрд░реА!!

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдбреЙрдХрдЯрд░ рдиреЗ рд╣рдореЗрдВ рд╕реБрдирд╛ рд╣реИ, (рдЗрд╕ рдореБрджреНрджреЗ рдкрд░ рдФрд░ рдХреБрдЫ рдЕрдиреНрдп рд▓реЛрдЧреЛрдВ рдкрд░)ред https://www.docker.com/blog/announcing-the-compose-specification/

рдЖрдЗрдП рд╕рдореБрджрд╛рдп рдХреА рдЬрд░реВрд░рддреЛрдВ рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд╣рд╛рдВ рдХреЗ рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдкрд░ рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВред рд╣рдо рдЗрд╕ рдкреБрдирд░рд╛рд░рдВрдн рдХреЗ рд╕рд╛рде рдЗрд╕реЗ рдПрдХ рдЦреБрд▓рд╛ рдФрд░ рдореИрддреНрд░реАрдкреВрд░реНрдг рд╕рдореБрджрд╛рдп рдмрдирд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдЦреБрд╢рдЦрдмрд░реА!!

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдбреЙрдХрдЯрд░ рдиреЗ рд╣рдореЗрдВ рд╕реБрдирд╛ рд╣реИ, (рдЗрд╕ рдореБрджреНрджреЗ рдкрд░ рдФрд░ рдХреБрдЫ рдЕрдиреНрдп рд▓реЛрдЧреЛрдВ рдкрд░)ред https://www.docker.com/blog/announcing-the-compose-specification/

рдЖрдЗрдП рд╕рдореБрджрд╛рдп рдХреА рдЬрд░реВрд░рддреЛрдВ рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд╣рд╛рдВ рдХреЗ рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдкрд░ рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВред рд╣рдо рдЗрд╕ рдкреБрдирд░рд╛рд░рдВрдн рдХреЗ рд╕рд╛рде рдЗрд╕реЗ рдПрдХ рдЦреБрд▓рд╛ рдФрд░ рдореИрддреНрд░реАрдкреВрд░реНрдг рд╕рдореБрджрд╛рдп рдмрдирд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдХреНрдпрд╛ рдХрд┐рд╕реА рдиреЗ рдЗрд╕ рдмрджрд▓рд╛рд╡ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджрд┐рдпрд╛ рд╣реИ? рдореЗрд▓рд┐рдВрдЧ рд╕реВрдЪреА рдЕрднреА рддрдХ рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЕрдЧрд▓реА рд╕рдмрд╕реЗ рдЕрдЪреНрдЫреА рдЬрдЧрд╣ рдпрд╣рд╛рдБ рд╣реИ: https://github.com/compose-spec/compose-pec

рдореБрдЭреЗ рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рджрд┐рдЦрддреА рдЬреЛ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддреА рд╣реИ рд▓реЗрдХрд┐рди рдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рд╕рд╣реА рдЬрдЧрд╣ рд╣реИ ...

рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: рдореИрдВрдиреЗ https://github.com/compose-spec/compose-spec/issues/84 рдкрд░ рдПрдХ рдореБрджреНрджрд╛ рдЦреЛрд▓рд╛

рдЖрдк рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдФрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП HEALTHCHECK рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

рдХреЛрдб

Dockerfile

FROM ubuntu

COPY healthcheck.sh /healthcheck.sh
RUN chmod a+x /healthcheck.sh

HEALTHCHECK --interval=5s CMD /healthcheck.sh

CMD bash -c 'set -x; set +e; while true; do cat /test.txt; sleep 3; done'

healthcheck.sh

#/usr/bin/env bash

set -e

FIRST_READY_STATUS_FLAG='/tmp/.FIRST_READY_STATUS_FLAG'

# Health check

echo 'Run command to validate the container status HERE'

# On success
if [ ! -f "${FIRST_READY_STATUS_FLAG}" ]; then
  # On first success...
  touch "${FIRST_READY_STATUS_FLAG}"

  # Run ON_RUN on first health check ok
  if [ ! -z "${DOCKER_ON_RUN}" ]; then
    eval "${DOCKER_ON_RUN}"
  fi
fi
  1. _Health check_ рдЪрд▓рд╛рдПрдВред

    • рдпрджрд┐ рдпрд╣ рд╡рд┐рдлрд▓ рд░рд╣рддрд╛ рд╣реИ, рддреЛ рдПрдХреНрдЬрд╝рд┐рдЯ рдХреЛрдб 1 рд╕рд╛рде рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓рддрд╛ рд╣реИред

    • рдпрджрд┐ _health check_ рдареАрдХ рд╣реИ, рддреЛ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЬрд╛рд░реА рд░рд╣реЗрдЧреАред

  2. рдпрджрд┐ рдпрд╣ рдкрд╣рд▓рд╛ _health рдЪреЗрдХ рд╣реИ OK_ рдФрд░ рдпрджрд┐ DOCKER_ON_RUN рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░ рдореМрдЬреВрдж рд╣реИ, рддреЛ рдЗрд╕реЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░реЗрдВред

рдЙрджрд╛рд╣рд░рдг

docker-compose.yml

version: "3.7"

services:
  test:
    build:
      context: .
    image: test/on-run
    environment:
      DOCKER_ON_RUN: echo x >> /test.txt

рдЪрд▓рд╛рдиреЗ рдХреЗ рдмрд╛рдж рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдХрд╕реНрдЯрдо рдХрдорд╛рдВрдб рдкрд╛рд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдк DOCKER_ON_RUN рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдирд┐рд╖реНрдкрд╛рджрди рдкрд░рд┐рдгрд╛рдо

docker-compose build
docker-compose up

рдЖрдЙрдЯрдкреБрдЯ:

Creating network "tmp_default" with the default driver
Creating tmp_test_1 ... done
Attaching to tmp_test_1
test_1  | + set +e
test_1  | + true
test_1  | + cat /test.txt
test_1  | cat: /test.txt: No such file or directory
test_1  | + sleep 3
test_1  | + true
test_1  | + cat /test.txt
test_1  | cat: /test.txt: No such file or directory
test_1  | + sleep 3
test_1  | + true
test_1  | + cat /test.txt
test_1  | x
test_1  | + sleep 3
test_1  | + true
test_1  | + cat /test.txt
test_1  | x
test_1  | + sleep 3
test_1  | + true
test_1  | + cat /test.txt
test_1  | x
test_1  | + sleep 3
  • рдЖрдк _health check_ рддреИрдпрд╛рд░ рд╣реЛрдиреЗ рддрдХ cat: /test.txt: No such file or directory рддреНрд░реБрдЯрд┐ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред
  • рдЖрдк рдЪрд▓рд╛рдиреЗ рдХреЗ рдмрд╛рдж /test.txt рдЕрдВрджрд░ рдХреЗрд╡рд▓ рдПрдХ x рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред

рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХрд┐рд╕реА рдХреА рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реИред

рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ 1

рдпрджрд┐ рдЖрдкрдХреЛ _health check_ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рддреЛ рдЖрдк рдмрд╛рдХреА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

@ reduardo7
рдЖрдкрдХреЗ рд╕рдорд╛рдзрд╛рди рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред
рдмрд╕ рдЬреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдпрджрд┐ рдЖрдкрдХреА рдХрдорд╛рдВрдб рдХреЛ рдЪрд▓рд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЬреИрд╕реЗ рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд┐рд░реНрдорд╛рдг рдпрд╛ рдЖрджрд┐ рдХреЗ рд▓рд┐рдП, рддреЛ рдЖрдк touch "${FIRST_READY_STATUS_FLAG}" рд▓рд┐рдП рд╡реЙрд▓реНрдпреВрдо рдорд╛рдЙрдВрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ

рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЗ рдХрдИ рд╕рдорд╛рдзрд╛рди рд╡реИрдз рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдПрдХ рдПрдВрдЯреНрд░реАрдкреЙрдЗрдВрдЯ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдмрдирд╛рдиреЗ рд╕реЗ рдпрд╣ рднреА рд╣рд▓ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ:
ENTRYPOINT ["./entrypoint.sh"]

рдЬрд┐рд╕рдореЗрдВ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕реЗрд╡рд╛ рдпрд╛ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдЪрд▓рд╛рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдПрдХ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рддрд░реНрдХ рд╢рд╛рдорд┐рд▓ рд╣реЛрдЧрд╛ред
рдпрд╣ рдЕрднреА рднреА рдПрдХ рд╣реБрдХ рдирд╣реАрдВ рд╣реИ, рдЬреЛ рд╣рдореЗрдВ рдХрдВрдЯреЗрдирд░ рдЬреАрд╡рди рдЪрдХреНрд░ рдореЗрдВ рддрд░реНрдХ рдХреЛ рдЗрдВрдЬреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛:

  • рдмрдирд╛рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ
  • рд╢реБрд░реВ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ
  • рдЖрд░рдВрдн рдХрд░рдХреЗ
  • рдирд╖реНрдЯ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ
  • рдирд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рднреА
  • рдЖрджрд┐ ...

рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рдЙрдкрд░реЛрдХреНрдд рд╕рднреА рд╕рд╛рд░реНрдердХ рдирд╣реАрдВ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рдЪрд┐рддреНрд░ рдорд┐рд▓ рдЬрд╛рдПрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдмрд╛рдд рд╣реИред
рдЗрд╕реЗ docker-compose рдореЗрдВ рдПрдХ рдирд┐рд░реНрджреЗрд╢ рдХреЗ рд╕рд╛рде рднреА рд╢рд╛рдорд┐рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:

lifecycle:
    before_start: "./beforeStartHook.sh"
    after_destroy: "./afterDestroyHook.sh"

рдпрд╛ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЬреИрд╕реЗ:

hooks:
    before_destroy: "./beforeDestroyHook.sh"
    before_create: "./fixFsRights.sh"

рд╣рдо рдЙрд╕ рдлрд╝рд╛рдЗрд▓ рдХреЛ рдЕрдзрд┐рд▓реЗрдЦрд┐рдд рдХрд░рдиреЗ рдореЗрдВ рдЕрд╕рдорд░реНрде рд╣реИрдВ рдЬрд┐рд╕реЗ рд╣реБрдХ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдпрд╛ рдмреВрдЯрд╕реНрдЯреНрд░реИрдк рд╕реНрдХреНрд░рд┐рдкреНрдЯ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд░реВрдЯ рдЕрдиреБрдорддрд┐ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рдХрдВрдЯреЗрдирд░ рдХреЛ рдЧреИрд░ рд░реВрдЯ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ

рд╡рд╛рд╣, рдРрд╕реА рдмреБрдирд┐рдпрд╛рджреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдФрд░ рдЕрднреА рднреА рд▓рд╛рдЧреВ рдирд╣реАрдВ рд╣реБрдИ рд╣реИред

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

giggio picture giggio  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

darkrasid picture darkrasid  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

HackerWilson picture HackerWilson  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

maltefiala picture maltefiala  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

AvdN picture AvdN  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ