- 도커(Docker) 컨테이너 로그 확인, 컨테이너 내부 명령어 실행(logs, exec) 및 redis 컨테이너 활용 예제2025년 07월 09일 13시 06분 19초에 업로드 된 글입니다.작성자: DandyNow728x90반응형
1. 도커(Docker) 컨테이너 로그 확인, 컨테이너 내부 명령어 실행(logs, exec)
1-1.
docker ps로 실행 중인 컨테이너 확인하기도커 컨테이너를 실행하고 나면, 현재 어떤 컨테이너들이 동작 중인지 확인하고 싶을 때가 있다. 이때
docker ps명령어를 사용한다.PS C:\Users\dandycode> docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 7f0139d03681 nginx "/docker-entrypoint.…" 12 seconds ago Up 10 seconds 80/tcp quizzical_cannonCONTAINER ID: 컨테이너의 고유 식별자이다. 짧은 형태로 표시되지만, 전체 ID를 사용해도 무방하다.IMAGE: 컨테이너를 생성할 때 사용한 이미지 이름이다.COMMAND: 컨테이너가 시작될 때 실행되는 명령어이다.CREATED: 컨테이너가 생성된 시각이다.STATUS: 컨테이너의 현재 상태를 나타낸다.Up은 실행 중임을 의미한다.PORTS: 컨테이너와 호스트 간의 포트 연결 정보이다. 위 예시에서는 컨테이너의 80번 포트가 호스트의 80번 포트에 연결된 것으로 보인다.NAMES: 컨테이너의 이름이다. 도커가 자동으로 할당하거나 사용자가 지정할 수 있다.
1-2.
docker logs로 컨테이너 로그 확인하기컨테이너가 제대로 동작하는지, 또는 어떤 문제가 발생했는지 확인하기 위해 **로그(log)**를 확인하는 것은 매우 중요하다.
docker logs명령어를 통해 컨테이너의 표준 출력(stdout)과 표준 에러(stderr)를 볼 수 있다.PS C:\Users\dandycode> docker logs 7f /docker-entrypoint.sh: /docker-entrypoint.d/ is not empty, will attempt to perform configuration ... (중략) ... 2025/07/09 01:44:47 [notice] 1#1: start worker process 40- 위 명령어는 ID가
7f로 시작하는 컨테이너의 모든 로그를 출력한다. 컨테이너 ID는 짧게 입력해도 인식이 된다.
docker logs의 유용한 옵션들1)
--tail옵션으로 마지막 N줄만 보기- 로그의 양이 많을 때 모든 로그를 다 보는 것은 비효율적이다.
--tail옵션을 사용하면 로그의 마지막 몇 줄만 볼 수 있다.위 명령어는7f컨테이너의 로그 중 마지막 10줄만 출력한다.PS C:\Users\dandycode> docker logs --tail 10 7f 2025/07/09 01:44:47 [notice] 1#1: start worker process 31 ... (중략) ... 2025/07/09 01:44:47 [notice] 1#1: start worker process 40
2)
-f(follow) 옵션으로 실시간 로그 확인하기- 컨테이너가 실행되는 동안 실시간으로 로그를 추적하고 싶을 때
-f옵션을 사용한다.이 명령어를 실행하면 컨테이너에서 새로운 로그가 발생할 때마다 터미널에 실시간으로 출력된다.Ctrl + C를 눌러 중지할 수 있다.PS C:\Users\dandycode> docker logs -f e5
3)
--tail 0 -f조합으로 새로운 로그만 실시간으로 확인하기- 이미 출력된 과거 로그는 보고 싶지 않고, 지금부터 발생하는 새로운 로그만 실시간으로 보고 싶다면
--tail 0 -f옵션을 함께 사용한다.위 예시에서는 이전에 발생했던 Nginx 초기 구동 로그들은 건너뛰고, 웹 요청(GET /)에 대한 로그만 새롭게 표시되는 것을 확인할 수 있다.PS C:\Users\dandycode> docker logs --tail 0 -f e5
1-3.
docker run으로 컨테이너 실행하기docker run명령어는 도커 이미지를 기반으로 새로운 컨테이너를 생성하고 실행하는 역할을 한다.PS C:\Users\dandycode> docker run -d -p 80:80 nginx-d(detached mode): 컨테이너를 백그라운드에서 실행한다. 이 옵션이 없으면 컨테이너가 실행되는 동안 터미널이 블록된다.-p 80:80: 포트 포워딩을 설정한다.호스트포트:컨테이너포트형식으로, 호스트의 80번 포트로 들어오는 요청을 컨테이너의 80번 포트로 연결한다.nginx: 실행할 도커 이미지의 이름이다. 이 명령어를 통해 Nginx 웹 서버 컨테이너를 실행한 것이다.
컨테이너가 성공적으로 실행되면 새로운 컨테이너의 ID가 출력된다. 이후
docker ps명령어로 실행 중인 컨테이너 목록에서 새로 생성된cranky_hellman컨테이너를 확인할 수 있다.PS C:\Users\dandycode> docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES e5af2925a96f nginx "/docker-entrypoint.…" 6 seconds ago Up 6 seconds 0.0.0.0:80->80/tcp cranky_hellman 7f0139d03681 nginx "/docker-entrypoint.…" 2 minutes ago Up 2 minutes 80/tcp quizzical_cannon1-4.
docker exec로 컨테이너 내부 명령어 실행하기도커 컨테이너는 격리된 환경이지만, 때로는 컨테이너 내부로 접속하여 특정 명령어를 실행하거나 파일 시스템을 탐색해야 할 때가 있다. 이럴 때
docker exec명령어를 사용한다.PS C:\Users\dandycode> docker exec -it e5 bash root@e5af2925a96f:/# ls bin dev docker-entrypoint.sh home lib64 mnt proc run srv tmp var boot docker-entrypoint.d etc lib media opt root sbin sys usr root@e5af2925a96f:/# exit exit1)
-it옵션-i(interactive): 컨테이너의 표준 입력(STDIN)을 열어둔다. 이를 통해 컨테이너 내부에서 입력을 받을 수 있다.-t(tty): 가상 터미널(pseudo-TTY)을 할당한다. 이를 통해 터미널 환경처럼 명령어를 입력하고 그 결과를 볼 수 있다.
이 두 옵션을 함께 사용하면 마치 SSH로 원격 서버에 접속한 것처럼 컨테이너 내부에서 상호작용할 수 있다.
2)
e5: 명령어를 실행할 컨테이너의 ID이다.
3)bash: 컨테이너 내부에서 실행할 셸 명령어이다. 여기서는bash셸을 실행하여 컨테이너의 터미널 환경에 접속한 것이다.ls명령어를 통해 컨테이너 내부의 파일 목록을 확인하고,exit명령어를 입력하여 컨테이너 셸에서 빠져나온다.
1-5.
172.17.0.1은 어떤 IP 주소일까?이전
docker logs실습에서172.17.0.1이라는 IP 주소가 로그에 나타난 것을 볼 수 있었다. 이 IP 주소는 무엇을 의미할까?1) 사설 IP 주소 (Private IP Address)
172.17.0.1은 사설 IP 주소 대역에 속하는 IP 주소이다. 사설 IP 주소는 인터넷 상에서 직접 접근할 수 없고, 특정 네트워크 내부에서만 사용된다. 이는 제한된 공인 IP 주소 자원을 효율적으로 사용하기 위해 고안된 방식이다.- 대표적인 사설 IP 주소 대역은 다음과 같다.
10.0.0.0~10.255.255.255172.16.0.0~172.31.255.255192.168.0.0~192.168.255.255
2) 도커(Docker) 네트워크에서의 역할
- 도커를 설치하면 기본적으로 **
docker0**이라는 이름의 가상 브리지(bridge) 네트워크 인터페이스가 생성된다. 이docker0브리지는 일반적으로 **172.17.0.1**이라는 IP 주소를 갖게 된다. docker0브리지는 도커 컨테이너들이 외부 네트워크와 통신할 때 사용하는 기본 게이트웨이 역할을 수행한다. 컨테이너들은 이docker0브리지를 통해 호스트 머신 및 인터넷과 데이터를 주고받는다.- 컨테이너들은
172.17.0.0/16네트워크 대역에서172.17.0.2부터 순차적으로 내부 IP 주소를 할당받는다. 따라서 로그에 나타난172.17.0.1은 컨테이너가 요청을 보낸 대상, 즉 호스트의 도커 네트워크 게이트웨이임을 의미하는 것이다.
2. Redis 컨테이너 활용 예제
도커 컨테이너를 다루는 기본적인 명령어들을 실제 Redis 컨테이너 활용에 적용해 보자!
2-1.
docker run으로 Redis 컨테이너 실행하기가장 먼저 Redis 컨테이너를 실행해 보자.
docker run명령어는 도커 이미지를 기반으로 새로운 컨테이너를 생성하고 실행하는 역할을 한다.PS C:\Users\dandycode> docker run -d -p 6379:6379 redis Unable to find image 'redis:latest' locally latest: Pulling from library/redis ... (중략) ... Status: Downloaded newer image for redis:latest 30f7d7115c0be0f469b12f4d12aeaa8d4f6d136012d01f212b3e576f493204ea-d(detached mode): 컨테이너를 백그라운드에서 실행한다. 이 옵션이 없으면 컨테이너가 실행되는 동안 터미널이 블록된다.-p 6379:6379: 포트 포워딩을 설정한다.호스트포트:컨테이너포트형식으로, 호스트의 6379번 포트(Redis 기본 포트)로 들어오는 요청을 컨테이너의 6379번 포트로 연결한다.redis: 실행할 도커 이미지의 이름이다. 이 명령어를 통해 Redis 서버 컨테이너를 실행한 것이다.
만약 로컬에
redis이미지가 없다면, 위 예시처럼 자동으로 도커 허브(Docker Hub)에서 이미지를 다운로드(Pulling from library/redis)하는 과정을 거친다. 컨테이너가 성공적으로 실행되면 새로운 컨테이너의 ID가 출력된다.2-2.
docker image ls로 이미지 목록 확인하기redis이미지가 잘 다운로드되었는지, 그리고 어떤 이미지들이 로컬에 저장되어 있는지 확인하려면docker image ls명령어를 사용한다.PS C:\Users\dandycode> docker image ls REPOSITORY TAG IMAGE ID CREATED SIZE redis latest f2cd22713a18 2 days ago 128MBREPOSITORY: 이미지의 이름이다.TAG: 이미지의 버전 또는 특정 태그이다.latest는 최신 버전을 의미한다.IMAGE ID: 이미지의 고유 식별자이다.CREATED: 이미지가 생성된 시점이다.SIZE: 이미지의 크기이다.
2-3.
docker ps로 실행 중인 컨테이너 확인하기Redis 컨테이너가 정상적으로 실행되고 있는지 확인하기 위해
docker ps명령어를 다시 사용한다.PS C:\Users\dandycode> docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 30f7d7115c0b redis "docker-entrypoint.s…" 49 seconds ago Up 48 seconds 0.0.0.0:6379->6379/tcp objective_diffie- 새로운 Redis 컨테이너(
30f7d7115c0b)가Up상태로 실행 중이며, 호스트의6379포트와 컨테이너의6379포트가 연결된 것을 확인할 수 있다.
2-4.
docker logs로 Redis 컨테이너 로그 확인하기Redis 컨테이너가 제대로 시작되었는지, 그리고 어떤 초기 설정 로그가 있는지 확인하려면
docker logs명령어를 사용한다.PS C:\Users\dandycode> docker logs 30 Starting Redis Server 1:C 09 Jul 2025 04:10:38.443 * oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo 1:C 09 Jul 2025 04:10:38.443 * Redis version=8.0.3, bits=64, commit=00000000, modified=1, pid=1, just started ... (중략) ... 1:M 09 Jul 2025 04:10:38.448 * Server initialized 1:M 09 Jul 2025 04:10:38.448 * Ready to accept connections tcp- 로그를 통해 Redis 서버가 버전 8.0.3으로 시작되었고,
port=6379로 실행 중이며, 최종적으로Ready to accept connections tcp메시지와 함께 연결을 받을 준비가 되었음을 확인할 수 있다.
2-5.
docker exec로 컨테이너 내부에서 Redis 명령어 실행하기이제 실행 중인 Redis 컨테이너 내부에 접속하여 Redis 명령어를 직접 실행해 보자.
docker exec명령어를 사용하면 컨테이너 내부에서 셸 명령어(bash)를 실행할 수 있다.PS C:\Users\dandycode> docker exec -it 30 bash root@30f7d7115c0b:/data# pwd /data root@30f7d7115c0b:/data# redis-cli 127.0.0.1:6379> set 1 dandy OK 127.0.0.1:6379> get 1 "dandy" 127.0.0.1:6379> exit root@30f7d7115c0b:/data# exit exit1)
docker exec -it 30 bash: ID가30으로 시작하는 Redis 컨테이너 내부에bash셸로 접속한다.
2)pwd: 컨테이너 내부의 현재 작업 디렉토리를 확인한다. 기본적으로/data이다.
3)redis-cli: Redis 클라이언트 도구를 실행하여 Redis 서버와 상호작용한다.
4)set 1 dandy: Redis에1이라는 키에dandy라는 값을 저장한다.OK응답은 성공을 의미한다.
5)get 1: Redis에서1이라는 키에 저장된 값을 조회한다. 저장했던"dandy"값이 반환되는 것을 확인할 수 있다.
6)exit:redis-cli를 종료한다.
7)exit: 컨테이너 내부 셸(bash)에서 빠져나와 호스트 터미널로 돌아온다.2-6. 컨테이너 및 이미지 정리하기
실습을 마친 후에는 불필요한 컨테이너와 이미지를 정리하여 시스템 자원을 확보하는 것이 좋다.
1) 실행 중인 컨테이너 확인: 먼저 현재 실행 중인 컨테이너가 있는지 다시 확인한다.
PS C:\Users\dandycode> docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 30f7d7115c0b redis "docker-entrypoint.s…" 3 minutes ago Up 3 minutes 0.0.0.0:6379->6379/tcp objective_diffie2) 컨테이너 강제 삭제: Redis 컨테이너를 강제로 삭제한다.
-f옵션은 컨테이너가 실행 중이더라도 강제로 삭제할 수 있게 한다.PS C:\Users\dandycode> docker rm -f 30 30삭제된 컨테이너의 ID가 출력된다.
3) 컨테이너 삭제 확인:
docker ps와docker ps -a명령어로 모든 컨테이너 목록을 확인하여 삭제되었는지 최종 확인한다.PS C:\Users\dandycode> docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES PS C:\Users\dandycode> docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES목록에 아무것도 나오지 않는다면 모든 컨테이너가 삭제된 것이다.
4) 이미지 목록 확인: 로컬에 다운로드된 이미지 목록을 확인한다.
PS C:\Users\dandycode> docker image ls REPOSITORY TAG IMAGE ID CREATED SIZE redis latest f2cd22713a18 2 days ago 128MB5) 이미지 삭제: 마지막으로 다운로드했던
redis이미지를 삭제한다. 이미지 ID의 앞부분만 입력해도 된다.PS C:\Users\dandycode> docker image rm f2 Untagged: redis:latest Untagged: redis@sha256:a1e0a3b3a6cedd74d8ba44805b2497b93851a296f08a44962fedc03f1c490b47 ... (중략) ... Deleted: sha256:442631376bf34d5c1f181ca740064cd3ca3cc371bd8636961b65e4af3668bbba이미지 삭제 시 관련 레이어들도 함께 삭제된다.
6) 이미지 삭제 확인: 마지막으로
docker image ls를 통해 이미지가 제대로 삭제되었는지 확인한다.PS C:\Users\dandycode> docker image ls REPOSITORY TAG IMAGE ID CREATED SIZE목록에 아무것도 나오지 않는다면 모든 이미지가 삭제된 것이다.
728x90반응형'DevOps > Docker' 카테고리의 다른 글
도커(Docker) 기본 명령어 실습: 컨테이너 생성 및 관리 (3) 2025.07.14 Docker 볼륨을 이용한 데이터 영속성 확보 실습(PostgreSQL, MongoDB) (5) 2025.07.11 Docker를 이용한 MySQL 컨테이너 실행(볼륨 마운트) 및 문제 해결 (1) 2025.07.10 Docker 이미지 및 컨테이너 관리 명령어 실습(이미지 다운로드/조회/삭제, 컨테이너 생성/실행/조회/중지/삭제) (1) 2025.07.08 윈도우에서 Docker 설치 시 겪었던 난관, 그리고 해결 (2) 2025.07.07 다음글이 없습니다.이전글이 없습니다.댓글