[Docker] 도커와 컨테이너 사용법 (명령어) 알아보기

bi_sz·2024년 1월 15일
0

Docker

목록 보기
3/3
post-thumbnail

⭐ 도커 이미지 ( Docker Image )

도커 이미지는 컨테이너를 만드는 데 사용되는 읽기 전용 (Read-Only) 템플릿입니다.
컨테이너 실행에 필요한 파일과 설정값 등을 포함하고 있는 도커파일을 만든 후 Dockerfile 을 빌드하여 이미지를 만듭니다.


⭐ 도커 컨테이너 ( Docker Container )

도커 이미지를 실행한 상태입니다.
이미지로 컨테이너를 생성하면 이미지의 목적에 맞는 파일이 들어있는 파일 시스템과, 격리된 시스템 자원 및 네트워크를 사용할 수 있는 독립된 공간이 생성됩니다.

도커 컨테이너는 읽기 전용인 이미지에 변경된 사항을 저장하는 컨테이너 계층(Layer) 에 저장합니다.

DockerFile 을 빌드하여 Docker Image 를 만들고,
Docker Image 를 실행하여 Docker Container 를 만듭니다.

  • 하나의 Docker Image 로 여러개의 Docker Container 를 만들 수도 있습니다.
  • 기존의 Docker Image 를 변경하여도 이미 실행중인 Docker Container 에는 영향을 주지 않습니다.

⭐ 기본적인 도커 명령어

docker [대상] [액션]
-> [대상] : container(생략 가능), image, volume, network
-> [액션] : ls, inspect, start, run

💫 도커 컨테이너

🔹 docker (container) create

> docker create --name liyoTest1 centos

컨테이너를 생성합니다. (자동 시작x)

--name : 옵션을 추가하여 컨테이너 명을 liyoTest1 로 설정해주었습니다.
-> name 옵션을 사용하지 않을 경우 임의의 name 이 부여됩니다.

> docker rename liyoTest1 testLiyo1

> docker rename [현재 이름] [바꿀 이름]

이미 생성된 컨테이너 명을 바꿀 수 있습니다.
컨테이너 명을 변경하여도 컨테이너의 ID 는 변경되지 않습니다.

로컬 레포지토리에 이미지가 없으면 기본으로 docker hub 에서 이미지를 pull 합니다.

> docker create -it --name testLiyo2 centos

도커 컨테이너를 생성할 때 옵션을 설정해줄 수도 있습니다.

  • -i (--interactive) : 표준 입력(STDIN)을 활성화합니다. 컨테이너와 attach 되어있지 않더라도 표준 입력을 유지합니다.
  • -t (--tty) : 컨테이너에 pseudo-terminal 을 할당합니다.

🔹 docker ps

실행(Up) 중인 컨테이너들의 목록을 확인합니다.

> docker ps 
> docker container ls   // docker ps 와 같은 동작입니다.

도커 컨테이너 목록을 조회할 때 옵션을 설정해줄 수도 있습니다.

  • -a (all) : 실행중이지 않은 컨테이너를 포함해서 전체 컨테이너 목록을 보여줍니다.
  • --no-trunc : 컨테이너 ID 의 전체를 보여줍니다.

출력된 결과의 항목

  • CONTAINER ID : 컨테이너에 할당되는 고유한 컨테이너 아이디입니다. 전체 ID 에서 12 자리만 출력됩니다.
  • IMAGE : 컨테이너를 생성할 때 사용된 이미지 입니다.
  • COMMAND : 컨테이너가 시작될 때 실행될 명령어입니다.
    -> docker run 이나 docker create 명령어의 맨 끝에 새로운 명령어를 입력해서 컨테이너를 생성할 때 대체 가능합니다.
  • CREATED : 컨테이너 생성 후 경과 시간 입니다.
  • STATUS : 컨테이너의 상태입니다. [ 실행중(up), 종료(Exited), 일시중지(Pause) ]
  • PORTS : 컨테이너가 개방한 포트와 호스트에 연결된 포트입니다.
  • NAMES : 컨테이너 이름입니다.

🔹 docker start

컨테이너를 시작(실행) 합니다.

> docker start -ai testLiyo2

testLiyo2 컨테이너를 시작하면서 -ai 옵션을 사용하여 해당 컨테이너 내부로 접근하여 표준 입력을 받을 수 있도록 설정하였습니다.

해당 컨테이너에 접근한 상태로 exit 명령을 사용하면, /bin/bash 가 종료되면서 컨테이너도 함께 종료됩니다.

순차적으로 Ctrl + P , Ctrl + Q 를 눌러 컨테이너 실행 상태를 유지한 채로 빠져나온 후, 컨테이너가 실행 중 (Up) 인지 확인할 수 있습니다.


🔹 docker stop

실행중인 컨테이너를 종료합니다.

> docker stop testLiyo2
> docker ps -a
> docker ps

컨테이너가 종료되어 Exited 로 표시된 것을 확인할 수 있습니다.


🔹 docker run

컨테이너를 생성하고 시작하는 COMMAND 를 실행합니다.
로컬에 이미지가 있다면 해당 이미지로 실행하고, 없으면 도커 허브에서 다운로드 후 실행합니다.

createstart 를 한 번에 하는 명령어입니다.

> docker run -dit --name testLiyo3 centos 
> docker ps

-d 옵션을 사용하여 사용자가 직접 컨테이너 안으로 접근하지 않고, 컴테이너의 COMMAND를 백그라운드로 실행할 수 있습니다.

> docker run -it --name date centos /bin/date 
> docker ps -a

컨테이너를 시작할 때 명령어의 맨 뒤에 임의로 COMMAND 를 정의할 수 있습니다.

COMMAND(/bin/date) 가 종료되면서 컨테이너도 함께 종료된 모습입니다.

> docker run -it --name testLiyo4 -w "/tmpdir" -e "MYNAME=BI" centos

shell 의 환경 정보를 옵션으로 정의한 모습입니다.

  • -w (--workdir) : 컨테이너의 작업 디렉토리를 설정합니다.
  • -e (--env) : 환경 변수를 설정합니다.
  • -env-file=[파일명] : 정의해야 하는 환경 변수가 많은 경우 특정 파일을 호출해서 설정 가능합니다.

> docker run -it --name testLiyo5 --restart always centos
> # exit
> docker ps

restart 옵션을 통해 정해진 규칙에 따라 자동으로 재시작이 가능합니다.

동작중인 컨테이너에서 exit 로 종료해주었는데 restart 옵션을 always 로 설정하여 다시 시작(Up)된 것을 확인할 수 있습니다.

restart 옵션의 키워드는 아래와 같습니다.

  • no : 재시작하지 않습니다.
  • on-failure : 종료 상태(Exited code) 가 0 이 아닌 경우 재시작합니다.
  • on-failure:횟수(n) : 종료 상태(Exited code) 가 0 이 아닌 경우 n 회만 재시작합니다.
  • always : 항상 재시작합니다.

컨테이너를 시작할 때 CPU메모리 등 리소스 사용량을 제한할 수도 있습니다.
관련 옵션은 아래와 같습니다.

  • cpus : 컨테이너에서 최대 사용 가능한 CPU 수를 지정합니다.
    -> CPU 사용 비율 지정 -cpus=0.2-> CPU를 0.2개(20%) 사용.
  • -c (--cpu-share) : CPU 자원의 경합이 발생했을 때 할당할 자원을 지정합니다.
    -> defult 값은 1024입니다.
    -> 512 라고 정의하면 다른 프로세스들(1024) 의 50% 만 자원 할당이 가능합니다.
  • -m (--memory) : 메모리의 사용량을 제한합니다.
    -> b, k, m, g 등의 단위를 정의합니다.

이 외에도 지소스를 제한하는 더 많은 옵션들이 있습니다.


🔹 docker attach

컨테이너 내부에 접근하려 STDIN/STDOUT/STDERR를 사용합니다.
컨테이너 PID=1 표준 입출력을 이용합니다.

> docker run -it --name testLiyo6 centos

🔹 docker exec

동작중인 컨테이너에서 새로운 프로세스를 실행합니다.
COMMAND 가 아닌 별도의 명령어를 실행합니다.

> docker run -d --name web httpd
> docker ps
> docker exec -it web /bin/bash

웹서버의 경우 COMMAND(PID=1)httpd 로 정의되고, Shell 이 실행되지 않기 때문에 docker attach 명령 입력이 불가능합니다.

Shell 에 접근하기 위해서 개별적으로 실행해주어야 합니다.


🔹 docker logs

컨테이너의 PID=1 프로세스의 STDIN/STDOUT/STDERR 를 출력합니다.

> docker run -dit --name pingTest centos /bin/ping localhost
> docker ps
> docker logs -f pingTest
> docker logs -ft pingTest

옵션을 통해 다양한 방식으로 로그를 출력할 수 있습니다.

  • -f (--follow) : 실시간으로 로그를 추적, 출력 합니다.
  • -t (--timestamp) : 타임스탬프로 출력합니다.

🔹 docker stats

동작 중인 컨테이너의 상태와 사용 중인 리소스의 양을 확인할 때 사용합니다.
상태 확인이 끝나면 Ctrl + C 를 눌러 명령을 종료합니다.

> docker stats

실행중인 컨테이너의 상태가 표시되는 모습입니다.

  • CONTAINER ID : 컨테이너 ID 입니다.

  • NAME : 컨테이너 이름입니다.

  • CPU% : CPU 사용률입니다.

  • MEM USAGE/LIMIT : 메모리사용량 / 컨테이너에서 사용할 수 있는 메모리 제한입니다.

  • MEM % : 메모리 사용률을 나타냅니다.

  • NET I/O : 네트워크 I/O 를 표시해줍니다.

  • BLOCK I/O : 블록 I/O 를 표시해줍니다.

  • PIDS : 사용 중인 PID의 수 (프로세스의 수) 를 나타냅니다.


🔹 docker top

동작 중인 컨테이너에서 실행되고 있는 프로세스를 확인할 때 사용합니다.

컨테이너 내부 격리환경에서 각 프로세스의 PID1 번이지만, 전체 운영체제에서의 PID 가 출력됩니다.


🔹 docker pause/unpause

컨테이너를 일시 중지하거나 일시 중지된 컨테이너를 재시작힙니다.

> docker ps -a
> docker pause testLiyo7
> docker ps -a
> docker unpause testLiyo7
> docker ps -a

동작 중인 컨테이너를 pause 명령어로 일시 중지하고, unpause 명령어로 일시 중지된 컨테이너를 재시작 해주었습니다.

Pause 상태인 컨테이너에 attach 명령어로 접근을 시도하면 접근이 되지 않습니다.


🔹 docker rm

컨테이너를 삭제합니다.

> docker rm testLiyo7
> docker rm -f testLiyo7

rm 명령어를 사용하여 종료된 컨테이너를 삭제할 수 있습니다.
동작 중인(UP) 컨테이너를 삭제하려면 stop 명령어를 사용하여 종료(Exited) 후 삭제해주거나 명령어에 -f 옵션을 사용해 삭제 가능합니다.

docker rmi [이미지명]

이미지를 삭제합니다.


🔹 docker container prune

종료(Exited)된 컨테이너를 일괄적으로 삭제합니다.

prune 명령어를 사용하려면 앞에 [대상] 을 명시해주어야합니다.
-> 예시) container, image, metwork, volume, system

동작 중인 컨테이너는 남아있고, 종료된 컨테이너가 모두 삭제된 모습입니다.


🌠 정리

지치네요 .. 그 외에도 컨테이너와 호스트 간의 파일을 복사하는 docker cp 명령과 , 컨테이너가 생성된 시점부터 변경된 이력을 확인할 수 있는 docker diff 명령어가 있었습니다.

도커 그만보고 싶네요 ..

0개의 댓글