본문 바로가기
MLOps/Docker

[Ops] Docker 컨테이너 정리

by AteN 2022. 12. 20.

Docker 컨테이너 라이프 사이클 

 

컨테이너 생성 (docker container create 명령)

이미지로부터 컨테이너를 생성한다. 이미지의 실체는 'docker'에서 서버 기능을 작동시키기 위해 필요한 디렉토리 및 파일들'이다. 구체적으로 Linux의 작동에 필요한 /etc나 /bin 등과 같은 디렉토리 및 파일들이다. 

docker container create 명령을 실행하면 이미지에 포함될 Linux의 디렉토리와 파일들의 스냅샷을 취한다. 스냅샷이란 스토리지 안에 존재하는 파일과 디렉토리를 특정 타이밍에서 추출한 것을 말한다. 

docker container create 명령은 컨테이너를 작성하기만 할 뿐 컨테이너를 시작하지는 않는다. 

컨테이너 생성 및 시작 (docker container run 명령)

이미지로부터 컨테이너를 생성하고, 컨테이너 상에서 임의 프로세스를 시작한다. 예를 들어 리눅스의 프로세스 관리와 마찬가지로 Nginx 등의 서버 프로세스를 백그라운드에서 항시 실행하거나 경웨 따라서 강제 종료하는 일도 가능하다. 

포트 번호와 같은 네트워크도 설정함으로써 외부에서 컨테이너의 프로세스에 액세스할 수도 있다.

 

---------------------------------------------------------------------------------------------------------------------

기본적인 명령어 

docker 커맨드 (옵션) 대상 (인자)

숙달하기 전까지는 'docker 커맨드 대상'이라는 형태가 기본이고, 여기에 커맨드에 옵션이 붙거나 대상에 인자가 지정되는 경우도 있다고 기억해두면 좋다. 

 

도커 명령어의 커맨드는 '무엇을','어떻게' 할것인지 지정하는 부분이다. 컨테이너를 실행하고 싶다면 container run 커맨드를 사용한다. 다만 start나 run 처럼 container를 붙이지 않아도 실행 가능한 명령어가 있으며, 관례상 이쪽을 사용하는 경우가 많다. 

docker container run ==> docker run

 

옵션 

옵션은 커맨드에 세세한 설정을 지정하는 용도로 쓰인다. 옵션은 - 또는 --으로 시작하는 것이 일반적이지만 - 기호를 붙이지 않는 경우도 있다. 그리고 -나 --중 무엇을 사용할지는 커맨드 작성자의 취향이므로 명확한 기준은 없다. 

옵션은 -d와 같이 -를 하나만 사용하는 옵션을 한꺼번에 모아 쓸 수 있다. 예를 들어 -d와 -i, -t를 합쳐 --dit와 같이 쓸 수 있다. 

 

---------------------------------------------------------------------------------------------------------------------

컨테이너 조작 관련 커맨드 (상위 커맨드 container)

docker container 하위_커맨드 (옵션)
하위 커맨드 내용 생략가능 여부 주요 옵션
start 컨테이너 실행 O -i
stop 컨테이너 정지 O  
create 도커 이미지를 컨테이너를 생성 O --name, -e, -p, -v
run 도커 이미지를 내려 받고 컨테이너를 생성해 실행함 (다운로드는 필요한 경우에만)
docker image pull
docker container create
docker container start
라는 세개의 명령을 하나로 합친것과 같다
O --name, -e, -p, -v, -d, -i, -t
rm 정지 상태의 컨테이너 삭제 O -f, -v
exec 실행 중인 컨테이너 속에서 프로그램 실행 O -i, -t
ls 컨테이너 목록을 출력 생략형은 docker ps -a
cp 도커 컨테이너와 도커 호스트 간의 파일을 복사  O  
commit 도커 컨테이너를 이미지로 변환 O  

 

1. 컨테이너  기본 실행

docker container run [옵션] 이미지명[:태그명][인수]
  •  지정할 수 있는 주요 옵션
옵션 설명
--name 이름 컨테이너 이름을 지정함
-p -p 호스트_포트 번호: 컨테이너_포트번호    ==>  포트 번호를 지정한 
-v  -v 호스트_디스크:컨테이너_디레겉리  ==> 불륨을 마운트함
-net=네트워크_이름 컨테이너를 네트워크에 연결함
-e 환경변수_이름-값 환경 변수를 설정함 
--attach, -a 표준 입력 (STDIN), 표준 출력 (STDOUT), 표준 오류 출력(STDERR)에 어태치 
--cidfile 컨테이너 ID를 파일로 출력
--detach, -d 컨테이너를 생성하고 백그라운드에서 실행
--interactive, -i 컨테이너의 표준 입력을 연다.
--tty, -t 단말기 다바이스를 사용

 

docker container run --it --name "test1" centos /bin/cal

간단한 예제를 보면, 먼저 centos라는 이름의 이미지를 바탕으로 test1(--name)이라는 이름의 컨테이는 실행하고, /bin/cal 이라는 리눅스의 표준 명령으로 달력을 콘솔에 표시하는 명령이다. 

여기서 --it 는 -i : 컨테이너의 표준 출력을 열고, -t : tty(단말 다바이스)를 확보하겠다는 의미이다.

docker container run --it --name "test1" centos /bin/bash

다음과 같인 /bin/bash을 통해서 컨테이너 안에서 쉘을 실행할 수 있다./bin/bash 실행하면 콘솔의 프롬프트가 [$]에서 [#]으로 바뀌며 리눅스 서버와 같은 명령을 사용할 수 있다. 컨테이너를 종료시킬려면 exit 입력하여 종료한다. 

 

2. 컨테이너  백그라운드 실행 

옵션 설명
--detach, -d 컨테이너를 생성하고 백그라운드에서 실행
--user, -u 사용자명을 지정
--restart=[restart 옵션] 명령의 실행 결과에 따라 재시작하는 옵션

- no = 재시작하지 않는다 
- on-failure = 종료 스테이터스가 0이 아닐 때 재시작
- on-failure:횟수 n = 종료 스테이터스가 0이 아닐 때 n번 재시작
- always = 항상 제시작
- unless-stopped = 최근 컨테이너가 정지 상태가 아니라면 항상 재시작
--rm 명령 실행 완료 후에 컨테이너를 자동으로 삭제
docker container run --d centos /bin/ping localhost

centos라는 이미지를 바탕으로 컨테이너 생성하고, localhost에 대해 ping 명령 실행을 백그라운드에서 실행한다. 

해당 컨테이너 ping 명령의 로그 확인은 logs를 통해 확인할 수 있다. 

docker container logs -t [해당 컨테이너]

 

3. 컨테이너 네트워크 설정 

  • 지정할 수 있는 주요 옵션
옵션 설명
--add-host=[호스트명: IP 주소] 컨테이너의 /etc/hosts에 호스트명과 IP 주소를 정의 
-dns=[IP 주소] 컨테이너용 DNS 서버의 IP 주소 지정
--expose 지정한 범위의 포트 번호를 할당
--mac-address=[MAC 주소] 컨테이너의 MAC 주소를 지정
--net=[net 옵션] 컨테이너의 네트워크를 지정
 
- none = 네트워크에 연결하지 않는다 
- bridge = 브리지 연결(기본값)을 사용
- container:[name|id] = 다른 컨테이너의 네트워크를 사용 
- host = 컨테이너가 호스트 OS의 네트워크를 사용
- NETWORK = 사용자 정의 네트워크를 사용 
--hostname, -h 컨테이너 자신의 호스트명을 지정
--publish, -p 호스트와 컨터이너의 포트 매핑
[호스트의 포트 번호]:[컨테이너 포트 번호]
--publish-all, -P 호스트의 임의의 포트를 컨테니어에 할당
docker container run -d -p 8080:80 nginx

nginx라는 이미지의 바탕으로 컨테이너를 생성하고, 백그라운드에서 실행한다. 호스트의 포트 번호 8080과 컨테이너의 포트 번호 80을 매핑한다. 

 

4.  자원을 지정하여 컨테이너 생성 및 실행 

CPU나 메모리와 같은 자원을 지정하여 컨테이너를 생성 및 실행할 수 있다.

  •  지정할 수 있는 주요 옵션
옵션 설명
--cpu-shares. -c CPU의 사용 배분(비율)
--memory, -m 사용할 메모리 제한하여 실행 (단위 b, k, m, g 중)
--volume=[호스트 디렉토리]:[컨테이너의 디렉토리], -v 호스트와 컨테이너의 디렉토리를 공유
docker container run --cpu-shares=512 --memory=1g centos

다음과 같이 cpu의 사용 배분과 사용할 메모리를 제한하여 실행할 수 있다.

docker container run -v /Users/user/share:/usr/share/nginx/html nginx

다음과 같이 호스트와 컨테이너를 공유하고 싶을 때 사용할 수 있다. 예를 들어 호스트의  /Users/user/share 폴더를 컨테이너의 /usr/share/nginx/html와 공유하고자 할때 사용할 수 있다. 

 

5.  컨테이너 시작하는 환경을 지정 옵션 

  • 지정할 수 있는 주요 옵션
옵션 설명
--env=[환경변수], -e 환경변수를 설정 
--env-file=[환경변수] 환경 병수를 파일로부터 설정
--read-only=[true|false] 컨테이너의 파일 시스템을 읽기 전용으로 만드는지 여부 
--workdir=[path], -w 컨테이너의 작업 디렉토리를 지정 
--user=[사용자명], -u 사용자명 또는 UID를 지정 

 

6.  가동 컨테이너 목록 표시 (ls)

docker container ls [옵션]

docker ps
  • 지정할 수 있는 주요 옵션
옵션 설명
--all, -a 실행 중/정지 중인 것도 포함하여 모든 컨테이너를 표시
--filter, -f 표시할 컨테이너의 필터링
--format 표시 포맷을 지정
--last, -n 마지막으로 실행된 n건의 컨테이너만 표시
--latest, -l 마지막으로 실행된 컨테이너만 표시
--no-trunc 정보를 생략하지 않고 표시
--quiet, -q 컨테이너 ID만 표시
--size, -s 파일 크기 표시 
docker container ls -a -f name=test1

NAMES가 test1에 대한 것을 조건으로 필터링하여 실행/정지 중인 모든 컨테이너를 포함하여 목록을 출력

 

docker container ls -a --format "{{.Names}} : {{.Status}}"

 

출력 형식의 지정

플레이스 홀더 설명
.ID 컨테이너 ID
.Image 이미지 ID
.Command 실행 명령
.CreatedAt 컨테이너가 작성된 시간
.RunningFor 컨테이너의 가동 시간
.Ports 공개 포트
.Status 컨테이너 상태
.Size 컨테이너 디스크 크기
.Names 컨테이너명
.Mounts 불륨 마운트
.Networks 네트워크 명

7. 컨테이너 가동 확인 (stats/top)

docker container stats [컨테이너 식별자]

위의 명령을 시작하면 CPU 사용량, 메모리 사용량 , 네트워크, 블록, PID를 확인할 수 있다

docker container top [컨테이너 식별자]

PID, 실행 시간등 을 확인 가능 

 

컨테이너 시작 (docker container start 명령)

정지 중인 컨테이너를 시작할 때 사용. 컨테이너에 할당된 컨테이너 식별자를 지정하여 컨테이너를 시작 

docker container start [옵션] <컨테이너 식별자> [컨테이너 식별자]
  • 지정할 수 있는 주요 옵션
옵션 설명
--attach, -a 표준 출력, 표준 오류 출력을 연다
--interactive, -i 컨테이너의 표준 입력을 연다

 

컨테이너 정지 (docker container stop 명령)

실행중인 컨테이너를 정지할 때 사용. 컨테이너에 할당된 컨테이너 식별자를 지정하여 컨테이너를 정지

컨테이너를 재시작하고 싶을 때는 docker container restart 명령을 사용한다 

 

docker container stop [옵션] <컨테이너 식별자> [컨테이너 식별자]
  • 지정할 수 있는 주요 옵션
옵션 설명
--time, -t 컨테이너의 정지 시간을 지정 (기본값은 10초)

 

docker container restart [옵션] <컨테이너 식별자> [컨테이너 식별자]
  • 지정할 수 있는 주요 옵션
옵션 설명
--time, -t 컨테이너의 재시작 시간을 지정 (기본값은 10초)

 

컨테이너 삭제 (docker cotainer rm 명령)

컨테이너를 삭제할 때 사용

docker container rm [옵션] <컨테이너 식별자> [컨테이너 식별자]
  • 지정할 수 있는 주요 옵션
옵션 설명
--force, -f 실행 중인 컨테이너를 강제로 삭제
--volumes, -v 할당한 볼륨을 삭제

 

'MLOps > Docker' 카테고리의 다른 글

[Ops] Docker 이미지 처리  (0) 2022.12.20
[Ops] Kubernetes란  (0) 2022.11.16
[Ops] 도커(docker)란 ?  (1) 2022.11.16

댓글