Docker

도커 이미지 & 컨테이너 관리

Yonggyu 2023. 10. 25. 17:47
반응형

 

도커 이미지 & 컨테이너 관리

도커 이미지와 컨테이너를 관리하기 위해서는 관리 옵션을 확인해야 합니다.

docker --help

 

도커에 사용가능한 모든 옵션 확인

 


중지된 새 컨테이너 시작

docker ps -a

 

명령어를 사용하여 중지됬거나 실행중인 모든 컨테이너를 확인할 수 있습니다.

 

docker start [컨테이너_ID or 이름]

 

이 명령어를 통해 백그라운드에서 컨테이너를 실행할 수 있습니다.
docker run과 같이 터미널을 차단하지않고 백그라운드에서 실행합니다.

 


Docker 연결(attched) or 분리(detached) 모드

컨테이너를 시작할 때, 연결 모드 (attached) 또는 분리 모드 (detached)를 선택할 수 있습니다.

docker start 명령을 사용하여 컨테이너를 시작할 때, 기본적으로 분리 모드가 디폴트값으로 설정됩니다. 즉, 컨테이너가 백그라운드에서 실행됩니다.

docker run 명령을 사용하여 컨테이너를 시작할 때, 기본적으로 연결 모드가 디폴트값으로 설정됩니다. 즉, 터미널에 연결됩니다.

연결 모드 (attached)에서 컨테이너를 시작하면 컨테이너의 출력 결과를 실시간으로 확인할 수 있습니다.

docker start  -a

-a 플래그를 추가하여 연결 모드로 실행할 수 있습니다.

분리 모드 (detached)에서 컨테이너를 시작하면 컨테이너가 백그라운드에서 실행되며, 현재 터미널 창을 차단하지 않습니다.

실행 중인 컨테이너에 다시 연결하려면 docker attach 명령을 사용합니다.

attached모드는 컨테이너의 출력결과를 수신하는것을 의미합니다.
detached모드는 하나의 동일한 터미널에서 다른 작업을 수행 하는 이점이 있습니다.


컨테이너 로그 확인

 

detached모드에서 컨테이너에 의해 출력된 과거의 로그를 확인하는 명령어 입니다.

docker logs

 

-f 플래그를 사용하면 로그를 계속해서 확인할 수 있습니다.

 

 


입력 및 출력 모드 (대화형)

도커는 웹서버와 웹 어플리케이션과 같은 장기적인 실행 프로세스에만 적용되는 것은 아닙니다.
간단한 유틸리티 어플리케이션을 도커화하는데에도 사용할 수 있습니다.
입력이 필요하고, 일부 출력을 제공하는 애플리케이션을 만들 수 있습니다. 필요에 따라 컨테이너와 통신도 가능하다는 것이다.

 

docker run [ -i or -t ]

 

도커 컨테이너를 실행할 때, 입력 모드 (-i, --interactive)와 터미널 모드 (-t, --tty)를 설정할 수 있습니다.

 

docker run -it

 

i와 t를 둘다 사용하면 컨테이너는 입력을 수신하고 컨테이너에 의해 노출되는 터미널도 얻게 되는 즉, 실제 입력받는 장치가 되는 것이다.

 

docker start로도 입력 및 출력모드를 사용할 수 있는데 연결모드인 -a와 -i를 통해 컨테이너에 입력을 한다.
-t는 필요하지 않는다 중지된 컨테이너를 다시 실행시킨다면 플래그가 여전히 기억되기 때문이다.



이미지 & 컨테이너 삭제하기

도커 이미지와 컨테이너는 디스크 공간을 차지하므로 불필요한 것은 삭제해야 합니다.

docker rm

컨테이너 제거 명령어 입니다.

실행중인 컨테이너는 제거할 수 없다.

 

docker images

 

모든 이미지 확인 명령어 입니다.


 

docker rmi

 

기본적으로 이미지 내부의 모든 레이어 삭제 명렁어입니다.
이미지제거는 더 이상 컨테이너에 사용되지 않는 경우에만 이미지를 제거할 수 있다.
즉, 컨테이너가 시작되거나 중지되더라도 그 컨테이너에 속한 이미지는 제거할 수 없습니다. 컨테이너를 먼저 삭제해야합니다.

 

docker image prune

사용되지않는 모든 이미지 제거 명렁어 입니다.


docker run --rm

 

컨테이너가 종료될때 자동으로 삭제되는 플래그입니다.
보통 코드가 변경된 경우 컨테이너를 중지하지만 이미지들 다시 빌드하고 새컨테이너를 시작합니다. 이 경우 기존의 컨테이너에 --rm 플래그를 사용하여 번거로움을 줄일 수 있습니다.


이미지 검사 

docker image inspect

 

이 명령은 이미지의 전체 ID, 생성된 날짜, 사용 중인 도커 버전, 운영 체제 등과 같은 정보를 표시합니다.

 



컨테이너 파일 복사

컨테이너가 실행중인 상태에서 무언가를 추가하거나 추출할때 사용된다.

docker cp [복사할 파일 경로] [붙여넣을 파일 경로]


도커 컨테이너의 파일을 복사하고 내 로컬 파일을 붙여넣는다면 로컬로 가져오는것이고, 반대의 경우 접근하여 붙여넣는 것입니다.
이런경우 컨테이너를 다시 시작하지않고도 컨테이너에 추가를 할 수 있게 됩니다. 하지만 오류를 발생하기 쉽기 때문에 좋은 방법은 아닙니다.

 


컨테이너와 이미지에 이름 & 태그 지정하기

보통 이름과 태그를 지정하지 않으면 자동으로 컨테이너와 이미지에 ID값과 이름을 할당하지만 컨테이너에는 고유의 이름을 이미지에는 고유의 태그를 설정할 수 있습니다. 

컨테이너에 이름 지정하기

컨테이너의 이름을 설정하려면 docker run 명령어를 사용할 때 --name 옵션을 추가하면 됩니다. 

docker run --name [지정할_이름] [이미지_ID]


위 명령처럼 컨테이너를 리스팅하면 컨테이너는 커스텀 이름을 가지고 있습니다. 장점은 매번 리스팅할 필요가 없다는 것입니다. 또한 이름을 기억하기 때문에 훨신 쉽게 관리할 수 있습니다.


이미지에 태그 지정하기

Dockerfile 내의 이름, 태그 확인
이미지의 리포지터(이름), 태그 2가지로 구분됩니다. 
Dockerfile 내에서 특정한 태그를 사용하고싶다면

FROM name : tage


이렇게 사용됩니다.
이 2가지는 콜론으로 구분되고 왼쪽이 이름 오른쪽이 태그입니다.
리포지터를 사용하면 여러개의 특정화된 이미지 그룹을 만들 수 있습니다.
이미지의 태그는 이미지 그룹 내에서 특수 이미지를 정의합니다. 또한 이미지 태그는 옵션입니다.

예를 들어 
node는 이미지 이름이고 14.9.0이라는 버전이 태그입니다.
태그를 사용하면 node의 경우 특정 버전, 특정 구성을 사용할 수 있습니다.

 


직접 이미지 태그 설정
이제 내가 지정하는 것은 이미지를 빌드할 때 -t 또는 --tag옵션을 사용합니다. 이 옵션을 통해 이미지에 원하는 이름과 태그를 부여할 수 잇습니다

예시

docker build -t goal:latest .


위의 예시에서 -t옵션을 사용하여 이미지의 이름을 goal, 태그를 latest로 설정했습니다. 이것은 이미지의 고유한 식별자가 됩니다. 이렇게 태그를 설정하면 동일한 이미지의 다양한 버전을 관리할 수 있게 됩니다.


728x90
반응형