일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- Unity
- 유니티
- 구조체
- c언어
- github
- 도커
- HTML
- c# winform
- jupyter
- Flutter
- 플러터
- git
- Python
- c# 윈폼
- c#
- vim
- Algorithm
- gitlab
- 깃
- Data Structure
- dart 언어
- 포인터
- c# 추상 클래스
- 다트 언어
- docker
- C++
- jupyter lab
- C언어 포인터
- C# delegate
- Today
- Total
목록DevOps/Docker (34)
nomad-programmer
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 상에서 움직이는 여러 애플리케이션은 똑같은 시스템 리소스를 사용한다. 이때 작동하는 여러 애플리케이션은 데이터를 저장하는 디렉토리를 공유하고,..
Docker는 컨테이너 기술을 사용하여 애플리케이션의 실행 환경을 구축 및 운용하기 위한 플랫폼이다. 애플리케이션의 실행에 필요한 것을 하나로 모아, Docker 이미지를 관리함으로써 애플리케이션의 이식성을 높일 수 있다. Docker는 2013년 3월 Docker, Inc (구 dotCloud)에서 출시한 오픈 소스 컨테이너 프로젝트이다. 2010년을 넘어서면서 서버 시장은 급속히 클라우드 환경으로 옮겨갔다. 이렇게 되다 보니 물리적인 서버를 구입하기보다는 사용 요금만 내고 가상 서버를 빌려 쓰게 되었다. 특히 물리적인 서버를 구축하려면 서버 구입과 설치에 상당한 시간일 걸린다. 하지만, 클라우드 환경에서는 1대가 되었든, 1,000대가 되었든 클릭 몇 번 만으로 가상 서버를 만들어낼 수 있게 되었다...