728x90 분류 전체보기57 6. Dockerfile 컨테이너 이미지를 만들기 위해서는 (1). Ubuntu 등 아무것도 설치되지 않은 Base Image로 컨테이너를 생성하고 (2). 해당 컨테이너에 애플리케이션을 설치한 후 (3). 애플리케이션을 설치한 컨테이너를 커밋하여 새로운 이미지를 생성하는 작업을 거친다. 이렇게 이미지를 만드는 것은 과정이 복잡하고 수동적이다. 다행히도 도커에서는 위와 같은 일련의 과정들을 쉽게 정의하고 수행할 수 있는 빌드 명령어를 제공한다. Dockerfile 이라는 파일에 이미지를 생성하기 위해 필요한 것들 (컨테이너에 설치해야 하는 패키지, 추가 소스코드, 명령어, 쉘 스크립트 등..) 을 기록하면 도커는 이 파일을 읽어 컨테이너에서 작업을 수행한 뒤 이미지를 생성한다. Dockerfile을 사용하면 직접 컨테이너를 생성.. 2022. 5. 14. 5. Docker Image 모든 도커 컨테이너는 도커 이미지로부터 생성된다. 그래서 도커를 사용하고 관리하기 위해서는 이미지를 다룰 줄 알아야 한다. 이번 장에서는 도커 이미지를 생성하고 관리하는 방법에 대하여 알아보자. 이미지 저장소 도커 이미지는 기본적으로 도커 허브라는 중앙 이미지 저장소에서 이미지를 내려받는다. 도커 허브는 도커가 공식적으로 제공하는 이미지 저장소로, 도커 계정을 가지고 있다면 누구든지 해당 저장소에 있는 이미지를 내려받을 수 있다. 또한, 이미지를 도커 허브로 업로드를 할 수도 있다. 도커 허브로 올린 이미지는 깃허브 오픈소스처럼 모든 사람에게 공개가 된다. 물론 도커 허브에는 개인 저장소를 제공하여 이미지를 비공개로 올릴 수 있지만 요금을 지불해야 한다. 도커 이미지 저장소를 직접 구축하여 요금을 지불하.. 2022. 5. 14. 4. Reactor 프로그래밍 방식의 Flux, Mono 생성 (동기식) 이번 장에서는 Mono와 Flux를 직접 프로그래밍으로 만들어보는 것을 소개하겠다. 대표적으로는 이전 게시물에서 예제 코드로 잠깐 다뤘었던 Flux.handle()이나 Flux.generate() 메서드 등이 있다. 팩토리 메서드가 아닌 프로그래밍 방식으로 Flux를 생성하면 무한 개의 데이터를 Push하는 Flux를 구현할 수도 있다. 여기서 다루는 모든 메서드는 API를 노출하여 Sink 라고 하는 이벤트를 트리거한다는 사실을 공유한다. 프로그래밍 방식으로 Flux를 생성하는 방법은 크게 동기식과 비동기식으로 나뉜다. 일단 동기식 프로그래밍 방식을 알아보자. 동기식 프로그래밍 방식에는 대표적으로 generate()와 handle()이 있다. 이 메서드들은 이전 게시물에서 예제로 간간히 나온 메서드들이.. 2022. 5. 14. 4. Docker Network 이번에는 도커의 네트워크 구조에 대하여 알아볼 것이다. 도커 엔진을 설치하면 호스트에 하나의 네트워크 인터페이스가 생긴다. 확인을 위해 먼저 도커 컨테이너를 하나 띄워보자. $ docker run -it ubuntu:14.04 컨테이너 내에서 ifconfig 명령어를 입력하면 다음과 같은 결과가 나온다. root@b98f1051876a:/# ifconfig eth0 Link encap:Ethernet HWaddr 02:42:ac:11:00:03 inet addr:172.17.0.3 Bcast:172.17.255.255 Mask:255.255.0.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:24 errors:0 dropped:0 overru.. 2022. 5. 14. 3. Reactor Backpressure 이번 시간에는 Reactor에서 제공하는 Backpressure에 대하여 알아보겠다. Subscriber가 Publisher를 구독하면 Publisher가 데이터를 push하여 Subscriber에게 데이터를 전달한다. 이 때 Publisher는 Subscriber에게 onNext 시그널을 보내 Subscriber에게 데이터를 전달한다는 것을 알린다. 또는 Publisher는 Subscriber에게 onComplete 시그널을 보내 완료가 되었음을 알리거나 onError 시그널을 보내 에러가 발생했음을 알린다. 그런데 Reactor에서는 반대로 Subscriber가 Publisher에게 어떠한 신호를 보내게 할 수 있는데 이를 Backpressure 이라고 한다. 기본 Backpressure: Unbou.. 2022. 5. 1. 2. Reactor Core (Mono, Flux, Subscribe) 이번장에는 Reactor를 직접 사용하여 Reactive programming을 어떻게 하는지 알아보자. 필자는 Kotlin을 주로 사용하기 때문에 언어는 Kotlin을 사용한다. Dependency 먼저 Reactor를 사용하기 위한 환경과 디펜던시를 맞추자. Reactor가 Java8 함수형 API(CompletableFuture, Stream, Duration)와 관련이 있기 때문에 Reactor를 사용하기 위해서는 Java 8 이상이어야 한다. 그리고 Reactor 라이브러리를 사용하기 위해서 gradle 설정을 추가하자. (KotlinDSL) plugins { id("io.spring.dependency-management") version "1.0.9.RELEASE" } dependencies.. 2022. 4. 29. 1. Reactor 소개 Spring Webflux 기반으로 웹 애플리케이션을 개발하기 위해 필요한 Reactor에 대한 지식을 넓히고자 공식 문서를 보면서 공부한 내용을 정리해보았습니다. Reactor Reactor는 JVM 환경에서 동작하는 non-blocking reactive 라이브러리이다. Reactor에서는 Mono와 Flux 라는 두 가지 비동기 시퀀스 API를 제공한다. 이는 나중에 자세히 다뤄보겠다. 그리고 Reactor는 Reactor Netty 프로젝트와 함께 non-blocking IPC(Inter-Process Commumication)을 지원한다. 여기서 Netty는 HTTP, TCP, UDP를 위한 backpressure(배압) 가 준비된 네트워크 엔진을 제공한다. Reactive Programming.. 2022. 4. 27. 3. Docker Volume 도커 볼륨 도커 이미지로 컨테이너를 생성하면 이미지는 읽기 전용이 되어 컨테이너 변경사항만 별도로 컨테이너 계층에 저장하여 각 컨테이너 정보를 보존한다. 하지만 컨테이너를 삭제하게 되면 컨테이너 계층에 저장된 정보들이 모두 날아간다. 예를 들어 이전에 설치했던 mysql 컨테이너를 삭제하게 된다면 mysql에 저장된 데이터베이스 정보도 모두 삭제된다는 것이다. 컨테이너를 삭제하면 데이터를 복구할 수 없기 때문에 삭제를 신중하게 해야한다. mysql 컨테이너와 같이 영속성 데이터를 저장하는 컨테이너를 실수로 삭제해버리면 데이터를 복구할 수 없는 등 치명적인 결과를 낳을 수 있는데, 이를 방지하기 위해 도커에서는 볼륨을 통해 데이터를 영속 데이터로 저장할 수 있다. 볼륨은 (1) 호스트와 볼륨을 공유할 수도.. 2022. 4. 24. 2. Docker Container 컨테이너 사용하기 이전 장에서 도커 이미지와 컨테이너에 대해 간단히 알아보았다. 이제는 도커 컨테이너를 사용하는 방법에 대해 알아보자. 컨테이너 생성 + 실행 먼저 컨테이너를 실행하는 명령어에 대해 알아보자. 도커는 docker run 명령어를 통해 컨테이너를 생성하고 즉시 실행한다. $ docker run -it ubuntu:14.04 Unable to find image 'ubuntu:14.04' locally 14.04: Pulling from library/ubuntu 2e6e20c8e2e6: Pull complete 0551a797c01d: Pull complete 512123a864da: Pull complete Digest: sha256:60840958b25b5947b11d7a274274dc.. 2022. 4. 24. 이전 1 2 3 4 5 6 7 다음 728x90