목차

    문제점

    노트북을 하나 사면 간단한 프로젝트로 라도 개발 환경 셋팅을 하루 종일 해야한다. 만약 개발자가 서버를 돌리기 위한 환경을 구축한다면 훨씬 더 많은 리소스가 들 것이다. (언어, 웹서버, 데이터베이스, 자동배포툴 등등..) 서로 잘 동작할 수 있도록 버전관리도 잘 해줘야한다. 서버도 스케일업 할 수도있으며 해당 서버들도 모두 환경 셋팅을 해줘야한다. 도커는 이런 문제를 깔끔하게 해준다.

    해결방법

    먼저 각 요쇼들이 설치된 모습을 '이미지'란 형태로 박제해서 저장한다. '이미지'는 각 제품 마다 공식적으로 제공되는 이미지도 있고 개인이 설정할 수 있다. git에 저장하는 것 처럼 '이미지'를 도커허브에 업로드돼서 공유되고 다운받아질 수 있다. (어느 컴퓨터에서 동작할 수 있도록 녹화하는 느낌) 도커허브에서 언제든지 다운로드 가능하며 도커 컨테이너라고 불리는 독립된 가상 공간을 만들어내서 복원한다.

     

    VirtualBox 같은 가상컴퓨터 처럼 돌릴 수 있는데 도커는 가상 컴퓨팅과는 또 다른 구조이다. 가상컴퓨팅은 물리적 자원을 서로 분할 해서 쓰기 때문에 성능에 한계가 생기게 된다. 도커는 실행 환경만 독립적으로 돌리는 거라서 컴퓨터에 직접 설치 한 것이랑 별 차이 없는 성능을 낼 수 있고 가상 컴퓨팅보다 훨씬 가볍고 빠르게 각각을 설치, 사용이 가능하다. 

    더보기

    이미지 예시

    도커 컨테이너 동작 방식

    가상 컴퓨팅

    가상 컴퓨팅 예시

    도커


    실제 구현하기

    상황

    개발자는 간단한 웹사이트를 Front+Back+DB를 사용하여 개발하였다. front는 NodeJs, back은 Pthyon, DB는 MySQL이다.

    문제는 개발자는 개발용컴퓨터에 위의 기술들을 셋팅하였고, 배포를 위해 서버 컴퓨터도 똑같이 위의 기술들을 셋팅 해줘야한다.

     

     

     

     

     

     

     

    가상환경의 문제점(VitvualBox 같은...)

    가상환경을 셋팅해서 여러사람의 개발환경을 묶는다면 집속에 집을 짓는 것과 같다. 따라서 한정된 컴퓨터 자원을 나워써야 한다. 따라서 컴퓨터 자원을 칼 같이 제한 된다.

     

     

     

     

     

    도커 컨테이너 활용

    도커의 컨테이너를 활용함으로써 각각의 개발자들은 컨테이너 방식으로 묶여있고 분리도 쉽게 가능하고 무엇보다 컴퓨터 자원을 효율적으로 공유해서 사용한다.

     

     

     

     

     

     

    도커 활용 개발하기

    예제 코드 다운로드 하기

    git clone https://gitlab.com/yalco/practice-docker.git

    위의 코드는 간단한 웹 프로그램이다. 실행 하려면 node와 http-server가 로컬 컴퓨터에 깔려있어야한다. 하지만, 내 컴퓨터에는 아직 셋팅이 안되었다고 가정하자.

    docker 사용하기

    docker run -it node / sudo docer run -it node

    위의 명령어를 사용한다. 

    위의 명령어를 사용하면 docker에서 뭔가를 다운로드하며 콘솔창처럼 입력이 가능한 모드로 바뀐다. run 명령어는 허브상의 이미지를 내 컴퓨터에서 해동해서 컨테이너로 만든다. 이미지는 컨테이너를 무한대로 재생산 할 수 있다. 즉 이미지는 무한생산이 가능한 컨테이너 조립키드라고 생각해도 된다.

    -it 명령어 : 이 컨테이너를 연다음 그 환경안에서 CLI를 사용한다는 것이다. 컨테이너를 만든다음 컨테이너에 난 창문으로 그 안에 있는 근무자랑 대화를 하겠다는 뜻 그래서 자바 스크립트 콘솔을 사용할 수 있다. 

    docker images

    위의 명령어를 사용하면 내 로컬에 도커 이미지들을 확인 가능하다.

     

     

    docker ps //현재 사용하고 있는 컨테이너 표시
    docker ps -a //사용하고 있지는 않은 모든 컨테이너 표시

    위의 명령어를 사용하면 docker container 내부의 다양한 정보를 보여준다. 단 지금 사용하고 있는 환경만 보여준다.

    docker exec -it agitated_poincare bash

    위의 NAMES에 하나를 골라 위의 명령어를 실행하면 내부로 접근가능하다. 가상의 리눅스 환경으로 들어간 것이다. 

    ls 로 둘러보기

    ls 명령어로 둘러 보기도 가능하다. 종료는 ctrl + c

    # 이미지 생성 명령어 (현 파일과 같은 디렉토리에서)
    # docker build -t {이미지명} .
    docker build -t frontend-img .

    도커 이미지 다운로드 중...

    docker 이미지 생성 완료

    # 컨테이너 생성 & 실행 명령어
    # docker run --name {컨테이너명} -v $(pwd):/home/node/app -p 8080:8080 {이미지명}
    docker run --name frontend-con -v ${pwd}:/home/node/app -p 8080:8080 frontend-img
    • docker --name frontend-con : 이전에는 도커에서 임의 컨테이너명을 지어줬지만, 이번에는 생성될 컨테이너의 이름을 내가 정한다.
    • -v 옵션 : volume의 약자로 도커에서 볼륨이란, 컨테이너와 특정 폴더를 공유하는 것을 말한다. 내가 작성한 코드 (pwd:현재위치)가 home/node/app이라는 사전같은 곳에 부록으로 들어가는 것으로 언제든지 부록에서 꺼내서 컨테이너에서 사용할 수 있게 한다. 따라서 위에 CMD 명령어로 사용가능한 것이다. 
    • -p 옵션 : 포트 옵션이다. 집의 내선번호와 컨테이너를 연결하는 것이다. 집에 8080과 컨테이너 8080을 연결한다. 만약 한개 더 컨테이너를 만든다면 -p8080:8081로 연결한다 (8081:컨티이너 내선번호) 동시에 컨테이너 8080에 접속할 순 없다.

    Data Base image 말기

    #이미지 만들기
    docker build -t database-img .
    #이미지 돌리기
    docker run --name database-con -p 3306:3306 database-img

    기존 front 방식과 동일하며 db인 mysql은 3306포트가 기본이고 집에서도 3306으로 연결한다.

    위와 같이 3306 포트가 열린 것을 확인할 수 있다.

    위와 같이 3306 포트가 열린 것을 확인할 수 있다. 

    만약 위 처럼 한다면 해당 터미널을 사용하지 못한다. 따라서 디비는 다음과 같이 사용한다.

    docker run --name database-con -d 3306:3306 database-img

    -p가 아닌 -d로 사용하면 해당 터미널 사용가능.

     

     

    한방에 도커를 설정 하는 방법

    docker-compose.yml 활용

    위는 docker-compose.yml 이며, db, front, backend 모두가 작성되어있다.

    #실행(경로는 맨위)
    docker-compose up

    시간이 꽤 걸린다...

    완료...!

    docker file

    docker file은 나만의 설계도 이다.

    docker file은 front, back, db에 각각 하나 씩 무조건 들어가 있다.

    • FROM 명령어 : 해당 버전을 명시한다.

    • RUN 명령어 : 이미지 생성 과정에서 실행할 명령어 

    • CMD 명령어는 이미지로 부터 컨테이너가 만들어져 가동될 때 기본적으로 바로 실행하는 명령어 (시작프로그램)
    •  

    도커 허브 탐방하기

    도커 허브 사이트에 방문하여 node를 검색하면 위와 같이 공식 이미지가 올라와 있다. 도커의 이미지라는 것은 리눅스 컴퓨터의 특정 상태를 캡처해서 박제(클라우드에 올려놓은 것) 해놓은 것을 의미한다. (즉, 위의 집에 입주 시켜놓은 상태) 

     

    도커 명령어 모음

    https://www.yalco.kr/36_docker/

     

    가장 쉽게 배우는 도커

    어려운 프로그래밍 개념들을 쉽게 설명해주는 유튜브 채널 '얄팍한 코딩사전'. 영상에서 다 알려주지 못한 정보들이나 자주 묻는 질문들의 답변들, 예제 코드들을 얄코에서 확인하세요!

    www.yalco.kr

     

    + Recent posts