Docker

SeonKyum·2021년 11월 11일
0

백엔드 개념

목록 보기
1/23

참고자료
https://velog.io/@devdynam0507/Docker%EB%A1%9C-%ED%8C%80%EC%9B%90%EB%93%A4%EC%97%90%EA%B2%8C-%EA%B3%B5%ED%86%B5%EB%90%9C-%EB%B0%B1%EC%97%94%EB%93%9C-%EA%B0%9C%EB%B0%9C%ED%99%98%EA%B2%BD-%EC%A0%9C%EA%B3%B5%ED%95%B4%EC%A3%BC%EA%B8%B0

  • 도커 개념

    도커란 ?

    ⇒ 다양한 종류의 애플리케이션을 신속하게 구축, 테스트 및 배포할 수 있는 소프트웨어 플랫폼이다. 하드웨어의 자원을 모두 가상화 하지 않고 프로세스들만을 격리시켜 빠르게 환경을 구축할 수 있다.

    ⇒ 서비스 환경을 갖춘 뒤 그것을 Docker Image로 만들어 배포하고 컨테이너로 간단히 실행 가능하다.

    컨테이너 ?

    ⇒ 개별 Software의 실행에 필요한 실행환경을 독립적으로 운용할 수 있도록 기반환경 또는 다른 실행환경과의 간섭을 막고 실행의 독립성을 확보해주는 운영체계 수준의 격리 기술을 말한다

    ⇒ 쉽게 말하자면 여러 소프트웨어 등을 동일한 규격으로 묶어 실제 사용자가 최대한 신경을 덜 쓰고 사용할 수 있도록 만든 것

    ⇒ 이미지가 실행된 형태

    이미지 ?

    컨테이너 실행에 필요한 파일과 설정값등을 포함하고 있는 것 (소프트웨어 구동에 필요한 의존(Dependency)과 명세를 담고 있다.)

    ⇒ 컨테이너는 이미지를 통해 만들어지고 이를 실행한 상태 !

    비유하자면 ,

    Docker Image -> 책을 찍어내기 위해 글자를 파낸 목판

    Container -> 목판을 사용하여 만든 책

    즉, Dockerfile은 Image를 만들기 위한 명세이고, Image는 Container를 만들기 위한 본

Docker Layer

⇒ 도커 이미지는 컨테이너를 실행하기 위한 모든 정보를 가지고 있기 때문에 보통 용량이 수백 MB에 이른다.

그래서 매 배포 때마다 이미지를 추가하는 것은 매우 비효율적 !

이 문제를 해결하기 위한 개념이 Docker Layer !!

Docker Layer 는 기존 이미지에 추가적인 파일이 필요할 때 다시 다운도르 받는 방법이 아닌 해당 파일을 추가하기 위한 개념.

그림에서 보면 Docker Image에 있는 각각의 Layer 는 읽기 전용(Read Only) Layer 로 구성되고, 파일이 추가되면 새로운 Layer가 생성됨

그리고 Docker 는 여러개의 Layer를 묶어서 하나의 파일시스템으로 사용할 수 있게 해준다.

그래서 Image 와 Layer 는 같은 의미로도 사용된다 !

위 그림을 1차(ubuntu Image), 2차(nginx Image), 3차(web app Image), 최종(Docker Container)으로 나눠보면

1차 : Layer A + Layer B + Layer C 로 구성

2차 : 1차 Image + nginx

3차 : 2차 Image + source(version1)

=== 만약 3차에서 source(v1) Layer를 수정했다면 하위 Layer 들은 제외하고 새로 수정한 source(v2)만 다운받으면 됨 ! ===

최종 : 3차 Image 에서 Container 를 생성할 때 R/W Layer (Read/Write) 를 추가한다. 이미지 레이어를 그대로 사용하면서 컨테이너가 실행중에 생성하는 파일이나 변경된 내용은R/W Layer에 저장되므로 여러 개의 컨테이너를 생성해도 최소한의 용량만 사용합니다.

  • 기본적인 도커 배포과정 1) 프로젝트 생성 후 테스트 컨트롤러 생성
    @RestController
    public static classHelloController{
    @RequestMapping("/hello")
       publicStringhello() {
          return "hello docker world";
       }
    }
    2)프로젝트 우클릭 → New → File → Dockerfile 생성 (이름 중요)
```
FROM openjdk:8-jdk-alpine
ARG JAR_FILE=build/libs/*.jar
COPY ${JAR_FILE} app.jar
ENTRYPOINT ["java","-jar","/app.jar"]
```

위 코드 작성

**FROM  키워드**

Docker에게 주어진 이미지를(태그 포함) 빌드 시 기반으로 사용하도록 지시합니다.

**ARG 키워드**

빌드 시 사용할 환경 변수를 선언, Spring Jar 파일이 생성되는 위치를 변수로 선언해서 거기 있는 파일을 대상으로 하겠다는 의미 

**COPY 키워드**

ARG 키워드에서 변수로 선언한 JAR_FILE을 app.jar 이름으로 복사한다는 의미,

**ENTRYPOINT  키워드**

이미지를 Container로 띄울 때 Jar 파일이 실행되어 Spring 서버가 구동되도록 Command를 설정

3) 회원가입 후 Create Repository를 클릭하여 Repository를 생성 
  
4) Dockerfile 빌드

형식 : docker build --build-arg DEPENDENCY=build/dependency -t 도커허브아이디/도커허브 Repository 명 .

    docker build --build-arg DEPENDENCY=build/dependency -t tjsrua02/simple-spring-boot .             (마지막 . 까지 써줘야 됨)

⇒ 도커파일 빌드 및 이미지 생성 

단, 인텔리제이 터미널 창에서 해야되나 봄 git bash에서는 안 먹힘

=======================================

여기까지 인텔리제이 및 Docker 에서의 작업

=======================================

5) Docker 를 ec2 서버에 설치 

$ **sudo yum install docker**

- 위 명령어를 통해 도커를 설치해주시고 중간에 y를 눌러줍니다.

아래 오류뜨면
sudo: yum: command not found

해결
1.sudo apt-get install yum
or
2. sudo apt-get install docker
저는 1 방법으로 해결이 안 돼서 2번으로 해결 !

$ **sudo systemctl start docker**

- 위 명령어를 통해 도커를 실행시킵니다.

Failed to start docker.service: Unit docker.service not found. 에러가 뜨면 

curl -sSL [https://get.docker.com/](https://get.docker.com/) | sh 입력으로 해결 !

$ **sudo docker pull tjsrua02/simple-spring-boot**

- 위 명령어를 통해 도커허브에 올라간 스프링부트 도커 이미지를 pull 받습니다.

$ **sudo sudo docker run -p 8081:8080 tjsrua02/simple-spring-boot**

- 해당 명령어로 8081번 포트에 스프링부트를 실행합니다.

<참고자료>

-Docker 설치법과 간단한 사용법
https://www.notion.so/Doker-b540cc61b3d24d3abf732f370a1be9c2#7f8e4ea5fbe1486b9df68a88fc636b7c
https://www.notion.so/Doker-b540cc61b3d24d3abf732f370a1be9c2#a7400b46f87d4b7fb0648a25c285316e

-Docker 이미지 생성 / Docker-compose 사용법
https://www.notion.so/Doker-b540cc61b3d24d3abf732f370a1be9c2#fa5712ab94f143ff82d4de2460048b64
https://www.notion.so/Doker-b540cc61b3d24d3abf732f370a1be9c2#98a3f058cfbb4119b16d61e55a3f3df8

profile
차근차근,,

0개의 댓글