====== 컨테이너 가상화(Docker)를 활용한 전자정부 표준프레임워크 기반 프로그램의 도커 이미지 제작 ====== ===== 1. 개요 ===== 본 가이드는 컨테이너 가상화 기술인 도커(Docker)를 활용하여 전자정부 표준프레임워크의 기반 응용프로그램(Web Application)의 도커 이미지 제작 가이드를 제공한다. 본 가이드의 사용자는 기본 도커(Docker)에 대한 기본적인 지식 있는다는 것을 가정하였다. * 도커 관련 기본 내용은 도커사이트에서 [[https://www.docker.com]] 확인 가능하다. ==== 특징 ==== 표준프레임워크 개발환경에 도커 이미지 제작을 통하여 아래와 같은 특징으로 적용 효과를 제시한다. \\ * 호스트 OS 와 서비스 운영 환경 분리 * 다양한 환경의 플랫폼 실행 가능 * 컨테이너 호환성 및 경량화 * 클라우스보다 진보된 Container 서비스 * 마이크로 서비스 기반의 Container로 자원 효율성 향상 {{:egovframework:dev3.6:dep:build_tool:docker:01_docker_deploy_archi2.png|}} ==== 도입 효과 ==== * 각종 컴포넌트의 독립적인 실행환경 보장으로 콤포넌트의 가용성 향상 * 마이크로 서비스 기반 독립성 보장으로 여러 서비스에 대한 실행 및 가용성 향상 * 도커(Docker) 기반으로 서비스를 제공 시 서버 구축 비용절감 효과 * 도커(Docker) 기반 서비스 개발 및 운용 시 각 서비스의 통일성 보장 ==== 가이드 진행 ==== == 본 가이드는 아래와 같은 단계에 따라 순서대로 진행된다. == 1. 전자정부 표준프레임워크 기반 응용프로그램의 도커(Docker) 이미지 제작 * 도커파일(Dockerfile)을 활용한 이미지 제작 * 메이븐(Maven) 빌드 시 플러그인(docker-maven-plugin)을 활용한 도커 이미지 제작 2. 제작된 도커 이미지 실행 및 테스트 본 가이드의 진행을 위한 구현도구 및 환경정보는 다음과 같다. ^항목 ^설명 ^ 비고 ^ | OS | Windows 7 | | | 개발환경 | eGovframe v.3.5.1 | JAVA 7, Tomcat 8 | | 도커 | 윈도우용 Docker Toolbox | 윈도우 환경의 경우 Docker Toolbox를 통한 가상 도커환경 설정 | ===== 2. 전자정부 표준프레임워크 기반 응용프로그램의 Docker 이미지 제작 ===== 응용프로그램의 Docker 이미지화를 위하여 2가지의 방법을 제시한다. == 1. Docker파일(Dockerfile)을 통하여 베이스이미지와 같이 실행 가능한 환경을 구성하며, Docker 데몬에서 Docker파일 빌드를 통한 도커 이미지를 제작 및 테스트를 진행한다. == == 2. 메이븐(Maven) 빌드 시 플러그인(docker-maven-plugin)을 활용하여 도커 이미지를 제작과 Docker 이미지를 주입하여 테스트를 진행한다. == * [주의] 도커 메이븐 플러그인(docker-maven-plugin)은 도커의 정식 지원 버전이 아닌 도커 커뮤니티의 개인 개발자 오픈 소스이므로 안전성 및 기술지원(bug patch) 사항은 도입 전 충분한 검증을 통하여 도입이 되어야 한다. ==== 테스트 환경의 도커 버전 확인 ==== === Step 1. 도커 버전 확인 === == 실습이전 OS환경에 맞추어 도커를 설치하며 설치 자료 및 문서는 도커 사이트 [[https://www.docker.com]] 에서 제공 받아 설치한다. == == 도커 콘솔에서 아래의 명령어로 버전을 확인 할 수 있다. == $ docker version {{:egovframework:dev3.6:dep:build_tool:docker:02_docker_version.png|}} [참고] 본 가이드의 도커 버전과 동일 할 필요는 없으나 이하 버전 및 최신 버전에서 가이드에서 사용한 API 및 구조가 변경 될 수 있으며, 도커 버전별 상의한 API 및 구조는 도커 사이트에서 확인 할 수 있다. ==== Docker 파일(Dockerfile)을 활용한 이미지 제작 ==== 표준프레임워크 응용프로그램은 표준프레임워크의 템플릿을 활용하며, Docker파일(Dockerfile)을 추가 및 실행가능한 이미지를 제작하여 테스트를 한다. === Step 1. 표준프레임워크 개발환경에서 제공하는 템플릿 윕 응용프로그램 제작 === == 1. 개발환경에서 eGovframe > Start > New Web Project 선택한다. == {{:egovframework:dev3.6:dep:build_tool:docker:03_new_web_pro.png|}} == 2. 프로젝트 이름을 기입 후 (예: docker.webtest) 하단의 “Next” 버튼 클릭한다. == {{:egovframework:dev3.6:dep:build_tool:docker:04_pro_name.png|}} == 3. “Generate Exmple”을 선택 후 하단의 “Finish” 버튼을 클릭하여 템플릿 프로잭트를 생성한다. == {{:egovframework:dev3.6:dep:build_tool:docker:05_gen_example.png|}} == 4. 생성된 템플릿 프로젝트를 아래와 같이 확인 할 수 있다. == {{:egovframework:dev3.6:dep:build_tool:docker:06_exmp_structure.png|}} == 5. 메이븐 빌드를 통해 war파일 생성한다. == {{:egovframework:dev3.6:dep:build_tool:docker:07_maven_build.png|}} == 6. 정상적으로 빌드가 되면 war파일의 이름과 위치를 확인한다. == {{:egovframework:dev3.6:dep:build_tool:docker:08_maven_conso_out.png|}} === Step 2. 도커 이미지를 제작을 위한 Docker 파일(Dockerfile) 생성 및 스크립트 제작 === == 1. 프로젝트 내에 Docker파일을 생성한다. == (프로젝트명 마우스 오른쪽 버튼 클릭 후 “New” > “File”을 선택한다.) {{:egovframework:dev3.6:dep:build_tool:docker:09_dockerfile_create.png|}} == 2. 파일 이름(예:Dockerfile)을 지정하고 “Finish” 버른을 클릭하여 파일을 생성한다. == {{:egovframework:dev3.6:dep:build_tool:docker:10_dockerfile_name.png|}} == 3. 생성된 Docker파일에 아래와 같은 스크립트를 추가 한다. == FROM tomcat MAINTAINER eGovframe Center ADD ./target/sample-3.5.0.war /usr/local/tomcat/webapps/ CMD ["catalina.sh", "run"] * [참고] sample-3.5.0.war파일은 Step 1에서 빌드 시 생성된 파일명을 사용한다. === Step 3. Docker에서 Docker파일을 빌드하여 도커 이미지 제작 === == 1. 도커콘솔에서 Docker파일이 있는 디렉토리로 이동하여 Docker파일을 확인한다. == (예: C:\eGovframe-3.5.1\workspace\docker.webtest) $ cd /c/eGovframe-3.5.1/workspace/docker.webtest $ ls Dockerfile pom.xml src/ target/ == 2. Docker파일을 아래와 같은 명령어로 빌드하여 이미지를 제작한다. == (예: 도커 이미지명을 egovframe/webtest 이며, 테그를 v1로 설정한다.) $ docker build –t egovframe/webtest:v1 . * -t 옵션을 사용하여 테그를 설정한다. * 자세한 옵션 설정은 docker build –help를 통하여 확인 가능하다. * 명령어 마지막 뒤의 점(.)을 꼭! 잊지 말고 입력하여야 한다. == 3. 빌드가 성공적으로 이루어지면 아래와같이 이미지를 확인 할 수 있다. == {{:egovframework:dev3.6:dep:build_tool:docker:11_docker_images_list.png|}} === Step 4. 도커이미지 실행 및 테스트 === == 1. 제작된 이미지를 아래와 같은 명령어로 실행한다. == (예: Tomcat의 기본 포트를 8080 사용하여 컨테이너에서도 동일한 포트를 사용하도록 설정한다.) $ docker run –t –i –p 8080:8080 egovframe/webtest:v1 * Run 에 대한 옵션은 --help통하여 상세한 정보를 확인 할 수 있다. == 2. 도커 이미지를 통하여 정상적으로 웹 어플리케이션이 실행되는지 확인 할 수 있다. == {{:egovframework:dev3.6:dep:build_tool:docker:12_docker_image_run.png|}} == 3. 웹 브라우저에서 해당 사이트를 확인 및 테스트를 한다. == (예: http://192.168.99.100:8080/sample-3.5.0/) {{:egovframework:dev3.6:dep:build_tool:docker:13_web_test.png|}} [참고] * 1. 도커 ip는 콘솔에서 docker-machine의 정보를 조회하여 확인 가능하다. $ docker-machine ls * 2. 웹 프로젝트명(sample-3.5.0.war)의 웹 컨텐츠에 접속 가능하다. ==== 메이븐(Maven) 빌드 시 플러그인(docker-maven-plugin)을 활용하여 도커 이미지 제작 ==== 메이븐 빌드 시 플러그인을 사용하여 빌드된 war파일과 베이지 이미지를 docker daemon에 직접 주입한다. === Step 1. 표준프레임워크 개발환경에서 템플릿 샘플 프로젝트를 생성한다. === == 생성 과정은 위 “Docker 파일(Dockerfile)을 활용한 이미지 제작”을 참조한다. == === Step 2. POM의 테그 내에 아래와 같은 플러그인 스크립트를 추가한다. === com.spotify docker-maven-plugin 0.4.10 egovframe/webtest tomcat ["catalina.sh", "run"] /usr/local/tomcat/webapps/ ${project.build.directory} ${project.build.finalName}.war https://192.168.99.100:2376 C:\\Users\\[컴퓨터사용자이름]\\.docker\\machine\\certs * 메이븐 도커 플러그인은 com.spotify 플러그인을 사용하였으며 아래 주소를 통하여 상세한 정보를 확인 할 수 있다. [[https://github.com/spotify/docker-maven-plugin]] * Spotify/docker-maven-plugin은 정식 지원 버전이 아닌 개인 개발자 OSS이므로 버전별 지원사항 및 기능이 임의로 변경 및 삭제될 수 있으므로 주의하여 사용하여야 한다. * 메이븐 플러그인(도커)는 TLS통신 통하여 Romote로 API를 사용하므로 TLS통신을 위한 ip:port 정보와 인증서를 사용하여 접속이 이루어 진다. (기본포트:2376) * 윈도우용 도커 TLS인증서는 윈도우용 도커 설치시 아래와 같은 경로에 자동으로 설정된다. (예: C:\Users\[컴퓨터사용자이름]\.docker\machine\certs) === Step 3. 메이븐(Maven) 빌드를 통하여 docker daemon에 이미지 제작 === == 1. 샘플 프로젝트에서 메이븐 빌드을 시작한다. == (예: 프로젝트명 마우스 오른쪽 클릭 > Run As > Maven build) {{:egovframework:dev3.6:dep:build_tool:docker:14_maven_build2.png|}} == 2. 빌드 Goals에 “clean package docker:build” 명령어를 추가하여 실행한다. == {{:egovframework:dev3.6:dep:build_tool:docker:15_maven_build_cmd.png|}} == 3. 정상적으로 빌드 시 아래와 같은 메시지를 확인 할 수 있다. == {{:egovframework:dev3.6:dep:build_tool:docker:16_maven_build_out2.png|}} == 4. Docker에도 아래와 같이 주입된 이미지를 확인 할 수 있다. == {{:egovframework:dev3.6:dep:build_tool:docker:17_docker_images_list.png|}} == 5. 도커 이미지의 실행은 위 “Docker 파일(Dockerfile)을 활용한 이미지 제작”을 참조한다. == ===== 3. 참고 사항 ===== ==== 우분투 환경에서 Docker 설치 및 Docker 계정에 Root 권한 부여 ==== [[https://docs.docker.com/engine/installation/linux/ubuntulinux/]] 가이드에 맞추어 설치 * Docker 및 docker-engine 까지 설치 * 도커 그룹을 생성하고 root 권한을 부여 하여야함. * 권한이 주어졌으면 아래와 같이 테스트로 확인함. $ docker run hello-world ==== 리눅스 환경의 도커에서 Romote API를 사용하여 docker daemon 통신하기 ==== 리눅스 환경의 도커에 SSL(HTTPS) 통신을 하기 위해서는 클라이언트 측에서 인증서(CA-Certification)가 있어야 하며 Openssl 통하여 서버키 및 클라이언트용 키를 생성하여 접속이 가능하다. 아래의 내용을 참조하여 리눅스 내 Docker 설정 및 인증서를 활용할 수 있다. * Protect the Docker daemon socket [[https://docs.docker.com/engine/security/https/]] ===== 4. 참고 자료 ===== * 도커 사이트 [[https://www.docker.com/]] * 도커 메이븐 플러그인 [[https://github.com/spotify/docker-maven-plugin]]