자료 조사 : 도커(Docker) 컨테이너 다루기

2021. 11. 2. 12:58Blockchain/Project - Coin Swap

- 컨테이너(Container)란?

MySQL, WordPress, Linuex 배포판 등의 도커 이미지를 가지고 생성한 격리 공간으로, 각각의 독립적인 자원(메모리, 저장공간, 네트워크, 디렉터리)을 할당 받음

 

※ 이전 포스트에서 편리한 Docker 사용을 위해 Kitematic을 설치했지만, 우선 CLI 기준으로 정리
(OS 종류 상관 없이 CLI로 사용하는 방법은 전부 동일)

 

- 컨테이너 생성 및 실행하기

  1. docker run 명령어를 사용하면 컨테이너 생성과 실행이 동시에 이뤄지고,
    이미지가 없을 경우 도커 중앙 이미지 저장소인 도커 허브(Docker Hub)에서 자동으로 이미지 다운로드 후 실행 됨
    Ubuntu 배포판을 컨테이너로 생성하고 싶은 경우 아래와 같이 사용
    docker run [옵션] 이미지명:[태그명][인수]
    ※ 아래 두 옵션 중 하나라도 사용하지 않으면 Shell 환경을 정상적으로 이용 할 수 없음
    -i : 컨테이너와 상호 입출력을 가능하게 하는 옵션
    -t : tty를 활성화하여 Bash Shell을 사용 가능하게 하는 옵션
  2. 컨테이너 생성 및 실행이 완료되면 자동으로 컨테이너 내부에 접속하게 됨
    (기본 사용자명은 root, 호스트명은 무작위의 16진수 해쉬값)
    # 앞은 사용자명, # 뒤는 호스트명
  3. ls : 호스트 운영체제와 격리된 파일 시스템을 확인 할 수 있음
  4. exit : 컨테이너 나가기

 

- 컨테이너 생성만 하기

  1. 컨테이너를 생성만 할 때는 docker run이 아닌 docker create를 사용 할 수 있는데, 이는 컨테이너를 생성만 하고 접속하지는 않음
    create를 사용할 때는 도커 ID 또는 이미지명이 필요하므로, docker images로 현재 가지고 있는 이미지를 확인
    현재 여러 이미지가 존재하며, 만약 create에 이미지명을 명시했는데 가지고 있지 않은 이미지인 경우에는 내부적으로 이미지를 다운로드 후 생성
  2. docker create [옵션] [--name 컨테이너명] [이미지명]
    이와 같이 컨테이너를 생성하는 create를 사용하면 무작위 16진수 해쉬값으로 된 컨테이너 ID가 출력되는데, 너무 길어서 12자리만 사용하고 docker inspect 명령어로 ID를 다시 확인 가능
    docker inspect [옵션] [컨테이너 이름 or 이미지 이름/ID]
    ※ run : pull(이미지 없을 시) -> create -> start -> sttach(-i -t 옵션 설정 시)
    create : pull(이미지 없을 시) -> create

 

- 컨테이너 시작/접근하기

  1. 위에서 만든 socentos라는 컨테이너를 start로 시작
    docker start [컨테이너명]
    attach로 접근, 컨테이너 ID값은 다른 컨테이너와 겹치지 않는 선에서 앞의 몇글자만 입력하여 접근 할 수 있음
    docker attach [컨테이너명 또는 ID]
  2. 컨테이너에 접근하기 위해서는 컨테이너 ID 또는 컨테이너명을 알아야 하기 때문에 docker ps를 통해 접근하고 싶은 컨테이너 이름을 알아낼 수 있음
    docker ps : 현재 가동 중인 컨테이너 리스트를 출력
    docker ps -a 또는 -all : 가동 중, 멈춘 컨테이너를 모두 출력
    ※ 카테고리 설명
    * CONTAINER ID : 컨테이너에 자동 할당되는 고유 ID값, 위에서는 컨테이너명이 길어 일부분만 출력되지만 docker inspect [컨테이너명 | grep Id] 입력하면 전체 ID 확인 가능
    * IMAGE : 컨테이너 생성 시 사용 된 이미지명
    * COMMAND : 컨테이너가 시작 될 때 실행 될 명령어
    * CREATED : 컨테이너 생성 후 흐른 시간
    * STATUS : 컨테이너의 상태 (Up : 실행 중 / Exited : 종료 / Pause : 일시중지)
    * PORTS : 컨테이너가 개방한 포트와 호스트에 연결한 포트 목록
    * NAMES : 컨테이너의 고유 이름, 컨테이너 생성 시 --name 옵션으로 이름을 설정하지 않으면 도커 엔진이 명사와 형용사를 무작위로 조합해 임의로 설정

- 컨테이너 나가기

  1. exit 또는 [Ctrl + D] : 컨테이너를 종료하면서 빠져나오는 방법, Shell을 종료하여 컨테이너가 정지 됨
  2. [Ctrl + P] 입력 후 [Ctrl + Q]  : 컨테이너는 가동되는 상태에서 접속만 종료하는 방법, Shell에서 빠져나오기만 하므로 컨테이너가 정지되지 않음

 

- 컨테이너 삭제

  • docker stop [컨테이너명 또는 ID] : 컨테이너 중지
  • docker rm [컨테이너명 또는 ID] : 컨테이너 삭제, 실행 중인 컨테이너는 삭제 불가능
  • docker rm [CONTAINER1] [CONTAINER2] [CONTAINER3] ... : 여러 컨테이너 한 번에 삭제
  • docker rm -f [컨테이너명 또는 ID] : 실행 중인 컨테이너 강제 삭제
  • docker rm -f $(docker ps -aq) : 모든 컨테이너 강제 삭제 (삭제 된 컨테이너 복구 불가)
  • docker container prune : 중지 된 컨테이너들만 한 번에 삭제