Docker 무엇인가?

 

·         Version : Docker

 

도커(Docker) 응용프로그램들을 소프트웨어 컨테이너 안에 배치시키는 일을 자동화하는 오픈소스 프로젝트이다. 도커 컨테이너는 소프트웨어 실행에 필요한 모든 것을 포함하여 파일 시스템 안에 감싼다. 여기에는 코드, 런타임, 시스템 도구, 시스템 라이브러리 서버에 설치되는 무엇이든 포함한다.

 


도커와 기존의 가상머신 방식과 차이점은 OS 가상화 여부이다.  VMWare, Hyper-V, VirtualBOX같은 가상머신은 호스트 OS위에 게스트 OS 전체를 가상화 하여 사용하는 방식이다. 이러한 방식은 여러가지 OS 가상화 있고 사용방법이 비교적 간단하지만 많은 리소스가 필요하다.

 


하나의 서버에 여러 개의 컨테이너를 실행하면 서로 영향을 미치지 않고 독립적으로 실행되어 마치 가벼운 VM 사용하는 느낌을 준다. 컨테이너는 운영체제에서 애플리케이션을 분리 시키기 때문에 컨테이너 런타임 환경을 지원하는 모든 리눅스 서버로 컨테이너를 옮길 수도 있다. 실행 중인 컨테이너에 접속하여 명령어를 입력할 수도 있고 다양한 패키지를 설치할 수도 있으며 사용자 추가도 가능하다. 또한 여러 개의 프로세스를 백그라운드로 실행할 수도 있다. CPU 메모리 사용량을 제한할 있고 호스트의 특정 포트와 연결하거나 호스트의 특정 디렉터리를 내부 디렉터리처럼 사용할 수도 있다.

 

도커는 고급API 구현함으로써 프로세스들을 별도의 장소에서 실행할 있는 가벼운 컨테이너들을 제공한다. 리눅스 커널이 제공하는 기능들(주로 cgroups 이름공간)위에 빌드 되기 때문에 도커 컨테이너는 가상머신과 달리 별도의 운영체제를 요구하거나 포함하지 않는다. 그대신, 커널의 기능에 의존하며 리소스 격리 격리된 이름 공간을 사용하여 운영체제에 대한 응용 프로그램의 관점을 격리시킨다.

 

 

도커 컨테이너는 많은 장점이 있지만 모든 것을 해결할 없다. 컨테이너는 가상머신과는 메커니즘 자체가 다르기 때문이다. 가상머신은 호스트 OS 에서 자신의 인스턴스로 실행되기 때문에 높은 수준의 프로세스 분리 기능을 제공한다. 운영체제 또한 호스트OS 따라갈 필요도 없다. 컨테이너는 호스트 운영체제에 종속되며 통제된 영역을 사용한다. 많은 애플리케이션이 동일한 운영체제 커널을 공유한다. 컨테이너로 분리된 앱은 가상머신처럼 철저히 분리되어 있지 않다. 컨테이너가 가상머신에 비해 오버헤드가 적다고는 하지만 베어-메탈 수준의 속도를 제공하지는 않는다.

 

컨테이너는 이미지로부터 부팅 실행이 된다. 이미지는 기본적으로 변경이 불가능하며 일단 생성되면 바뀌지 않는다. , 컨테이너는 영속성(Persistency) 가지고 있지 않는다. 컨테이너 인스턴스를 시작하면 기존 컨테이너가 사라지고 새로운 컨테이너가 시작된다. 가상머신의 경우 세션에 대한 영속성을 갖고 있지만 컨테이너 경우 영속성은 부팅에 사용되는 이미지이다. 도커는 이미지의 바뀐 부분을 유니온 파일 시스템 형식(aufs, btrfs, devicemapper) 이용하여 관리한다. 도커는 베이스 이미지에서 바뀐 부분만 이미지로 생성하며 컨테이너로 실행할 때는 베이스 이미지와 바뀐 부분을 합쳐서 실행 한다.




[참고자료]

·         https://subicura.com/2017/01/19/docker-guide-for-beginners-1.html

·         https://seunguklee.github.io/2018/02/13/what-is-docker/

·         https://ko.wikipedia.org/wiki/%EB%8F%84%EC%BB%A4_(%EC%86%8C%ED%94%84%ED%8A%B8%EC%9B%A8%EC%96%B4)

 

 

2018-12-11 / Sungwook Kang / http://sqlmvp.kr

 

Docker, Docker Image, Virtual Machine, 도커






'SW Engineering > Docker Kubernetes' 카테고리의 다른 글

Docker Stack  (0) 2019.03.26
Docker Swarms  (0) 2019.03.26
Docker Services  (0) 2019.03.26
Build an image and run it as one container  (0) 2019.03.26
Docker Orientation and Setup  (0) 2019.03.26
Docker란 무엇인가?  (0) 2019.03.26

Run the MySQL with Docker

 

·      Version : MySQL 5.7, Docker

 

MySQL 5.7 버전을 Docker 활용해서 빠르게 설치하여 활용하는 방법에 대해서 살펴본다. 이번 포스트에서 다루는 환경 구성은 Windows Host 기반에 Docker(windows버전) 설치하고 Container MySQL5.7 실행한다. 포스트는 MySQL 설치를 중점으로 다루고 있으며 Docker 대해서는 다루지 않는다.

 

Docker 설치가 완료 되었으면 Powershell 명령 도구를 실행 한다. 그리고 아래 명령어를 실행 한다. 명령은 최신 버전의 mySQL 버전의 컨테이너 이미지를 가져온다.

docker pull mysql

 


 

 

아래 명령어를 실행하면 위에서 다운로드 받은 이미지를 확인 있다.

docker images

 


 

아래 명령을 실행 하여 다운로드 받은 이미지를 container 실행 한다.

docker run --name mysql -e MYSQL_ROOT_PASSWORD=mypass -d -p 3306:3306 mysql

 

·       -e MYSQL_ROOT_PASSWORD=mypass : root 비밀번호를 생성한다. 단계를 필수 이므로 요구 조건을 만족하는 비밀번호를 입력 있도록 한다.

·       -p 3306:3306 : 호스트의 3306 포트를 컨테이너의 3306 포트로 매핑한다.

·       --name mysql : 컨테이너 이름을 지정한다. 사용자가 변경할 있다. , 이미 다른 컨테이너에서 이름을 사용하고 있다면 중복으로 사용이 불가능 하다.

·       -d mysql : 컨테이너가 실행할 이미지 이름


 

아래 명령을 실행하여 SQL Server container 정상적으로 실행되었는지 확인할 있다.

docker ps

 


 

MySQL 컨테이너 실행이 정상적으로 완료 되었으면, Container 접속한다.

docker exec -it mysql /bin/bash`

 

Container 콘솔에 접근되었으면 MySQL 접속을 하여 정상적으로 실행되고 있는지 확인한다.

mysql -u root -p password

 


 

Container외부에서Container내부의 MySQL 접속하기 위해서는 host에서 컨테이너로 매핑하고 있는 IP 접속해야 한다. 아래 명령어로 container 정보를 확인하여 현재 사용되는 포트를 확인한다. Host 3306 포트가Container 3306으로 매핑 되는것을 확인 있다.

Docker ps

 


 

필자의 경우 MySQL Workbench 사용하여 외부에서Container MySQL 접속 하였다. 커맨드 명령어로도 접속이 가능하다.

mysql –h 127.0.0.1 -P 3306 –u root -p password

 


 


 

 

아직은 Docker기반의 MySQL 실제 운영환경을 대체할 있을지는 모르겠으나, 개발 환경이나 다양한 테스트 환경을 구성하기에는 빠르고 쉽게 설치 있어 다양한 용도로 활용 있을듯 하다.

 

[참고자료]

https://hub.docker.com/r/mysql/mysql-server/

 

 

2018-04-11 / 강성욱 / http://sqlmvp.kr / http://sqlangeles.com

 

MySQL, MySQL with docker, MySQL 도커, Docker, pull mysql, docker with mysql, mySQL 설치



+ Recent posts