ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 윈도우에서 Docker 시작하기
    웹프로그래밍/Docker , CI&CD 2019. 1. 5. 14:30







    프롤로그

    그 동안 AWS EC2 인스턴스에서 구동 중인 프로젝트에 수정사항이 생길때마다 일일이 수동으로 배포해야만 했다.

    그런데 웹 관련 커뮤니티에서 자동빌드(Contiuous Integration)도구인 젠킨스를 사용하면 github에 올려놓은 프로젝트에 commit을 할때마다 자동으로 빌드하고 톰캣 서버에 배포(ContinuousDeployment)가 가능하다는 것을 알게되었다.

    하지만 젠킨스와 톰캣은 각자 다른 서버에서 구동되어야하고 AWS EC2 인스턴스는 프리티어로 1개만 사용 중이기 때문에 추가로 서버가 필요한 상황이었다.

    VMWARE를 써본 경험이 있어서 가상환경에 대한 이해가 조금은 있는 상태였는데, 마침 Docker에 대해 알게 되었고 EC2 인스턴스에 설치 후 내가 원했던 자동 빌드 및 배포 환경을 구성할 수 있다는 것 또한 알게 되었고 우선 젠킨스, 톰캣이 구동될 Docker에 대한 공부를 먼저 시작했다. 



    참고:

    CI/CD





    Docker 설치하기

    윈도우용 설치 버전으로 Docker를 처음으로 접했는데 운영체제가 윈도우10 임에도 호환성 문제로 제대로 사용할 수 없었다.

    아직 docker를 잘 모르는 상황에서  학습 중간 발생하는 호환성 문제가 학습을 더디게 했다.

    윈도우10 이전 버전이나 Mac 이전 버전에서도 사용할 수 있는 툴박스를 추천한다.   

    포함되어 있는 Kitematic을 이용해서 도커가 추천하는 이미지를 GUI 환경에서 쉽게 다운받고 관리할 수 있다. 


    Docker 사용 후기를 찾아보면 리눅스 환경에서 실행하길 추천한다. 

    하지만 나는 우선 다루기 편한 윈도우 환경에서 공부한 뒤 AWS의 ubuntu 인스턴스에 설치해서 본격적으로 사용해볼 계획이다. 






    도커 vs 가상머신

    둘다 가상화 기술을 이용해서 가상 환경을 구성하고 그 안에서 프로그램을 돌리는 것처럼 보인다.

    vmware 같은 가상머신은 원래의 호스트 OS 위에서 여러 개의 게스트 OS를 설치 후 돌리기 때문에 훨씬 무겁고 

    많은 리소스(cpu, 메모리 등)를 필요로 한다.

    반면에 도커는 한 개의 게스트 OS 안에 있는 Docker Engine 위에서 다수의 컨테이너를 돌리는 개념이다. (사진 왼쪽)

    그래서 더 가볍고 적은 리소스를 필요로 하며 동시에 여러 개의 컨테이너를 운영할 수 있다. 




    사진출처: https://aws.amazon.com/ko/docker/





    Docker 시작하기

    윈도우에서 도커 설치하고 젠킨스를 컨테이너에 넣어 실행까지 했다. 이제 무엇을 하며 Docker를 공부하지? 

    도커를 사용하면 어플리케이션 개발, 배포, 운영을 한 개의 장치 안에서 도커 컨테이너를 활용해서 손쉽게 할 수 있다.

    이런 분산 환경 구성을 현재 프로젝트를 운영 중 AWS EC2 인스턴스에서 해볼 계획이다. 

    여기에 도커를 설치하고 젠킨스를 이용해서 자동배포 환경을 만드는게 목표이다. 


    고작 몇 번의 경험이지만 지금까지는 새로운 버전의 프로젝트를 war 파일로 만들고 filezilla를 이용해서 

    aws EC2 인스턴스에 업로드 한 다음에 putty로 ssh 접속을 하여 프로젝트를 배포하였다. 

    벌써부터 자동배포 환경에서는 git 커밋 한번이면 모든 과정이 자동이라는데 벌써부터 기대된다. 

    추후 진행 과정을 정리해서 포스팅할 계획이다. 

     


    image VS dockerfile

    image는 완성품, dockerfile은 설계도

    도커는 dockerfile을 기준으로 image를 만든다.

    dockerfile은 필요한 명령어가 순서대로 담겨있는 텍스트 파일이다.

    image는 컨테이너에 담아서 사용한다.



    컨테이너

    dockerfile로 정의된 image를 이용해 컨테이너를 만들 수 있다. 컨테이너는 최대한 '일시적'이여야 한다. 

    언제든지 작동을 멈추고 제거하거나 다시 만들거나 대체 될 수 있도록 설정되어야 한다.



    컨테이너 사용법 

    아래 명령어를 도커 CLI에서 입력하면 컨네이너에 담긴 이미지(ex.톰캣, 젠킨스)를 조작하는 bash(유닉스셀)를 실행한다.


    docker exec -it <IMAGE NAME> bash

    docker container exec -u 0 -it <IMAGE NAME> bash

    IMAGE 이름은 아래 명령어로 컨테이너 목록을 띄워서 확인한다.


    docker container ls

    컨테이너 세부정보 확인(ip, port 등)


    docker inspect IMAGE


      Docker 툴박스에서 실행한 명령창



    Dockerfile 작성

    도커는 명령어로 동작한다. CLI 방식에 익숙해야한다.

    처음부터 Dockerfile을 직접 작성하는 건 너무 어렵게 배우는거 같아서 Docker에서 제공 중인 image를 가져와서 쓰거나 Dockerfile 샘플을 참고로 수정해서 쓸 계획이다.



    참고:

    Best practices for writing Dockerfiles

    Dockerfile reference

    Docker glossary