[Docker] 자주 사용하는 "docker exec, attach, logs" 명령어 정리
[Docker] 자주 사용하는 "docker exec와 attach 그리고 logs" 명령어 정리
컨테이너에서 작동을 확인하고 실행하는 명령으로 "attach", "exec", "logs"와 같은 명령을 이용합니다. 주로 콘솔 터미널을 연결하여 입출력으로 상호작용하는 예시를 살펴 봅니다.
- docker attach
- docker logs
- docker exec
명령어 | 설명 | 사용 예시 |
---|---|---|
docker attach | 실행 중인 컨테이너에 연결하여 해당 터미널에 명령을 전송합니다. | docker attach [컨테이너 ID 또는 이름] |
docker exec | 실행 중인 컨테이너에서 새로운 프로세스를 실행합니다. | docker exec [옵션] [컨테이너 ID] [명령어] |
docker logs | 컨테이너의 로그를 확인합니다. | docker logs [컨테이너 ID 또는 이름] |
1. docker attach 명령어의 사용법:
docker attach [OPTIONS] CONTAINER
docker attach 명령어는 실행 중인 Docker 컨테이너에 연결하고 해당 컨테이너의 표준 입력(stdin), 출력(stdout), 에러(stderr) 스트림과 상호작용할 수 있도록 하는 명령어입니다.
- OPTIONS: 추가적인 옵션으로 터미널 설정을 할 수 있습니다.
- CONTAINER: 연결하고자 하는 컨테이너의 이름이나 ID를 지정합니다.
docker attach 사용 예시
- "my_container"라는 이름의 컨테이너에 연결
docker attach my_container
(1) 컨테이너의 터미널에 연결:
#(1) 터미널 연결:
# - 컨테이너에 터미널을 연결하고 해당 터미널과 상호작용
docker attach my_container
(2) 인터랙티브 모드로 쉘 실행
#(2) 인터랙티브 모드로 쉘 실행
# - 인터랙티브 모드로 쉘을 실행하면 Ctrl+C로 컨테이너를 중지
docker attach -it my_container
#* -i는 표준 입력(stdin)을 유지하고 -t는 터미널을 할당합니다.
2. docker container logs
docker container logs 사용법 :
# 컨테이너의 로그를 확인
docker container logs my_container
# 여러 컨테이너의 로그를 확인
docker container logs container1 container2
docker container logs 사용 예시 :
* container 내부 로그를 확인하는 경우에 대한 예시는 다음과 같이 사용 가능합니다.
# 컨테이너의 표준 출력 및 표준 에러 출력에 대한 로그를 확인할 수 있습니다.
docker container logs [OPTIONS] CONTAINER
# tail-f 와 같이 내용을 확인
docker container logs -f my_container
# 로그 파일의 끝에서부터 지정된 개수의 라인을 출력
docker container logs --tail 50 my_container
# --since와 --until: 특정 시간 이후 또는 이전의 로그를 출력
docker container logs --since "2022-01-01T00:00:00" my_container
# --timestamps: 로그에 타임스탬프를 포함하여 출력
docker container logs --timestamps my_container
docker attach 주의해야 할 제한사항
1) 단일 사용자 모드:
예를 들어, docker attach로 컨테이너에 연결하면 해당 터미널이 컨트롤을 가져가게 되어 다른 터미널에서 컨트롤을 할 수 없습니다. 이러한 이유로 주로 단일 사용자 환경에서 터미널을 사용하는 경우에 유용합니다.
2) 백그라운드 모드에서 실행 중인 컨테이너:
docker attach는 주로 대화형 터미널 환경에서 사용되므로, 컨테이너가 백그라운드 모드로 실행 중일 때는 적합하지 않을 수 있습니다.
이 경우에는 docker exec 명령어를 사용하여 컨테이너에 명령을 실행하는 것이 더 적합합니다.
3) Ctrl+C로 컨테이너 중지:
(유의) docker attach로 연결된 터미널에서 Ctrl+C를 사용하여 프로세스를 종료하면 해당 해당 컨테이너도 중지됩니다.
docker exec 명령어는 컨테이너 내의 프로세스에만 영향을 미칩니다.
4) 프로세스 분리 불가:
docker attach는 기본적으로 컨테이너 내에서 실행 중인 주 프로세스에 연결합니다. 따라서 다른 프로세스에 연결하려면 추가적인 설정이 필요합니다.
이러한 경우도 docker exec를 사용하는 것이 더 유연하다는 것을 의미합니다.
3. docker exec 를 활용하는 경우 예시
docker exec 명령은 컨테이너 내부의 프로세스와 환경에 대한 명령을 실행할 수 있습니다.
1) 컨테이너에서 특정 명령어를 실행
- 컨테이너 내부 셀의 명령을 실행 합니다.
docker exec my_container ls /app
2) 인터랙티브 모드로 쉘 실행:
- 특정 컨테이너에 인터랙티브 쉘로 연결하여 작업합니다.
docker exec -it my_container bash
3) 환경 변수 설정:
- 실행 중인 컨테이너의 환경 변수를 설정하고 명령어를 실행합니다.
docker exec -e MY_VARIABLE=value my_container echo $MY_VARIABLE
4) 백그라운드에서 실행:
- 백그라운드에서 실행 중인 컨테이너에서 명령어를 실행합니다.
docker exec -d my_container my_background_process
기타 자주 사용하는 Docker 명령들
- 출처 : docker 명령어들 : https://couplewith.tistory.com/search/docker]
도커(Docker)는 컨테이너 기반의 오픈소스 가상화 플랫폼 입니다.
도커 명령어를 사용하여 이미지를 관리하고 컨테이너를 생성, 실행, 중지, 삭제할 수 있습니다. 아래는 도커 명령어중에 자주 사용하는 명령어들입니다.
ㅁ 5가지 유용한 Docker 명령어 정리 : https://couplewith.tistory.com/554
- docker ps : Docker에서 실행중인 컨테이너 목록 출력
- docker images: 현재 시스템에 있는 Docker 이미지 목록 표시
- docker rmi <이미지 이름> : 이미지를 삭제
- docker pull <이미지 이름> : Docker Hub에서 이미지를 다운로드
- docker build: Dockerfile을 사용하여 새로운 이미지를 빌드
- docker volume : 명령어를 사용하여 볼륨을 생성, 확인, 삭제하는 등의 작업을 수행
- docker attach, exec, logs: 컨테이너에 접속하여 상호 명령을 입.출력
- docker run: 이미지를 기반으로 새로운 컨테이너를 시작
- docker stop: 컨테이너를 정지
#docker-images #docker-ps #docker-pull #dockr-build #docker-run #docker-stop #docker-attach #docker-volume