Docker
정의.
- 도커는 컨테이너 기반의 가상화 플랫폼이다.
- 컨테이너화된 앱을 빠르게 빌드, 테스트 및 배포할 수 있게 해주는 소프트웨어 플랫폼으로 컨테이너 서비스는 런타임의 통합 관리(시작 , 중지, 확장)를 지원한다.
- 어플리케이션 개발 및 배포 수명 주기를 단순화, 자동화 및 가속화할 수 있다.
Docker를 사용하면 코드를 더 빨리 전달하고, 애플리케이션 운영을 표준화하고, 코드를 원활하게 이동하고, 리소스 사용률을 높여 비용을 절감할 수 있습니다. Docker를 사용하면 어디서나 안정적으로 실행할 수 있는 단일 객체를 확보하게 됩니다. -
AWS
왜 도커를 쓰나요?
보통 개발자가 개인 피시에서 작업을 하고, 개발한 소프트웨어를 운영서버에 올린다. 개발서버와 운영서버는 환경이 다르기에, 개발서버에서 설치한 소프트웨어들을 운영서버에도 설치해줘야 하고, 코드에 문제가 있을 시 다시 배포해줘야 한다. 위 작업들이 실제 개발을 할 때, 생각보다 많은 비용(시간)이 소요될 수가 있다.
또한, 이러한 작업을 사람이 직접 여러 서버에 하다 보면, 실수가 발생하여 서버 간 환경이 조금씩 달라질 수 있다.
이를 snowflake server(눈송이 서버)라고 한다. 눈송이를 보면 다 똑같은 모양처럼 느껴지지만 실제론 다들 조금씩 다르다. 운영하는 입장에서 가장 껄끄러운 게 오래된 서버라고 한다. 조금씩 다른 서버에 무슨 문제가 일어날지 모르기 때문이다.
쉽게 말해서 배포시, “내 컴퓨터에서 동작하는 문제”를 해결할 수 있다.
만약 동작하지 않으면 여러 방면으로 에러가 어디서 발생했는지 생각할 수 있다.
- 로컬과 서버의 특정 라이브러리, 패키지, 언어의 version이 다르면 에러가 나거나,
- 의존성이 달라서 에러가 날 수 도 있고
- 맥에서 작성한 코드가 윈도우에선 동작하지 않을수도 있다.
- …
도커는 이런 dev environment disparity(개발 환경 차이)를 해결해준다. 앱 뿐만 아니라, tools, 의존성, 설정, npm , assets 등 앱의 런타임을 위한 모든 것을 이미지로 캡쳐해두고, 이미지를 전달해서 독립적인 실행환경을 만들 수 있다.
쉽게 얘기해서.
어플리케이션, 시스템 툴, 디펜던시를 모두 모아서 컨테이너에 담고, 윈도우, 맥, 리눅스, 데이터센터, 클라우드, 개인 노트북 등 어떤 환경에서도 실행하고 배포할 수 있도록 도와준다. 이것저것 설정할 필요없는 짱 유용한 패키징 툴.
여기서 설명하는 컨테이너는?
컨테이너란 기술은 OS위에 다수의 어플리케이션 자원을 공유하면서 구동되는 환경을 말한다. 화물선은 OS, 화물선 위의 컨테이너 박스를 어플리케이션 컨테이너로 볼 수 있다.
도커 장점
- 빠른 속도와 효울성
- 하드웨어 에뮬레이션이 없기 때문에 빠르게 실행이 가능.
- 높은 이식성
- 독자적인 실행환경을 가지고 있다. 이 환경은 파일로 구성되고 이미지 형식으로 공유가 가능. 즉, 원하는 환경을 파일로 만들면 어떤 머신이든 해당 환경을 시뮬레이션 할 수 있음.
- 상태를 가지지 않음
- 다른 컨테이너에게 영향을 주지 않기 때문에 , 이미지 기반으로 컨테이너를 실행하는 경우 실행 환경을 쉽게 재사용 할 수 있다.
도커 시작하기
building Container를 위해선?
- Dockerfile
- image
- Container
Dockerfile
Docker에서 이미지를 만들기 위한 용도로 작성하는 파일.
- 어플리케이션에 필요한 파일은 무엇이 있는지
- 어떤 디펜던시, 라이브러리르 사용하는지
- 필요한 환경변수를 설정 가능
- 어떻게 구동해야할지를 설정할 수 있다.
이미지
도커 이미지는 컨테이너 실행에 필요한 파일과 설정값을 포함한 읽기 전용(Read-only) 템플릿이다.
- 이미지에는 앱 실행에 필요한 코드, 시스템, 툴, 라이브러리 세팅 등이 포함되어 있음.
- 실행되고 있는 앱의 상태를 캡쳐해서 이미지로 만들어둔 것.
- immutable 상태를 가진다.
컨테이너
- 캡쳐해둔 이미지를 개별적인 시스템으로 실행할 수 있고, 이 컨테이너 안에서 어플리케이션이 동작한다.
- 컨테이너는 이미지를 실행한 상태로 추가되거나 변하는 값은 컨테이너에 저장된다.
- 도커 이미지의 인스턴스를 의미한다.
정리
Dockefile에 기입해둔 설정을 바탕으로 이미지 파일을 빌드하고, 이미지 파일을 실행해서 컨테이너를 구동시킬 수 있는 것. 각각의 컨테이너는 독립적으로 실행되기에, 로컬 환경에서 만든 이미지를 서버딴에 전달 후 실행하면 별도의 환경 설정 없이도 앱을 실행할 수 있다.
정리
Dockefile에 기입해둔 설정을 바탕으로 이미지 파일을 빌드하고, 이미지 파일을 실행해서 컨테이너를 구동시킬 수 있는 것. 각각의 컨테이너는 독립적으로 실행되기에, 로컬 환경에서 만든 이미지를 서버딴에 전달 후 실행하면 별도의 환경 설정 없이도 앱을 실행할 수 있다.
| -d | detached mode 흔히 말하는 백그라운드 모드 |
| -p | 호스트와 컨테이너의 포트를 연결 (포워딩) |
| -v | 호스트와 컨테이너의 디렉토리를 연결 (마운트) |
| -e | 컨테이너 내에서 사용할 환경변수 설정 |
| –name | 컨테이너 이름 설정 |
| –rm | 프로세스 종료시 컨테이너 자동 제거 |
| -it | -i와 -t를 동시에 사용한 것으로 터미널 입력을 위한 옵션 |
| –link | 컨테이너 연결 [컨테이너명:별칭] |
의문.
도커는 서버 운영 기록을 코드화 한 것, 그래서 실행 시점에 상관 없이 구성 시점을 고정할 수 있다고 함.
서버 운영 기록은 왜 중요하지..? 그냥 log 아닐까? 이건 질문을 정리해봐야겠다.
Docker For Production: Deployment, Advantages & Best Practices
'studyLog > 알아보자' 카테고리의 다른 글
크로스 브라우징이란? (0) | 2022.11.02 |
---|---|
구글 클라우드 플랫폼으로 Vue 프로젝트 배포하기 + 300 달러 공짜로 받기 (0) | 2022.10.08 |
Vercel에서 Proxy를 사용해보자. (2) | 2022.10.07 |
DP(다이나믹 프로그래밍) 그거 어떻게 하는건데? (0) | 2022.09.20 |