본문 바로가기

DevOps/Docker

[Docker 기본] Docker CLI 익히기

이미지(Image) 다운로드


 

이미지 다운로드 : docker pull '이미지명'

특정 버전 이미지 다운: docker pull '이미지명':'태그명'

 

어디서 이미지를 다운받는 거야?


dockerhub에 저장된 이미지를 다운받는 것.

dockerhub은 이미지를 저장/ 다운할 수 있는 저장소 이다. 이 때 이미지는 다양한 버전이 존재한다. 

 

 

이미지(Image) 조회/삭제


이미지 조회: docker image ls

  =>  RESPOSITORY는 이미지명, TAG 이미지의 버전, CREATED 이미지 생성 일자, SIZE는 이미지 크기

 

이미지 삭제 : docker image rm '이미지 ID'

 * 아이디의 일부 값만 입력해도 삭제된다.

 

 

이미지 강제 삭제: docker image rm -f '이미지 ID' 

 => 컨테이너에서 사용중인 이미지를 삭제하려고 하면 오류가 발생한다. 이 때는 이미지를 강제 삭제해야 삭제된다.

  여기서 rm -f 는 중단된 컨테이너가 사용하고 있는 이미지만 삭제해준다. 실행중인 이미지는 삭제하려면 컨테이너를 중단 시킨 뒤

  삭제해야 한다. 

 

컨테이너에서 사용하고 있지 않은 이미지 전체 삭제 : docker image rm $(docker image -q)

컨테이너에서 사용중인 이미지 중에서 중단된 이미지 전체 삭제 : docker image rm -f $(docker image -q)

 

컨테이너(Container)생성/실행


컨테이너 생성: docker create '이미지명'

  nginx라는 이미지를 가지고 컨테이너를 생성. 컨테이너를 생성만 했을 뿐 실행은 되지 않는다.

  이미지를 다운 받지 않았다면 이미지를 다운로드 후 컨테이너를 실행 시킨다.

컨테이너 실행: docker start '컨테이너 ID'

컨테이너 ID 확인 : docker ps -a

 

컨테이너 생성 및 실행: docker run '이미지명'

 => docker create 이후 docker start 하는 것과 동일

 => docker run 은 포그라운드(foreground) 에서 실행한다.

  포그라운드 (foreground): 내가 실행시킨 프로그램의 내용이 화면에서 실행되고 출력되는 상태

  백그라운드 (background): 내가 실행시킨 프로그램이 컴퓨터 내부적으로 실행되는 상태. 프로그램이 실행되는 상태를

  실시간으로 확인  할 수 없다. 

 

컨테이너를 백그라운드에서 생성 및 실행: docker run -d '이미지명'

컨테이너에 이름을 붙여서 생성 및 실행: docker run -d --name '컨테이너 이름' '이미지명'

=> NAMES에서 설정한 이름을 확인할 수 있다.

 

호스트 포트와 컨테이너의 포트를 연결하기 : docker run -d -p '호스트 포트':'컨테이너 포트' '이미지명'

=> port가 바뀐 것을 볼 수 있다. 

 웹브라우저에서 localhost:4000을 입력해서 접속해보자.

 이번엔 docker run -d -p 80:80 nginx 를 입력해보자. 

 로컬호스트와 컨테이너의 네트워크 망이 분리되어 있기 때문에 포트 매핑을 해야한다. 

 

 

컨테이너(Container) 조회/중지/삭제


 

실행 중인 컨테이너 조회 : docker ps

모든 컨테이너 조회: docker ps -a

 

docker 중단 후 조회해보면 ps 명령어로는 아무것도 조회되지 않지만, ps -a로는 조회가 가능하다.

 

컨테이너 종료: docker stop 'container ID'

                         docker kill 'continer ID'

=> kill 은 강제종료의 느낌이다.

  일반적으로는 stop으로 종료하지만, docker 가 먹통이되면 kill로 강제종료 한다.

 

컨테이너 삭제: docker rm 'container ID'

 => 실행 중인 컨테이너는 삭제할 수 없으므로 stop 먼저하고 삭제해야 된다. 

중지된 모든 컨테이너 삭제 : docker rm $(docker ps -a)

모든 컨테이너 삭제 : docker rm -f '컨테이너 ID'

 

컨테이너(Container) 로그 조회


 

컨테이너 로그 조회 : docker logs 'container ID'

로그가 너무 많아서 정해진 라인만 출력하고 싶을 때 : docker logs --tail 10 'container ID'

실시간으로 생성되는 로그를 보고 싶을 때 : docker logs -f 'container ID'

지금 시점부터 실시간으로 생성되는 로그를 보고 싶을 때 : docker logs --tail 0 -f 'continer ID'

 

실행중인 컨테이너 내부 접속


 

 

실행중인 컨테이너 내부 접속 : docker exec -it 'continer ID' bash

 

 

 

* Inflearn(인프런) ‘비전공자도 이해할 수 있는 Docker 입문/실전’ 강의 참고