본문 바로가기

반응형

Computer/Docker

(10)
Dockerfile (2) - RUN, CMD, ENTRYPOINT Dockerfile (1) - 개요 이번 포스트에서는 Dockerfile에서 만든 이미지로 컨테이너를 실행했을 때 각종 명령을 실행하는 방법에 대해 알아보려 합니다. RUN 컨테이너에 FROM 명령에서 지정한 베이스 이미지에 대해 "애플리케이션/미들웨어를 설치한다"/"환경구축을 위한 명령을 실행한다" 등의 명령을 실행할 때 RUN 명령을 사용합니다. RUN 이후에 일반적인 쉘 스크립트 형식으로 명령을 기술할 수 있고 ['args1', 'args2',...] 형식으로 지정할 경우 쉘을 경유하지 않고 직접 실행합니다. 컨테이너 실행시의 디폴트 쉘은 ['bin/sh', '-c'] 형식으로 지정됩니다. 다음 명령어를 통해 도커 이미지를 빌드하면 명령이 한 줄씩 실행되면서 이미지를 생성하고 쉘 스크립트 형식은 /..
Dockerfile (1) - 개요 Docker에서는 인프라의 구성 관리를 Dockerfile 로 기술합니다. Dockerfile 에는 베이스가 되는 이미지에 각종 미들웨어와 애플리케이션의 실행 기반의 모든 구성 정보를 기술합니다. 지난 포스트에서는 생성된 기존 이미지에 컨테이너 생성 시의 설정을 수동으로 수행하였으나 이를 dockerfile에 종합적으로 기술하여 관리할 수 있습니다. Dockerfile 에는 다음과 같은 컨테이너의 구성 정보를 담을 수 있습니다. 베이스가 될 Docker 이미지 Docker 컨테이너 안에서 수행할 명령 환경변수 등의 설정 Dockerfile Dockerfile은 텍스트 형식의 파일로 임의의 에디터를 사용하여 작성할 수 있습니다. 가장 먼저 기술되어야 할 내용은 docker 컨테이너를 어떤 도커 이미지로부터..
Docker container 실행 - docker run (2) 컨테이너의 네트워크 설정 Docker run 명령어는 네트워크 옵션을 다음과 같이 지원합니다. Option Description --add-host=[호스트명:IP 주소] 컨테이너의 /etc/hosts에 호스트명과 IP 주소를 정의 --dns=[IP 주소] 컨테이너용 DNS 서버의 IP 주소 지정 --expose 지정한 범위의 포트 번호를 할당 --mac-address=[MAC 주소] 컨테이너의 MAC 주소를 지정 --hostname, -h 컨테이너 자신의 호스트명 지정 --publish, -p[호스트의 포트 번호:컨테이너의 포트 번호] 호스트와 컨테이너의 포트 매핑 --publish-all, -P 호스트의 임의의 포트를 컨테이너에 할당 다음의 명령은 nginx라는 이름의 이미지를 바탕으로 test라는 ..
Docker container 실행 - docker run (1) 지난 포스트의 다양한 도커 이미지 커맨드를 통해 이미지를 생성했으면 컨테이너를 생성할 수 있습니다. 도커 이미지는 docker에서 서버 기능을 작동시키기 위해 필요한 디렉토리 및 파일들로서 컨테이너 실행 시 이미지에 포함된 파일과 디렉토리의 스냅샷을 생성하고 호스트 OS 상에서 프로세스로 실행됩니다. 이때 docker run 커맨드로 이미지로부터 컨테이너를 생성하고 실행할 수 있습니다. 위의 그림과 같이 docker create 커맨드로 컨테이너를 생성할 수 있으나 create 명령어는 컨테이너를 생성만 할 뿐 실행하지는 않으므로 일반적으로 docker run 을 통해 컨테이너를 생성함과 동시에 실행합니다. 도커 컨테이너와 관련된 대표적인 명령어로는, 1) 정지된 컨테이너를 시작하는 docker cont..
Docker 이미지 커맨드 Docker hub는 도커의 공식 리포지토리 서비스로 github이나 bitbucket 같은 소스코드 관리 툴과 연계하여 이미지를 빌드할 수 있으며 물리/가상/클라우드 등의 플랫폼에 상관없이 이미지를 배포할 수 있습니다. 이번 포스트에서는 도커 이미지에 관련한 다양한 도커 커맨드를 알아보도록 하겠습니다. 이미지 다운로드 Docker hub에서는 docker image pull 명령어를 사용하여 이미지를 다운받을 수 있습니다. docker image pull [옵션] 이미지명[:태그명] 예를 들어 CentOS의 버전 7을 다운로드하려면 "docker image pull centos:7" 명령어를 사용하면 취득이 가능하고 태그명을 생략하면 최신판 (latest)를 취득합니다. 이때 "-a" 옵션을 지정하면 ..
Docker의 작동 구조 Namespace Docker는 리눅스 커널의 namespace 기능을 사용하여 컨테이너라는 독립된 환경을 만듭니다. Namespace는 한 덩어리의 데이터에 이름을 붙여 분할함으로써 충돌 가능성을 줄이고 쉽게 참조할 수 있는 개념으로 같은 이름의 객체라도 속해 있는 namespace가 다를 경우 다른 실체로 처리됩니다. 리눅스 커널의 namespace는 다음 6가지 독립된 namespace를 지원합니다. Namespace PID namespace PID란 Process ID의 약자로 리눅스에서 각 프로세스에 할당된 고유 ID를 말하며, namespace가 다른 프로세스끼리는 서로 액세스 할 수 없습니다. Network namespace 네트워크 디바이스, IP 주소, 포트 번호, 라우팅 테이블 과 같은..
Docker의 기능 Docker는 크게 1) 이미지를 만드는 build, 2) 이미지를 공유하는 ship, 3) 컨테이너를 작동시키는 run 의 세 가지 기능이 있습니다. Docker build Docker에서 build란 애플리케이션 실행에 필요한 프로그램 코드, 라이브러리, 미들웨어, 컴파일된 실행 파일 등을 묶어 이미지로 만드는 작업을 말합니다. 즉, 특정 프로세스 (애플리케이션)을 실행시키기 위한 모든 파일과 환경을 지닌 것으로 예를 들어 Ubuntu docker 이미지는 Ubuntu에 실행에 필요한 모든 파일을 가지고 있습니다. 이러한 도커 이미지로부터 컨테이너를 실행시키게 됩니다. 도커 이미지의 크기는 보통 작게는 수십 MB부터 수 GB가 넘지만 이는 VM에 비하면 굉장히 가볍습니다. 이미지는 상태값을 가지지 않..
컨테이너 - Docker 컨테이너란 호스트 OS 상에 논리적인 구획을 만들고 애플리케이션을 작동시키기 위해 필요한 라이브러리나 애플리케이션 등을 하나로 모아 마치 별도의 서버인 것처럼 사용할 수 있게 만든 것입니다. 애플리케이션이 작동하는 플랫폼에 상관 없이 자유롭게 사용하며 버젼 관리와 배포를 쉽게 할 수 있다는 것이죠. 컨테이너를 이용한 오픈 소스 가상화 플랫폼으로는 2013년에 출시된 Docker 가 있습니다. 로고에서 보듯이 컨테이너에 애플리케이션에 필요한 각종 라이브러리 등을 담아 여러 항구 (플랫폼)에 배포하게 되는데요. 도커는 가상화 기술이 발전하면서 개인이 일일히 서버의 환경을 셋팅하기 힘들어지면서 탄생한 Immutable Infrastructure Paradigm 기반으로 만들어졌습니다. Immutable Inf..

반응형