Post

도커 컨테이너

✨도커 컨테이너에 환경변수 전달 (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.