본문 바로가기

Java/Deploy

[Docker] 도커 컨테이너 사용을 위한 명령어

반응형

 

도커 컨테이너는 도커 이미지를 바탕으로 만든다.

따라서 도커 이미지를 다루는 방법에 익숙해져야 하므로 해당 게시글 최하단에 관련 링크를 걸어뒀으니 참고하면 된다 😋

 

도커 컨테이너는 가상환경으로 파일 시스템과 애플리케이션이 함께 담겨져 있는 박스라고 생각하면 된다.

이를 알려면 도커 컨테이너의 생애주기를 이해하면 된다.

 

도커 컨테이너의 생애 주기


실행 중 상태

docker container run 명령어로 도커 이미지를 기반으로 컨테이너가 생성되면 이 이미지를 생성했던 Dockerfile에 의해 애플리케이션이 실행된다. 그러면 이 애플리케이션이 실행 중인 상태가 컨테이너의 실행 중 상태가 된다.

HTTP 요청을 받는 서버 애플리케이션이면, 오류로 인해 종료되지 않는 한 실행 중 상태가 지속되므로 실행 기간이 길다.

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

 

 

정지 상태

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

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

그러므로 정지시킨 컨테이너를 다시 실행할 수 있다.

 

파기 상태

정지 상태의 컨테이너는 명시적으로 파기하지 않는 이상 디스크에 그대로 남아있다. 컨테이너 실행 및 정지를 반복하다보면 디스크 용량을 점점 많이 차지하게 된다.

단, 한 번 파기한 컨테이너는 다시는 실행할 수 없다는 점에 유의하기 바란다.

같은 이미지로 새로운 컨테이너를 생성했다고 해도 완전히 같은 컨테이너를 새로 생성할 수는 없다.

 

 

도커 컨테이너의 명령어


⌗ 컨테이너 생성 및 실행

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

도커 컨테이너를 백그라운드에서 실행하려면 다음과 같이 하면 된다.

 

[option]

  • -d : 백그라운드에서 실행
  • -p : 호스트쪽 포트를 컨테이너쪽 포트로 포워딩
  • --rm : 생성한 컨테이너가 실행이 끝나면 자동으로 파기
               ★ 명령행 도구가 담긴 컨테이너를 사용시 유용
  • --name : 컨테이너의 이름 설정
                    ★ 이름이 충돌하면 오류 발생 → 자주 생성하고 정지한다면 --rm 옵션을 같이 사용하는 것이 유용

[command]

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

5f0aaba90b06c65ed1e04d5f022ea864716966e8f3c932756c33700e4be8222d

% docker container run -i --rm /jq:1.5 '.version'

 


⌗ 도커 컨테이너 목록 보기

% docker container ls

CONTAINER ID        IMAGE                 COMMAND                  CREATED             STATUS              PORTS                     NAMES
848f6e416f58        example/echo:latest   "go run /echo/main.go"   3 hours ago         Up 3 hours          0.0.0.0:32768->8080/tcp   inspiring_kepler
a0226db4bfeb        example/echo:latest   "go run /echo/main.go"   3 hours ago         Up 3 hours          0.0.0.0:9000->8080/tcp    zealous_benz

 

현재 실행 중인 컨테이너 목록이 출력되로, 목록에 표시되는 칼럼 항목의 의미는 다음과 같다.

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

 

[option]

  • -q : 컨테이너 ID(축약형)만 추출
  • --filter "필터명=값" : 특정 조건을 만족하는 컨테이너 목록
                                     컨테이너 생성한 이미지를 기준으로 하려면 ancestor 필터를 사용
  • -a : 종료된 컨테이너 목록
           종료된 커네티너가 실행되던 시점의 표준 출력 내용을 확인하거나, 컨테이너를 재시작하려는 경우 사용

[command]

% docker container ls -q

848f6e416f58
a0226db4bfeb

 % docker container ls --filter "name=benz"
 
CONTAINER ID        IMAGE                 COMMAND                  CREATED             STATUS              PORTS                    NAMES
a0226db4bfeb        example/echo:latest   "go run /echo/main.go"   4 hours ago         Up 4 hours          0.0.0.0:9000->8080/tcp   zealous_benz

% docker container ls --filter "ancestor=example/echo"

CONTAINER ID        IMAGE                 COMMAND                  CREATED             STATUS              PORTS                     NAMES
848f6e416f58        example/echo:latest   "go run /echo/main.go"   3 hours ago         Up 3 hours          0.0.0.0:32768->8080/tcp   inspiring_kepler
a0226db4bfeb        example/echo:latest   "go run /echo/main.go"   4 hours ago         Up 4 hours          0.0.0.0:9000->8080/tcp    zealous_benz

% docker container ls -a 

CONTAINER ID        IMAGE                 COMMAND                  CREATED             STATUS                    PORTS                     NAMES
848f6e416f58        example/echo:latest   "go run /echo/main.go"   4 hours ago         Up 4 hours                0.0.0.0:32768->8080/tcp   inspiring_kepler
a0226db4bfeb        example/echo:latest   "go run /echo/main.go"   4 hours ago         Up 4 hours                0.0.0.0:9000->8080/tcp    zealous_benz
5f0aaba90b06        example/echo:latest   "go run /echo/main.go"   32 hours ago        Exited (2) 4 hours ago                              heuristic_maxwell
03af2722b102        example/echo:latest   "go run /echo/main.go"   33 hours ago        Exited (2) 32 hours ago                             hardcore_agnesi

 


⌗ 도커 컨테이너 정지

% docker container stop [컨테이너 ID 또는 컨테이너명]
% docker container stop stop zealous_benz

zealous_benz
Error response from daemon: No such container: stop

% docker container ls

CONTAINER ID        IMAGE                 COMMAND                  CREATED             STATUS              PORTS                     NAMES
848f6e416f58        example/echo:latest   "go run /echo/main.go"   4 hours ago         Up 4 hours          0.0.0.0:32768->8080/tcp   inspiring_kepler

 


⌗ 도커 컨테이너 재시작

파기하지 않은 정지 상태 컨테이너는 재시작 할 수 있다.

 

% docker container restart [컨테이너 ID 또는 컨테이너명]
% docker container restart zealous_benz

zealous_benz

% docker container ls     

CONTAINER ID        IMAGE                 COMMAND                  CREATED             STATUS              PORTS                     NAMES
848f6e416f58        example/echo:latest   "go run /echo/main.go"   4 hours ago         Up 4 hours          0.0.0.0:32768->8080/tcp   inspiring_kepler
a0226db4bfeb        example/echo:latest   "go run /echo/main.go"   4 hours ago         Up 3 seconds        0.0.0.0:9000->8080/tcp    zealous_benz

 


⌗ 도커 컨테이너 파기

정지시킨 컨테이너를 완전히 파기하려면 아래의 명령어를 사용한다.

 

% docker container rm [컨테이너ID 또는 컨테이너명]
% docker container ls -a 

CONTAINER ID        IMAGE                 COMMAND                  CREATED             STATUS                    PORTS                     NAMES
848f6e416f58        example/echo:latest   "go run /echo/main.go"   4 hours ago         Up 4 hours                0.0.0.0:32768->8080/tcp   inspiring_kepler
a0226db4bfeb        example/echo:latest   "go run /echo/main.go"   4 hours ago         Up 3 minutes              0.0.0.0:9000->8080/tcp    zealous_benz
5f0aaba90b06        example/echo:latest   "go run /echo/main.go"   33 hours ago        Exited (2) 4 hours ago                              heuristic_maxwell
03af2722b102        example/echo:latest   "go run /echo/main.go"   33 hours ago        Exited (2) 33 hours ago                             hardcore_agnesi

% docker container rm 03af2722b102

03af2722b102

% docker container ls -a 

CONTAINER ID        IMAGE                 COMMAND                  CREATED             STATUS                   PORTS                     NAMES
848f6e416f58        example/echo:latest   "go run /echo/main.go"   4 hours ago         Up 4 hours               0.0.0.0:32768->8080/tcp   inspiring_kepler
a0226db4bfeb        example/echo:latest   "go run /echo/main.go"   4 hours ago         Up 3 minutes             0.0.0.0:9000->8080/tcp    zealous_benz
5f0aaba90b06        example/echo:latest   "go run /echo/main.go"   33 hours ago        Exited (2) 4 hours ago                             heuristic_maxwell

 

[option]

  • -f : 실행중인 컨테이너를 강제 삭제

[command]

% docker container ls -a   
 
CONTAINER ID        IMAGE                 COMMAND                  CREATED             STATUS                   PORTS                     NAMES
848f6e416f58        example/echo:latest   "go run /echo/main.go"   4 hours ago         Up 4 hours               0.0.0.0:32768->8080/tcp   inspiring_kepler
a0226db4bfeb        example/echo:latest   "go run /echo/main.go"   4 hours ago         Up 3 minutes             0.0.0.0:9000->8080/tcp    zealous_benz
5f0aaba90b06        example/echo:latest   "go run /echo/main.go"   33 hours ago        Exited (2) 4 hours ago                             heuristic_maxwell

% docker container rm -f 848f6e416f58

848f6e416f58

% docker container ls -a  

CONTAINER ID        IMAGE                 COMMAND                  CREATED             STATUS                   PORTS                    NAMES
a0226db4bfeb        example/echo:latest   "go run /echo/main.go"   4 hours ago         Up 5 minutes             0.0.0.0:9000->8080/tcp   zealous_benz
5f0aaba90b06        example/echo:latest   "go run /echo/main.go"   33 hours ago        Exited (2) 4 hours ago                            heuristic_maxwell

 


⌗ 도커 컨테이너 표준 출력 연결

현재 실행중인 특정 도커 컨테이너의 표준 출력 내용을 확인할 수 있다.

실행 중인 컨테이너의 로그를 수집해 웹 브라우저나 명령행 도구로 열람하게 해주는 기능을 사용하지 않는 환경에서는 디버깅 용도로 유용하다. 로그를 종료하려면 [Ctrl + C]를 누르면 종료한다.

 

% docker container logs [옵션] [컨테이너 ID 또는 컨테이너명]

[option]

  • -f : 새로 출력되는 표준 출력 내용을 보여줌

[command]

% docker container logs -f a0226db4bfeb

2020/07/13 11:44:52 start server
2020/07/13 11:45:41 received request
2020/07/13 15:26:01 start server

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

이 명령어를 사용하면 컨테이너 내부 상태를 확인하거나, 디버깅 하는 용도로 사용한다.

★ 컨테이너 안에 든 파일을 수정한다는 것은 애플리케이션에 의도하지 않은 부작용을 초래하므로 절대 운영에서는 변경 금지 !

 

% docker container exec [옵션] [컨테이너 ID 또는 컨테이너명] [컨테이너에서 실행할 명령]

[option]

  • -i : 표준 입력 연결을 유지
  • -t : 유사 터미널을 할당
  • -it : 컨테이너 안에서 실행할 셸(sh 나 bash)을 실행하는 것처럼 조작

[command]

% docker container exec zealous_benz pwd

/go

% docker container exec -it zealous_benz sh 

# pwd
/go

 


⌗ 도커 컨테이너 파일 복사

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

대부분 디버깅 중 컨테이너 안에서 생서된 파일을 호스트로 옮겨 확인할 목적으로 사용한다.

또한 정지 상태의 컨테이너에 대해서도 실행할 수 있다.

 

% docker container cp [옵션] [컨테이너 ID 또는 컨테이너명:원본파일] [대상파일]
% docker container cp [옵션] [호스트 원본파일] [컨테이너 ID 또는 컨테이너명:대상파일]

 


 

[참고] chati.tistory.com/125

 

[Docker] 도커 이미지 사용을 위한 명령어

도커 이미지는 한마디로 정의해보면, 도커 컨테이너를 만들기 위한 템플릿이다. 이러한 도커 이미지를 사용하기 위한 기본 명령어를 살펴보자! 도커의 명령행 도구는 하위 명령 형태로 구성돼 �

chati.tistory.com

[참고] chati.tistory.com/123

 

[Docker] 도커 이미지 / 컨테이너 다루기

도커의 사용법은 크게 아래와 같이 나뉜다. 이미지를 대상으로 하는 것 컨테이너를 대상으로 하는 것 그러면 도커 이미지는 무엇일까? 도커 이미지는 도커 컨테이너를 만들기 위한 템플릿 이다.

chati.tistory.com

 

반응형

❥ CHATI Github