Docker & Kubernetes

환경 변수 API 구현 예시 이번에는 d5라고 하는 디렉터리를 만들고 Dockerfile과 my_daemon이라고 하는 2개 파일을 바탕으로 컨테이너를 개발할 것이다. FROM을 사용해 베이스 이미지로 apline을 지정했다. RUN에서는 apk add bash로 bash 셸을 추가했다. ADD로는 셸 스크립트 my_daemon을 루트 경로에 배치하고 CMD로 컨테이너가 기동할 떄 실행하게 했다. my_daemon은 컨테이너가 기동되면 실행되는 셸 스크립트다. 보통 자바나 파이썬으로 작성한 코드를 컨테이너로 만드는 경우가 많은데 이번에는 간단한 예를 위해 셸 스크립트를 사용했다. 환경 변수 INTERVAL이 없는 경우에는 3초 단위로 현재 시간과 카운트를 표준 출력(STDOUT)에 출력한다. 환경 변수 ..
컨테이너 API의 종류와 개요 컨테이너 API란 컨테이너를 블랙박스처럼 다룰 수 있게 해주는 인터페이스이다. 소프트웨어에서는 서로 다른 팀이 개발한 프로그램들을 연결하기 위해 서로 지켜야 하는 규격을 인터페이스라 한다. 따라서 API는 대상이 되는 프로그램을 블랙박스로 취급하여 다른 프로그램에서 호출할 수 있게 해준다. 이는 쿠버네티스 환경에서도 사용된다. 컨테이너 API는 몇 가지 종류가 있으며, 각각의 목적과 사용법이 다르다. 모든 API를 필수적으로 알고 구현해야 되는 것은 아니다. 애플리케이션의 특성에 맞게 적절한 API를 선택하여 구현하면 된다. 컨테이너 기동 컨테이너 내의 애플리케이션은 기동 시에 환경 변수나 실행 인자를 읽어서 그에 맞게 동작하게 만들 수 있다. 헬스 체크(쿠버네티스 환경) ..
이번엔 MySQL 컨테이너(DB 컨테이너)와 PHP 컨테이너(AP 컨테이너)를 컨테이너 네트워크로 연결해 보겠다. 1. 컨테이너 네트워크 작성 2. MySQL 서버 기동 -e 옵션으로 환경 변수 MYSQL_ROOT_PASSWORD를 저장했다. 이러한 환경 변수를 사용해 컨테이너를 개발하면 이미지의 재사용성이 좋아진다. 3. 애플리케이션 컨테이너 개발 파일 구조는 다음과 같다 php-example Dockerfile php index.php php-example 디렉터리에서 컨테이너 이미지를 빌드한다. 정상적으로 빌드가 되었다면 docker images로 생성된 이미지를 확인할 수 있다. 4. 컨테이너 실행 docker run [옵션] 리포지터리명[:태그]로 빌드한 이미지를 컨테이너로 실행할 수 있다. h..
컨테이너간 통신 및 연결 실행 중인 컨테이너는 IP 주소를 할당받아 컨테이너 간 통신이 가능하다. 호스트 내에서 접근 가능한 전용 네트워크를 통해 애플리케이션과 데이터베이스를 연결하는 것이 가능하다. 또한, 컨테이너를 호스트의 외부 네트워크에 공개하는 것도 가능하다. 컨테이너 간의 연결을 이용하는 애플리케이션 이미지가 도커 허브에는 다수 등록되어 있다. 이들 애플리케이션은 컨테이너를 기동하는 것만으로 사용할 수 있다. 애플리케이션 설명 연동하는 컨테이너 Rocket.Chat 슬랙(Slack)과 비슷한 채팅 애플리케이션 MongoDB 컨테이너와 연동 owncloud BOX나 DropBox 같은 파일 공유 애플리케이션 MySQL이나 MariaDB 등 컨테이너와 연동 Redmine 프로젝트 관리 애플리케이션 ..
Dockerfile 작성 모범 사례 컨테이너의 설계 철학에 맞게 이미지를 만들어야 생산성이 높아지고 운영 중 겪게 될 문제를 사전에 예방할 수 있다. 종래의 오케스트레이션 도구인 Ansible이나 Chef 등은 서버들의 목표로 하는 상태로 만든다는 사고 방식으로 동작한다. 그리고 그 동작 방식은 멱등성(Idempotence)에 기초하여 몇 번을 배포해도 한결같이 목표로 하는 상태로 만들어 준다. 이들 도구들은 서버의 기동이나 설정에 오랜시간 걸리는 것을 고려하여 만들어졌다. 도커의 경우는 Dockerfile에 운영체제와 의존 패키지를 기술하여 이미지를 만들면 굉장히 짧은 시간에 컨테이너를 기동/교체/종료할 수 있다. 그리고 이미지에는 운영체제와 패키지가 이미 모두 포함되어 있으므로 배포 시 추가적인 시간..
이미지 빌드의 개요 위 이미지는 컨테이너의 이미지를 만드는 과정을 표현한다. 도커 이미지를 만들기 위해서는 명령어 docker build [옵션] 경로|URL|-을 사용하면 된다. 베이스 이미지 선택 이미지를 만들 때 바탕이 되는 이미지를 베이스 이미지라고 한다. 베이스 이미지에는 리눅스의 공유 라이브러리, 동적 링크나 로드에 필요한 기초적인 파일들이 포함되어, 이를 기반으로 사용자의 이미지를 만들게 된다. 도커 허브에는 다양한 미들웨어나 프로그래밍 언어가 포함된 이미지가 등록되어 있다. 분류 공식 이미지 리눅스 배포판 alpine, busybox, ubuntu, centos, debian, fedora, amazonlinux, opensuse, oraclelinux 프로그래밍 언어 node, golan..
여러 터미널에서 조작하기 2개 이상의 터미널에서 하나의 컨테이너에 접속하여 작업을 수행하는 것도 가능하다. 이처럼 같은 컨테이너에 여러 터미널이 접속하여 작업하는 것이 가능하다. 인증 과정도 없기 때문에 가상 서버보다 더 편리하게 사용할 수 있다. 이때 보안을 위해 호스트 외부에서 접속은 막혀 있다. 또한 컨테이너 내에는 외부에서 로그인하기 위한 sshd를 기동시키지 말아야 한다는 의견도 있다. 로그인을 관리하지 않는 컨테이너 리눅스 서버에서는 w 명령어로 동시에 로그인한 다른 유저의 정보를 얻을 수 있다. 하지만 아무것도 출력되지 않는다. 이유는 컨테이너에 로그인을 통한 유저 인증 기능도 없고, 유저 자체를 관리하지 않기 때문이다. 리눅스는 기본적으로 멀티 유저용으로 개발되었지만 컨테이너는 싱글 유저용..
대화형 모드로 컨테이너 기동 및 정지 일반적인 리눅스 서버에서는 유저가 로그인에 성공하면 이어서 셸이 기동된다. 그러면 터미널을 통해 셸에 명령어를 전달하고 수행 결과가 터미널에 출력된다. 도커에서도 컨테이너에서 셸을 실행할 수 있다. 대화형 모드로 컨테이너 기동(docker run -it) 대화형 모드로 컨테이너를 기동하기 위해서는 docker run -it 리포지터리명:[태그] 셸 과 같이 명령어를 실행해야 한다. 여기서 옵션 -i는 키보드의 입력을 표준 입력(STDIN)으로 셸에 전달하고 옵션 -t는 유서 터미널 디바이스(pts)와 셸을 연결한다. 옵션 --name은 컨테이너의 이름을 지정할 수 있다. 이로써 셸은 터미널과 접속되어있다고 인식하여 셸의 프롬프트를 출력하게 된다. 우분투나 CentOS..
컨테이너의 생명 주기 컨테이너는 세 가지 상태를 가진다. 이미지 : 컨테이너의 모형이 되는 것으로 실행되기 전의 상태 실행 : 컨테이너 위에서 프로세스가 실행 중인 상태 정지 : 프로세스의 종료 코드, 로그가 보존된 채 정지한 상태 (1) docker pull(이미지 다운로드) 명령어 'docker pull 리포지터리명[:태그]'를 실행하면 원격의 리포지터리로부터 이미지를 다운로드 한다. (2) docker run(컨테이너 실행) 명령어 'docker run [옵션] 리포지터리명:태크 [커맨드] [인자]'는 지정한 이미지를 모형으로 컨테이너를 기동한다. 만약 로컬에 없으면 원격의 리포지터리에서 이미지를 다운로드하고 컨테이너를 실행한다. 기본값으로 설정된 원격 리포지터리는 도커 허드(Docker Hub)이..
kubectl 커맨드의 기본 쿠버네티스 클러스터에게 명령을 내릴 때는 kubectl을 사용한다. kubectl 커먼대의 기본 구조는 아래와 같이 세 부분으로 구성된다. kubectl [이름] [3. 옵션] 커맨드로 동작을 지정하고 리소스 타입과 이름으로 대상이 되는 오브젝트를 지정한 뒤 옵션을 지정 1. 커맨드 get 지정한 오브젝트의 목록을 한 줄에 하나씩 출력 kubectl get -f kubectl get kubectl get kubectl get describe get 보다 자세한 정보를 출력 kubectl describe -f kubectl describe kubectl describe kubectl describe apply 매니페스트에 기술된 오브젝트가 존재하지 않으면 생성하고, 존재하면 변..
beekei
'Docker & Kubernetes' 카테고리의 글 목록 (3 Page)