일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- subquery
- Query
- 네이티브쿼리
- 2 > /dev/null
- appspec
- application.yml
- 예약
- AuthenticationEntryPoint
- 적용우선순위
- 참조키
- docker명령어
- appspec.yml
- 외부키
- 검색
- ㅔㄴ션
- 메소드명
- EC2
- 커밋메세지수정
- 추후정리
- querydsl
- 컨테이너실행
- 포트
- WeNews
- 테스트
- 메세지수정
- foreignkey
- ubuntu
- MySQL
- 테스트메소드
- 서브쿼리
- Today
- Total
제뉴어리의 모든것
[Section 4] [Cloud] 배포 컨테이너 - 1 본문
위 내용은 본인의 공부를 위한 내용이므로, 정확한 정보가 아닐 수도 있습니다.
감안하여 보도록 합시다.
전체 항목
- 컨테이너 기술이란?
- 도커(Docker) 란?
- Docker 핵심 개념
Docker 기본 사용법Docker 사용시 기본 명령어
컨테이너 기술이란?
가장 이해하기 쉬운 개념은 우리가 쓰는 컴퓨터 환경처럼 컴퓨터 내부에 또다른 환경을 만든것이다.
그리고 그런 환경을 여러개 만들 수 있으며, 그렇게 만들어진 각 환경에서 특정 애플리케이션을 작동시킬 수도 있다.
그렇다면 왜 컨테이너라고 할까?
컴퓨터 위에 만들어진 여러개의 환경, 즉 컨테이너는 각각의 컨테이너와 완전히 격리되어 있다.
일상생활에서 쓰이는 컨테이너도 다른 컨테이너와는 완전히 격리 되어있는 것을 의미하듯이,
컴퓨터상에 각각의 컨테이너는 격리되어 있는 환경이므로 컨테이너라고 한다.
그렇다면 격리되어있다는게 무슨 의미일까?
당연히 물리적으로 각 컨테이너는 컴퓨터의 하드웨어적인 성능은 공유한다.
각각의 컨테이너가 독립적으로 사용하는 즉, 격리되어 사용하는 요소는 다음과 같다.
- 프로세스
각각의 컨테이너는 다른 컨테이너의 프로세스에 접근이 불가하다. - 네트워크
각각의 컨테이너는 자신의 고유한 IP 주소를 가지고 있다. - 파일 시스템
파일 시스템의 구조가 독립적이다.
쉽게 말해, 윈도우를 예를 들자면 c드라이브, 내문서 이런 경로들이 컨테이너 마다 각각 갖고 있는것이다.
그렇다면 VM(Virtual Machine) 에 대해 알고 있는 사람은 의문이 들것이다.
컨테이너는 VM과 같은것인가라고.
다르다. 아래 그림을 보자
위에서
Virtual Machine 부분 그림에
[App 1 + Bins/LIbs + Guest OS] 이 하나의 VM(가상머신)이다.
그러나 Container는
OS가 존재하지 않고 [App1 + Bins/Libs] 가 하나의 Container(컨테이너)이다.
즉, VM은 각 VM이 물리적으로 현재 PC에 존재할뿐,
컴퓨터 내부에서 별도의 OS까지 가지고 있는 정말 하나의 컴퓨터이다.(논리적으로)
반면,
컨테이너는 OS는 공유하며, 나머지 환경들만 독립적이다.
그리고 이러한 컨테이너의 "격리 환경"을 만들 수 있게 해주는 기능이
namespace 와 cgroup 이라는 기능이다.
- namespace: 프로세스를 독립시켜주는 가상화 기술이다. 각 컨테이너에서 실행된 프로세스가 시스템(user, 파일, 네트워크, 호스트명, 프로세스)등에 대해 독립할 수 있게 해준다.
- cgroups: 자원(CPU, 메모리, network bandwidth)에 대한 제어를 가능하게 해주는 리눅스 커널의 기능이다.
정리하자면,
컨테이너 기술이란 호스트 PC의 OS 위에서 돌아가는 여러 프로세스 중 하나인데,
그 프로세스는 다른 프로세스들과는 독립되어진 환경이고, 그 독립되어진 환경안에 각종 애플리케이션들을 설치할 수 있게 해주면서 마치 호스트 PC와는 다른 환경처럼 사용할 수 있게 해주는 리눅스 기반의 기술이다.
https://techblog-history-younghunjo1.tistory.com/205
참조 : https://velog.io/@ragnarok_code/docker-%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4-%EA%B2%A9%EB%A6%AC
도커(Docker) 란?
도커란 위에서 말한 컨테이너 기술을 사용할 수 있도록 해주는 오픈소스인 플랫폼이다.
쉽게 생각하자.
DB란 기술이 있다면, DB의 기술을 사용할수 있게 해주는 MySQL, MS-SQL 같은것이다.
즉, 그냥 소프트웨어이다.
- Docker의 아키텍쳐
Docker 핵심 개념
위에 있는 Docker의 아키텍쳐 그림과 같이 보는것이 이해하기에 수월하다.
- Image (이미지)
컨테이너의 틀이 되는 하나의 환경 자체를 의미한다.
프로그래밍에 비유하자면 컨테이너 객체이고, 이미지는 클래스이다.
그래서 이미지만 가지고 있다면 어디에서든지 컨테이너는 생성하여 똑같은 환경을 만들어 낼 수 있다. - Container (컨테이너)
이미지로 인해 만들어진 하나의 환경. - Docker Registries (레지스트리)
이미지들이 저장되어 있는 저장소.
Docker Hub, Amazon ECR 와 같이 여러 저장소들이 존재한다.
Docker CLI에서 Image를 사용하여 컨테이너를 생성하려고 할때, HOST 컴퓨터 (그냥 내 컴퓨터다) 에 해당 Image가 존재하지 않을 경우, 기본 레지스트리에서 다운받아, 다운받은 이미지로 컨테이너를 생성한다.
쉽게 생각해서 그냥 Git Hub 같은 개념이다. - Docker Hub
Docker의 공식 레지스트리 (Registries)이다 - Dockfile
- 이미지를 만들기 위한 스크립트 (설정파일)이다.
- 이미지를 어떻게 만드는지에 대한 내용이 기술되어있다
- 도커는 해당 파일의 내용을 순차적으로 읽어서 이미지를 생성한다
- Dockerfile은 DSLDomain-specific language 이라는 자체 언어를 사용한다.
- Dockfile 예시
FROM subicura/vertx3:3.3.1
MAINTAINER chungsub.kim@purpleworks.co.kr
ADD build/distributions/app-3.3.1.tar /
ADD config.template.json /app-3.3.1/bin/config.json
ADD docker/script/start.sh /usr/local/bin/
RUN ln -s /usr/local/bin/start.sh /start.sh
EXPOSE 8080
EXPOSE 7000
CMD ["start.sh"]
- Docker Client (클라이언트)
Docker Daemon과 사용자가 상호작용할 수 있는 접점 역할을 하는 프로그램이라고 생각하면 된다.
사용자가 docker 관련 명령어를 입력하여 받는곳이 docker client이고, 이 docker client는 해당 명령을 Docker Daemon (dockerd) 에게 전달한다.
- Docker Daemon (데몬)
Docker client로부터 들어오는 명령어 (request) 를 받아서, Docker에서 사용되는 Container, Image, Registry 와
Docker 의 네트워크 에게 전달하고 직접적으로 소통하는 역할의 프로그램이라고 생각하자. - Docker Objects
Docker에서는 Container, Image, Registry 같은 개념들이 모두 Object이다.
참조 : https://cultivo-hy.github.io/docker/image/usage/2019/03/14/Docker%EC%A0%95%EB%A6%AC/
참조 : https://learning-sarah.tistory.com/entry/Docker-%ED%95%B5%EC%8B%AC-%EA%B0%9C%EB%85%90
참조 : https://jfrog.com/knowledge-base/docker-hub-and-docker-registries-a-beginners-guide/
https://docs.docker.com/get-started/overview/
'코드스테이츠 > 정리 블로깅' 카테고리의 다른 글
[Section1] section1 회고 (0) | 2022.10.17 |
---|---|
[Section 4] [Cloud] 배포 컨테이너 - 2 (0) | 2022.10.09 |
[Section 4] [Spring Security] 배포 자동화 - 1 [추후 정리] (0) | 2022.10.07 |
[Section 4] [Spring Security] 운영환경 구성 - 2 ( 실습 ) [추후 정리] (0) | 2022.10.05 |
[Section 4] [Spring Security] 운영환경 구성 - 1 (0) | 2022.10.04 |