개발 일기

Docker Container 본문

컨테이너/Docker

Docker Container

이건욱

도커 컨테이너는 다음과 같이 실행 중 , 정지 , 파기 와 같이 세가지 상태를 가지고 있습니다.

각 컨테이너는 같은 이미지를 생성을 해도 별개의 상태를 가지고 있습니다.

 

[실행 중 상태]

docker container run 과 같은 명령어로 컨테이너가 생성이 되면 Dockerfile에 정의 된 애플리케이션이 실행이 됩니다. 이 상태가 바로 실행 중인 상태입니다.

 

[정지 상태]

실행 중 상태에 있는 컨테이너를 사용자가 명시적으로 정지 하거나 컨테이너에서 실행 된 애플리케이션이 종료가 된 경우에 정지 상태가 됩니다.

 

정지 상태가 되면 가상 환경으로는 동작하지 않지만 , 디스크에 컨테이너가 종료 되던 시점이 기록이 됩니다. 따라서 정지 시킨 컨테이너를 다시 실행 시킬수가 있습니다.

 

[파기 상태]

정지 상태의 컨테이너를 명시적으로 파기 하지 않는 이상 디스크에 남아 있습니다. 

한번 파기한 컨테이너는 다시는 실행을 시킬수가 없고 다시 이미지를 만든다고 해도 컨테이너 마다 상태가 존재 하기 때문에 처리 결과가 달라질 수도 있습니다.

 

그래도 삭제를 안하면 무의미하게 디스크에 계속 저장이 되기 때문에 안쓰는 컨테이너는 파기하는 것이 좋습니다.

 

Container 주요 명령어

docker container run 명령은 도커 이미지로 부터 컨테이너를 생성하고 실행하는 명령어 입니다.

다음과 같이 작성 할수 있습니다.

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

많은 옵션이 있지만 주요 사용하는 옵션은 ( 더 자세한 내용을 보고 싶으면 docker container run --help )

-d : 기본적으로 포그라운드에서 실행을 시키지만 이 해당 옵션을 실행시키면 백그라운드에서 실행을 시킬수가 있습니다.

-p : 사용자 특정 포트를 컨테이너 쪽 포트로 포트 포워딩을 진행 할수가 있습니다.

--rm : 정지 된 컨테이너는 보통 디스크에 존재 하지만 이 옵션으 사용하면 실행이 끝나면 자동 파기가 됩니다.

--name : 컨테이너의 이름을 지정 할수가 있습니다. (대부분 개발 환경에서만 실행 되며 이유는 같은 이름을 갖는 기존의 컨테이너를 먼저 삭제 후 새로 실행을 시켜야 하기 때문입니다.)

 

[예시]

docker container run -d -p 9000:8080 helloworld/gunwook:latest

 

docker container ls 명령은 실행 중이거나 종료된 컨테이너의 목록을 보여주는 명령어 입니다.

다음과 같이 작성 할수 있습니다.

 

docker container ls [옵션명]

CONTAINER ID

컨테이너를 식별하기 위한 유일 식별자 입니다.

IMAGE

컨테이너를 만드는 데 사용되는 도커 이미지

COMMAND

컨테이너에서 실행되는 애플리케이션 프로세스

CREATED

컨테이너 생성 후 경과된 시간

STATUS

Up(실행 중) , Exited(종료) 컨테이너의 실행 상태

PORTS

포트 포워딩에 대한 정보

NAMES

컨테이너의 이름

옵션

-q

CONTAINER ID만 축약형으로 보여줍니다.

--filter

"name=test" 컨테이너 명과 일치하는 목록                                          "ancestor=test" 이미지를 기준으로 검색

-a

종료된 컨테이너의 목록을 확인

 

docker container stop

실행중인 컨테이너를 종료 할수가 있습니다.

다음과 같이 사용 할수가 있습니다.

docker container stop [컨테이너ID or 컨테이너명]

 

[예시]

docker container stop temp

 

docker container restart

컨테이너를 파기 하지 않는 상태에서는 재시작을 진행 할수가 있습니다.

다음과 같이 사용이 가능합니다.

 

docker container restart [컨테이너ID or 컨테이너명]

 

[예시]

docker container restart temp

 

docker container rm

컨테이너를 파기하는 방법입니다.

다음과 같이 사용이 가능합니다.

 

컨테이너를 파기를 안하게 되면 정지된 상태에서도 디스크에 계속 남아 있습니다. 그래서 의미없는 용량을 차지 하기 때문에 지우는게 좋습니다.

 

만약에 새로 만들 때 같은 이름을 가진 컨테이너가 존재 하는 경우 기존의 중복된 이름을 가진 컨테이너를 파기를 해야 합니다.

docker container rm [컨테이너ID or 컨테이너명]

 

docker container logs

이 명령을 사용하면 현재 실행 중인 특정 도커 컨테이너의 표준 출력으로 출력된 내용을 확인 할수가 있습니다.

실제 운영 하는 단계에서는 관련 도구를 주로 사용하기 때문에 사용하지는 않지만 간단하게 디버깅 용도로는 사용이 가능합니다.

 

옵션 -f : 새로 출력되는 표준 출력 내용을 계속해서 출력합니다.

docker container logs -f $(docker container ls --filter "name=temp" -q)

 

docker container exec

현재 실행 중인 컨테이너에서 원하는 명령을 실행 할수가 있습니다.

먼저 실행 하고자 하는 컨테이너 ID를 지정 후 , 실행 할 명령을 추가 하면 됩니다.

 

[주의사항]

이 명령어는 주로 내부의 상태를 확인하는 용도로 사용해야합니다.

안에 있는 파일을 수정을 하는 것은 애플리케이션에 부작용을 만들수가 있으므로 운영에서는 절대 해서는 안됩니다.

 

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

 

[예시]

$ docker container exec -it temp ls
//bin src

 

[옵션]

-i

표준 입력 연결을 유지

-t

유사 터미널을 할당합니다.

 

docker container cp

docker container cp 명령은 컨테이너 끼리 혹은 컨테이너와 호스트 간에 파일을 복사하기 위한 명령어 입니다.

 

docker container cp는 Dockerfile COPY와는 다르게 이미지를 빌드 할때 호스트에서 복사해 올 파일을 지정하는게 아닌 실행 중인 컨테이너와 파일을 주고 받을수 있습니다.

 

docker container cp [options] [컨테이너ID:원본 파일] [대상 파일]

docker container cp [options] [호스트 원본파일] [컨테이너ID:대상 파일]
// 컨테이너 안에있는 main.go 파일은 호스트의 현재 작업 디렉터리로 복사합니다.
docker container cp temp:/echo/main.go .
// 호스트 쪽에서 temp.txt 파일을 echo/temp 폴더 위치로 복사합니다..
docker container cp temp.txt echo:/temp

'컨테이너 > Docker' 카테고리의 다른 글

docker-compose - (1) ?  (0) 2020.05.05
도커 컨테이너의 운영 및 관리 ?  (0) 2020.05.05
docker image (2)  (0) 2020.04.19
Docker - (1)  (0) 2020.04.19
Docker UI?  (0) 2020.04.18
Comments