컨테이너
기반의오픈소스 가상화 플랫폼
(이전에는OS 가상화
방식을 사용)- 컨테이너 ?
격리된 공간
에서프로세스
가동작하는 기술
VirtualBox
/VM ware
는 모두OS 가상화
OS 자체
를가상화
하기 때문에resource가 매우 크다
전가상화
/반가상화
방식 모두 결국OS를 가상화
하기 때문에근본적인 한계
를 벗어나지 못함해결 방안
으로 등장한 것이 바로프로세스를 격리하는 방법
리눅스
에서는이 방식
을리눅스 컨테이너
라고 부름하나의 서버
에여러개의 컨테이너
를실행
하면서로 영향을 미치지 않고
독립적으로 실행
되어 마치가벼운 VM Virtual Machine
을 사용하는 느낌을 준다
- 최근
도커
는프로그래밍의 필수 요소
중 하나가 되었다
개발 환경
에서는 주로도커와 관련된 도구
들로구성된 패키지
를 사용
도커 포 맥(Docker for Mac)
도커 포 윈도우(Docker for Windows)
도커
는리눅스 커널
위에서 동작
하기 때문에,맥
이나윈도우
에서는경량 가상머신
이중간에 사용
되어리눅스 커널 위
에서도커가 동작
될 수 있게 됨
- 환경 구성 :
운영되는 환경
과로컬환경
2개를 구성
해서이미지를 기반으로 사용
하게 된다
배포되어 운영되는 환경(운영)
로컬 환경(개발)
(ref : https://jonnung.dev/docker/2020/02/16/docker_network/)
도커
에서 사용할 수 있는네트워크 종류
브리지(Bridge)
호스트(host)
논(none)
docker0
( ==Bridge
)
Docker
를 설치하면 최초docker0
이라는가상 인터페이스
가 생성
(일반적인 가상 인터페이스가 아님
)도커
가자체적으로 제공
하는네트워크 드라이버
중브리지(Bridge)
에 해당컨테이너가 통신
하기 위해 사용도커 컨테이너
를 만들면자동
으로 이브리지를 활용하도록 설정
되어 있음
docker container
를생성하면?
Linux Namespace 기술
을 이용해각자 격리된 네트워크 공간
을할당
받음Bridge주소
의서브넷
을 가짐(해당 대역 안
에서IP 할당
)내부 Namespace
에할당
되는eth0 인터페이스
가 할당docker0
에바인딩
되는veth~
이름 형식의가상 인터페이스
가 할당됨
(컨테이너의 eth0
과호스트의 veth
는서로 연결
되어 있다)
docker0
은 결국veth 가상 인터페이스
와호스트의 eth0 인터페이스
를 이어주는중간다리 역할
컨테이너 안
에eth0 인터페이스
는veth 가상 인터페이스
를 통해외부와 통신
할 수 있게 됨
- 정리
생성된 컨테이너
들은bridge
의서브넷
에포함
된다 (bridge 영역
에서IP 할당
)컨테이너
는 결국host의 포트번호
를 통해연결
되고구분
됨
-->NAPT(Network Address Port Translate)
NAT
:공인 IP
와사설IP
를서로 변환
해주는 것 (공인 아이피는 제한적임
)NAPT
:NAT의 기능
에서포트
까지 더해서주소를 변환
해주는 것
(refs : https://tlo-developer.tistory.com/33)
1) VirtualBox 설치 + MacOS 네트워크 설정
2) Ubuntu 18.04 Server 다운로드
:ubuntu-18.04.5-live-server-amd64.iso
3) Docker Hub 회원 가입
4) Docker 설치
curl -s https://get.docker.com | sudo sh
5) 일반 USER에서 바로 사용할 수 있도록 설정
sudo usermod -aG docker $USER
Docker File
서버 구성
을문서화
한 것Docker Image
서비스 운영에 필요한
서버 프로그램
,소스코드 및 라이브러리
,컴파일된 실행 파일
을 묶는 형태Docker Container
이미지(Image)
를실행
한 상태Dockler Compose
- 복수 개의 컨테이너를 실행시키는
도커 애플리케이션이 정의를 하기 위한 툴
yml파일
을 사용해서애플리케이션의 모든 환경
을 포함
(production
/staging
/development
/testing
및CI 워크플로우
등)
dockerfile
작성docekrfile
로docker image
생성docker image
로docker container
생성
dockerfile
VSdockerfile-dev
dockerFile build
VSdocker-compose build
docker run + 옵션들
VSdocker-compose.yml
: 이미지에 다양한 옵션 지정 (볼륨설정
등등)docker run
VSdocker-compose up
:옵션이 붙은 이미지
를실제로 수행
해서컨테이너로 생성
Docker Image
들이관리
되고공유
되는공간
내가만든 이미지
를push / pull
해서관리
할 수 있음
Docker(도커)
VSKubernetes(쿠버네티스)
Docker
:컨테이너 기반의 가상화 플랫폼
Kubernetes
:컨테이너화 된 애플레이션
을관리하는 툴
(컨테이너 관리
)
docker ps
: 현재 수행중인 모든 컨테이너 목록docker ps -a
: 정지된 컨테이너를 포함해 모든 컨테이너 목록docker stop [아이디 or 이름]
docker version
docker pull [image]
: image 받아오기docker image ls
: Docker image 리스트 목록docker inspect [image name]
: docker 이미지 정보를 json형태로 보여줌docker logs -f [container name]
: 컨테이너의 로그 보기
docker login
: Docker Hub 로그인docker image tag [old_tag name]/[old_image name] [new_tag name]/[new_image name]
: 이미지명 혹은 태그명 변경docker push [tag name]/[image name]
: Docker Hub에 push
docker run -name [container name] -d -p 80:80 [image name]
-d
:데몬
으로 실행 (백그라운드 실행
)-p
:포트포워딩
옵션 (host의 80번포트
를container의 80번 포트
와 연결)
docker exec -it [container name] /bin/bash
:exec명령어는 원래 명령어를 대신 수행
하는 것인데shell을 실행
시켜접속할 수 있음