코드스테이츠 BE Section4 - 클라우드 - 배포 컨테이너(Docker)

coding infant·2022년 10월 5일

코드스테이츠BE

목록 보기
46/48

[Docker]

실행 환경에 구애받지 않고 애플리케이션을 실행할 수 있다

[Docker의 장점]

의존성 충돌 문제를 해결해 준다
개발과 배포 환경을 일치시킨다
수평 확장을 쉽게 해준다
각 서버에 새로운 내용을 배포하기 쉽게 만들어준다

[컨테이너]

의존성이 충돌할 때 컨테이너 기술이 문제 해결. 컨테이너가 실행 환경 격리하여 각자 고유의 의존성을 포함.

격리, 독립적 소유 : 프로세스, 네트워크(개별 IP 할당), 파일 시스템

≠가상 머신(Virtual Machine)

[Docker 사용시]

애플리케이션 구성 자체를 컨테이너화 해서 OS에 상관 없이 즉시 애플리케이션 실행 환경을 만들 수 있다.

개발을 컨테이너 위에서 진행할 경우, 모든 개발팀이 동일한 환경 하에 개발을 진행할 수 있다.

-> AWS ECS 서비스로 애플리케이션을 도커 컨테이너째로 배포할 수 있게 해줌

트래픽 분산 위해 프록시 서버 운영. 프록시 서버는 여러 동일한 검색 서버 중 한 군데 이용 (리버스 프록시 중 로드 밸런서)

오케스트레이션 도구 : 새로운 버전 애플리케이션을 여러 서버 중 몇 대만 운영하여 테스트 하는 방법도 가능.

[Docker 핵심 키워드]

  • 컨테이너 : 애플리케이션이 의존성, 네트워크 환경, 파일 시스템에 구애받지 않고, 도커 위에 실행될 수 있도록 만든 애플리케이션 상자

  • 이미지 : 도커 컨테이너를 생성하는데 사용되는 템플릿. 애플리케이션 및 애플리케이션 구성을 함께 담아놓음. 이미지를 이용해 여러개의 컨테이너 생성 가능 (수평 확장). 기본 이미지로부터 변경 사항 추가/커밋 해서 또 다른 이미지 만들 수 있음(≒git).

  • 레지스트리 : 도커 이미지를 저장하고 배포/공유하는 데 사용

[Docker CLI]

https://docs.docker.com/engine/reference/commandline/container_run/

[docker 순서]

  1. 이미지 풀

docker image pull 도커이미지레포지토리

  1. 컨테이너 생성
docker container run --name 컨테이너이름 -p 로컬호스트포트번호:컨테이너포트번호 httpd 
// httpd는 일정 시간 연결이 없으면 서버 가동 중지
// 인터넷 창에 127.0.0.1 또는 localhost:로컬호스트포트번호 쳐서 웹 서버 작동하는지 확인
  1. 깃 클론

  1. 컨테이너에 파일 업로드
// 해당 파일이 있는 경로에서 명령어 입력. cd로 이동
docker container cp ./ 컨테이너이름:/usr/local/apache2/htdocs/
// 해당 파일을 컨테이너에 전달한다
오류 발생시 확인 방법

docker exec -it 컨테이너이름 bash
// 컨테이너 내부 터미널로 접속
  1. 만든 Docker Container를 이미지 파일로 변환

    5-1. 구동한 Docker Container를 이미지로 만들기

docker container commit 컨테이너이름 이미지이름
// httpd 이미지 pull 한 이후 컨테이너 실행 -> 이미지 카피
docker run --name my_web2 -p 로컬호스트포트번호:컨테이너포트번호 이미지이름

5-2. Docker Image 빌드를 위한 파일인 Dockerfile 로 만드는 방법

FROM httpd:2.4 
// 베이스 이미지를 httpd:2.4로 사용

COPY ./ /usr/local/apache2/htdocs/
// 호스트의 현재 경로에 있는 파일을 생성할 이미지 경로 /usr/local/apache2/htdocs 에 복사

docker build --tag 생성할이미지이름
// --tag는 name:tag 형식으로 이미지 생성 가능
// "." 를 명령어에 꼭 포함하여야! (ex. docker build --tag pacman:2.0)

docker run --name 컨테이너이름 -p 로컬호스트포트번호:컨테이너포트번호 이미지이름

(이미지를 컨테이너로 실행하고 변경사항 다시 이미지로 만드는 방식보다 Dockerfile로 만드는 방법이 더 자주 쓰인다)

[Docker 이미지 다루기]

  1. 한 개의 Docker Image 다루는 방식

1-1. 이미지 pull

1-2. 컨테이너 생성

1-3. 컨테이너에 파일 올리기

docker exec -it 컨테이너이름 bash 
// 컨테이너 내부에서 bash shell 실행
cd /
// 루트 디렉토리로 이동
ls
// 파일 목록 확인

  1. 두 개의 Docker Image 다루는 방식 (docker-compose 사용)

client 컨테이너 - sebcontents/client 이미지 사용 - 80 포트

server 컨테이너 - 0xnsky/server-spring 이미지 사용

2-1. docker-compose.yaml 파일 생성 후 에디터로 아래 내용 복사 붙여 넣기

version: '3.8'

services:
  nginx:
    image: sebcontents/client
    restart: 'always'
    ports:
      - "8080:80"
    container_name: client

  spring:
    image: 0xnsky/server-spring
    restart: 'always'
    ports:
      - "4999:3000"
    container_name: server-spring

2-2. docker-compose up -d 이용해 컨테이너 구동

2-3. 결과는 localhost:8080 또는 127.0.0.1:8080 으로 확인 가능

docker와 가상머신의 차이점 : OS가 별도 존재하는 가상머신. 컨테이너는 OS 공유

0개의 댓글