일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- Houdini
- dart 언어
- vim
- jupyter
- git
- jupyter lab
- HTML
- Algorithm
- github
- 구조체
- c# 윈폼
- C# delegate
- c#
- 포인터
- 깃
- c언어
- 플러터
- 도커
- Unity
- Python
- gitlab
- Data Structure
- C++
- c# winform
- 유니티
- C언어 포인터
- 다트 언어
- c# 추상 클래스
- docker
- Flutter
- Today
- Total
목록DevOps (40)
nomad-programmer
Docker에서 빌드를 하면 빌드를 실행한 디렉토리 아래에 있는 모든 파일이 Docker 데몬으로 전송된다. 그렇기 때문에 빌드에서 제외하고 싶은 파일이 있는경우는 '.dockerignore' 라는 이름의 파일 안에 해당 파일명을 기술해야 한다. 여러개의 파일을 지정할 때는 줄 바꿈을 하여 파일명을 나열한다. 예를 들어 다음과 같이 빌드 컨텍스트상에 Dockerfile과 Dummyfile을 저장하고, '.dockerignore' 안에 Dummyfile을 지정해보자. $ ls -al -rw-rw-r-- 1 scii scii 9 12월 2 00:56 .dockerignore -rw-rw-r-- 1 scii scii 79 12월 2 00:30 Dockerfile -rw-rw-r-- 1 scii scii 0 1..
컨테이너를 종료할 때에 송신하는 시그널을 설정하려면 STOPSIGNAL 명령을 사용한다. STOPSIGNAL [시그널] STOPSIGNAL 명령에는 시그널 번호 또는 시그널명을 지정할 수 있다. 컨테이너의 헬스 체크 명령 (HEALTHCHECK 명령) 컨테이너 안의 프로세스가 정상적으로 작동하고 있는지를 체크하고 싶을 때는 HEALTHCHECK 명령을 사용한다. HEALTHCHECK [옵션] CMD 실행할 명령 지정할 수 있는 옵션 옵션 설명 기본값 --interval=n 헬스 체크 간격 30s --timeout=n 헬스 체크 타임아웃 30s --retries=N 타임아웃 횟수 3 HEALTHCHECK 명령에서는 Docker에 대해 컨테이너의 상태를 어떻게 확인할지를 설정한다. 예를 들어 5분마다 가동 ..
Docker 이미지를 만들려면 필요한 미들웨어를 설치하고 사용자 계정이나 디렉토리를 작성하는 등의 명령을 실행할 필요가 있다. 또한 이미지로부터 컨테이너를 생성했을 때, 서버 프로세스 등을 데몬으로서 작동시킬 필요도 있다. 명령 실행 (RUN 명령) 컨테이너에는 FROM 명령에서 지정한 베이스 이미지에 대해 '애플리케이션/미들웨어를 설치 및 설정한다' 라는 의미를 갖는다. '환경 구축을 위한 명령을 실행한다' 등과 같은 명령을 실행할 때는 RUN 명령을 사용한다. Dockerfile을 작성할 때는 이 RUN 명령을 가장 많이 사용한다. RUN 명령으로 지정한 명령은 Docker 이미지를 생성할 때 실행된다. RUN [실행하고 싶은 명령] RUN 명령에는 다음 두 가지 기술 방법이 있다. 1. Shell ..
Docker에서는 인프라 구성을 기술한 파일을 'Dockerfile' 이라고 한다. Dockerfile 이란? 베이스가 될 Docker 이미지 Docker 컨테이너 안에서 수행한 명령 환경변수 등의 설정 Docker 컨테이너 안에서 작동시켜둘 데몬 실행 Dockerfile은 이와 같이 Docker 상에서 작동시킬 컨테이너의 구성 정보를 기술하기 위한 파일이다. docker build 명령은 Dockerfile에 기술된 구성 정보를 바탕으로 Docker 이미지를 작성한다. Dockerfile의 기본 구문 Dockerfile은 텍스트 형식의 파일로, 에디터 등을 사용하여 작성한다. 확장자는 필요 없으며, 'Dockerfile' 이라는 이름의 파일에 인프라의 구성 정보를 기술한다. 또한 Dockerfile 이..
Docker가 제품 환경에서 실제 가동되는 시스템의 대부분은 글로벌하게 전개하는 대규모 웹 시스템으로, 컨테이너 오케스트레이션 툴인 Kubernetes를 사용하여 운용되는 경우가 많다. 하지만 Docker가 갖고 있는 높은 이식성을 살려 기계학습 등에서도 자주 이용되고 있다. 특히 딥러닝(심층학습)에서는 프레임워크나 다양한 라이브러리를 이용하여 개발이 이루어지는 경우가 일반적인데, Docker를 사용하면 그러한 버전의 차이나 환경을 의식하지 않고 개발할 수 있다는 장점이 있다. 예를 들어 기계학습에서 널리 이용되는 개발 툴인 Jupyter Notebook이나 딥러닝이 특기인 프레임워크 TensorFlow는 Docker Hub에서 공식 Docker 이미지를 제공하고 있다. 게다가 Kubernetes에서 T..
Docker 컨테이너는 Docker 이미지를 바탕으로 작성하지만 반대로 Docker 컨테이너를 바탕으로 Docker Image를 작성할 수도 있다. 예를 들어 저장소에서 취득한 공식 이미지를 바탕으로 컨테이너를 만들고 환경에 맞도록 설정을 변경한 컨테이너로부터 다시 이미지를 만들 수가 있다. 컨테이너로부터 이미지 작성 (docker container commit) 컨테이너로부터 이미지를 작성하려면 docker container commit 명령을 사용한다. docker container commit [옵션] [이미지명[:태그명]] 지정할 수 있는 주요 옵션 옵션 설명 --author, -a 작성자 지정 (ex: scii) --message, -m 메시지 지정 --change, -c commit 시, Do..
실제 환경에서 운용할 때 이미 가동 중인 컨테이너의 상태를 확인하거나 임의의 프로세스를 실행시킬 때 하는 조작에 대한 설명이다. 가동 컨테이너 연결 (docker container attach) 가동 중인 컨테이너에 연결할 때는 docker container attach 명령을 사용한다. 예를 들어 /bin/bash 가 실행되고 있는 sample 이라는 이름의 컨테이너에 연결하려면 다음의 명령을 실행한다. // 컨테이너에 연결하기 $ docker container attach sample [root@9e0a1844027a /]#
Docker 컨테이너끼리 통신을 할 때는 Docker 네트워크를 통해 수행한다. 네트워크 목록 표시 (docker network ls) Docker 네트워크의 목록을 확인하려면 docker network ls 명령을 사용한다. docker network ls [옵션] 지정할 수 있는 주요 옵션 옵션 설명 -f, --filter=[] 출력을 필터링한다. --no-trunc 상세 정보를 출력한다. -q, --quiet 네트워크 ID만 표시한다. Docker를 설치한 상태에서 다음의 명령을 실행하면 네트워크의 구성 정보를 목록으로 확인할 수 있다. Docker는 기본값으로 bridge, host, none 이 세개의 네트워크를 만든다. // 네트워크 목록 표시 $ docker network ls NETWORK..
이미지가 만들어졌으면 컨테이너를 생성할 수 있다. 여기서는 컨테이너의 생성 및 시작을 수행하는 명령에 대해 설명한다. Docker 컨테이너의 라이프 사이클 컨테이너에는 라이프 사이클이 있다. 컨테이너는 다음과 같은 상태로 변화한다. 컨테이너를 조작하기 위한 기본 명령은 다음 네 가지이다. 컨테이너 생성 (docker container create) 이미지로부터 컨테이너를 생성한다. 이미지의 실체는 'Docker에서 서버 기능을 작동시키기 위해 필요한 디렉토리 및 파일들' 이다. 구체적으로는 Linux의 작동에 필요한 /etc 나 /bin 등과 같은 디렉토리 및 파일들이다. docker container create 명령을 실행하면 이미지에 포함될 Linux의 디렉토리와 파일들의 스냅샷을 취한다. 스냅샷 ..
이미지 다운로드 (docker image pull) Docker Hub에서 이미지를 다운로드 해 보자. 이미지 취득은 docker image pull 명령을 사용한다. docker image pull [옵션] 이미지명 [:태그명] 예를 들어 CentOS의 버전 (태그명: 7)을 다운로드하려면 아래의 명령을 실행한다. $ docker image pull centos:7 태그명을 생략하면 최신판(latest)을 취득한다. 또한 아래의 명령을 실행하면 모든 태그의 Docker 이미지를 취득할 수 있다. $ docker image pull -a centos -a 옵션을 지정하면 모든 태그를 취득할 수 있다. 또한 -a 옵션을 지정할 때는 Docker 이미지명에 태그를 지정할 수 없으므로 주의해야 한다. Dock..
Docker를 사용하여 Nginx 웹 서버를 구축해보자. NginX는 대량의 요청을 처리하는 대규모 사이트에서 주로 이용하고 있으며, 리버스 프록시나 로드밸런서와 같은 기능도 갖고 있다. nginx.org/en/ nginx nginx nginx [engine x] is an HTTP and reverse proxy server, a mail proxy server, and a generic TCP/UDP proxy server, originally written by Igor Sysoev. For a long time, it has been running on many heavily loaded Russian sites including Yandex, Mail.Ru, VK, nginx.org Docker..
설치한 Docker가 올바르게 작동하는지를 확인하기 위해 Docker 컨테이너를 작성하고 콘솔상에 "Hello World" 라는 문자를 출력해보자. Docker 컨테이너를 작성 및 실행할 때는 docker container run 명령을 사용한다. 이 명령의 구문은 다음과 같다. docker container run docker container run : 컨테이너를 작성 및 실행 : 바탕이 되는 Docker 이미지 : 컨테이너 안에서 실행할 명령 예를 들어 Ubuntu의 이미지를 바탕으로 Docker 컨테이너를 작성 및 실행한 후 작성한 컨테이너 안에서 "Hello World" 를 표시하고 싶을 때는 다음의 명령을 실행한다. docker container run ubuntu:latest /bin/ech..
Linux는 Docker를 설치하면 서버의 물리 NIC가 docker0 이라는 가상 브릿지 네트워크로 연결된다. 이 docker0 은 Docker를 실행시킨 후에 디폴트로 만들어진다. Docker 컨테이너가 실행되면 컨테이너에 172.17.0.0/16이라는 서브넷 마스크를 가진 프라이빗 IP 주소가 eth0으로 자동으로 할당된다. 이 가상 NIC는 OSI 참조 모델의 레이어 2인 가상 네트워크 인터페이스로, 페어인 NIC와 터널링 통신을 한다. 가상 NIC (vethxxx)는 컨테이너에서는 eth0으로 보인다. Docker 컨테이너와 외부 네트워크가 통신을 할 때는 가상 브릿지 docker0과 호스트 OS의 물리 NIC에서 패킷을 전송하는 장치가 필요하다. Docker에서는 NAPT 기능을 사용하여 연결..
Docker에서는 물리 머신 상의 자원을 여러 컨테이너가 공유하며 작동한다. 이때 Linux 커널의 기능인 'control groups(cgroups)' 기능을 사용하여 자원의 할당 등을 관리한다. Linux에서는 프로그램을 프로세스로서 실행한다. 프로세스는 하나 이상의 스레드 모음으로 움직인다. cgroups는 프로세스와 스레드를 그룹화하여, 그 그룹 안에 존재하는 프로세스와 스레드에 대한 관리를 수행하기 위한 기능이다. 예를 들어 호스트 OS의 CPU나 메로리와 같은 자원에 대해 그룹별로 제한을 둘 수 있다. cgroups로 컨테이너 안의 프로세스에 대해 자원을 제한함으로써 예를 들면 어떤 컨테이너가 호스트 OS의 자원을 모두 사용해 버려서 동일한 호스트 OS 상에서 가동되는 다른 컨테이너에 영향을 ..
Docker는 컨테이너라는 독립된 환경을 만들고, 그 컨테이너를 구획하하여 애플리케이션의 실행 환경을 만든다. 이 컨테이너를 구획하는 기술은 Linux 커널의 namespace라는 기능을 사용하고 있다. namespace는 한글로 '이름공간' 이라고 하는데, 이름공간이란 한 덩어리의 데이터에 이름을 붙여 분할함으로써 충돌 가능성을 줄이고, 쉽게 참조할 수 있게 하는 개념이다. 이름과 연결된 실체는 그 이름이 어떤 이름공간에 속해 있는지 고유하게 정해진다. 그래서 이름공간이 다르면 동일한 이름이라도 다른 실체로 처리된다. Linux 커널의 namespace 기능은 Linux의 오브젝트에 이름을 붙임으로써 다음과 같은 6개의 독립된 환경을 구축할 수 있다. PID namespace PID란 Linux에서 각..
Docker는 몇 개의 컴포넌트로 구성되어 있다. 핵심 기능이 되는 Docker Engine을 중심으로 컴포넌트를 조합하여 애플리케이션 실행 환경을 구축한다. Docker는 명령줄에서 조작하는 것(CLI)이 중심이다. Docker Engine (Docker의 핵심 기능) Docker 이미지를 생성하고 컨테이너를 기동시키기 위한 Docker의 핵심 기능이다. Docker 명령의 실행이나 Dockerfile에 의한 이미지도 생성한다. Docker Registry (이미지 공개 및 공유) 컨테이너의 바탕이 되는 Docker 이미지를 공개 및 공유하기 위한 레지스트리 기능이다. Docker의 공식 레지스트리 서비스인 Docker Hub도 이 Docker Registry 를 사용하고 있다. Docker Compo..
웹 시스템 개발 시 애플리케이션을 제품 환경에서 가동시키기 위해서는 다음과 같은 요소가 필요하다. 애플리케이션의 실행 모듈 (프로그램 본체) 미들웨어나 라이브러리군 OS/네트워크 등과 같은 인프라 환경 설정 폭포형 개발로 애플리케이션을 개발할 때는 위의 그림과 같은 흐름으로 개발을 진행한다. 개발 환경이나 테스트 환경에서는 올바르게 작동해도 스테이징 환경에서나 제품 환경으로 전개하면 정상적으로 작동하지 않는 경우도 있다. 스테이징 환경이란 지속적 딜리버리가 일어나는 시스템 개발에서 개발한 애플리케이션을 제품 환경에 전개하기 직전에 확인하는 테스트 환경을 말한다. Docker에서는 이러한 인프라 환경을 컨테이너로 관리한다. 애플리케이션의 실행에 필요한 모든 파일 및 디렉토리들을 컨테이너로서 모아버리는 것이..
컨테이너란 호스트 OS상에 논리적인 구획(컨테이너)을 만들고, 애플리케이션을 작동시키기 위해 필요한 라이브러리나 애플리케이션 등을 하나로 모아, 마치 별도의 서버인 것처럼 사용할 수 있게 만든 것이다. 호스트 OS의 리소스를 논리적으로 분리시키고, 여러 개의 컨테이너가 공유하여 사용한다. 컨테이너는 오버헤드가 적기 때문에 가볍고 고속으로 작동한다는 것이 특징이다. 오버헤드란? 가상화를 수행하기 위해 필요한 CPU 자원, 디스크 용량, 메모리 사용량 등을 말한다. 도커는 아래와 같은 구조를 사용하고 있다. 보통 물리 서버 상에 설치한 호스트 OS의 경우 하나의 OS 상에서 움직이는 여러 애플리케이션은 똑같은 시스템 리소스를 사용한다. 이때 작동하는 여러 애플리케이션은 데이터를 저장하는 디렉토리를 공유하고,..
시스템이 릴리즈되면 인프라 운용 관리 업무가 시작된다. 시스템을 안정적으로 가동시키기위해 시스템 관리자는 시스템이 어떤 상태로 가동되고 있는지를 감시할 필요가 있다. 일반적인 시스템에서 이러한 감시는 시스템 감시 툴로 수행한다. 시스템 감시 툴이란 시스템의 감시 대상인 서버나 장비의 상태를 감시하여 미리 설정한 경계 값을 초과한 경우에 정해진 액션을 실행하는 것이다. Zabbix (자빅스) : 오픈 소스 Zabbix SIA가 개발한 통한 운용 관리 툴이다. 다양한 서버의 상태를 감시 및 추적하기 위한 오픈소스 소프트웨어이다. 수집한 데이터를 저장하기 위해 MySQL, PostgreSQL, Oracle Database, DB2 등을 이용한다. www.zabbix.com/ Zabbix - The Enterp..
Docker는 컨테이너 기술을 사용하여 애플리케이션의 실행 환경을 구축 및 운용하기 위한 플랫폼이다. 애플리케이션의 실행에 필요한 것을 하나로 모아, Docker 이미지를 관리함으로써 애플리케이션의 이식성을 높일 수 있다. Docker는 2013년 3월 Docker, Inc (구 dotCloud)에서 출시한 오픈 소스 컨테이너 프로젝트이다. 2010년을 넘어서면서 서버 시장은 급속히 클라우드 환경으로 옮겨갔다. 이렇게 되다 보니 물리적인 서버를 구입하기보다는 사용 요금만 내고 가상 서버를 빌려 쓰게 되었다. 특히 물리적인 서버를 구축하려면 서버 구입과 설치에 상당한 시간일 걸린다. 하지만, 클라우드 환경에서는 1대가 되었든, 1,000대가 되었든 클릭 몇 번 만으로 가상 서버를 만들어낼 수 있게 되었다...