회사에서 Docker을 사용하고 있기는 한데 잘 모르고 사용한다는 기분이 들어 따로 또 정리해 본다.
참고
Docker - 컨테이너란? (Container)
컨테이너 및 도커 개념정리
초보를 위한 도커 안내서
[Docker] docekr-compose란?
10장. 도커파일(Dockerfile)
애초에 컨테이너란?
컨테이너 = 기술
도커 = 컨테이너 기술을 적용한 제품 명, 대표적인 컨테이너 제품
호스트 OS상에 논리적인 공간(=컨테이너)를 만들어 애플리케이션 작동을 위해 필요한 라이브러리, 애플리케이션을 모아 별도의 서버처럼 작동하게 만든 것
서버 가상화 기술
개별 소프트웨어의 실행에 필요한 실행 환경을 독립적으로 운용 할 수 있도록 다른 실행 환경과의 간섭을 막고 실행의 독립성을 확보해주는 운영체제 수준의 기술.
가상 머신과의 차이
가상머신(VMware, VirtualBox) : 하드웨어 기반의 게스트 운영 체제로 가상 머신마다 전용 OS가 있기 때문에 CPU 메모리 사용량이 필요 이상으로 많아져 성능 저하가 많음.
컨테이너: 운영 체제 환경(커널)을 공유하고 별도의 OS가 없기 때문에 성능 저하가 적음.
하나의 서버에 여러개의 컨테이너를 실행하면 서로 영향을 미치지 않고 독립적으로 실행 됨.
도대체 정체가 무엇이냐..
컨테이너 기반의 오픈소스 가상화 플랫폼을
ES 이미지가 있을 것 같아요 > 이미지란?
컨테이너 생성 시 레이어 방식을 이용해서 용량을 줄이는 방식 사용
최고의 장점이자 회사에서도 도입한 이유는 도커를 이용하면 개발 환경을 빠르게 세팅해서 개발 진행 할 수 있음.
여러 대의 컴퓨터에 동일한 환경을 구축하기 위해서 이전에는 OS 설치, 서버 설치와 같은 과정을 계속 반복 했음 하지만 Docker를 활용하면 같은 이미지를 하나의 컨테이너에 담아 돌리기 때문에 동일한 환경이 바로 구축 됨.
# 버전
version: "3"
# 생성하고자 하는 컨테이너 항목들
services:
# 컨테이너1
elasticsearch:
# 도커 이미지 > 컨테이너가 만들어질 수 있는 기반
image: docker.elastic.co/elasticsearch/elasticsearch:6.8.9
# 포트 포워딩 할 포트 지정 <호스트 포트>:<컨테이너 포트>
# 호스트 포트는 중복될 수 없음
ports:
- "5000:5000"
# <현재 폴더 위치>:<컨테이너 상의 위치>
volumes:
- .:/code
environment:
FLASK_ENV: development
# 컨테이너2 : redis
redis:
image: "redis:alpine"
# 버전 확인
docker -v
# 도커 이미지 확인
docker image ls
# 활성화 컨테이너 프로세스 확인 (컨테이너 이름 및 아이디를 확인 할 수 있음)
docker ps
# 컨테이너 내부 진입
docker exec -it (아이디)
# docker-compose.yml에 정의ㅡ되어 있는 모든 서비스 컨테이너를 실행시키기 위해서 사용
# -d 옵션을 통해 백그라운드에서 컨테이너를 띄움 -- 옵션을 사용하지 않으면 컨테이너 로그가 모두 출력됨
docker-compose up -d
# 경로 지정해주고 싶은 경우 -f 옵션 사용
docker-compose -f docker-compose-local.yml up
# 모든 서비스 컨테이너를 한번에 정지 시킴
docker-compose down
# 특정 서비스 컨테이너(ex: container_name) 올리기 위해/정지하기 위해서 사용
docker-compose start container_name
docker-compose stop containeer_name
# docker-compose.ymml에 정의되어 있는 모든 서비스 컨테이너 목록을 조회 할 때 사용
docker-compose ps
# 로그 확인 시 사용 -f 옵션을 붙여 실시간 로그 확인
docker-compose logs -f web
# docker compose 설정 확인 시 사용 -f 옵션을 붙여 여러개의 docker compose 파일이 있을 때 전체 설정 확인하기 위해서 사용
docker-compose config -f
Dockerfile
을 빌드하면 자동으로 도커 이미지가 생성하게 됨# Dockerfile 빌드 명령어
docker build -t mybuild:0.0 ./