Docker의 기본 1
1.Docker
LXC (Linux Container)을 강화하여 개발된 오픈소스 컨테이너 어플리케이션.
여기서 Container은 일종의 프로세스의 격리 라고 본다.
Hypervisor (가상머신 어플리케이션) 와 비슷하지만 Contaioner의 역할로 강화된 Docker는 가상머신과 다르게 엄청 가볍다.
-
Hypervisor -> CentOS + DB + WebServer = 평균 3GB 이상
-
Docker -> CentOS Image + DB Image + WebServer Image = 300MB 이하
Hypervisor는 OS 안에 일정량의 리소스를 할당하여 새로운 OS를 구축하여 개발한다.
이 떄문에 리소스 낭비가 심할 뿐더러 무거워 질수 밖에 없다.
반면 Docker는 OS의 커널의 자원을 공유하여 효율적으로 리소스를 사용할수 있다.
좌측에 Hypervisor 환경으로 각각의 어플리$케이션마다 Guest OS가 구축되어있고
우측에 컨테이너 기술을 사용하여 Guest OS 가 없는 것을 확인 할 수 있다.
또한 Docker는 조직의 private 환경을 위해서도 활용할수 있다.
아무래도 추가적인 GuestOS없이 커널의 리소스를 공유하여 어플리케이션을 구축하자니 Hypervisor 셋팅에 비하여
상대적으로 비용또한 절감된다.
여러가지의 클러스터 및 분산환경에 많이 활용할수 있다.
DB 같은 경우 샤딩을 Docker를 사용한다.
CentOS7을 설치한 VirtualBox 이미지 용량 과 CentOS7 안에 Docker 설치 후 centos 이미지를 받아 컨테이너에 올린 용량
이 이미지만 봐도 둘의 무게 차이가 확연하게 체감된다.
2.Open Soruce Image Share
Docker는 각각의 컨테이너를 Image라고 부르며 Image를 서로 공유하여 언제든지 환경을 구축할수 있는 플랫폼 또한 제공하고있다.
Dokcer Hub : https://hub.docker.com/
hub-Docker의 Explore으로 각각의 이미 구축되어있는 이미지를 무료로 받아서 환경을 셋팅할수 있다.
또한 자신의 Repository를 개설하여 자신만의 환경을 hub-Docker에 등록하여 Share 할수 있다.
3.Dokcer Install
Docker설치 전 기본 환경을 Ubuntu-16.04.1-desktop-amd64 를 VirtualBox로 포팅.
이 문서의 모든 계정과 패스워드는 jeff 로 통일
원활한 작업을 위해 root 계정을 활용합니다.
-
su -
-
sudo passwd root
-
su -
-
apt-get update
-
sudo apt-get install git
-
sudo apt-get install -y \
-
apt-transport-https \
-
ca-certificates \
-
curl \
-
software-properties-common
-
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
-
sudo apt-key fingerprint 0EBFCD88
-
sudo add-apt-repository \
-
"deb [arch=amd64] https://download.docker.com/linux/ubuntu \
-
$(lsb_release -cs) \
-
stable"
-
sudo apt-get update
-
sudo apt-get install docker-ce
-
sudo docker version
-
sudo usermod -aG docker jeff
-
service docker restart
-
logout
-
su - jeff
-
docker system info
-
---- 컨테이너의 갯수 : 가동중인, 멈춘, 스탑 등 각각의 컨테이너의 스테이터스를 확인 --
-
docker system df
-
----- Docker 의 디스크 용량 확인 -------------
-
docker pull ubuntu:latest
-
docker images
-
------------- 현재 가지고 있는 이미지 리스트 pull를 사용하여 우분투 최신버전을 가져옴--------------
-
docker run -it ubuntu:latest echo "Hello world"
-
docker run -it --name testOS ubuntu:latest /bin/bash
-
( container in ubuntu ) apt-get update
-
apt-get install net-tools && ifconfig
-
apt-get install -y iputils-ping
-
ifconfig
-
new terminal open
-
ifconfig
-
docker와 컨테이너의 ip을 확인 할수 있다.
-
sudo apt-get install bridge-utils
-
brctl show
※ 주의 : 컨테이너에서 벗어날때 exit 명령어로 나가게 된다면 해당 컨테이너를 stop 상태로 종료하게 된다.
ctrl+p,q 단축키를 사용하여 나가면 running 상태를 유지하며 컨테이너에서 나올수 있다.
모든 컨테이너 조회 : docker ps -a
running 컨테이너 접속 : docker attach <컨테이너 명>
컨테이너 제거 : docker rm <컨테이너 명>
4.Docker mysql pull and Run
mysql DBMS Image를 pull로 docker-hub에서 가져와 컨테이너에 담습니다.
-
docker search mysql:5.7
-
docker pull mysql:5.7
-
docker run -it --name mysqlTest mysql:5.7 bash
-
ls
-
cd /etc/init.d/
※ 만약 mysql 이 없다면 다른 버전으로 재설치 ....
-
./mysql start
-
mysql -uroot
-
show databases;
5. Docker nginx pull and Run
nginx Web server를 pull 을 사용하여 이미지를 가져와 run
-
docker search nginx
-
docker pull nginx:latest
-
docker run --name webserver -d -p 80:80 nginx
-- d 옵션 : 컨테이너를 백그라운드에서 실행하고 컨테이너 id 출력
-- p 옵션 : 컨테이너의 특정포트를 호스트로 오픈
-
docker ps
-
ip addr
-
VirtualBox 네트워크의 "호스트 전용 어댑터" 추가 후 GuestOS 안의 해당 IP로 로컬 브라우저에서 접근
예) 192.168.56.101:80