DevOps/Docker11 [Docker] Multi-stage build(멀티스테이지 빌드) 애플리케이션 개발 시에 개발 환경에서 사용한 라이브러리나 개발 지원 툴이 제품 환경에서 반드시 사용되는 것은 아니며, 제품 환경에는 애플리케이션을 실행하기 위해 최소한으로 필요한 실행 모듈만 배치하는 것이 컴퓨팅 리소스를 효율적으로 활용할 수 있다는 점에서 보안 관점으로 볼 때 바람직합니다. 이럴때 멀티스테이지 빌드를 사용하게 됩니다. 1. 멀티스테이지 빌드란? 컨테이너 이미지를 만들면서 빌드할때는 필요하지만, 최종 컨테이너 이미지에는 필요 없는 환경을 제거할 수 있도록 단계를 나누어 기반 이미지를 만드는 방법 위의 그림처럼 컨테이너 RUN PHASE에는 빌드에 사용한 파일 및 디렉토리과 같은 의존 파일들이 모두 삭제된 상태로 컨테이너가 실행되게 됩니다. 이를 Dockerfile을 통해 확인하면 다음과 .. DevOps/Docker 2022. 10. 11. [Docker] 유틸리티 컨테이너 유틸리티 컨테이너는 사실 공식용어는 아니라고 합니다. 원래는 애플리케이션 자체를 컨테이너에 담아 실행시켰다면, 유틸리티 컨테이너는 특정 환경만 포함하는 컨테이너를 의미합니다. 1. 유틸리티 컨테이너 " data-ke-type="html"> HTML 삽입 미리보기할 수 없는 소스 예를 들어 local 환경에 node가 설치돼있지 않다면 애플리케이션을 실행할 수 있을까요? 또한 node는 pacakage.json을 통해 종속성 관리를 하는데, 보통 npm init 같은 명령어를 통해 초기화하여 사용합니다. 하지만 우리의 환경에 node.js가 설치되있지 않다면 어떻게 사용할까요? 이런 경우 유틸리티 컨테이너를 통해서 실행환경만 이용하면 된다! ▶ -it -d 우선 몇가지 명령어에 대하여 살펴봅시다. dock.. DevOps/Docker 2022. 10. 1. [Docker] 도커 컴포즈 (Docker Compose) 이번 글 에서는 도커 컴포즈를 통해 좀더 편리하게 컨테이너를 관리해보자! 1. Docker Compose " data-ke-type="html"> HTML 삽입 미리보기할 수 없는 소스 도커 컴포즈는 여러 명령어들을 모아둔 자동화 설정의 명령집합(Orchestration) 입니다. 하나의 명령 집합을 통해 모든 컨테이너를 실행할 수도, 멈출수도 있는거죠!~ 도커 컴포즈가 Dockerfile을 대신하는 것 은 아니며, 이미지나 컨테이너를 대체하는 것 또한 아닙니다. 또한 여러 host가 있는 상황보다는 단일 host 상황에서 여러 컨테이너를 관리할때 도커 컴포즈가 유용합니다. 기본적으로 터미널 상에서 run, build를 할때 옵션으로 주던 모든 명령을 도커 컴포즈를 통해서 사용할 수 있습니다. 1 - 1.. DevOps/Docker 2022. 9. 29. [Docker] 다중 컨테이너 구성 이번에는 MongoDB, NodeJS Server, React를 각각 컨테이너로 만든 후, 이들이 서로 소통하여 진행되도록 만들어 봅시다! 1. 컨테이너화 시키기 " data-ke-type="html"> HTML 삽입 미리보기할 수 없는 소스 1 - 1) MongoDB 컨테이너화 docker run --name mongodb --rm -d -p 27017:27017 mongo "mongodb"라는 이름으로 컨테이너를 생성하며, 컨테이너 종료시 자동 소멸되고, port는 27017로 개발하였다. 1 - 2) Node.js 컨테이너화 우선 우리가 만든 간단한 애플리케이션을 Dockerfile을 통해서 이미지로 build 합시다. FROM node WORKDIR /app COPY package.json . R.. DevOps/Docker 2022. 9. 28. [Docker] 컨테이너 통신 컨테이너의 통신은 어떤 대상과 통신을 하는지 기준으로 3가지 방식이 있다. 1. 컨테이너 web(WWW) 2. 컨테이너 host machine 3. 컨테이너 컨테이너 각각의 방식에서 어떻게 해야 통신을 할 수 있는지 알아보자! 1. 컨테이너와 Web의 통신 사실 이 방식은 너무 간단해서 정리할 점이 적다. 예를 들어 다음과 같이 컨테이너 내부의 애플리케이션에서 인터넷으로 요청을 보내는 코드가 있다고 해보자. get('https://some-api.com/shine-info').then(...) 이 경우 특별한 조치 없이도 Web과 소통이 가능하다. 아무런 문제없이 실행 중인 컨테이너 내부의 애플리케이션에서 외부의 WWW으로 request를 보내고, response를 반환받을 수 있다. 2. 컨테이너와 H.. DevOps/Docker 2022. 9. 18. [Docker] 도커의 환경변수 설정 이번 글에서는 도커에서 환경변수를 설정해주는 방법에 대하여 정리해보려 한다! 1. 환경변수 " data-ke-type="html"> HTML 삽입 미리보기할 수 없는 소스 도커는 build-time 인수와 runtime 환경변수를 지원합니다. 1 - 1) 환경변수 환경변수는 Dockerfile 안에서 사용할 수가 있습니다. Dockerfile 내부의 'ENV' 옵션을 통해서 우선 환경변수를 선언한 후, 이후 "docker run"을 실행할 때 "--env"옵션 또는"--env-file"을 통해서 변수에 값을 설정할 수 있습니다. 다음과 같은 server.js 파일이 있다고 해봅시다. 도커 내부에서의 port번호를 조금 더 유동적으로 지정하고 싶은 상황입니다. ▶ server.js // 생략... app... DevOps/Docker 2022. 9. 15. [Docker] Volumes과 Bind Mounts 이번에 학습하게된 Volume과 Bind Mounts는 뭘랄까... 쉬운것 같으면서도? 기억할 옵션들이 많은 느낌이랄까?... 정리를 좀 해놔야 겠다... Docker 컨테이너(container)에 쓰여진 데이터는 기본적으로 컨테이너가 삭제될 때 함께 사라지게 됩니다. Docker에서 돌아가는 많은 애플리케이션이 컨테이너의 생명 주기와 관계없이 데이터를 영속적으로 저장을 해야하는 경우들이 빈번합니다. 또한, 컨테이너가 host의 file system이 상호작용을 해야하는 경우도 있습니다. 이렇게 Docker 컨테이너의 생명 주기와 관계없이 데이터를 영속적으로 저장할 수 있도록 Docker는 두가지 옵션을 제공합니다. 1) Docker 볼륨(volume) 2) 바인드 마운트(bind mount) 이번 포스.. DevOps/Docker 2022. 9. 14. [Docker] 외부에서 컨테이너로, 컨테이너에서 외부로 파일 복사하기 여지까지 미천한 나의 Docker의 실력으로 인해 컨테이너와 볼륨을 연결하지 않으면 파일 이동을 할 수 없는 줄 알았다... 지금이라도 이러한 내요을 알게 되어 다행이다! 1. 외부에서 컨테이너로, 컨테이너에서 외부로 파일 복사하기 " data-ke-type="html"> HTML 삽입 미리보기할 수 없는 소스 우선 우리의 폴더 디렉터리를 살펴보자. 1 - 1) 외부에서 컨테이너 내부로 복사하기 우리의 실행중인 컨테이너로 dummy/test.txt 파일을 복사해보자! "CP" 명령을 통해 외부에서 내부로 복사시켰다. 명령이 수행되고 나면, 컨테이너 내부 /temp에 text.txt가 복사된 것을 볼 수 있다. 이번에는 반대로 해보자! 1 - 2) 컨테이너 내부에서 외부로 복사하기 우선 이전의 dummy/.. DevOps/Docker 2022. 9. 7. [Docker] 도커의 Attached, Detached 컨테이너 1. Attached, Detached 컨테이너 " data-ke-type="html"> HTML 삽입 미리보기할 수 없는 소스 보통 다음과 같이 cmd를 입력하면 해당 process는 background 모드로 실행되기 때문에 바로 터미널에 추가적인 입력이 가능합니다. docker start intelligent_austin 도커 컨테이너를 실행하는 명령이며, docker ps로 확인 시 실행 중임을 확인할 수 있다. 여기서 생각할점이 "start"명령어는 입력 후 터미널이 사용자의 입력을 block하지 않았다는 점입니다. 따라서 추가적인 "ps"명령을 입력할 수 있었죠! 이를 detached 모드라 부릅니다. 이와 달리 docker run 은 명령을 실행하면 바로 사용자의 입력을 block 하게 됩니.. DevOps/Docker 2022. 9. 7. [Docker] 도커 이미지 레이어 (Docker Image Layer) 도커를 공부해보고 있는데, 레이어라는 개념이 좀 신기해서 한번 정리 겸 글을 작성해본다. 1. Docker Imager Layer? Docke 이미지는 Dockerfile 로 만들어진 여러 레이어로 이루어져 있고 각 레이어는 읽기만 가능(Read-only)합니다. 그림으로 보면 다음과 같죠! 위의 그림에서는 3개의 층으로 구성되어 있는 stack 구조로 도커 이미지를 그려놨다. 이때 각각의 층을 Docker에서는 레이어(layer)라고 부르며 특별히 이미지를 구성하고 있는 레이어를 이미지 레이어라고 부른다. 즉 위의 이미지는 서로 다른 3개의 이미지 레이어로 구성되어 있다고 볼 수 있다. Dockerfile의 명령들을 하나 하나 실행할 때마다, 레이어가 생기는 구조이고, 이는 그래프 드라이버를 통해 합쳐.. DevOps/Docker 2022. 9. 5. [Docker] Docker 입문 수업 생활코딩의 Docker 입문 수업을 들은후, 요약과 추가 정리한 내용입니다. Docker 란? " data-ke-type="html"> HTML 삽입 미리보기할 수 없는 소스 Docker란 Go언어로 작성된 리눅스 컨테이너 기반으로하는 오픈소스 가상화 플랫폼이다. 컨테이너? container라는 단어가 계속 나오고 있는데, 기본적으로 우리 컴퓨터의 OS가 설치되어있는 곳을 host라 하고 docker로 실행시킨 각각의 실행환경을 container라고 한다. container에는 라이브러리와 실행파일만 설치되어있어 용량이 작다. 컨테이너는 가상화 기술 중 하나로 대표적으로 LXC(Linux Container)가 있습니다. 기존 OS를 가상화 시키던 것과는 달리, 컨테이너는 OS레벨의 가상화로 프로세스를 격.. DevOps/Docker 2022. 2. 8. 이전 1 다음