인프라/도커

    도커 컴포즈 (Docker Compose) 란? 도커 컴포즈 사용법

    도커 컴포즈란? 보통 개발할 때 로컬 환경이나 개발 환경에서 가상의 DB를 띄우기 위해서 많이 사용한다. 도커 컴포즈는 단일 호스트 환경에서 동작하고, 고가용성도 지원하지 않기 때문에 운영에서는 비슷한 역할을 하지만 고가용성을 지원하는 쿠버네티스를 사용한다. 도커 컴포즈 이용하기 (Node.js 기준) 프로젝트 메인 디렉토리에 docker-compose.yaml 파일을 생성한다. 도커 컴포즈 문법에 맞게 docker-compose.yaml 파일 작성 Docker Compose 공식문서 에 작성법이 있긴 한데, 예제를 보거나 GPT 를 이용하는 것이 빠를 것 같다. Postgres Yaml 파일 작성 방식은 Postgres 도커 페이지 에서 참고할 수있다. services: # 자동완성됨 postgres:..

    도커 컨테이너의 라이프사이클 (Docker container lifecycle)

    컨테이너의 라이프사이클 docker run 은 실제론 docker create 와 docker start 가 하나로 합쳐진 명령이다. docker create 까지는 격리된 공간만 만들어놓는다. docker start 단계에서 실제로 메모리와 CPU 를 사용하게 된다. docker pause 명령어는 컨테이너를 일시정지 시키는데, 이 때는 컨테이너의 상태를 기억해야 해서 메모리는 사용하지만 CPU 는 사용하지 않는 상태가 된다. docker stop 명령어는 컨테이너에서 실행 중이던 프로세스를 완전히 중지시킨 것이고, CPU 도 메모리도 사용하지 않는다. 다시 시작하면 컨테이너가 처음부터 다시 시작된다. docker rm 은 모든 단계에서 실행 가능하다. 단, 실행 중인 컨테이너를 삭제하려면 docker..

    컨테이너 런타임 (Container Runtime) 이란 무엇인가? 그리고 runc

    컨테이너 런타임이란? 도커에서 직접 커널과 통신하며 실제로 격리된 공간을 만드는 역할을 한다. 호스트 운영체제에서 컨테이너를 실행하고 컨테이너 이미지를 관리함 실행, 일시 중지, 중지와 네임스페이스, cgroup, 네트워크 인터페이스 관리와 같은 저수준 작업을 처리 컨테이너의 수명 주기를 담당 도커는 처음에 LXC 라는 런타임을 사용했지만 나중에 libcontainer 라는 자체 런타임을 개발하고 나중에 runc 로 발전 점진적으로 가볍고 유연하고 안정적이 됨 runc 런타임이란? OCI 스펙에 따라 컨테이너를 생성하고 실행하기 위한 CLI 도구임. Docker 및 기타 컨테이너 플랫폼이 내부적으로 사용하는 런타임이고 컨테이너 실행을 위한 사실상의 표준. 단순성, 이식성, OCI 런타임 사양 준수에 중점..

    도커의 아키텍처

    도커의 역할 커널의 컨테이너 가상화 기술을 사용자가 손쉽게 활용할 수 있게 하는 것 도커 아키텍처 컨테이너 엔진: 사용자의 요청을 받아 컨테이너를 관리하는 역할 컨테이너 런타임: 직접 커널과 통신하며 실제로 격리된 공간을 만드는 역할 도커는 runc 라는 컨테이너 런타임을 사용 runc 는 OCI (Open Container Initiative) 를 준수함 무조건 runc 를 사용해야 하는 것은 아니지만 도커에서 기본으로 사용하는 컨테이너 런타임임 리눅스 커널 버전마다 사용법이 다른데, runC는 cgroup, namespace 와 같은 기술을 버전에 구애받지 않고 사용할 수 있도록 LXC 혹은 libvirt 를 사용하여 간접적으로 관리함 도커 클라이언트 서버 구조 도커는 클라이언트 서버구조로 동작한다...

    컨테이너 가상화란?

    컨테이너 가상화 하이퍼바이저 방식보다 더 가볍고 더 빠르다. 리눅스 커널이 제공하는 LXC, 리눅스 컨테이너 라는 자체 격리 기술에서 출발했다. 커널 자체의 공간만 사용하여도 격리된 공간을 만들 수 있다. 커널의 Namespace 와 Cgroups 를 이용한다. Namespace: 프로세스, 하드드라이브, 네트워크, 사용자, 호스트 네임처럼 리소스를 나누는 기준의 역할 Cgroups: 메모리, CPU, Disk, Network Bandwidth 처럼 리소스의 사용량을 배분하는 기술 LXC 라는 기술을 통해 분리된 공간 각각을 컨테이너라고 부른다. Host OS 의 커널을 공유하는데, 이게 컨테이너 가상화의 가장 큰 특징 중 하나이다. Guest OS 를 사용하는 하이퍼바이저 방식보다 오버헤드가 작다. 하..

    LXC (Linux Container, 리눅스 컨테이너) 란?

    LXC (Linux Containers) 란? LXC 는 리눅스 컨테이너 (Linux Containers) 란 뜻이다. 리눅스 커널에 내장된 경량 가상화 기술이다. 단일 호스트에서 여러 개의 격리된 Linux 시스템 (컨테이너) 을 실행할 수 있다. c그룹 및 네임스페이스 격리를 사용하여 독립적인 컨테이너가 단일 Linux 인스턴스 내에서 실행되도록 함으로써 가상머신(VM) 을 시작하고 유지 관리하는데 드는 오버헤드를 방지한다. 특징 리소스 효율성 및 속도: VM과 비교했을 때 호스트 시스템의 커널을 공유하므로 오버헤드가 적고 빨리 부팅할 수 있다. 격리: 컨테이너 내부의 프로세스는 다른 컨테이너나 호스트 시스템에서 실행중인 프로세스를 보거나 상호작용할 수 없다. 보안: AppArmor, SElinux ..

    하이퍼바이저 (Hypervisor) 란 무엇인가?

    가상화 기술 용어 Host OS: 가상화 기술을 이용하고 있는 호스트의 운영체제 Guest OS: 가상화 기술에서 실행되고 있는 운영체제 하이퍼바이저 하이퍼바이저의 동작 원리 OS 엔 하드웨어를 사용하기 위해 커널이라는 중요한 도구가 설치되어 있음 커널은 System call 이란 것을 이용하여 OS 에 리소스 사용 요청을 전달함 System call 을 통해 하드웨어 자원을 이용할 수 있음 하이퍼바이저에서 Host OS 와 Guest OS 종류가 다르면 상호 호환이 되지 않음 여기서 하이퍼바이저가 다른 커널 간의 언어를 통역하는 역할을 하게 됨 가상머신은 하드웨어 리소스 사용을 위해 Host OS 로 시스템 콜을 보냄 이 시스템 콜은 하이퍼바이저에 의해 해석되어 Host OS 에 맞는 시스템 콜로 변함..

    도커 실무 - Mariadb 를 사용하는 스프링부트 프로젝트 배포해보기

    도커 실무 - Mariadb 를 사용하는 스프링부트 프로젝트 배포해보기

    개요 자바 스프링부트 프로젝트와 MariaDB 를 이용한 앱을 도커 가상환경을 이용하여 배포하는 과정을 통해 실무에서 도커를 어떻게 이용하는지 알아보자. 스프링부트 프로젝트는 로컬 환경에 작성이 완료되어 있다고 가정한다. 도커 이미지 세팅하기 이미지란? 특정한 세팅이 된 가상 OS 라고 생각하면 된다. 이를테면 jdk 와 mariadb 가 설치된 리눅스 OS 를 이미지로 올릴 수 있다고 생각하면 된다. 물론 아무것도 안깔린 그냥 OS 도 이미지가 될 수 있다. 우리가 필요한 이미지는 무엇일까? 이 실습에서 우리가 작성한 스프링부트 프로젝트를 실행하기 위해 2가지 이미지가 필요하다. java 11 버전 기준으로 작성된 프로젝트를 실행하기 위해 jdk 11 이 설치된 리눅스 mariadb 가 설치된 리눅스 ..

    도커 명령어의 run -it 옵션은 어떤 의미일까?

    도커를 사용하다 생긴 궁금증 도커를 공부하다가 docker run -it ubuntu /bin/bash 명령어를 보게 되었다. 여기서 -it 라는 옵션에 대해서 궁금해서 무엇인지 찾아보았는데, -i 는 -interactive 의 의미로 터미널을 통해 도커와 상호작용하겠다는 의미였다. 그렇다면, -t 는 무엇일까 했는데, -tty 로 설명에는 Allocate a pseudo-tty 라고 적혀있었다. 스택 오버플로 답변 1 스택 오버플로의 친절한 답변에서 답을 찾을 수 있었다. -t 옵션은 Unix/Linux 가 어떻게 터미널에 접근하는지에 대한 것이다. 과거에는 터미널이 물리적인 선으로 연결되어(hard line connection) 있었다. 그리고 이후엔 모뎀을 기반으로 한 연결이 되었다. 이 때는 물리..

    도커 자주 쓰이는 명령어 정리 (Docker Cheat Sheet)

    도커 자주 쓰이는 명령어 정리 (Docker Cheat Sheet)

    도커에서 자주 쓰는 명령어 (Docker Cheat Sheet) Build: 빌드 관련 명령어 docker build -t image:1.0: 현재 디렉토리의 Dockerfile 로부터 이미지를 빌드하고, 이미지를 태그한다. docker image ls: 도커 엔진을 통해 로컬에 설치된 모든 이미지 리스트를 보여준다. docker image rm image:1.0: 로컬 이미지 저장소에서 이미지를 삭제한다. Share: 이미지를 저장하거나 불러오는 명령어 docker pull image:1.0: 레지스트리에서 이미지를 불러온다. docker tag image:1.0 repo/image:2.0: 로컬 이미지를 새로운 이미지 이름과 태그로 다시 태그한다. docker push repo/image:2.0: 이..

    도커 소개 (Docker overview - get started 공식문서 번역)

    도커 소개 (Docker overview - get started 공식문서 번역)

    도커 개요 애플리케이션의 개발, 배포, 실행을 위한 오픈 플랫폼이다. 애플리케이션과 인프라를 분리하여 어느곳에서든 빠르게 애플리케이션을 실행할 수 있게 해준다. 코드를 작성하는 것과 실제로 프로덕션에서 애플리케이션을 구동하는 사이의 딜레이를 최소화해준다. 도커 플랫폼 애플리케이션을 패키징하고 느슨하게 분리된 환경인 컨테이너에서 구동시켜준다. 한 호스트에서 여러 개의 컨테이너를 실행시킬 수도 있다. 컨테이너는 실행에 필요한 모든 것을 포함하고 있어서 호스트에 무엇이 설치되었는지에 의존할 필요가 없다. 컨테이너는 쉽게 공유도 가능해서, 다른 동료와 같은 방식으로 동작하는 컨테이너를 쉽게 공유할 수 있다. 도커는 컨테이너의 라이프사이클을 관리할 수 있는 도구와 플랫폼을 제공한다. 컨테이너를 이용하여 컴포넌트와..

    도커 (Docker) 가 무엇인지 알아보자.

    도커 (Docker) 가 무엇인지 알아보자.

    도커(Docker)? 개발자라면, 도커가 무엇인지 정확히는 몰라도 들어보긴 많이 들어봤을 것이다. 그렇다면 도커가 무엇일까? 정의부터 천천히 읽어보자. 정의 리눅스의 응용프로그램을 프로세스 격리 기술을 사용해 컨테이너로 실행하고 관리하는 오픈소스 프로젝트이다. 컨테이너란? 코드와 의존성을 모두 패키징하는 소프트웨어 표준 단위이다. 이를 이용해 다른 컴퓨팅 환경에서도 애플리케이션을 빠르게 이식시킬 뿐만 아니라 신뢰성 있게 동작시킬 수 있다. 실행 중인 환경의 OS 에 관계 없이 동일한 동작을 보장한다. 왜 쓸까? 왜 쓰는지 알아야 도커를 이해하기 더욱 쉬울 것이다. 도커는 어떤 문제를 해결하고 있을까? 왜 쓸까 1 : 배포를 쉽게 하기 위해 사용한다 배포 경험이 어느정도 있는 개발자라면, 리눅스에서 만든 ..

반응형