프로그래밍/도커

[도커] 11. 환경변수

riroan 2022. 8. 19. 21:35

도커에 들어있는 앱을 사용할때 데이터베이스 사용자 이름같은 환경변수를 주입해야 할 때가 있다.

Dockerfile을 만들 때 편리한 방법으로 환경변수를 넣을 수 있다.

 

폴더 구성

├── Dockerfile
├── app.py
└── templates
    └── main.html

폴더 구조는 위와 같다.

간단한 플라스크를 이용해서 테스트해보고자 한다.

# app.py
from flask import Flask, render_template
import os
app = Flask(__name__)

user = os.environ.get("USER_NAME")
port = os.environ.get("PORT")
@app.route("/")
def main():
    return render_template("main.html", user = user)

app.run(host="0.0.0.0", port=port)
<!-- templates/main.html -->

<!DOCTYPE html>
<title>Hello Flask</title>

<body>
    <div>
        <h1>Hello {{user}}</h1>
    </div>
</body>

</html>
# Dockerfile

FROM python

COPY . .

RUN pip3 install flask

ENV PORT=5000
ENV USER_NAME=riroan

EXPOSE $PORT

CMD ["python3", "app.py"]

환경변수

Dockerfile을 보면 ENV라는 키워드를 사용해서 환경변수를 받게할 수 있다.

ENV PORT=5000

PORT를 환경변수로 받을 것이고 받지 않는다면 기본적으로 5000이라는 값을 가지고 있는 것이라고 해석하면 된다.

USER_NAME도 마찬가지이다.

EXPOSE $PORT

위에서 볼 수 있듯이 환경변수를 도커파일 안에서도 사용할 수 있다.

사용할 때는 $을 붙여서 사용한다.

이렇게 하면 환경변수를 이용하여 유동적으로 포트를 변경할 수 있다.

 

app.py에서 파이썬에서 환경변수를 받을 때 사용하는 os.environ.get을 사용했다.

 

환경변수는 컨테이너를 실행할 때 -e를 사용하여 주입할 수 있다. (여러개 가능)

환경변수를 다르게해서 여러개 실행해보자.

docker build -t myflask .
docker run --rm -d -p 5000:5000 myflask
docker run --rm -d -e PORT=5050 -p 5001:5050 myflask
docker run --rm -d -e USER_NAME=Alice -p 5002:5000 myflask
docker run --rm -d -e PORT=5100 -e USER_NAME=Bob -p 5003:5100 myflask

1번 컨테이너 : 기본포트(5000), 기본이름(riroan), 5000번으로 포트포워딩

2번 컨테이너 : 변경포트(5050), 기본이름(riroan), 5001번으로 포트포워딩

3번 컨테이너 : 기본포트(5000), 변경이름(Alice), 5002번으로 포트포워딩

4번 컨테이너 : 변경포트(5100), 변경이름(Bob), 5003번으로 포트포워딩

주입한 환경변수대로 잘 나오는 것을 볼 수 있다.

'프로그래밍 > 도커' 카테고리의 다른 글

[도커] 13. 바인드 마운트 사용하기  (0) 2023.05.07
[도커] 12. dockerignore  (0) 2022.08.19
[도커] 10. 도커 네트워크  (3) 2022.08.15
[도커] 9. 도커 이미지 만들기  (0) 2022.01.03
[도커] 8. Dockerfile 요소  (0) 2022.01.02