관리 메뉴

제뉴어리의 모든것

[Udemy] Docker - Java 개발자를 위한 완벽 실습 과정 - 4,5장 본문

Docker

[Udemy] Docker - Java 개발자를 위한 완벽 실습 과정 - 4,5장

제뉴어리맨 2023. 3. 1. 01:38

 

Docker 주요 명령어

 

  • 컨테이너 실행
    docker container run [이미지명]
    만약 내 PC에 해당 이미지가 존재하지 않는다면 Docker 내부에 정의되어 있는 이미지 저장소에서 해당 이미지를 찾아서 내려 받고 해당 이미지의 컨테이너 인스턴스를 생성하여 컨테이너를 실행시킨다.
    docker container run -p [공용 Port]:[컨테이너 내부에서 사용되는 Port] [이미지명] : 내 PC의 공용 Port와 컨테이너 내부에서 사용되는 Port를 매핑 시켜 컨테이너 구동시킴.
    즉, docker container run -p 80:8080 ubuntu 라면 내 피시의 80포트로 접속하는 요청을 컨테이너 내부의 8080포트를 사용하는 프로그램에게 보내준다고 생각하면 됨

    docker container run -d -p [이미지명]
    : 컨테이너가 작동되면서 발생되는 로그를 콘솔창에 띄우지 않고 컨테이너를 백그라운드에서 데몬처럼 작동시킨다. (detached(분리됨)란 의미의 옵션)
  • 이미지 내려받기
    docker image pull [이미지명]

  • 컨테이너 리스트 출력
    docker container ls : 현재 구동중인 컨테이너 목록 출력 (docker ps와 동일)
    docker container ls -a : 이전에 중지된 컨테이너까지 모두 출력
  • 컨테이너 중지
    docker container stop [컨테이너ID] 
    컨테이너 ID 여러 글자 중 다른 ID들과 식별 가능한 앞 몇글자만 적어도 된다.
    심지어 식별이 가능하다면 한글자만 적어도 된다.
  • 중지 된 컨테이너 재실행
    docker container start [컨테이너ID]
    docker container ls -a 또는 docker ps -a로 조회되는 중지 된 컨테이너를 재 구동 시켜준다.

  • 컨테이너를 대화형 터미널로 연결하여 실행시킴
    docker container run -it [이미지명] 
    docker container run -it ubuntu 라고 한다면 ubuntu가 설치된 컨테이너가 실행되면서 ubuntu 터미널에 연결되어 컨테이너가 종료되지 않는다. 하지만 -it 옵션이 없으면 컨테이너를 실행시켰다가 터미널 연결이 되어 있지 않기 때문에 컨테이너는 바로 종료된다.
  • 중지 된 컨테이너 완전히 삭제
    docker container rm [컨테이너ID]
  • 중지 된 모든 컨테이너 삭제
    docker container prune

  • 백그라운드에서 작동중인 컨테이너의 로그를 확인
    docker container logs [컨테이너ID]

  • 실행중인 컨테이너에 명령어 날리기
    docker container exec 
    EX : 
    docker container exec -it [컨테이너ID] bash : 컨테이너에 bash 명령어를 실행해라. (터미널을 열어라)
    해당 명령어로 실행중인 컨테이너의 로그를 확인한다던가 하는 행위가 가능하다.

 

중지된 컨테이너에 대해

docker container ls -a 또는

docker ps -a로 검색되는 중지 된 도커 컨테이너들은 메모리의 일부분을 사용하게 된다.

그러므로 앞으로 사용하지 않을 중지 된 도커 컨테이너들은 삭제해두는 것이 좋다.

 

 

컨테이너간 포트 범위를 공유

컨테이들은 전체 포트 범위를 공유하여 사용한다.
예를 들어 

docker container run -p 8080:8080 A

라는 명령어로 구동 된 컨테이너는 HOST PC에 8080으로 들어오는 요청들을 

컨테이너의 8080포트를 매핑받게 된다.

그런데 이 상태에서

docker container run -p 80:8080 B

라는 명령어를 입력하면

에러가 발생하게 된다.

앞서서는 공용포트 8080 포트를 매핑해주는것이고

이번에는 80포트를 매핑해주는것인데 왜 에러가 발생하는 것일까 싶지만,

docker container는 리눅스 커널을 공유하여 작동되기 때문에 같은 포트 범위를 갖게 된다.

그래서 앞서서 이미 8080 포트를 매핑하여 사용하고 있기 때문에 80포트를 8080포트로 매핑할 수 없는것이다.

 

실습 과제

  • 과제 주제
    tomcat 이미지를 컨테이너로 구동시켜서 HOST PC 웹브라우저에서 localhost 를 입력하여 tomcat 기본 페이지를 출력시켜라 

  • 해결 방법
    1. docker container run -d -p 80:8080 tomcat -> 톰캣 이미지를 다운받아 컨테이너로 구동시키는데 HOST PC의 80포트를 컨테이너의 8080포트로 매핑시킴. 그리고 해당 컨테이너를 터미널상에서 백그라운드로 실행시킴.

    2.  winpty docker container exec -it 0af1b bash : 실행중인 컨테이너(컨테이너 ID : 0af1b) 에 bash라는 명령어를 실행시킴. 즉 컨테이너의 터미널을 열겠다는 의미임. 그리고 맨앞에 winpty 명령어의 경우 윈도우즈 환경에서만 입력이 필요한 명령어.

    3. cd /usr/local/tomcat -> :/usr/local/tomcat 경로로 이동 (tomcat의 ROOT 폴더가 /usr/local

    4. cp -R webapps.dist/* webapps -> webapps.dist 폴더 안에 있는 모든 내용물들을 webapps로 이동시킴

    5. HOST PC에서 localhost 로 입력하면 톰캣 기본 페이지가 잘 출력 됨.

    참조 : https://engineering-skcc.github.io/cloud/%EC%B4%88%EB%B3%B4%EC%9E%90%EB%A5%BC-%EC%9C%84%ED%95%9C-Docker-%EA%B8%B0%EB%B3%B8-(3)/