Docker 시작

컨테이너 기술 활성화에 크게 기여한 것이 바로 Docker라고 생각합니다.

Docker는 Docker Store(구 Docker Hub)라는 퍼블릭한 안테나를 통해 다양한 기업들이 참여하여 이미지를 제공할 수 있습니다.
소스에 대한 제외 이미지를 찾기가 더 어렵습니다.
컨테이너 Docker가 크기가 작은 서버를 사용자에게 허락할 수 있도록 제공할 수 있기 때문에 사용자가 원하는 솔루션에 대한 이미지를 컨테이너로 띄우기만 할 수 있습니다.
컨테이너는 독립된 구조로 운영되기 때문에 새로운 기술을 신속하게 적용할 수 있고, 컨테이너가 실행 가능한 환경이라면 어디에서도 동일하게 환경을 구축할 수 있을 것입니다.

즉, 뭔가 빠르고 적시 배포해야 하는 상황에 아주 최적화된 형태가 바로 컨테이너로서 운영되는 것입니다. 그래서 마이크로 서비스로 구성하고 독창적인 사람들이 많으며 Docker, Kubernetes를 활용하고 있습니다.

그러면 일반적으로 Docker를 사용하여 컨테이너를 구성하고 관리하는 방법에 대해 살펴보겠습니다.

복잡하게 전개

Docker를 배포하는 방법입니다.

앱준비

  • 샘플 앱 다운로드
Spring Boot 공식 가이드에서 제공하는 테스트입니다. 
https://github.com/spring-guides/gs-spring-boot-docker.git
  • 샘플 앱 수정 및 빌드
샘플 프로젝트의 초기 폴더로 이동한 뒤 /src/main/java/hello/Application.java 파일에 동일하게 간단한 API를 추가합니다.
  • Application.java

package hello;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@SpringBootApplication
@RestController
public class Application {

@RequestMapping(“/”)
public String home() {
return “Hello Docker World”;
}

public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}

}

Maven을 활용하여 제작합니다.

Dockerfile 작성

Dockerfile은 Docker에서 이미지 플레이어를 예비하고 컨테이너 내부 환경을 통일하는 형식의 파일 형식입니다.

같이 Dockerfile을 작성해 보았습니다.

도커파일

FROM openjdk:8-jdk-alpine
VOLUME /tmp
ADD target/gs-spring-boot-docker-0.1.0.jar app.jar
ENV JAVA_OPTS=””
ENTRYPOINT [“java”,”-Djava.security.egd=file:/dev/./urandom”,”-jar”,”/app.jar”]

Dockerfile 을 작성하기 필수 기본 프레임입니다. (참조 — Dockerfile 작성방법 )

  • FROM :기반이 되는 이미지를 설정합니다. Dockerfile은 FROM 표준으로 시작해야 합니다.
  • VOLUME:Docker를 사용하는 데이터를 유지합니다.
    관련 업무에서는 Spring Boot가 기본적으로 톰캣 작업에 참석하여 /tmp 폴더를 사용하므로 해당 폴더를 VOLUME으로 추가합니다.
    호스트의 Docker 특정 영역에 임시 파일을 작성하는 권한이 /tmp에 링크되어 있습니다.
  • ADD : 파일 시스템에 추가합니다. 해당 업무에서는 프로젝트 JAR 파일[target/gs-spring-boot-docker-0.1.0.jar]이 컨테이너에 app.jar로 추가됩니다.
  • ENV : 환경을 다양하게 설정합니다.
  • RUN : 새로운 포럼에서 실행하고 결과를 커밋합니다. 보통 이미지 위에 다른 클러스터(프로그램)를 설치하여 새로운 레이어를 생성할 때 사용합니다.
  • ** RUN 사용 예제 (ubuntu 위에 컬을 설치)
  • ERTYPOINT :컨텍스트를 실행하는 경우를 비교합니다.

ENTRYPOINT 작성에는 다음과 같은 방식이 있습니다. 탄력되는 방식은 실행됩니다.

  • EXPOSE :컨테이너가 독점적인 포트에서 수신 대기하고 있음을 정의합니다.
    이 펌웨어는 어떤 포트가 게시할 것인지에 대해 이미지를 만든 사람과 콘솔을 실행하는 사람 사이에 일종의 규약처럼 기능합니다.
    해당 CF는 실제로 포트를 게시할 수 없으며 docker run 프레임워크의 -p 또는 -P 플래그를 통해 가능합니다.

Docker 이미지 생성

여러분과 함께 docker build회의를 실행하여 Dockerfile을 통해 이미지를 생성합니다.

-t 옵션을 사용하여 [이미지명:태그] 형식의 태그를 지정합니다.

docker images회의를 통해 이미지를 생성하여 확인합니다.

남부 실행(이미지 실행, 실행 실행)

docker run용접을 통해 생성한 이미지를 기반으로 제작을 실행합니다.

Docker에서는 하나의 컨테이너로 실행됩니다.

-p [호스트 포트:컨테이너 포트] 옵션을 통해 컨테이너의 포트를 호스트에 게시하여 호스트에서 접속 가능하도록 실행합니다.

개요

디스플레이 docker ps를 통해 활동하는 동안 활동 목록을 표시할 수 있습니다.

실제로 컨테이너로 실행하는 것이 가능합니다.

http://localhost:8080 으로 접속하여 확인해 보세요.

컨테이너 관리

생성 컨테이너

생성 및 확인은 위의 작성 및 확인을 참고합니다.

종료

docker stop [컨테이너ID]커뮤니티를 통해 활동을 중단합니다 .

docker psLED에 -a 옵션을 통해 전체 컨테이너 목록을 확인하여 STATUS가 종료된 상태를 알려드릴 수 있습니다.

삭제 컨테이너

교류를 통해 docker rm [컨테이너ID]커뮤니티를 삭제합니다.

삭제하고 난뒤 컨테이너 목록을 보면 해당 컨테이너가 삭제될 수 있습니다.

이미지 관리

컨테이너 운영 환경에 배포하는 등 이미지의 공유를 위해 이미지를 관리해야 합니다.

배열은 레파지토리의 모음이고 하나의 계정으로 많은 레파지토리를 생성할 수 있습니다.

Docker의 공용 퍼블릭 외부인 Docker Hub는 사전에 이미 구성되어 있는 무료 외부 외부 Docker Trusted Registry를 사용하여 비공개로 접근할 수 있습니다.

Docker Hub를 활용

Docker 규정이 https://hub.docker.com 에서 가입합니다.

Docker Hub에 로그인

docker login내부적으로 Docker Hub에 로그인하세요.

위치 이미지 태깅

로컬에 있는 이미지를 Docker Hub에 업로드할 수 있도록 이미지를 태깅해야 합니다. 태깅을 같은 이미지가 다른 이름으로 더 만들어지게 됩니다. docker tag image username/repository:tag귀하를 통해 이미지를 원하는 경우 업로드할 수 있도록 해주세요.

배치를 이미지 Docker Hub 레파지토리와 연관시키는 표지법은 사용자 이름/저장소:태그 입니다.

태그는 선택 사항이지만 Docker 이미지의 버전을 제공하는 것을 더 쉽게 사용하기를 권장합니다.

현재 태그는 이미지를 확인합니다.

Docker Hub로 이미지 업로드

docker push수출을 통해 레파지토리에 태그된 이미지를 업로드합니다.

이제 여기저기서 업로드하는 이미지로 모든 컴퓨터에서 이상한 것을 즐길 수 있습니다.

이미지가 있는 곳에 Docker는 Docker Hub 대상의 레파지토리로부터 이미지를 가져오는 항목입니다.

Private Registry를 활용

Private Registry로서 Harbor를 활용하여 이미지를 보호할 수 있습니다.
소스인 하버를 통해 Private Registry를 구축한 후 Docker Hub를 활용하는 방식과 동일하게 활용하도록 합니다.
(Harbor에 로그인 -> 이미지 태깅 -> Harbour로 이미지 업로드)
Harbour가 다양한 솔루션을 활용하여 Private Registry를 구축해 보세요.

기타 참고자료