• Home
  • About
    • Dochoi의 소소한 코딩 모음 photo

      Dochoi의 소소한 코딩 모음

      코딩을 하면서 느낀점들을 모은 공간입니다.

    • Learn More
    • Email
    • Github
  • Posts
    • All Posts
    • All Tags
    • AI
    • Algorithm
    • Algorithm-Test
    • Cloud
    • Docker
    • Kubernetes
    • iOS
    • Culture
  • Projects

도커 컨테이너 다루기

08 Jun 2020

Reading time ~4 minutes

docker

학습 목표

도커 컨테이너를 다루는 방법을 이해한다.

도커 명령을 실제로 실행해 보면서 컨테이너가 구체적으로 무엇인지 파악한다.

목차

도커 컨테이너란 무엇인가?

겉에서 본 도커 컨테이너는 가상 환경이다.

  • 도커 컨테이너 다루기
    • 학습 목표
    • 목차
    • 도커 컨테이너란 무엇인가?
    • 도커 컨테이너의 생애주기
      • 실행중 상태
      • 정지 상태
      • 파기 상태
    • Docker container run
      • Docker container run 명령의 인자
      • 컨테이너에 이름 붙이기
      • 도커 명령에서 자주 사용되는 옵션
        • -i 옵션
        • -t 옵션
        • -it 옵션
        • -rm 옵션
        • -v 옵션
    • docker container ls - 컨테이너 ID만 추출하기 - 컨테이너 목록 필터링하기 - 종료된 컨테이너 목록 보기
    • docker container stop
    • docker container restart
    • docker container rm
    • docker container logs
    • docker container exec
    • docker container cp
    • 운영와 관리를 위한 명령
      • prune
      • docker container stats
    • docker -compose

도커 컨테이너의 생애주기

도커 컨테이너는 실행 중, 정지, 파기의 3가지 상태를 갖는다.

docker container run

명령으로 컨테이너 최초 실행시 상태는 실행 중이다.

실행중 상태

docker container run

애플리케이션이 실행 중인 상태이다.

HTTP 요청을 받는 서버 애플리케이션이면 오류로 인해 종료 되지 않는 한 실행시간이 무한하고

명렁만 실행되고 끝나는 애플리케이션은 실행 중 상태가 길게 유지되지 않는다.

실행이 끝나면 정지 상태가 된다.

정지 상태

컨테이너를 사용자가 명시적으로 정지하거나

docker container stop

실행된 애플리케이션이 정상/오류 여부를 막론하고 종료된 경우, 컨테이너의 상태는 정지상태이다.

컨테이너를 정지시키면 가상 환경으로서는 더 동작하지 않지만, 디스크에 컨테이너가 종료되던 시점의 상태가 저장되어 남는다.

docker container ls -a

로 모든 컨테이너를 확인 할 수 있다.

파기 상태

정지 상태의 컨테이너는 디스크에 그대로 남아 있다.(호스트 운영체제를 종료할지라도)

이 컨테이너를 삭제하는것을 파기한다고 생각하면 될 것 같다.

Docker container run

컨테이너 생성 및 실행

docker container run 명령은 컨테이너를 생성하고 실행하는 명령이다.

도커 컨테이너를 실행 중 상태로 만든다.

docker container run [options] 이미지명[:태그] [명령] [명령인자 ...]
docker container run [options] 이미지ID [명령] [명령인자 ...]

ex)

docker container run -d -p 9000:8080 example/echo:latest

백그라운드에서 실행시키는데(-d), 로컬호스트 9000 -> 컨테이너 호스트8080으로 포트포워딩(-p)을 한다.

####

Docker container run 명령의 인자

docker container run 명령에 인자를 전달하면 Dockerfile에서 정의했던 CMD 인스트럭션을 오버라이드한다.

컨테이너에 이름 붙이기

–name 옵션을 사용한다.

docker container run --name [컨테이너명] [이미지명]:[태그]

ex)

docker container run -t -d --name gihyo-echo example/echo:latest

도커 명령에서 자주 사용되는 옵션

-i 옵션

  • 컨테이너를 실행할 때 컨테이너 쪽 표준 입력과의 연결을 그대로 유지한다. 따라서 컨테이너 쪽 셸에 들어가서 명령을 실행할 수 있다. 실제 사용에서는 -t옵션과 같이 사용하는 경우가 많다.

-t 옵션

  • 유사 터미널 기능을 활성화하는 옵션이다. 보통 i옵션과 같이 사용한다.

-it 옵션

  • -i옵션과 -t옵션을 동시에 사용하는 방법이다.’

-rm 옵션

  • 컨테이너를 종료할때 컨테이너를 파기하도록 하는 옵션이다. 꽤나 유용하다.

-v 옵션

  • 호스트와 컨테이너 간에 디렉터리나 파일을 공유하기 위해 사용하는 옵션이다.

docker container ls

도커 컨테이너 목록 보기

docker container ls [options]
항목 내용
CONTAINER ID 컨테이너를 식별하기 위한 유일 식별자
IMAGE 컨테이너를 만드는 데 사용된 도커 이미지
COMMAND 컨테이너에서 실행되는 애플리케이션 프로세스
CREATED 컨테이너 생성 후 경과된 시간
STATUS 컨테이너의 실행 상태
PORTS 호스트 포트와 컨테이너 포트의 연결 관계(포트 포워딩)
NAMES 컨테이너 이름

컨테이너 ID만 추출하기

docker container ls -q

컨테이너 목록 필터링하기

docker container ls –filter “필터명=값”

ex) docker container ls --filter "name=dochoi"
  • 컨테이너명이 dochoi인가?
ex) docker container ls --filter "ancestor=dochoi/echo"
  • 컨테이너를 생성한 이미지의 이름이 dochoi/echo인가?

종료된 컨테이너 목록 보기

docker container ls -a

docker container stop

컨테이너 정지하기

docker container stop 컨테이너IDor컨테이너명

ex)

docker container stop dochoi
docker container stop 8b5968585131604a92af02f5690713efadf029cc8dad53f79280b87a80eb1354

docker container restart

컨테이너 재시작하기

docker container restart 컨테이너IDor컨테이너명

ex)

docker container restart dochoi

docker container rm

컨테이너 파기하기(삭제하기)

ex)

docker container rm dochoi

docker container logs

표준 출력 연결하기

docker container logs [options] 컨테이너IDor컨테이너명

도커 컨테이너의 표준 출력 내용을 확인할 수 있다.

-f 옵션을 새용하면 새로 출력되는 표준 출력 내용을 계속 보여준다.

ex)

docker container logs -f $(docker container ls --filter "ancestor=dochoi" -q)

애플리케이션을 실제 운영하는 단계에서는 쿠버네티스같은 도구를 사용하기 때문에 실제론 사용하지 않는경우가 많다.

docker container exec

실행 중인 컨테이너에서 명령 실행하기

docker container exec [options] 컨테이너IDor컨테이너명 컨테이너에서 실행할명령

ex)

docker container run -t -d --name echo --rm example/echo:latest
docker container exec echo pwd

docker exec 명령은 마치 컨테이너에 ssh로 로그인 한것 처럼 작용한다.( 클러스터 로그인처럼)

-it옵션으로 셸을 통해 다룰수 있다.

docker container exec -it echo sh

컨테이너 내부의 상태를 확인하거나 디버깅하는 용도로 사용한다. 컨테이너 안에 든 파일을 수정하는 것은 의도하지 않은 부작용을 초래할 수 있으므로 운영 환경에서는 하지 않는다.

docker container cp

파일 복사하기

컨테이너끼리, 혹은 컨테이너와 호스트간에 파일을 복사하기위한 명령이다.

Dockerfile의 COPY인스트럭션은 이미지를 빌드할 때 호스트에서 복사해 올 파일을 정의하는것이고

, docker container cp 명령은 실행 중인 컨테이너와 파일을 주고받기 위한 명령이다.

ex)

컨테이너 안에있는 /echo/main.go 파일을 호스트의 현재 작업 디렉터리로 복사

docker container cp echo:/echo/main.go .

호스트에서 컨테이너로 복사

docker container cp dummy.txt echo:/temp

확인

docker container exec echo ls /tmp | grep dummy

docker container cp 명령은 디버깅 중 컨테이너 안에서 생성된 파일을 호스트로 옮겨 확인할 목적으로 사용하는 경우가 대부분이다. 또한 아직 파기되지 않은 정지 상태의 컨테이너에 대해서도 실행할 수 있다.

운영와 관리를 위한 명령

전체적인 운영에 대해 알아본다.

prune

컨테이너 및 이미지 파기

docker container prune

은 실행중이 아닌 모든 컨테이너를 삭제하는명령이다.

docker container ls -a

로 컨테이너 목록을 확인해 판단하여 명령을 내리자

docker image prune

태그가 붙지않은 모든 이미지를 삭제한다

삭제가 안되는경우 실행 중인 컨테이너의 이미지 등 이유가 있다.

docker system prune

사용하지 않는 도커 이미지 및 컨테이너, 볼륨, 네트워크 등 모든 도커 리소스를 일괄적으로 삭제한다.

docker container stats

사용 현황 확인하기

시스템 리소스 사용 현환 확인

ex)

docker container stats

docker -compose

도커 컴포즈는 여러가지 컨테이너를 한번에 관리할 수 있게 해준다.

ft_server에서 여기까지 요구하지 않으므로 우선 여기까지만 진행한다.



Docker Share Tweet +1