도커는 어플리케이션을 개발하고, 옮기고, 배포하는 플랫폼이다.
어플리케이션을 개발 인프라와 분리하기 때문에 배포가 매우 간단해진다.
컨테이너 내에서 개발하고, 또 컨테이너 단위로 배포 및 테스트를 거친다.
도커를 어디에 쓸까? : CI / CD 도구
도커는 로컬 컨테이너라는 정형화된 환경을 제공하기 때문에, 지속적인 통합/발전 시스템을 구축하기 매우 적합하다.
개발한 코드를 도커 컨테이너를 통해 공유할 수 있고, 어플리케이션을 테스트 할 수 있고, 테스트가 오류가 나면 개발환경에서 고친다음에 테스트 환경에 쉽게 통합할 수 있고, 테스트가 완료되면 업데이트된 이미지를 배포하기만 하면 된다.
Docker architecture
도커의 구조를 설명하는 모식도이다. 백그라운드 프로세스로 도커 서버가 돌아가고, docker CLI를 통해 서버와 Rest api로 통신하면서 작동하는 것이다.
도커의 내부 구조는 이러한데, 사용자가 cli나 script를 통해 요청을 보내면 docker daemon 이 컨테이너를 빌드하고, 실행시키고, 배포하는 역할을 한다. Docker daemon은 Docker API를 통해 사용자의 요청을 받아들인다.
도커 클라이언트는 뭐 당연히 cli나 script를 통한 요청같은 거겠져.
도커 레지스트리는 도커 이미지를 저장하는 곳이다. 도커 이미지는 허브에서 가져다 써도 되고 직접 만들어서 보관해도 된다. docker pull 혹은 docker run 을 쓰면, 레지스트리의 이미지들이 가져와서 사용되는거고, push를 하면 레지스트리에 내 도커 이미지를 등록하는 것이다.
Docker Object
- Images
도커 이미지는, 도커 컨테이너를 형성하는 instruction을 담는 읽기 전용 템플릿이다. 이미지를 만드려면 도커파일을 생성하여 정해진 스텝에 따라 만들어주면 된다. 도커파일의 각 instruction을 이미지의 layer를 형성한다. 도커파일을 만들고
- Container
컨테이너는 이미지가 실행할 수 있는 상태로 존재하는 인스턴스이다. 컨테이너는 이미지 혹은 다른 의해 만들어지거나 옵션으로 실행될 수 있다. 컨테이너가 제거되면 저장되지 않은 state는 모두 사라진다.
예를 들어, 우분투 이미지를 띄워본다고 가정하고 이런 커맨드를 사용한다고 해보자.
1. 먼저, 로컬 레지스트리를 뒤져서 ubuntu라는 이름을 가진 이미지가 없으면, 도커 허브에서 pull하여 (docker pull ubuntu) 저장한 다음에 실행시켜준다.
2. pull 한 이미지를 기반으로 새로운 컨테이너를 만든다. (docker container create)
3. 도커는 컨테이너의 마지막 layer에 read-write 할 수 있는 파일시스템을 할당하고, 그 덕분에 컨테이너의 filesystem을 이용하여 파일과 디렉토리를 변경할 수 있다.
4. 컨테이너에 네트워크 인터페이스를 만들고, IP 주소를 할당한다. 호스트 머신의 네트워크 연결을 통해 외부 네트워크와 연결할 수 있다. (포트를 바인딩 해야함)
5. 네트워크 연결 후 bash를 실행시킨다. -i (interactive) , -t (terminal) 설정 덕분에 input을 넣을 수 있고, 결과가 terminal에 나온다.
6. exit 하면 컨테이너가 종료되지만 제거되지는 않는다.
- Service
뭔소린지 모르겠다.
'CI & CD > Docker & Kubernetes' 카테고리의 다른 글
[Docker] 리눅스 환경에서 도커 설치하기 (0) | 2019.11.05 |
---|---|
[Docker] 공식문서 도전기 #5 Kubernetes deploy (0) | 2019.11.05 |
[Docker] 공식문서 도전기 #4 Containerize (0) | 2019.11.04 |
[Docker] 공식문서 도전기 #3 setup (0) | 2019.11.04 |
[Docker] 공식문서 도전기 #1 첫 시작 (0) | 2019.11.04 |
댓글