Docker

    Docker Multi-Stage

    Dockerfile로 이미지를 빌드할 때 꽤나 큰 용량이 소모된다 이때 Multi-stage 를 통해 이미지를 경량화 시킬 수 있다. 일반적으로, Dockerfile을 작성할 때, 한 단계(build stage)에서 애플리케이션을 빌드하고, 또 다른 단계에서 빌드된 애플 리케이션을 실행하는 이미지를 생성하는 방법을 사용한다. 그러나, 이러한 방식은 중간 빌드 결과물과 불필요한 라이 브러리, 의존성 파일 등이 포함된 큰 이미지를 생성할 수 있다. Dockerfile multi-stage를 사용하면, 여러개의 build stage를 이용하여 각각 다른 의존성을 가진 이미지를 생성할 수 있다. 빌드 단계에서 필요한 파일과 라이브러리만 포함하여 최종 이미지를 만들기 때문에 이미지 크기를 최소화 할 수 있다. 그..

    Docker Compose - 1

    정의 도커 컴포즈(Docker Compose)는 여러 개의 도커 컨테이너를 하나의 애플리케이션으로 관리하기 위한 도구이다. 도커 컴포즈를 사용하면 YAML 파일을 통해 여러 개의 도커 컨테이너를 정의하고, 이들 컨테이너 간의 네트워크 및 볼륨 설정 등을 관리할 수 있다. 도커 컴포즈를 사용하면, 여러 개의 컨테이너로 이루어진 복잡한 애플리케이션을 쉽게 관리할 수 있다. 각각의 컨테이너는 하나의 서비스 역할을 하며, 서로 다른 컨테이너 간의 연결과 의존성을 정의하여 애플리케이션을 구성한다. 도커 컴포즈는 CLI(Command Line Interface)를 통해 사용할 수 있으며, YAML 파일에 정의된 컨테이너를 생성, 시작, 중지, 삭제하는 등의 작업을 수행할 수 있다. 또한, 여러 개의 컨테이너로 구성..

    Docker 명령어 정리 - 2

    2023.01.23 - [Docker] - DockerFile 작성하기 - 구성과 명령어 정리 - 1에 이어 명령어를 정리해 보자. 1. EXPOSE (deprecated) EXPOSE 명령은 컨테이너가 런타임에 지정된 네트워크 포트에서 수신 대기함을 Docker에 알린다. 포트가 TCP 또는 UDP에서 수신하는지 여부를 지정할 수 있으며 프로토콜이 지정되지 않은 경우 기본 값은 TCP이다. EXPOSE 명령은 실제로 포트를 게시하지 않는다(주의!). 이미지를 빌드하는 사용자와 컨테이너를 실행하는 사용자 간에 게시할 포트에 대한 일종의 문서로 기능한다. 컨테이너를 실행할 때 실제로 포트를 게시하려면 도커 실행 시 -p 플래그를 사용하여 하나 이상의 포트를 게시 및 매핑하거나 -P 플래그를 사용하여 노출된..

    DockerFile 작성하기 - 구성과 명령어 정리 - 1

    1. Dockerfile Dockerfile은 Docker 이미지를 생성하기 위해 사용자가 명령줄에서 호출할 수 있는 명령을 포함하는 텍스트 문서이다. 2. 구성 Docker 이미지는 일련의 레이어로 구성된다. Docker는 이미지를 빌드할 때 각 layer들을 쌓아 올린다. 이때 컨테이너 전용 이미지 레이어를 제외한 아래 계층의 베이스 이미지 레이어들은 읽기 전용(read-only)이므로 수정할 수 없다. 또한 이러한 베이스 이미지들은 컨테이너를 여러 개 생성할 때 공유되므로 디스크 용량을 효율적으로 관리한다. 아래를 살펴보자. docker inspect b953ee2e003f | jq '.[].GraphDriver' { "Data": { "LowerDir": "...diff:/var/lib/docke..

    Docker에 대해 알아보자 - 정의, 작동 방식, 사용 이유

    해당 포스팅은 AWS의 포스팅된 "Docker란 무엇입니까?"과 docker 공식 문서, IBM 문서를 참고하여 작성하였습니다. 1.정의 1.1 Docker란? Docker는 애플리케이션을 신속하게 구축, 테스트 및 배포할 수 있는 소프트웨어 플랫폼이다. Docker는 "컨테이너"라는 표준화된 유닛으로 패키징 하며, 이 컨테이너에는 라이브러리, 시스템 도구, 코드, 런타임 등 소프트웨어를 실행하는 데 필요한 모든 것이 포함되어 있다. Docker를 사용하면 환경에 구애받지 않고 애플리케이션을 신속하게 배포 및 확장할 수 있으며 코드가 문제없이 실행될 것이다. 1.2 컨테이너란? 컨테이너는 호스트 시스템의 다른 모든 프로세스와 격리된 시스템의 샌드박스* 프로세스이다. 샌드박스란? 샌드박스란 외부로부터 들어..

    [Docker] 1. WSL2 에 Docker 개발 환경 구축하기

    요즘 Docker는 선택이 아닌 필수다. 경력 3년 4개월 차인 필자도 Docker를 배포 서버에 구축하거나 Dockerfile script를 짜 본 적이 있다. 하지만 공부를 해서 Docker Container를 구축했다기보다는 그냥 래퍼런스들을 참고하며 클론 코딩에 가까웠고, 왜 쓰는지는 대략적으로 알았지만 깊게 공부하지 않았다. 이 포스팅은 그런 반성의 차원에서 하나하나 공부하면서 Docker를 구축하고 Python 개발환경으로 이용하며 배포까지 해보는 시리즈가 되겠다. 이 포스팅은 요즘 IT에 기재되어 있는 넷마블 기술 블로그 '도커 데스크톱 없이 구축하는 WSL2와 도커 개발 환경'을 보고 작성하였습니다. 1. WSL란? WSL2 를 설치하기에 앞서 WSL 이란 무엇인지 알고자 한다. 1.1 W..

    [완벽한 IT 인프라 구축을 위한 Docker] 1장 시스템과 인프라 기초지식 - 1

    학습 목표 여기서는 Docker를 도입하기에 앞서 알아두어야 할 시스템 기반의 개요와 시스템 기반을 다루기 위해 필요한 인프라 기술의 핵심 내용에 대해 설명한다. Docker 의 간단한 정의 개발한 애플리케이션을 릴리스하여 최종 사용자가 이용할 수 있도록 하려면 시스템 기반을 구축하고 그 위에 애플리케이션의 실행 환경을 마련해야 한다. 시스템 기반이란 애플리케이션을 가동시키기 위해 필요한 하드웨어나 OS/미들웨어 등과 같은 인프라를 말한다. Docker는 애플리케이션 실행 환경을 작성 및 관리하기 위한 플랫폼이다. Docker는 시스템 구축이나 시스템 운용에 있어서 지금까지 사람의 손으로 해 왔던 많은 작업을 자동화하고, 테스트가 끝난 안전한 애플리케이션을 지속적으로 제공할 수 있는 플랫폼이다. 1.1 ..