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

·2023년 2월 11일
0

docker

목록 보기
2/7
post-thumbnail

Attached Mode (연결)

Attached 모드는 Docker 명령어를 실행하기 위해 컨테이너가 필요할 때 Docker 명령어가 실행되어 동작하는 방식이다. Attached 모드는 컨테이너가 바로 실행되는 것을 확인할 수 있고, 이는 컨테이너가 끝나면 그때 종료되는 것을 의미한다. 다르게 말하면 컨테이너는 터미널 명령어를 실행한 후 종료되고 다음 명령어를 받기 전까지는 동작하지 않는다.

Attached 모드에서는 컨테이너가 터미널 명령어를 바라보므로, 컨테이너의 실행을 위해 foreground 로 실행되는 것을 확인할 수 있다.

Attached 모드에서 컨테이너를 실행하기 위해서는 docker run 혹은 중지된 컨테이너에 docker start -a 명령어를 사용하면 된다. 이 명령어는 컨테이너를 생성하고 실행하고, 컨테이너가 종료될 때까지 유지하는 기능을 제공한다.

Detached Mode (분리)

Detached 모드는 Docker 명령어가 실행되어 동작하는 방식이며, 컨테이너는 백그라운드로 실행된다. Detached 모드에서는 컨테이너가 터미널 명령어를 바라보지 않고 실행되고, 컨테이너가 종료되기 전에도 터미널 명령어를 연결하지 않는다.

Detached 모드에서 컨테이너를 실행하기 위해서는 docker start 혹은 docker run -d 명령어를 사용하면 된다.

Detached 모드로 실행되는 컨테이너를 다시 터미널과 연결하고 싶다면 docker attached <container_name> 명령어를 사용하면 된다.

만약 이전까지의 로그를 모두 확인하고 싶다면 docker log <container_name> 명령어를 사용하면 된다. -f 옵션을 함께 사용하는 경우 이전 로그만 보여주는 것 뿐만 아니라, 이후 로그도 출력받도록 연결 상태가 된다.

$ docker log -f <container_name>

Interactive Mode (대화형)

Interactive 모드는 Docker 명령어가 실행되어 동작하는 방식이며, 컨테이너는 터미널과 연결된 상태로 실행된다. Interactive 모드는 Attached 모드와 유사하지만, 연결된 터미널에 출력값을 나타내는 것과는 다르게, Interactive 모드에서는 입력에 대한 처리도 콘솔에서 가능해진다.

Interactive 모드에서 컨테이너를 실행하기 위해서는 docker run -it 명령어를 사용하면 된다.

컨테이너 삭제하기

컨테이너를 삭제하기 위해서는 docker rm 명령어를 사용하면 된다. 명령어를 실행하면 다음과 같이 컨테이너가 삭제된 것을 확인할 수 있다.

$ docker rm <container_name>

컨테이너를 여러개 삭제하고 싶다면 docker rm 명령어에 해당 컨테이너의 이름을 여러개 입력하면 된다.

$ docker rm <container_name_1> <container_name_2> <container_name_3>

이미지 삭제하기

이미지를 삭제하기 위해서는 docker rmi 명령어를 사용하면 된다. 명령어를 실행하면 다음과 같이 이미지가 삭제된 것을 확인할 수 있다.

$ docker rmi <image_name>

이미지를 여러개 삭제하고 싶다면 docker rmi 명령어에 해당 이미지의 이름을 여러개 입력하면 된다.

$ docker rmi <image_name_1> <image_name_2> <image_name_3>

이미지 제거에 대한 한가지 중요한 참고 사항은 이미지 제거 전 컨테이너들이 먼저 제거되어야 한다는 것이다. 이미지를 제거하기 전에 해당 이미지를 사용하고 있는 모든 컨테이너들을 먼저 제거해야 한다.

만약 현재 진행중인 컨테이너 외에 모든 이미지를 제거하기를 원한다면 docker image prune 명령어를 사용하면 간편하게 삭제하는 것이 가능하다.

$ docker image prune

중지된 컨테이너 자동 제거하기

--rm 옵션을 사용하여 컨테이너가 종료되었을 때 자동으로 컨테이너가 삭제되는 것을 확인할 수 있다. 이렇게 하면 컨테이너가 중지된 상태가 되어도 자동으로 제거되어 공간을 차지하지 않는 것을 방지할 수 있다.

$ docker run --rm <image_name>

도커 이미지 검사하기

docker image inspect 명령어를 사용하면 해당 이미지의 속성들과 검사한 결과를 볼 수 있다. 이 명령어를 사용하면 이미지의 사용한 레이어, 태그 등의 정보를 확인할 수 있다. 특정 이미지가 어떤 설정이 되어있는지 확인할 수 있고, 이미지가 잘못 만들어진 것인지도 검사할 수 있다.

$ docker image inspect <image_name>

컨테이너에 혹은 컨테이너로 부터 파일 복사하기

docker cp 명령어를 사용하면 컨테이너에 혹은 컨테이너로 부터 파일을 복사할 수 있다

$ docker cp <container_name>:<source_path> <target_path>

반대로 컨테이너로 파일을 복사하고 싶다면 다음과 같이 사용하면 된다.

$ docker cp <source_path> <container_name>:<target_path>

컨테이너 이름 지정하기

특정 옵션을 하지 않은 체 컨테이너를 생성하면, 이름이 랜덤으로 만들어저 할당되는 것을 확인했을 것이다. 이를 직접 설정하는 것이 가능하다. docker run 명령어에 --name 옵션을 함께 사용하면 해당 컨테이너에 이름을 지정할 수 있다.

$ docker run --name <container_name> <image_name>

이미지 태그 이해하기

태그는 이미지의 버전을 관리하기 위한 간단한 방법으로, 이미지의 이름 뒤에 붙여지는 또 하나의 고유한 이름이다. 먼저 이름을 통해 여러 이미지에 대한 공통이름을 할당하고, 태그를 통해 해당 여러 이미지마다 고유값을 할당하는 것이다. 예를들어 node:14 의 경우는 node 구성되는 여러 이미지가 존재하는데 그 중 버전이 14 인 이미지를 나타내는 것과 같다.

이미지 태그 지정하기

이미지를 빌드하는 경우 역시 ID 가 랜덤적으로 만들어져 할당되는 것을 확인했을 것이다. docker tag 명령어를 사용하면 이미지에 태그를 지정할 수 있다.

$ docker tag <image_name>:<tag_name> .

혹은 빌드 시 -t 옵션을 통해 생성시 바로 태그를 할당하는 것도 가능하다.

$ docker build -t <image_name>:<tag_name> .

이미지 공유하기 (push)

먼저 이미지를 공유하기 위해서는 다음과 같은 작업이 필요하다.

  1. 도커 허브 계정이 있어야한다.
  2. 도커 허브에 공유하기 위한 리포지토리를 생성해야한다.
  3. 도커 리포지토리와 동일하게 이미지 이름을 생성해야한다.

만약 아직 빌드하지 않은 이미지를 공유하는 경우라면, 이름을 리포지토리와 동일하게 만들어 빌드한다. 빌드시 이름과 태그를 생성하는 방법은 다음과 같다.

$ docker build -t <image_name>:<tag_name> .

이미 만들어진 이미지를 사용하여 리포지토리에 공유하기 위해서는, 만든 이미지 이름을 리포지토리와 동일하게 만들어야 한다. 기존의 이미지를 기반으로 이름을 바꾼 새로운 이미지를 생성하는 명령어는 다음과 같다.

$ docker tag <current_image_name>:<current_tag_name> <changed_image_name>:<changed_tag_name> 

이후 도커 허브에 이미지를 공유하는 명령어는 다음과 같다.

$ docker push <image_name>:<tag_name>

만약 해당 PC 에서 처음 도커 허브에 이미지를 푸시하는 것이라면 인증을 위해 로그인이 필요하다. 로그인을 진행하는 명령어는 다음과 같다.

$ docker login

공유된 이미지 가져오기 (pull)

공유된 이미지를 가져오기 위해 다음과 같은 명령어를 사용한다. 해당 명령어를 실행하면 도커 허브에 저장된 이미지를 가져올 수 있다.

$ docker pull <image_name>:<tag_name>

또한 docker run 을 통해 가져오는 것도 가능하다. 만약 현재 실행하려는 이미지가 로컬 컴퓨터에 없는 경우 도커허브르 찾아 존재하는 것이 확인되면 이를 다운로드 하고 실행한다.

$ docker run <image_name>:<tag_name>
profile
새로운 것에 관심이 많고, 프로젝트 설계 및 최적화를 좋아합니다.

0개의 댓글