⭐ 도커 이미지 ( 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 를 실행합니다.
로컬에 이미지가 있다면 해당 이미지로 실행하고, 없으면 도커 허브에서 다운로드 후 실행합니다.
create 와 start 를 한 번에 하는 명령어입니다.
> 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
동작 중인 컨테이너에서 실행되고 있는 프로세스를 확인할 때 사용합니다.
컨테이너 내부 격리환경에서 각 프로세스의 PID 는 1 번이지만, 전체 운영체제에서의 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 명령어가 있었습니다.
'Server > Docker' 카테고리의 다른 글
[Docker] (HTTP code 500) server error - Ports are not available: exposing port TCP 0.0.0.0:1433 (0) | 2024.10.04 |
---|---|
Docker-compose.yml: `version` is obsolete 오류 해결 (0) | 2024.08.19 |
[Docker] dockerfile 생성하기 (0) | 2024.08.04 |
[Docker] 다운로드 및 세팅하기 (0) | 2024.08.02 |