https://atl.kr/dokuwiki/doku.php/multicasting_test
https://void.tistory.com/entry/rpfilter
https://kubernetes.io/ko/docs/home/
https://dongle94.github.io/docker/docker-registry-image-remove/
- 이미지 삭제(curl 명령어에 --user ID:PW 추가)
https://seongjin.me/docker-swarm-services/
https://watch-n-learn.tistory.com/49
https://medium.com/dtevangelist/docker-%EA%B8%B0%EB%B3%B8-8-8-docker%EC%9D%98-network-c75f3077335d
https://mns010.tistory.com/20 -> 브릿지
https://blog.naver.com/freepsw/220868775278 -> 호스트 단위로도 로드 밸런싱 확인
https://joont92.github.io/docker/network-%EA%B5%AC%EC%A1%B0/
https://yeko90.tistory.com/entry/how-to-use-docker-compose
Docker는 컨테이너 기반 가상화를 지원하는 플랫폼이며 Go 프로그래밍 언어로 작성되었으며 Linux 커널의 기능을 활용하여 기능을 제공합니다. 컨테이너 기술을 사용하여 소프트웨어 개발 및 배포를 단순화하는 도구로 컨테이너는 코드와 해당 코드를 실행하는 데 필요한 종속성 및 도구가 포함된 소프트웨어 패키지입니다. Docker를 사용하면 동일한 코드와 도구를 포함하는 컨테이너를 만들 수 있으며, 이는 Docker가 활성화된 모든 환경에서 동일한 결과를 생성하는 장점이 있습니다.
Docker를 사용하면 개발자는 소프트웨어 개발 및 배포를 위한 표준화된 환경을 구축할 수 있습니다. 이를 통해 개발자는 코드가 항상 올바른 환경에서 실행되도록 보장 가능하며 모든 OS환경에서 실행되므로 개발자는 각자의 상황에 맞는 환경에서 개발하고 테스트할 수 있습니다.
또한 컨테이너의 생성 및 관리를 단순화하는 도구입니다. 이를 통해 개발자는 응용 프로그램을 배포할 때 독립적이고 표준화된 응용 프로그램 패키지가 필요합니다. Docker를 사용하면 프로그래밍 언어를 Docker 컨테이너에 고정하여 코드가 항상 올바른 언어 버전에서 실행되도록 할 수 있습니다. Docker를 사용하여 개발한 애플리케이션을 프로덕션 환경(실제로 운영되는 환경)에 배포할 때는, 먼저 Docker 이미지를 빌드하고, 이를 Docker 레지스트리에 푸시합니다. 그런 다음, 배포 대상 환경에 맞는 컨테이너 오케스트레이션 도구를 사용하여 컨테이너를 배포합니다. 이를 통해 프로덕션 환경이 로컬 데이터 센터, 클라우드 공급자 또는 둘의 하이브리드인지 여부에 관계없이 동일하게 작동합니다.
- 포터빌리티(Portability): Docker 컨테이너는 어디서든 실행될 수 있습니다.
- 간편한 배포(Deployment): Docker는 컨테이너 단위로 애플리케이션을 패키징하므로, 배포가 매우 간편합니다.
- 확장성(Scalability): 컨테이너의 가볍고 빠른 특성으로 인해, 수평적인 확장이 쉽습니다.
- 효율성(Efficiency): Docker는 가상화 기술에 비해 빠르고 가볍습니다.
Docker는 크게 4가지 요소로 구성됩니다.
- Docker Engine은 Docker의 핵심 요소
- 컨테이너를 생성하고 실행하는 기능을 제공
- Docker Hub은 Docker에서 제공하는 공식 이미지 저장소
- 사용자들은 Docker Hub에서 이미지를 검색하고 다운로드하여 사용
- 별도의 설치 필요
- Docker Compose는 Docker 애플리케이션의 멀티 컨테이너 환경을 관리하기 위한 툴
- 단일 호스트에서 여러 개의 컨테이너를 실행하는 도구
- YAML 파일을 사용하여 여러 개의 컨테이너를 정의
- 컨테이너의 수평 확장은 불가능
- 단일 호스트에서 컨테이너를 실행하는 것을 관리하기 위한 다양한 기능을 제공 X
- Docker Engine에 내장
- Docker Swarm은 여러 대의 호스트에서 Docker 컨테이너를 관리하고 실행하기 위한 오케스트레이션 도구
- 여러 개의 호스트에서 컨테이너를 실행하는 분산 시스템을 구성하는 도구
- 여러 개의 호스트를 하나의 클러스터로 묶어서, 클러스터 내에서 컨테이너를 실행하고 관리
- 컨테이너의 수평 확장이 가능
- 컨테이너의 스케일링, 로드 밸런싱, 서비스 디스커버리 등의 기능을 제공
- Docker 설치
- Docker는 Windows, macOS, Linux 등 다양한 운영체제에서 사용 가능
- 각 운영체제에 맞는 Docker 설치 방법을 찾아 설치
- Dockerfile 작성
- Dockerfile은 Docker 이미지를 만드는 데 사용되는 스크립트
- Dockerfile을 작성하여 Docker 이미지 생성
- Docker 이미지 빌드
- Dockerfile을 사용하여 Docker 이미지를 빌드
- Docker 컨테이너 실행
- Docker 이미지를 사용하여 Docker 컨테이너를 실행
Docker를 사용하면 개발자는 동일한 환경에서 어플리케이션을 실행할 수 있으며, 이는 응용 프로그램을 배포할 때 매우 중요한 재현성을 보장합니다. 또한, Docker는 컨테이너 기술을 사용하여 소프트웨어 개발 및 배포를 단순화하는 도구입니다.
- 개발
- Docker를 사용하여 개발하면 동일한 환경에서 어플리케이션을 실행 가능
- 동일한 환경에서 어플리케이션을 실행 가능한 것은 응용 프로그램을 배포할 때 매우 중요한 재현성을 보장
- 테스트
- Docker를 사용하여 테스트하면 응용 프로그램을 실행하는 데 필요한 모든 종속성을 포함하는 컨테이너 생성 가능
- 응용 프로그램을 실행하는 데 필요한 모든 것이 포함된 환경을 보장 가능
- 배포
- Docker를 사용하여 배포하면 응용 프로그램을 배포하는 데 필요한 모든 것을 포함하는 컨테이너를 생성 가능
- 응용 프로그램을 배포하는 데 필요한 모든 것이 포함된 환경을 보장 가능
소프트웨어 개발에서 독립적으로 표준화된 어플리케이션 패키지를 원하는 이유에 대해 알아야 합니다. 각각의 다른 개발 환경에서 개발하며 어떤 최신버전의 언어와 도구를 사용하여 성공적으로 실행되는 경우 이전에 버전에서는 실행할 수 없는 문법이나 기능이 있을 것입니다. 하지만 최신버전이 로컬 개발환경에만 적용되어 있을 경우 많은 문제가 발생 할 수 있습니다. 이런 문제를 해결하기 위해 개발환경과 동일한 환경을 갖는데에 매우 큰 의미가 있습니다.
또한, 한 팀 내에 속해 있어 동일한 프로젝트를 수행하는 경우, 각각의 다른 버전의 사용하고 있을 수 있습니다. 이때 서로 코드를 공유하면 하위 버전을 사용하는 사람들에게는 작동하지 않을 수 있습니다. 하위 버전을 사용하느 사람들이 최신 버전으로 업데이트 하는 것은 문제가 되지 않으며. 시스템에서 쉽게 업데이트를 할 수 있다는 것입니다.
또한, 혼자 작업하는 프로젝트가 여러 개일 경우 충돌하는 버전이 있을 수 있습니다. 어떤 프로젝트에서 어떤 이유로든 각 프로젝트마다 다른 버전의 언어를 사용하고 있을 수 있습니다. 이럴 경우 프로젝트 A에서 프로젝트 B로 전환할 때마다 잘못된 버전을 제거하고 올바른 버전을 설치해야 한다는 문제가 발생합니다. 이런 문제들을 해결하는데 컨테이너 작업을 고려해야하고 도커가 컨테이너에 매우 유용한 도구인 것입니다.
따라서, 도커를 사용하여 각각의 프로젝트에 그들만의 컨테이너가 존재하도록 도와줌으로써, 프로젝트를 전환하는 경우 버전의 업그레이드 혹은 다운그레이드가 필요할 때마다 매번 제거하고, 다시 설치할 필요 없이 다른 컨테이너를 시작하는 것으로 쉽게 프로젝트를 전환할 수 있습니다.