[Docker]
실행 환경에 구애받지 않고 애플리케이션을 실행할 수 있다
[Docker의 장점]
의존성 충돌 문제를 해결해 준다
개발과 배포 환경을 일치시킨다
수평 확장을 쉽게 해준다
각 서버에 새로운 내용을 배포하기 쉽게 만들어준다
[컨테이너]
의존성이 충돌할 때 컨테이너 기술이 문제 해결. 컨테이너가 실행 환경 격리하여 각자 고유의 의존성을 포함.
격리, 독립적 소유 : 프로세스, 네트워크(개별 IP 할당), 파일 시스템
≠가상 머신(Virtual Machine)
[Docker 사용시]
애플리케이션 구성 자체를 컨테이너화 해서 OS에 상관 없이 즉시 애플리케이션 실행 환경을 만들 수 있다.
개발을 컨테이너 위에서 진행할 경우, 모든 개발팀이 동일한 환경 하에 개발을 진행할 수 있다.
-> AWS ECS 서비스로 애플리케이션을 도커 컨테이너째로 배포할 수 있게 해줌
트래픽 분산 위해 프록시 서버 운영. 프록시 서버는 여러 동일한 검색 서버 중 한 군데 이용 (리버스 프록시 중 로드 밸런서)
오케스트레이션 도구 : 새로운 버전 애플리케이션을 여러 서버 중 몇 대만 운영하여 테스트 하는 방법도 가능.
[Docker 핵심 키워드]
컨테이너 : 애플리케이션이 의존성, 네트워크 환경, 파일 시스템에 구애받지 않고, 도커 위에 실행될 수 있도록 만든 애플리케이션 상자
이미지 : 도커 컨테이너를 생성하는데 사용되는 템플릿. 애플리케이션 및 애플리케이션 구성을 함께 담아놓음. 이미지를 이용해 여러개의 컨테이너 생성 가능 (수평 확장). 기본 이미지로부터 변경 사항 추가/커밋 해서 또 다른 이미지 만들 수 있음(≒git).
레지스트리 : 도커 이미지를 저장하고 배포/공유하는 데 사용
[Docker CLI]
https://docs.docker.com/engine/reference/commandline/container_run/
[docker 순서]
docker image pull 도커이미지레포지토리
docker container run --name 컨테이너이름 -p 로컬호스트포트번호:컨테이너포트번호 httpd
// httpd는 일정 시간 연결이 없으면 서버 가동 중지
// 인터넷 창에 127.0.0.1 또는 localhost:로컬호스트포트번호 쳐서 웹 서버 작동하는지 확인
// 해당 파일이 있는 경로에서 명령어 입력. cd로 이동
docker container cp ./ 컨테이너이름:/usr/local/apache2/htdocs/
// 해당 파일을 컨테이너에 전달한다
오류 발생시 확인 방법
docker exec -it 컨테이너이름 bash
// 컨테이너 내부 터미널로 접속
만든 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-1. 이미지 pull
1-2. 컨테이너 생성
1-3. 컨테이너에 파일 올리기
docker exec -it 컨테이너이름 bash
// 컨테이너 내부에서 bash shell 실행
cd /
// 루트 디렉토리로 이동
ls
// 파일 목록 확인
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 공유