ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Docker] Container 관련 명령어 정리 with(실습 - container만들기, 종료, 삭제, 실제 주소와 마운트하기 등)
    CI-CD/Docker 2022. 5. 31. 10:40
    반응형

    이번글은 Docker의 구성요소 image, container, docker hub 중 Container 관련 명령어를 알아 보려고 합니다. 구성요소로 나눠서 명령어를 알아보는 이유는 좀 더 이해도를 높이기 위해서입니다.

     

    먼저 container관련 명령어를 알기 전에 docker image에 대한 개념을 알아야 합니다. image는 container를 실행 시키기 위한 설계도 라고 보면됩니다. 이 설계도가 있어야 container를 생성 및 실행을 할 수 있습니다. 꼭 docker hub에서 자신이 사용할 것이나 test해볼 image를 골라서 확인 해본 뒤에 pull 받아서 아래 내용을 진행해 봅시다. 여기서는 간단한 과정을 보기 위해서 tomcat server를 골라서 실행되는지 접속이 잘 되는지 확인 해보고 끝낼 예정입니다. 이번글에서는 container 관련 명령어 및 내용을 실습 및 적용해보자. 아래는 관련 명령어 입니다.

    # image 내려받기 
    # docker pull {imageName}:{tag} - tag는 생략하면 latest로 자동 적용
    docker pull tomcat:latest
    
    # image를 container로 실행하기 기본명령어 
    # docker run {OPTION} {imageName}:{tag} {command} 
    docker run -it tomcat:latest /bin/bash
    
    # container에 이름을 할당하여 실행하기
    # docker run {OPTION} --name {containerName} {imageName}:{tag} {command} 
    docker run -it --name tomcatserver tomcat:latest /bin/bash
    
    # 백그라운드로 실행하기 
    # docker run {OPTION} -d --name {containerName} {imageName}:{tag}
    # 백그라운드에서 실행 하니 command를 정하지 않아도 된다.
    docker run -it -d --name tomcatserver tomcat:latest 
    
    # 포트포워딩
    # docker run {OPTION} --name {containerName} -p {외부접속포트}:{내부연동포트} {imageName}:{tag} {command}
    # 아래와 같이 설정하면 9999포트로 들어온것을 8080포트와 매칭해준다. 
    docker run -it --name tomcatserver -p 9999:8080 tomcat:latest /bin/bash
    
    # 환경 설정 추가하여 실행하기
    # docker run {OPTION} --name {containerName} {imageName}:{tag} -e {ENV변수명}={value}
    docker run -d -p 9999:8080 --name mysql-container -e TOMCAT_ID=tomcat
    
    # 실제 내가 파일을 관리하고 싶을 때 마운트 시켜 실행 시키기
    # 마운트를 안시키면 내부적으로 생성된 파일은 모두 사라지기 때문에 마운트 시키는 법은 꼭 알아두자.
    docker run -d --name {containerName} -v {local 마운트 위치}:{container내부 마운트 위치} {imageName}:{tag}
    docker run -d --name mysql-container -v c:/users/path:/home/tomcat
    
    # container 종료와 함께 사라지게 하기 
    # docker run -it -rm {containerName}
    docker run -it -rm tomcatserver
    
    
    # ---------------------------------------------------------------------
    # continer 목록 확인 
    # 실행 되어있는 것 
    docker ps 
    
    # 종료 되어있는것 모두 
    docker ps -a
    
    
    # ---------------------------------------------------------------------
    # run해서 container가 만들어진 상황이라면 아래의 container 동작 명령어 사용가능 
    # container 시작
    docker start {containerName}
    
    # container 종료 
    docker stop {containerName}
    
    # container 재시작
    docker restart {containerName}
    
    # container 삭제 - container 종료 후에 실행 
    docker rm {containerName}
    
    # container 삭제 - 강제 삭제
    docker rm -f {containerName}
    
    # 실행 된 docker container 접속하기
    # container 실행시 사용한다. 
    docker attach {containerName}
    
    # 외부에서 컨테이너 진입할 때 사용한다.
    docker exec -it [container_name] /bin/bash
    
    
    # ----------------------------------------------------------------------
    # command로 실행 했을 때 Container terminal에서 빠져나오기 
    exit
    ctrl + c

     

     

    실습

    • docker hub에서 tomcat image pull 받기
    • docker 실행해보기 (기본 컨테이너 생성, 컨테이너 백그라운드로 실행, 포트포워딩 등등)
    • 생성된 container 확인하기
    • 생성된 container 조작하기(종료, 삭제, container접속 및 접속 해제)

     

     

    docker hub에서 tomcat image pull 받기

     

    Tomcat - Official Image | Docker Hub

    Quick reference Supported tags and respective Dockerfile links Note: the description for this image is longer than the Hub length limit of 25000, so the "Supported tags" list has been trimmed to compensate. See docker/hub-beta-feedback#238 for more informa

    hub.docker.com

    명령어 - docker pull tomcat 으로 다운로드

    명령어를 치면 프로세스 바가 나오게 되고 프로세스가 다 완료가 되면 설치가 완료가 된다. docker desktop에도 추가 된 것을 볼 수 있고, docker images를 활용하여 확인도 가능하다. 그리고 docker pull tomcat:{tag}형식으로 해야하는데 tag를 생략하면 latest로 자동 적용 된다 

     

    docker 실행해보기 (기본 컨테이너 생성, 컨테이너 백그라운드로 실행, 포트포워딩 등등)

    -d : 백그라운드 실행 옵션

    —name : container이름 설정

    -p : 포트 포워딩

    마지막에는 container로 만들고 싶은 image명

    docker run -it -d —name {containerName} -p {외부접속포트}:{내부연동포트} {imageName}

    docker run -it -d —name con-tomcat -p 9999:8080 tomcat

    -p옵션으로 포트를 9999로 정해 주었기 때문에 localhost:9999로 접속하면 응답이 오는 것을 볼 수 있다. tomcat특성상 webapp 폴더에 webapp 파일이 없으면 매칭이 되지 않기 때문에 http 404오류를 반환해 주는 것이다. tomcat은 정상 작동 하고 있는 것을 볼 수 있다. 일단 tomcat에 배우는 것이 아니므로 넘어가자 예로 tomcat이 올라가지 않은 상태이면 오른쪽 그림이 페이지에 뜰것이다.

     

     

    생성된 container 확인하기

    docker ps -a 명령어를 사용하여 어떤 container가 있는지 확인 가능

    생성된 container 조작하기(종료, 삭제, container접속 및 접속 해제)

    • container 종료

    docker stop {containerName} 명령어로 종료하기 desktop에 종료 된것을 볼 수 있다.

    • container 시작

    docker start {containerName} 명령어로 container 시작하기 desktop에서도 running인것을 확인 할 수 있다.

    • container 재시작

    docker restart {containerName} 명령어로 container desktop에서도 번쩍이며 다시 실행 되는 것을 볼 수 있다.

    • container 삭제

    docker rm -f {containerName} 명령어로 container삭제 desktop에서사라진 것을 볼 수 있다.

    -f 옵션을 사용하지 않고 안정적으로 삭제 하려면 docker stop {containerName}, docker rm {containerName}을 하면 된다.

    • container 접속 및 접속 해제

    docker exec -it {containerName} /bin/bash 로 container내부에 접속 linux여서 /bin/bash로 설정함 os에 맞게 바꾸면 됨

    Container 마운트 조작해보기

    마운트는 pull받은 tomcat으로 하면 조작하기 어려운 점이 있어 하나의 실습 도커 파일을 준비해보겠습니다.

    FROM node:12.18.4
    RUN npm install -g http-server
    WORKDIR /home/node/app
    CMD ["http-server", "-p", "20000"]
    

    파일 내용은 node 베이스로 구성을 했으며, http-sever로 노드 서버를 구성해 보도록 하겠습니다. image만들 때 RUN이 작동을 하며 container를 만들 때 working dir 설정 및 CMD의 명령어가 바로 실행이 된다. dockerfile작성법은 나중에 잘 익히면 될것같다 일단 이것을 복붙하여 사용하는 걸로

    파일명은 dockerfile로 생성을 하고 terminal에서 필자에서 composetest/example/frontend/dockerfile에 위에 소스를 넣었고, dockerfile을 빌드를 하면 image가 만들어 진다.

    # 해당 파일로 이동 
    cd composetest/example/frontend/
    # docker image 생성
    docker build -t front:latest . 
    

    docker image에 대해서 더 자세히 알고 싶으면, 여기를 클릭 

     

    docker container 만들기

    # front라는 이미지를 
    docker run -it -p 9999:8080 -v /Users/planit/airflow/targetmount:/home/ --name con-front front

    서버가 돌아가는 것을 볼 수 있으며 오른쪽 desktop에서도 돌아가고 있는 것을 확인 할 수 있다. 또한 왼쪽 target 폴더 안에 폴더들 이 생긴 것을 볼 수 가 있다. 위에서 dockerfile workdir을 /home/node/app으로 설정을 하였다. 그런데 마운트는 /Users/planit/airflow/targetmount:/home/ 으로 하였는데 이렇게 마운트를 하게 되면 오른쪽과 같이 node/app이라는 기본 폴더가 생기게 되는 것을 볼 수 가있다. 이렇게 변경된것을 보니 마운트가 잘 된 것 같다.

    마운트를 /Users/planit/airflow/targetmount:/home/node/app으로 하면 폴더가 생성이 되지 않는 모습을 볼 수 있다.

    touch test.txt 명령어를 이용하여 test.txt 생성해 보았는데, 왼쪽에 targetmount/node/appdp 파일이 생성 된것을 볼수 있다. app 폴더 안에 파일을 생성해 봐도 생성이 된다.

    여태껏 마운트 하는 법에 대해 알아 보았는데, mount에서는 dockerfile에서 workdir이 과 env와 cmd 등을 고려해서 mount해야한다. 앞서 tomcat은 workdir /usr/local/tomcat으로 되어있는데 이것을 그냥 마운트 하는 순간 오류가 나게 되어있다. 왜그러냐면 container실행시 실행되는 명령어 중에 catalina를 실행해주는 곳이 있는데 이 명령어가 /usr/bin/의 주소로 되어있어 mount하게 되는 주소안에 usr/bin이라는 속성이 없으면 작업이 되지 않기 때문이다. 암튼 workdir을 잘 고려해서 마운트를 해야한다. tomcat image를 자세히 보게 되면 아래와 같은 Layer를 구성하고 있다. dockerfile에 쓰는 내용과 동일하다. 암튼 아래 내용을 정상 작동 하게 할려면 곡 내부주소를 ‘/’만 작성하여 usr/local/tomcat 폴더를 만들어 주어야 한다. docker를 잘 사용하려면 layers를 보는 법도 알아 두어야 한다.

     

    docker run -it -p 9999:8080 --name con-tomcat -v /users/targetdir:/ tomcat

    tomcat image layer 주소

     

    Docker Hub

     

    hub.docker.com

    반응형

    댓글

Designed by Tistory.