рд╣реИрд▓реЛ, рдХреНрдпрд╛ docker-compose.yml
рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╢реЗрд▓ рдХрдорд╛рдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рд╣реИ?
рдпрд╣рд╛рдБ рдореЗрд░рд╛ рдЙрдкрдпреЛрдЧ рдорд╛рдорд▓рд╛ рд╣реИ:
version: '2'
services:
ci:
image: jenkins
volumes:
- ./data:/var/jenkins_home
- /var/run/docker.sock:/var/run/docker.sock
- $(command -v docker):/usr/bin/docker
groupadd:
- $(stat -c %g /var/run/docker.sock)
ports:
- "8080:8080"
- "50000:50000"
рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдпрд╣ рдореБрдЭреЗ рдпрд╣ рддреНрд░реБрдЯрд┐ рджреЗ рд░рд╣рд╛ рд╣реИ:
ERROR: Invalid interpolation format for "volumes" option in service "ci": "${command -v docker}:/usr/bin/docker"
рд╣рд╛рдп @ рдЬрд╝рд╛рдВрдбрд╛ ,
рдХреНрд╖рдорд╛ рдХрд░реЗрдВ, рдпрд╣ рдРрд╕реА рдЪреАрдЬ рдирд╣реАрдВ рд╣реИ рдЬрд┐рд╕рдХрд╛ рд╣рдо рд╕рдорд░реНрдерди рдХрд░рддреЗ рд╣реИрдВред рдЖрдорддреМрд░ рдкрд░, рдпрд╣ рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░ рдХреА рд╕реНрдерд╛рдкрдирд╛ рдФрд░ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдХрдореНрдкреЛрдЬрд╝ рдлрд╝рд╛рдЗрд▓ рдХреЗ рдЕрдВрджрд░ рдЪрд░ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
@ рдкрд┐рдВрдбрд▓реА - рдзрдиреНрдпрд╡рд╛рдж, рдореИрдВ рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░ рдХреЗ рд╕рд╛рде рд╕рдорд╛рдзрд╛рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред .env
рдмрд╣реБрдд рдЙрдкрдпреЛрдЧреА рд▓рдЧрддрд╛ рд╣реИред
рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рдбреЙрдХреНрд╕: https://docs.docker.com/compose/environment-variables/#/the -env-file
@zkanda рдХреНрдпрд╛ рдЖрдкрдХреЛ рдХрднреА рдпрд╣ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдорд┐рд▓рд╛, рдореИрдВрдиреЗ рдЕрдкрдиреЗ .env
рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдХреЛрд╢рд┐рд╢ рдХреА
DOCKER_BIN=`which docker`
рдФрд░ рдлрд┐рд░ docker-compose.yml рдореЗрдВ
jenkinsmaster:
build: jenkins-master
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- ${DOCKER_BIN}:/usr/bin/docker
ports:
- "50000:50000"
рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдорд┐рд▓рддрд╛ рд░рд╣рддрд╛ рд╣реИ
Cannot create container for service jenkinsmaster: create `which docker`: "`which docker`" includes invalid characters for a local volume name, only "[a-zA-Z0-9][a-zA-Z0-9_.-]" are allowed.
рддреЛ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХрдорд╛рдВрдб .env
рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдХреЗ рд░реВрдк рдореЗрдВ рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХрд┐рдП рдЧрдП рд╣реИрдВ?
.env
рдпрд╛ рдЕрдиреНрдп рдЬрдЧрд╣реЛрдВ рдкрд░, Compose рджреНрд╡рд╛рд░рд╛ рдХрдорд╛рдВрдб рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдпрд╣ рдмрд╣реБрдд рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛ ....
+1
рдпрд╣рд╛рдБ рдПрдХ рдЙрдкрдпреЛрдЧ рдорд╛рдорд▓рд╛ рд╣реИред рдХрдлрдХрд╛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддреЗ рд╕рдордп, рдЗрд╕реЗ рдореЗрдЬрдмрд╛рди рдорд╢реАрди рдХреЗ рдЖрдИрдкреА рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдореЗрд░реЗ рдкрд╛рд╕ рдореЗрд░реЗ рд▓рд┐рдП рд╡рд╣ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╣реИ:
DOCKER_HOST_IP=$(ifconfig | grep 'inet .*br' | sed -E 's/.*inet (.*) netmask.*/\1/')
рдореИрдВ env рдореЗрдВ рдЙрд╕ IP рдХрд╛ рд╕рдВрджрд░реНрдн рджреЗрддрд╛ рд╣реВрдВред рдореИрдВ рдЕрдм рдХреЗрд╡рд▓ docker-compose up
рдирд╣реАрдВ рдЪрд▓рд╛ рд╕рдХрддрд╛ рдХреНрдпреЛрдВрдХрд┐ рдореБрдЭреЗ рдЙрд╕ рдкрд╣рд▓реЗ рд╕реЗ рдЪрд▓рд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдФрд░ рдореБрдЭреЗ рдЗрд╕ рдЯреАрдо рдкрд░ рдЕрдиреНрдп рджреЗрд╡реЛрдВ рдХреЛ рд╕реВрдЪрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
+1
рд╡рд░реНрддрдорд╛рди рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛, рдЬреИрд╕реЗ:
services:
foo:
image: bar:latest
user: ${CURRENT_USER-$(id -u):$(id -g)}
рдЕрдиреНрдп рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рднреА рд╣реЛрдиреЗ рдЪрд╛рд╣рд┐рдП ...
рд╡реИрд╕реЗ, рдореБрдЭреЗ рдпрд╣ рддрдереНрдп рдирд╣реАрдВ рдорд┐рд▓рддрд╛ рд╣реИ рдХрд┐ рдпрджрд┐ рд╣рдо рдмреИрд╢ рдлрдВрдХреНрд╢рдВрд╕ рдХреЗ рд╢реЗрд╖ рднрд╛рдЧ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рддреЛ ${BAZ-default}
рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ ... (рдЬрд╣рд╛рдБ рддрдХ рдореБрдЭреЗ рдкрддрд╛ рд╣реИ, -
рдмреИрд╢ рдХреЗ рдЪрд░ рд╣реЗрд░рдлреЗрд░ рдХрд╛рд░реНрдпрд╛рддреНрдордХрддрд╛рдУрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП ${VAR/search/replace}
рд╕рд╛рде рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдХреЗ рд░реВрдк рдореЗрдВ)
рд╣рд╛рдВ @ davi5e ... рдореИрдВ
version: "3.7"
services:
orchestrator:
build: .
ports:
- "2000:2000"
# Use type host until we can test link
network_mode: "host"
environment:
- NODE_ENV=development
- LOCAL_USER_ID=${id -u}
@ davi5e рдПрдХ рдЕрдиреНрдп рдЙрдкрдпреЛрдЧ рдХрд╛ рдорд╛рдорд▓рд╛ рд╣реИ рдЬрдм рдЖрдк рдПрдХ
+1
Plz рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдлрд┐рд░ рд╕реЗ рдЦреЛрд▓рдирд╛
+1
рдореЗрд░реЗ рдЙрдкрдпреЛрдЧ рдХрд╛ рдорд╛рдорд▓рд╛ рдкреЛрд░реНрдЯ рдХреА рдПрдХ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреЛ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИ рдЬреЛ "рдмреЗрд╕" рдкреЛрд░реНрдЯ рдХреЗ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд░реВрдк рдореЗрдВ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ
рдпрд╣ рдпреВрдЖрдИрдбреА / рдЬреАрдЖрдИрдбреА тАЛтАЛрд╡реИрд░рд┐рдПрдмрд▓ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдбреЙрдХрдЯрд░ рдХреЛ рд╡рд┐рдХрд╛рд╕ рдХреЗ рдорд╛рд╣реМрд▓ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЕрдзрд┐рдХ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ (рдмрд┐рдирд╛ рдЗрд╕реЗ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЗ рдмрд┐рдирд╛ред рдПрдирдПрдирд╡реА рдлрд╝рд╛рдЗрд▓ рдореЗрдВ)ред
+1
рдпрд╣ рдкреНрд░рдпреЛрдЧ рд▓реЗрдмрд▓ / рдЯреИрдЧ рдХреЗ рд▓рд┐рдП рдЙрддреНрдкрдиреНрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
.env
:
GIT_VERSION=$(git describe --always --dirty --abbrev)
OUTER_PORT=6970
docer-complse.yml
:
version: '3'
services:
nginx:
restart: always
build:
context: ./nginx
labels:
org.label-schema.schema-version: "1.0"
org.label-schema.version: "${GIT_VERSION}"
org.lavel.schema.url: "https://mydocu-server.company.com/vcs/${GIT_VERSION}"
ports:
- ${OUTER_PORT}:8080
рд╡рд┐рдХрд╛рд╕ рдореЗрдВ рдРрд╕рд╛ рдХрд░рдиреЗ рд╡рд╛рд▓реЛрдВ рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рдЖрдкрдХрд╛ рд╢реЗрд▓ UID
рд╡реИрд░рд┐рдПрдмрд▓ рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдЖрдк рд╕реНрдерд╛рдиреАрдп рд╡рд┐рдХрд╛рд╕ рдЫрд╡рд┐ рдмрдирд╛рддреЗ рд╕рдордп рдЗрд╕реЗ рдкрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЪреВрдБрдХрд┐ рд╕реНрдерд╛рдиреАрдп рд╡рд┐рдХрд╛рд╕ рдХреА рдЫрд╡рд┐ рд╕рд╛рдЭрд╛ рдирд╣реАрдВ рдХреА рдЬрд╛рддреА рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЖрдкрдХреЛ рдЕрдкрдиреЗ рд╕рд╣рдХрд░реНрдорд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рд╕рдВрдШрд░реНрд╖реЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЪрд┐рдВрддрд╛ рдХрд░рдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рдирд╣реАрдВ рд╣реИред
+1
@ con-f-Use Doing рдЬреЛ рд╕рд┐рд░реНрдл рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдХрдорд╛рдВрдб рднреЗрдЬреЗрдЧрд╛ рдФрд░ рдореЗрд░реЗ рдкрд░реАрдХреНрд╖рдг рд╕реЗ рдкрд░рд┐рдгрд╛рдо рдирд╣реАрдВ рд╣реЛрдЧрд╛, рдХреЗрд╡рд▓ рд╣реИрдХ рдЬреЛ рдореИрдВ рдЕрдм рддрдХ рд╕рдлрд▓ рд░рд╣рд╛ рд╣реВрдВ рд╡рд╣ рдПрдХ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд▓рд┐рдЦ рд░рд╣рд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ docker рдХрдВрдкреЛрдЬрд╝ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ рдЬреЛ рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░ рдХреЛ рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИред
+1
TL, DR рдпрджрд┐ рдЖрдк рдЙрди рдЪрд░ рдХреЛ .env
рдлрд╝рд╛рдЗрд▓ рд╕реЗ рдирд┐рд░реНрдпрд╛рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ:
# set the path of .env file here
ENV_FILE="${ENV_FILE:-local.env}"
while IFS= read -r line; do
export "$line"
done < <( grep --color=never -E -v -e '^#' -e '^[[:space:]]*$' "${ENV_FILE}" )
рдХреИрд╕реЗ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░реЗ:
рдпрд╛
рдЪреЗрддрд╛рд╡рдирд┐рдпрд╛рдВ:
eval
ред$ENV_FILE
рдореЗрдВ рдПрдХ рд╣реА рдирд╛рдо рдХреЗ рд╕рд╛рде рдореМрдЬреВрджрд╛ рдЪрд░ рдХреЛ рдЕрдзрд┐рд▓реЗрдЦрд┐рдд рдХрд░ рджреЗрдЧрд╛рд╡реНрдпрд╛рдЦреНрдпрд╛: рдпрд╣рд╛рдБ
рд╕рднреА рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП direnv рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВ https://direnv.net/
рд╢реБрдХреНрд░ рдкрд░, рдЬреВрди 28, 2019, 12:57 рдЕрдкрд░рд╛рд╣реНрди рд╕реБрджрд░реНрд╢рди рд╡рд╛рдбрдХрд░ рд╕реВрдЪрдирд╛рдПрдВ @github.com
рд▓рд┐рдЦрд╛ рдерд╛:
TLред DR; рдпрджрд┐ рдЖрдк рдЙрди рдЪрд░ рдХреЛ .env рдлрд╝рд╛рдЗрд▓ рд╕реЗ рдирд┐рд░реНрдпрд╛рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ:
рдпрд╣рд╛рдБ .env рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдкрде рд╕реЗрдЯ рдХрд░реЗрдВ
ENFS_FILE = "$ {ENV_ FILE: -local.env }" рдЬрдмрдХрд┐ IFS = read -r рд▓рд╛рдЗрди; рдХрд░
рдирд┐рд░реНрдпрд╛рдд "$ рд▓рд╛рдЗрди" рдХрд┐рдпрд╛ рдЧрдпрд╛ <<(grep --color = never -E -v -e '^ #' -e '^ ^ [[: space:]] * $' "$ {ENV_FILE}")рдХреИрд╕реЗ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░реЗ:
- рдЗрд╕реЗ рдЕрдкрдиреА рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдкрд░ рдЯрд╛рдЗрдк рдХрд░реЗрдВ
- рдЗрд╕реЗ рдмреИрд╢ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рд╣реЗрдЬреЗрдВ рдФрд░ рдЗрд╕реЗ рд╕реНрд░реЛрдд рдХрд░реЗрдВ
рдЪреЗрддрд╛рд╡рдирд┐рдпрд╛рдВ:
- рдЗрд╕реЗ рдПрдХ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рд╣реЗрдЬрдирд╛ рдФрд░ рдЗрд╕реЗ рдЪрд▓рд╛рдирд╛ рдЬрд╛рджреБрдИ рд░реВрдк рд╕реЗ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЛ рдирд┐рд░реНрдпрд╛рдд рдирд╣реАрдВ рдХрд░реЗрдЧрд╛
рдЖрдкрдХреЗ рд╡рд░реНрддрдорд╛рди рд╢реЗрд▓ рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рдЪрд░ред рдЖрдкрдХреЛ рдЗрд╕реЗ рд╕реНрд░реЛрдд рдпрд╛ рдХрд░рдирд╛ рд╣реЛрдЧрд╛
рдХреБрдЫ рдлреИрдВрд╕реА evalред- (рд╢рд╛рдпрдж рдПрдХ рдЕрдЪреНрдЫреА рдмрд╛рдд рд╣реИ?) рдпрд╣ рдореМрдЬреВрджрд╛ рдЪрд░ рдХреЛ рдЙрд╕реА рдХреЗ рд╕рд╛рде рдЕрдзрд┐рд▓реЗрдЦрд┐рдд рдХрд░реЗрдЧрд╛
$ ENV_FILE рдореЗрдВ рдирд╛рдорд╡реНрдпрд╛рдЦреНрдпрд╛: рдпрд╣рд╛рдБ
https://explainshell.com/explain?cmd=while+IFS%3D+read+-r+line%3B+do+export+%22%24line%22%3B+done+%3C+%3C%28grep+--color%3Dno+ -v + -e +% 27% 5E% 23% 27 + -e +% 27% 5E% 5 рдм% 5 рдм% 3Aspace% 3A% 5D% 5D *% 24% 27 +% 24% 7BENV_FILE% 7 рджрд┐рди% 29-
рдЖрдк рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдХреЛ рдЗрд╕ рдзрд╛рдЧреЗ рдХреА рд╕рджрд╕реНрдпрддрд╛ рджреА рдЧрдИ рд╣реИред
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рдЙрддреНрддрд░ рд╕реАрдзреЗ рджреЗрдВ, рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВ
https://github.com
рдпрд╛ рдзрд╛рдЧрд╛ рдореНрдпреВрдЯ рдХрд░реЗрдВ
https://github.com/notifications/unsubscribe-auth/AACHRDGJ6FAQBEDLBSRVS6TP4XOBJANCNFSM4CUISSSA
ред
рд╣рд╛рдБ, direnv
рдЕрдЪреНрдЫрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рдбреЙрдХрд░ рдХреЗ .env
рдлрд╝рд╛рдЗрд▓ рдХреЗ рд╕рд╛рде рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛, рдЬрд┐рд╕рдореЗрдВ рд╕рд░рд▓ рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рд╕рд╛рджреЗ VAR=VAL
рд╕рд┐рдВрдЯреИрдХреНрд╕ ( рдЗрд╕ рд▓рд┐рдВрдХ рдХреЗ рдЕрдиреБрд╕рд╛рд░) рд╣реИред рд╡рд┐рдЪрд╛рд░ .env
рдлрд╝рд╛рдЗрд▓ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреЗ рд▓рд┐рдП рдкреНрд░рддрд┐рдмрджреНрдз рд╣реИ рдФрд░ рдмрд┐рд▓реНрдб рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЗрд╕реЗ рдореЗрд░реЗ рд╕реНрдерд╛рдиреАрдп рдпрд╛ docker-compose
рдкрд░ рдЪрд▓рд╛ рд╕рдХрддреА рд╣реИ, рдЗрд╕реЗ рд╕реНрдЯреЗрдЬрд┐рдВрдЧ / рдкрд░рд┐рдирд┐рдпреЛрдЬрд┐рдд рдХрд░ рд╕рдХрддреА рд╣реИред
рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░ рдирд╣реАрдВ рд╣реИрдВ
рдпрджрд┐ рд╡реЗ рдЗрд╕рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИрдВ рддреЛ https://en.wikipedia.org/wiki/Environment_variable
рдХреЛрдб рдЖрдзрд╛рд░ рдФрд░ рдкрд░реНрдпрд╛рд╡рд░рдг рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдирд╣реАрдВ рд╣реИ ...
рд╢реБрдХреНрд░ рдкрд░, рдЬреВрди 28, 2019 рдХреЛ рджреЛрдкрд╣рд░ 2:04 рдмрдЬреЗ рд╕реБрджрд░реНрд╢рди рд╡рд╛рдбрдХрд░ рд╕реВрдЪрдирд╛рдПрдВ @github.com
рд▓рд┐рдЦрд╛ рдерд╛:
рд╣рд╛рдБ, direnv рдЕрдЪреНрдЫрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рдбреЙрдХрд░ рдХреЗ рд╕рд╛рде рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛
.env рдлрд╝рд╛рдЗрд▓ рдЬрд┐рд╕рдореЗрдВ рд╕рд╛рджрд╛ VAR = VAL рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЗ рд╕рд╛рде рд╕рд░рд▓ рд░реЗрдЦрд╛рдПрдБ рд╣реИрдВ (рдЗрд╕рдХреЗ рдЕрдиреБрд╕рд╛рд░
https://docs.docker.com/compose/env-file/#syntax-rules рд▓рд┐рдВрдХред) рд╡рд┐рдЪрд╛рд░
.env рдлрд╛рдЗрд▓ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдФрд░ рдмрд┐рд▓реНрдб рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд▓рд┐рдП рдкреНрд░рддрд┐рдмрджреНрдз рд╣реИ
рдЗрд╕реЗ рдореЗрд░реЗ рд▓реЛрдХрд▓ рдкрд░ рдЪрд▓рд╛рдПрдВ рдпрд╛ рдбреЙрдХрдЯрд░-рдХрдВрдкреЛрдЬ рдХрд░рдХреЗ рдЗрд╕реЗ рд╕реНрдЯреЗрдЬрд┐рдВрдЧ / рдкрд░рд┐рдирд┐рдпреЛрдЬрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред-
рдЖрдк рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдХреЛ рдЗрд╕ рдзрд╛рдЧреЗ рдХреА рд╕рджрд╕реНрдпрддрд╛ рджреА рдЧрдИ рд╣реИред
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рдЙрддреНрддрд░ рд╕реАрдзреЗ рджреЗрдВ, рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВ
https://github.com
рдпрд╛ рдзрд╛рдЧрд╛ рдореНрдпреВрдЯ рдХрд░реЗрдВ
https://github.com/notifications/unsubscribe-auth/AACHRDF3Q3YOZPHUIUZYEPTP4XV5BANCNFSM4CUISSSA
ред
рдУрд╣ рдареАрдХ рд╣реИред
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ .env
рдлрд╝рд╛рдЗрд▓ рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░ рдореЗрдВ рдмрджрд▓ рдЬрд╛рддреА рд╣реИ рдЬрдм рдЖрдк docker-compose up
рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддреЗ рд╣реИрдВред
рдореЗрд░рд╛ рдЙрдкрдпреЛрдЧ рдорд╛рдорд▓рд╛ рдПрдХ рд╕реНрдерд╛рдиреАрдп рджреЗрд╡ рдЙрджрд╛рд╣рд░рдг (рд╕рдВрднрд╡рддрдГ docker-compose
рдорджрдж рдХреЗ рдмрд┐рдирд╛) рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рддреНрдп рдХреЗ рд╕реНрд░реЛрдд рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдорд╛рди .env
рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдерд╛ред рддреЛ рд╣рд╛рдБ, рд╢рд╛рдпрдж .env
рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╡реЗ рд▓рд╛рдЗрдиреЗрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░ рдирд╣реАрдВ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╡реЗ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдПрдХ рдореЗрдВ рдмрджрд▓ рдЬрд╛рддреЗ рд╣реИрдВ рдЬрдм рдЖрдк рддреИрдирд╛рдд рдХрд░рддреЗ рд╣реИрдВред
рдореИрдВ рдЕрднреА рднреА рдирд╣реАрдВ рджреЗрдЦрддрд╛ рдХрд┐ direnv
рдЙрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдХреИрд╕реЗ рдорджрдж рдХрд░рдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реВрдВред
рдПрдХ рдЕрдиреНрдп рдЙрдкрдпреЛрдЧ рдорд╛рдорд▓рд╛ рдПрдХ рдХрдорд╛рдВрдб рдбрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИ рдЬреЛ рдХрдВрдЯреЗрдирд░ рдореЗрдВ env var рдХреЛ рдЕрд╕рд╛рдЗрди рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдПрдХ рдкрд╛рд╕рд╡рд░реНрдб рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИред
рдЗрд╕ рддрд░рд╣ рд╕реЗ рд╢рдмреНрджрд╢рдГ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ .env рдпрд╛ docker-compose.yml рдлрд╛рдЗрд▓реЛрдВ рдореЗрдВ рдирд╣реАрдВ рд▓рд┐рдЦрд╛ рдЬрд╛рдПрдЧрд╛ред
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХрдИ рд╕реБрд░рдХреНрд╖рд╛ рд╕рдВрдмрдВрдзреА рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдмрдбрд╝рд╛ рд▓рд╛рдн рд╣реЛрдиреЗ рд╡рд╛рд▓рд╛ рд╣реИред
+1
+1
+1, рд╕рдорд╛рдзрд╛рди рдХреЛ рдЬрдЯрд┐рд▓ рдХрд┐рдП рдмрд┐рдирд╛ uid
рдФрд░ gid
рд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмреЗрд╣рдж рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛
`` `
/ _ / \
(рдК)
^ <`` `
+1 рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рдЙрдкрдпреЛрдЧ рдХрд╛ рдорд╛рдорд▓рд╛ рд╣реИ рдЬреИрд╕рд╛ рдХрд┐ рдКрдкрд░ рдЙрд▓реНрд▓реЗрдЦрд┐рдд рдЧрд┐рдЯ рд╢рд╛рдЦрд╛ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдФрд░ рдХрдореНрдкреЛрдЬрд╝ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдкреНрд░рддрд┐рдмрджреНрдз рд╣реИ рдЬреЛ рдЕрдВрддрддрдГ рдбреЙрдХрдЯрд░рд╛рдЗрд▓ рдореЗрдВ рдЬрд╛рдПрдЧрд╛ рдФрд░ рдлрд┐рд░ рдорд▓реНрдЯреАрд╕реНрдЯреЗрдЬ рдбреЙрдХрдЯрд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рдПрдХ рдЪрд░рдг рдореЗрдВ рдирд┐рд░реНрдорд┐рдд рдЬрд╛рд░ рдХреЗ рдкреНрд░рдХрдЯрди рдореЗрдВ рдПрдХ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рдПрдЧрд╛ред ред
gateway:
image: name
build:
context: ./project
dockerfile: build/Dockerfile
args:
- GIT_COMMIT=${$(git rev-list -1 HEAD):-unspecified}
- GIT_DATE=${$(git log -1 --date=short --pretty=format:%ct):-unspecified}
рдЗрд╕рд▓рд┐рдП, рд╡рд░реНрддрдорд╛рди рдореЗрдВ, рдореЗрд░реА рд░рдЪрдирд╛ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ 7 рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдореБрдЭреЗ 7x2 рд╡рд╛рддрд╛рд╡рд░рдг рд╕реЗрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдЙрджрд╛рд╕ред
@ рдкрд┐рдВрдбрд▓реА- рдХреНрдпрд╛ рдЖрдк рдЗрд╕реЗ рд╕реБрд╡рд┐рдзрд╛ рдЕрдиреБрд░реЛрдз рдХреЗ рд░реВрдк рдореЗрдВ рдлрд┐рд░ рд╕реЗ рдЦреЛрд▓ рд╕рдХрддреЗ рд╣реИрдВ? рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЕрдЪреНрдЫрд╛ рдХрд╛рдо рдХреЗ рдЖрд╕рдкрд╛рд╕ рд╣рд▓ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдЗрд╕рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдареЛрд╕ рдЬрд░реВрд░рдд рд╣реИред
+1 рд╢рд╛рдпрдж рдЗрд╕реЗ рдПрдХ рдЕрд▓рдЧ рддрд░рд╣ рд╕реЗ рд╣рд╛рд╕рд┐рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдПрдХ рдХрдВрдЯреЗрдирд░ рдХреЗ рднреАрддрд░ рдбреЙрдХ рдЗрдВрдЬрди рдХреЛ рдПрдХ рдкрдбрд╝реЛрд╕реА рдХрдВрдЯреЗрдирд░ рдХреЛ рд░рд┐рдмреВрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрд▓рдЧреНрди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереАред рдЙрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдЬрд╣рд╛рдВ рдореЗрд░реЗ рд▓реЗрдЯреЗрд╕рдХреНрд░рд┐рдкреНрдЯ рдХреНрд░рд┐рдкреНрдЯ рдХреА рд╕рдордп рд╕реАрдорд╛ рд╕рдорд╛рдкреНрдд рд╣реЛ рдЧрдИ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдирд╡реАрдиреАрдХрд░рдг рдХреЗ рдмрд╛рдж рдПрдирдЬреАрдЗрдирдХреНрд╕ рдХрдВрдЯреЗрдирд░ рдХреЛ рдлрд┐рд░ рд╕реЗ рд╢реБрд░реВ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдореИрдВ рдХрдВрдЯреЗрдирд░ рдХреЗ рдЕрдВрджрд░ рдбреЙрдХрдЯрд░-рдХрдВрдкреЛрдЬрд╝ рдХреИрд╕реЗ рдмрддрд╛рддрд╛ рд╣реВрдВ рдХрд┐ рдЗрд╕ рд╕рдореВрд╣ рдХреЗ рдХрдВрдЯреЗрдирд░реЛрдВ рдХрд╛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдирд╛рдо рдХреНрдпрд╛ рд╣реИ? PROJECT=(basedir ~+)
ред рдпрд╣ рдЕрдм рдХреЗ рд▓рд┐рдП рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдХреЛрдбрд┐рдд рд╣реИ :(
рдЙрд╕ рд╕реБрд╡рд┐рдзрд╛ рдЕрдиреБрд░реЛрдз рдХреЗ рд▓рд┐рдП +1
рдПрдХ рдЕрдиреНрдп рдЙрдкрдпреЛрдЧ рдорд╛рдорд▓рд╛ рдПрдХ cli / http (рдЬреИрд╕реЗ рд╡реЙрд▓реНрдЯ, 1рдкрд╛рд╕рд╡рд░реНрдб) рд╕реЗ рд░рд╣рд╕реНрдпреЛрдВ рдХреЛ рд╣рдерд┐рдпрд╛рдиреЗ рдФрд░ рдкрд░реНрдпрд╛рд╡рд░рдг рдореЗрдВ рдкреНрд▓рдЧ рдХрд░рдиреЗ рдХрд╛ рд╣реИред
рдЕрд░реНрдерд╛рдд
...
environment:
- SERVICE_USERNAME=$(vault kv get -field=username kv/service/credentials)
- SERVICE_PASSWORD=$(vault kv get -field=password kv/service/credentials)
...
рдореБрдЭреЗ @rafaelbattesti рдЬреИрд╕реА рд╣реА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рд╕рд┐рд╡рд╛рдп рдЗрд╕рдХреЗ рдХрд┐ рдореИрдВ рд▓рд╛рд╕реНрдЯрдкрд╛рд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред
...
environment:
- TRPASSWD=$(lpass show --password Transmission)
....
+1
+1
@ рдкрд┐рдВрдбрд▓реА- рдХреНрдпрд╛ рдЖрдк рдЗрд╕реЗ рд╕реБрд╡рд┐рдзрд╛ рдЕрдиреБрд░реЛрдз рдХреЗ рд░реВрдк рдореЗрдВ рдлрд┐рд░ рд╕реЗ рдЦреЛрд▓ рд╕рдХрддреЗ рд╣реИрдВ? рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЕрдЪреНрдЫрд╛ рдХрд╛рдо рдХреЗ рдЖрд╕рдкрд╛рд╕ рд╣рд▓ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдЗрд╕рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдареЛрд╕ рдЬрд░реВрд░рдд рд╣реИред
@ рдЪрд╛рд░43 , рд╢рд╛рдпрдж
рдбреЙрдХ-рдХрдореНрдкреЛрдЬрд╝ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдЪрд░ рд╡рд┐рд╕реНрддрд╛рд░ рдПрдХ рдмрд╣реБрдд рд╣реА рдЙрдкрдпреЛрдЧреА рд╕реБрд╡рд┐рдзрд╛ рд╣реЛрдЧреА ...
+1
@esale - рд╣рд╛рдБ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИред рдореИрдВ рдЗрд╕реЗ рдЗрд╕ рдорд╛рдорд▓реЗ рдХреЗ рджрд╛рдпрд░реЗ рд╕реЗ рдмрд╛рд╣рд░ рджреЗрдЦ рд╕рдХрддрд╛ рдерд╛ред рдХреБрдЫ DSL рдкрд░ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдордд рдЬрд╛рдУред рдЙрд╕ рдмрд┐рдВрджреБ рдкрд░ рдХреБрдЫ рдЕрдиреНрдп рдЯреВрд▓ рдХреЗ рд╕рд╛рде рдбреЙрдХрдЯрд░-рдХрдореНрдкреЛрдЬрд╝ рдлрд╛рдЗрд▓ рдХрд░реЗрдВ? рдХреНрдпрд╛ рд╣рдо рдЪрд┐рдВрддрд╛рдУрдВ рдХреЛ рдкрд╛рд░ рдХрд░ рд░рд╣реЗ рд╣реИрдВ?
рдпрджрд┐ рдЖрдк .env рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдЖрдк рд╢реЗрд▓ рдХрдорд╛рдВрдб рдХреЛ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдХрдорд╛рдВрдб рджреНрд╡рд╛рд░рд╛ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВ
eval "echo \"$(cat .env.example)\"" > .env
рдЙрджрд╛рд╣рд░рдг .env.example рдлрд╝рд╛рдЗрд▓
DOCKER_BIN=$(which docker)
DOCKER_COMPOSE_BIN=$(which docker-compose)
.Env рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдПрдБ
DOCKER_BIN=/snap/bin/docker
DOCKER_COMPOSE_BIN=/snap/bin/docker-compose
рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА
рдпрд╣ рдмрд╣реБрдд рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛ ....