3 minute read

도커 컨테이너

  • 도커 이미지의 실행 가능한 인스턴스
  • 개별 애플리케이션의 실행에 필요한 실행환경을 독립적으로 운용

컨테이너 생성

  • 다운받은 이미지가 없는 경우 자동으로 다운받아서 생성
  • 이미지 다운로드(pull) + 컨테이너 생성(create) + 실행(start) + 접속(attach) 까지 한번에 수행
    • 접속(attach) : -it 명령어 사용
  • run 대신 create 키워드 사용 시 생성까지만 되고 실행되지는 않음
docker run [옵션] [저장소이름/]<이미지이름>[:버전]

docker run -d --name myweb -p 80:8080 tomcat:8.5.72-jdk8
옵션 설명
-d 백그라운드에서 컨테이너 실행
-i -t 컨테이너 내부로 진입하여 컨테이너와 상호 입출력
–name <이름> 컨테이너에 이름 지정(지정하지 않을 경우 16진수 임의 값으로 이름 생성)
-p <호스트Port>:<컨테이너Port> 외부에서 컨테이너 내부로 접근할 수 있게 호스트 PC의 포트와 컨테이너 내부 포트를 연결
-e <환경변수>=<값> 환경변수 설정
–link 다른 컨테이너에 링크 추가

Alt text

컨테이너를 생성했다. 다운 받은 것이 없기 때문에 자동으로 다운 받아서 생성이된다.
그 후에 이미지 검색을 하면 확인 가능하다.

docker ps -a

-

Alt text

-d(백그라운드에서 실행) 옵션 없이 생성하면 실행되는 로그가 출력된다.
이건 foreground에서 실행되는 것이라고 한다.
그 후에는 아무것도 입력할 수 없게 된다.

-

Alt text

실습 때는 power shell 창을 하나 더 열어서 foreground에서 실행했던 것을 stop 해주었다.
-> 그랬더니 원래 power shell 창에 입력 가능해졌다.

근데 -it 옵션을 주고 실행했을 때는 역시 같은 foreground 방식으로 실행되고
입력이 불가했다가, [Ctrl + c]를 입력하면 다시 입력이 가능해졌다.

-

Alt text

create를 사용하여 생성만 했을 경우.
상태에 created라고 출력되는 것이 확인 가능하다.
이때, 실행을 원할 경우 start 명령어를 사용하면 된다.

docker start [ID]

컨테이너 확인

docker ps [옵션]

// docker ps : 실행 중인 컨테이너 조회
//docker ps -a : 종료된 컨테이너까지 조회

// 컨테이너의 ID만 조회
docker ps -a -q
항목 설명  
CONTAINER ID 컨테이너에 자동 할당되는 고유 ID 중 일부 출력  
IMAGE 컨테이너 생성 시 사용된 이미지  
COMMAND 컨테이너 시작 시 자동으로 실행될 명령어, 대부분 이미지에 미리 내장되어 있음, 컨테이너 생성 시 변경 가능
CREATED 컨테이너 생성 후 흐른 시간  
STATUS 컨테이너 상태  
PORTS 컨테이너에 개방된 포트, 호스트와 연결된 포트를 출력  
NAMES 컨테이너 생성 시 지정한 이름(–name 옵션)  

-

Alt text

컨테이너 생성 후 확인하기.

-

Alt text

컨테이너를 종료하고 -a 옵션 없이 조회했을 경우 아무것도 안 나오는 것을 확인할 수 있다.

  • IMAGE : 컨테이너를 생성할 때 사용한 이미지
  • COMMAND : 컨테이너를 실행할 명령어
    • docker image inspect [ID] : Cmd 부분
  • STATUS : 현재 컨테이너 상태
    • UP : 실행 중인 생태
    • PAUSE : 정지
    • EXITED : 종료
      • command가 종료되면 컨테이너도 종료

컨테이너 상세 내용 조회

docker inspect <컨테이너 이름 or ID>

docker inspect myweb

컨테이너 실행/종료

docker start/stop/restart <컨테이너 이름 or ID>

docker start myweb
docker stop myweb
docker restart myweb

Alt text

위에서 종료했던 컨테이너를 start 통해서 다시 실행했다.
종료했기 때문에 start를 사용했고 정지했을 경우 restart를 사용하면 된다.


컨테이너로 파일 복사

  • 내 pc에 있는 파일을 컨테이너로 복사
  • 경로가 컨테이너 내부일 경우 <컨테이너명:경로> 로 지정
docker cp [옵션] <원본파일경로> <복사할경로>

docker cp d:\test.txt myweb:/root

Alt text

D드라이브에 test.txt 파일을 만들었다.

-

Alt text

/bin/bash shell 종료를 원할 경우 exit 명령어 사용.


컨테이너 명령어 실행

  • shell을 실행하면 컨테이너에 접근 가능
  • shell 접근 후 다양한 명령어 사용 가능
    • ex) 종료 시 exit
docker exec [옵션] <컨테이너이름 or ID> <명령어>

docker exec -it myweb /bin/bash

컨테이너 삭제

  • 이미지를 삭제 할 때는 rmi. 이거랑 헷갈리기 없기.
  • 구동 중인 컨테이너는 삭제 불가
    • 컨테이너를 정지시킨 후 삭제
    • dockr rm -f [ID] : 실행 중이어도 삭제 가능.
docker rm [옵션] <컨테이너이름 or ID> [컨테이너 이름 or ID …]

docker rm tomcat:8.5
docker rm -f tomcat:8.5

Alt text

docker ps -a를 통해 모든 컨테이너 조회. 잘 삭제 되었다!


공통환경으로 컨테이너 생성

Alt text

test.txt 파일이 공통으로 필요한 파일일 때 사용한다.
컨테이너를 만들고 컨테이너마다 test.txt 파일을 복사할 필요가 없다.
느낌은 오는데 말로 정리하기가 어렵다.
컨테이너는 이미지로 만드는 건데.. 컨테이너로 이미지를 생성한다니..

docker commit [컨테이너명] [이미지명:태그]   

docker commit myweb myweb_image:1.0

test.txt 파일이 있는 컨테이너로 이미지 생성

-

docker run -d --name myweb2 -p 81:8080 myweb_image:1.0

생성한 이미지로 컨테이너 생성

-

// /root에 test.txt 파일이 존재하는지 확인
docker exec myweb2 ls/root

도커 허브에 업로드 하기

docker push [dockerHub ID]/[이미지명:태그]

docker push abcd1234/apine-linux:1.0

Alt text

Docker Hub


번외

Alt text

리눅스를 생성하고 리눅스 명령어 사용해보기.
exit 입력시 종료 후 원래대로 돌아온다.

docker run -it --name alpine-linux alpine:latest

오늘 수업 때는 명령어도 진짜 많이 사용해봤다.
이것저것 한꺼번에 섞어서 하다보니 겁나 헷갈린다. 블로그 쓰면서 정리하는데도 헷갈리네.
선행학습 된 게 없기 때문에(shell이나.. 리눅스 등) 대략적인 것만 알아두라고 하셨다.. 정말 그래도 되나요.


Categories:

Updated: