Infra/Docker

Docker의 기본 1

자라선 2020. 7. 28. 12:14

정리 전 메모 : https://www.evernote.com/shard/s736/sh/c3145d20-9be5-4779-9532-cf96a6bee7c7/a2686a5a759fca4ba30551bd41a75e4f

 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 계정을 활용합니다.

 

  1. su -

  2. sudo passwd root

  3. su -

  4. apt-get update

  5. sudo apt-get install git

  6. sudo apt-get install -y \

  7. apt-transport-https \

  8. ca-certificates \

  9. curl \

  10. software-properties-common

  11. curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

  12. sudo apt-key fingerprint 0EBFCD88  

  13. sudo add-apt-repository \

  14. "deb [arch=amd64] https://download.docker.com/linux/ubuntu \

  15. $(lsb_release -cs) \

  16. stable"

  17. sudo apt-get update

  18. sudo apt-get install docker-ce

  19. sudo docker version

  20. sudo usermod -aG docker jeff

  21. service docker restart

  22. logout

  23. su - jeff

  24. docker system info

  25. ---- 컨테이너의 갯수 : 가동중인, 멈춘, 스탑 등 각각의 컨테이너의  스테이터스를 확인 -- 

  26. docker system df

  27. ----- Docker 의 디스크 용량 확인 -------------

  28. docker pull ubuntu:latest

  29. docker images

  30. ------------- 현재 가지고 있는 이미지 리스트 pull를 사용하여 우분투 최신버전을 가져옴--------------

  31. docker run -it ubuntu:latest echo "Hello world"

  32. docker run -it --name testOS ubuntu:latest /bin/bash

  33. ( container in ubuntu ) apt-get update

  34. apt-get install net-tools && ifconfig

  35. apt-get install -y iputils-ping

  36. ifconfig

  37. new terminal open

  38. ifconfig

  39. docker와 컨테이너의 ip을 확인 할수 있다.

  40. sudo apt-get install bridge-utils

  41. 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에서 가져와 컨테이너에 담습니다.

  1. docker search mysql:5.7

  2. docker pull mysql:5.7

  3. docker run -it --name mysqlTest mysql:5.7 bash

  4. ls

  5. cd /etc/init.d/

    ※ 만약 mysql 이 없다면 다른 버전으로 재설치 ....

  6. ./mysql start

  7. mysql -uroot

  8. show databases;

 

5. Docker nginx pull and Run

nginx Web server를 pull 을 사용하여 이미지를 가져와 run

  1. docker search nginx

  2. docker pull nginx:latest

  3. docker run --name webserver -d -p 80:80 nginx

    -- d 옵션 : 컨테이너를 백그라운드에서 실행하고 컨테이너 id 출력

    -- p 옵션 : 컨테이너의 특정포트를 호스트로 오픈

  4. docker ps

  5. ip addr

  6. VirtualBox 네트워크의 "호스트 전용 어댑터" 추가 후 GuestOS 안의 해당 IP로 로컬 브라우저에서 접근

    예) 192.168.56.101:80