도커 컨테이너
✨도커 컨테이너에 환경변수 전달 (2가지)
프로젝트 기본 구성
● 이미지 이름
hello:0.1
● 폴더 구조
1
2
├── Dockerfile
└── hello.py
● Dockerfile 내용
1
2
3
4
5
6
7
8
9
10
11
12
# 베이스 이미지 설정
FROM ubuntu:22.04
# 패키지 설치
RUN apt-get update && apt-get install -y python3
# 응용 스크립트 복사
COPY hello.py .
# 컨테이너 시작 시 실행할 명령 설정
CMD ["python3", "hello.py"]
● hello.py 파일 내용
1
print('Hello world from Python!')
✨도커에서 환경 변수 이용해보기
1. hello.py 파일 내용 변경
1
2
3
import os
print("Hello world from %s!" %os.environ["NAME"])
● 변경된 내용을 찍어보기
💻명령어
1
cat hello.py
💡결과
1
2
3
import os
print("Hello world from %s!" %os.environ["NAME"])
2. Dockerfile 내용 변경
1
2
3
4
5
6
7
8
9
10
11
12
13
# 베이스 이미지 설정
FROM ubuntu:22.04
ENV NAME Grepp
# 패키지 설치
RUN apt-get update && apt-get install -y python3
# 응용 스크립트 복사
COPY hello.py .
# 컨테이너 시작 시 실행할 명령 설정
CMD ["python3", "hello.py"]
● 변경된 내용을 찍어보기
💻명령어
1
cat Dockerfile
💡결과
1
2
3
4
5
6
7
8
9
10
11
12
13
# 베이스 이미지 설정
FROM ubuntu:22.04
ENV NAME Grepp
# 패키지 설치
RUN apt-get update && apt-get install -y python3
# 응용 스크립트 복사
COPY hello.py .
# 컨테이너 시작 시 실행할 명령 설정
CMD ["python3", "hello.py"]
3. 다시 새로운 이미지 만들기
💻명령어
1
docker build -t hello:0.2 .
● docker 이미지 목록에 있는지 확인하기
💻명령어
1
docker images
💡결과
1
2
REPOSITORY TAG IMAGE ID CREATED SIZE
hello 0.2 92be953756cb 29 seconds ago 157MB
● docker 실행하기
💻명령어
1
docker run hello:0.2
💡결과
Grepp이 환경 변수로 정해져 있는 것
1
Hello world from Grepp!
4. 환경변수의 값 설정하기
파일에 있는 환경변수 NAME의 값을 지정
💻명령어
1
docker run -e NAME=Programmers hello:0.2
💡결과
1
Hello world from Programmers!
-e
옵션을 사용하지 않고 실행을 시킨다면 파일에 있는 환경변수로 실행이 됨
1
Hello world from Grepp!
5. 실행이 끝난 컨테이너 자동 삭제하기
docker run
명령에 --rm
옵션을 붙이면 실행이 완료되면 컨테이너가 삭제됨 💻명령어
1
docker run --rm -e NAME=DOCKER-rm hello:0.2
💡결과
1
Hello world from DOCKER-rm!
docker ps -a
로 목록 확인해보면 실행이 완료된 컨테이너가 삭제되었음을 확인할 수 있음
✨docker 컨테이너 백그라운드에서 실행하기
1. -d
옵션 사용해서 백그라운드에서 실행하기
💻명령어
1
docker run -d --rm tomcat
💡결과
1
2
3
4
5
6
7
8
9
10
11
12
13
Unable to find image 'tomcat:latest' locally
latest: Pulling from library/tomcat
23828d760c7b: Pull complete
e2670537dceb: Pull complete
c44aaba36909: Pull complete
c3b64924ef70: Pull complete
737fef02af8d: Pull complete
5d177a8f8e88: Pull complete
018443d5073c: Pull complete
3694d382f9eb: Pull complete
Digest: sha256:c83cd6449a4d34d6c5a9fe1193
Status: Downloaded newer image for tomcat:latest
35d315c695c7654415653062a110c8eecf341988641b8e3f6e
■ 컨테이너의 로그 확인하기
💻명령어
1
docker logs 35d315c695c7
명령어 뜯어보기
logs
: docker 컨테이너의 로그를 확인하는 명령어docker logs [컨테이너 ID | 컨테이너 이름]
■ 상세내용 확인하기_IP주소 확인하기
💻명령어
1
docker inspect 35d315c695c7
명령어 뜯어보기
inspect
: docker 컨테이너의 세부 정보를 확인하는 명령어 (컨테이너 설정, 네트워크 설정, IP 주소 정보들이 포함)docker inspect [컨테이너 ID | 컨테이너 이름]
💡결과
1
2
3
4
5
...생략
"Ports": {
"8080/tcp": null
},
"IPAddress": "172.17.0.3",
✨외부로부터도 접속 가능하게 하기 (호스트의 포트와 컨테이너 포트를 연결)
호스트의 특정 포트를 특정 컨테이너의 특정 포트와 연결하는 방법이 필요
1. p
옵션을 사용
docker run -p [호스트포트번호:컨테이너의 포트] [이미지이름]
💻명령어
1
docker run -d --rm -p 8888:8080 tomcat
💡결과
docker의 실행 목록을 확인해보면 localhost:8888
, localhost:8080
모두 같은 결과를 얻을 수 있음
1
2
3
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS
NAMES
4840e22f1af8 tomcat "catalina.sh run" 11 seconds ago Up 5 seconds 0.0.0.0:8888->8080/tcp intelligent_jenning
This post is licensed under CC BY 4.0 by the author.