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