728x90
반응형
Docker
- 리눅스의 응용 프로그램들을 소프트웨어 컨테이너 안에 배치시키는 일을 자동화하는 오픈 소스 프로젝트
- 마이크로서비스 아키텍쳐의 장점은 최대한 살리고 CI/CD를 통해서 효과적인 개발환경을 만들고 싶다면 모든 서비스 팀에게 Docker를 도입하는 것이 효과적입니다.
- Docker 환경에서 새로운 빌드 환경을 구축할 경우 개발자는 컨테이너 이미지만 실행하여 애플리케이션을 바로 확인 및 동일한 환경에서 테스트 할 수 있으며, 동일한 방식으로 빌드서버에도 적용할 수 있습니다.
- 테스트 환경과 프로덕션 환경을 분리해서 운영하기 위해서는 단순히 Docker Compose 혹은 Dockerfile 설정을 일부 변경하여 실행 및 테스트 할 수 있으며, 트래픽에 대한 분산처리도 유연하게 대응할 수 있습니다.
Docker를 활용한 빌드 서버 작업 과정
- 코드를 빌드합니다.
- 테스트 코드를 통해서 작성된 코드의 문제점이 없는지 확인합니다.
- 컨테이너 이미지를 빌드합니다.
- 실행 중인 컨테이너에서 기능 테스트를 실행하여 컨테이너 이미지를 테스트합니다. 이를 통해 Docker 파일의 오류를 찾을 수 있습니다.
- 컨테이너 레지스트리에 이미지를 푸시합니다.
- 새 이미지로 테스트 클러스터를 업데이트하여 통합 테스트를 진행합니다.
1. Docker 기본 개념
Docker
- https://subicura.com/2017/01/19/docker-guide-for-beginners-1.html
- 컨테이너 기반의 오픈소스 가상화 플랫폼
Container
- 격리된 공간에서 프로세스가 동작하는 기술
- VMWare, VirtualBox: 기존 가상머신은 Host OS 위에 Guest OS 전체를 가상화하여 사용하는 방식
- Docker Container: 프로세스 격리
Image
- 컨테이너 실행에 필요한 파일과 설정값 등을 포함하고 있는 것
- Docker hub에 등록하거나 Docker Registry 저장소를 직접 만들어 관리
Docker Compose
- 복잡한 설정을 쉽게 관리하기 위해 YAML방식의 설정파일을 이용한 Docker Compose라는 툴을 제공
Dockerfile Command
- 공식문서: Docker image를 생성하는데 사용하는 파일
- FROM: 베이스 이미지 지정
- MAINTAINER: Dockerfile 관리 주체 및 이메일 정보 등
- COPY: 파일이나 디렉토리를 이미지로 복사
- ADD: COPY와 유사하나 src에 파일 대신 URL 입력 또는 압축 파일을 입력할 경우 자동 압축 해제 지원
- RUN: 명령어 실행
- CMD: Docker Container 실행되었을 때 실행되는 명령어를 정의, 멀티 명령어는 run.sh 파일을 작성 후 실행 등 활용
- WORKDIR: 명령어들이 실행된 기본 디렉토리 설정
- EXPOSE: Docker Container 실행되었을 때 요청을 기다리고 있는 포트 지정
- VOLUME: Container 외부에 파일을 시스템을 마운트 할 때 사용
- ENV: Container에서 사용할 환경변수 지정
Docker Build
- 임시 컨테이너 생성 > 명령어 수행 > 이미지로 저장 > 임시 컨테이너 삭제 > 새로 만든 이미지 기반 임시 컨테이너 생성 > 명령어 수행 > 이미지로 저장 > 임시 컨테이너 삭제 > … 의 과정을 계속해서 반복
Docker Command
컨테이너 목록 확인:
docker ps -a
컨테이너 중지:
docker stop [OPTIONS] CONTAINER [CONTAINER...]
컨테이너 제거:
docker rm [OPTIONS] CONTAINER [CONTAINER...]
이미지 목록 확인:
docker images [OPTIONS] [REPOSITORY[:TAG]]
이미지 다운로드:
docker pull [OPTIONS] NAME[:TAG|@DIGEST]
이미지 삭제:
docker rmi [OPTIONS] IMAGE [IMAGE...]
컨테이너 명령어 실행:
docker exec [OPTIONS] CONTAINER COMMAND [ARG...]
2 Docker Deployment
Container Update
- 기존 컨테이너 삭제 후 새이미지 기반의 새 컨테이너 실행
- 컨테이너에서 생성된 파일이 삭제되기 떄문에 유지 필요 데이터는 외부 스토리지에 저장하도록 함
Docker Deployment
- 도커를 이용한 웹서비스 무중단 배포하기
- Image 생성 후 Docker Container 실행
3. Docker Data Management
- https://0902.tistory.com/6
- https://medium.com/dtevangelist/docker-%EA%B8%B0%EB%B3%B8-5-8-volume%EC%9D%84-%ED%99%9C%EC%9A%A9%ED%95%9C-data-%EA%B4%80%EB%A6%AC-9a9ac1db978c
- Docker 내의 데이터를 관리하기 위한 방식을 고려할 필요가 있음
Volume Container
- https://joont92.github.io/docker/volume-container-%EC%B6%94%EA%B0%80%ED%95%98%EA%B8%B0/
- 데이터를 저장하는 것이 목적인 Container
- Docker(Linux 기준 /var/lib/docker/volume/)가 관리하는 Host File System의 일부에 Data 저장
- Non-Docker 프로세스들이 File System의 해당 부분을 수정해서는 안됨
- Host OS의 디렉토리를 마운트해서 데이터 관리할 수도 있지만, 이는 Host 디렉토리에 의존성이 생기고 데이터에 잘못된 사용으로 부정적 영향을 줄 수 있음
- 사용 예
- 실행 중인 여러 Container 간에 데이터 공유가 필요한 경우
- Docker Host가 특정 디렉토리나 파일 구조를 가질 수 없는 경우
- 로컬 외의 원격 Host 및 Cloud Provider에 Container 데이터를 저장하려는 경우
Bind Mounts
- https://tttsss77.tistory.com/161
- Host System의 어디에든지 저장
- Docker Host 또는 Docker Container의 Non-Docker 프로세서들이 언제든지 저장된 데이터 수정 가능
- 매우 효과적이지만, Host Machine의 File System 디렉토리 구조에 의존적
- Docker CLI 명령어로 bind mount 관리 불가
- 사용 예
- Host Machine에서 Container로 설정 파일을 공유해야 하는 경우
- Docker Host 개발 환경과 Container 간 소스코드 또는 빌드된 아티팩을 공유
- Docker Host의 파일 또는 디렉토리 구조가 Container가 요구사하는 Bind mount와 일치하는 경우
TMPFS Mounts
- Host System의 메모리에만 데이터 저장
- 비 영구적 상태 정보나 민감 정보들 같이 Container의 생명주기와 맞춰 데이터 보존하고자 할 때 사용
References
https://aws.amazon.com/ko/docker/
728x90
반응형