ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 항해 99 5기 TIL_91
    항해 99 2022. 4. 11. 06:30

    ▶ Today I Learned

     

    <Docker>

     

    며칠 전 찾은 글에 이어 추가적으로 도커에 대해 정리해보고자 한다.

     

    IBM의 정의:

    "Docker is an open source platform for building, deploying, and managing containerized applications."

    도커는 컨테이너화된 애플리케이션을 만들고 배포하고 관리하는 오픈소스 플랫폼이다.

    "Docker is an open source containerization platform. It enables developers to package applications into containers—standardized executable components combining application source code with the operating system (OS) libraries and dependencies required to run that code in any environment."

    도커는 오픈 소스 컨테이너화 플랫폼이다. 도커를 통해 개발자들은 애플리케이션을 컨테이너에 담을 수 있다.

    여기서 컨테이너는 애플리케이션 소스 코드를 어떤 환경에서도 그 코드를 동작시키는 데 필요한 OS 라이브러리들과 디펜던시들과  결합시켜주는 표준 규격의 실행가능 컴포넌트를 말한다.

     

    출처:

    https://www.ibm.com/in-en/cloud/learn/docker

     

    즉, 쉽게 말해 개발 소스코드와 그에 필요한 모든 환경설정, 시스템 툴, 디펜던시들을 하나의 컨테이너에 담아 어떤 환경에서도 똑같이 작동되게 도와주는 툴 이라 볼 수 있다. 도커를 이용하면 배포가 용이해진다.

     

    여기서 컨테이너란?

    : 개별 Software의 실행에 필요한 실행환경을 독립적으로 운용할 수 있도록 기반환경 또는 다른 실행환경과의 간섭을 막고 실행의 독립성을 확보해주는 운영체계 수준의 격리 기술, 기존의 VM(Virtual Machine)을 사용하는 것 보다 훨씬 가볍다고 할 수 있다.

     

    참고자료:

    https://captcha.tistory.com/46

    https://velog.io/@geunwoobaek/%EC%BB%A8%ED%85%8C%EC%9D%B4%EB%84%88-%EB%B0%8F-%EB%8F%84%EC%BB%A4-%EA%B0%9C%EB%85%90%EC%A0%95%EB%A6%AC#:~:text=%EC%BB%A8%ED%85%8C%EC%9D%B4%EB%84%88(Container)%EB%8A%94%20%EA%B0%9C%EB%B3%84%20Software,%EC%9D%98%20%EA%B2%A9%EB%A6%AC%20%EA%B8%B0%EC%88%A0%EC%9D%84%20%EB%A7%90%ED%95%A9%EB%8B%88%EB%8B%A4. 

     

    [도커 구조 및 구성요소]

     

    출처: 도커 공식 문서

     

    Docker uses a client-server architecture. The Docker client talks to the Docker daemon, which does the heavy lifting of building, running, and distributing your Docker containers. The Docker client and daemon can run on the same system, or you can connect a Docker client to a remote Docker daemon. The Docker client and daemon communicate using a REST API, over UNIX sockets or a network interface. Another Docker client is Docker Compose, that lets you work with applications consisting of a set of containers.

    클라이언트-서버 아키텍쳐,

    도커 데몬이 사용자의 도커 컨테이너를 생성, 실행, 배포하는 중한 작업을 하며 도커 클라이언트가 도커 데몬에 명령을 내리는(talks to) 형태이다.

    위 둘은 동일한 시스템 상에서 실행될 수도 있고 또는 하나의 도커 클라이언트를 원격 도커 데몬에 연결시킬 수도 있다.

    이 둘은 UNIX 소켓이나 네트워크 인터페이스 상에서 REST API를 이용하여 소통한다.

    또 다른 도커 클라이언트로는 도커 컴포즈가 있는데 이는 사용자가 한 세트의 컨테이너로 구성된 애플리케이션으로 작업할 수 있게 해준다.

     

    **Docker Daemon**

     

    The Docker daemon (dockerd) listens for Docker API requests and manages Docker objects such as images, containers, networks, and volumes. A daemon can also communicate with other daemons to manage Docker services.

    도커 데몬은 도커 API 요청을 수용하며 이미지, 컨테이너, 네트워크, 볼륨같은 도커 오브젝트들을 관리한다. 하나의 데몬은 도커 서비스를 관리하기 위해 다른 데몬들과 소통 또한 할 수 있다.

     

    도커 데몬을 이용하면 image를 registry로부터 다운 받거나 올리거나, image로부터 container를 실행하거나

    image를 새로 만들거나 할 수 있다.

     

    **Docker Client**

     

    The Docker client (docker) is the primary way that many Docker users interact with Docker. When you use commands such as docker run, the client sends these commands to dockerd, which carries them out. The docker command uses the Docker API. The Docker client can communicate with more than one daemon.

    도커 클라이언트는 수 많은 사용자들이 도커와 상호 작용하는 주요 수단이다.

    docker run과 같은 명령어를 사용하면 도커 클라이언트는 이러한 명령어들을 도커 데몬에 전달하고 그곳에서 명령어들을 실행한다.

    도커 명령어는 도커 API를 사용한다.

    도커 클라이언트는 하나 이상의 데몬과 소통할 수 있다.

     

    **Docker Desktop**

     

    Docker Desktop is an easy-to-install application for your Mac or Windows environment that enables you to build and share containerized applications and microservices. Docker Desktop includes the Docker daemon (dockerd), the Docker client (docker), Docker Compose, Docker Content Trust, Kubernetes, and Credential Helper. For more information, see Docker Desktop.

     

    도커 데스크탑은 사용자가 컨테이너화된 애플리케이션들과 마이크로서비스들을 생성할 수 있게 해주는 맥 또는 윈도우 환경에서 설치가 용이한 애플리케이션이다. 도커 데스크탑에는 도커 데몬, 도커 클라이언트, 도커 컴포즈, 도커 컨텐트 트러스트, 쿠버네티스, 크레덴셜 헬퍼가 포함되어 있다. 더 많은 정보를 보기 위해선 해당 링크 참조

     

    cf) 최근 도커 홈페이지 블로그에 따르면 맥OS, 윈도우 뿐만 아니라 리눅스에서도 도커 데스크탑을 쓸 수 있다고 한다.

    자세한 사항은 하단 링크 참조

    https://www.docker.com/blog/the-magic-of-docker-desktop-is-now-available-on-linux/

     

     

    **Docker Registry**

     

    A Docker registry stores Docker images. Docker Hub is a public registry that anyone can use, and Docker is configured to look for images on Docker Hub by default. You can even run your own private registry.

    When you use the docker pull or docker run commands, the required images are pulled from your configured registry. When you use the docker push command, your image is pushed to your configured registry.

    도커 레지스트리는 도커 이미지들을 저장한다.

    도커 허브는 누구나 이용 가능한 공용 레지스트리이며 도커는 기본적으로 도커 허브에서 이미지들을 찾도록 설정되어 있다.

    사용자는 개인 레지스트리 역시 운영 가능하다.

    docker pull이나 docker run이라는 명령어를 실행하면 요구되는 이미지들을 본인이 지정한 레지스트리에서 가져온다.

    docker push라는 명령어를 실행하면 이미지를 본인이 지정한 레지스트리로 푸쉬한다.

     

     

    **Docker Objects**

     

    Images:

    쉽게 요약하자면 어플리케이션을 실행하기 위한 모든 것들이 저장되어 있는 파일,

    An image is a read-only template with instructions for creating a Docker container

    이미지는 도커 컨테이너 생성 지침이 들어있는 읽기 전용 템플릿이다.

    도커이미지는 다른 이가 만들어 놓은 것을 가져다 쓸수도 있고 본인이 직접 만들 수도 있다.

     To build your own image, you create a Dockerfile with a simple syntax for defining the steps needed to create the image and run it.

    직접 만들게 되면 단순한 문법으로 구성된 Dockerfile이라는 것을 만들어야 하는데 Dockerfile은 이미지를 만들고 실행하기 위한 단계들을 정의하고 있다.

    Each instruction in a Dockerfile creates a layer in the image.

    Dockerfile에 들어있는 각각의 지침마다 이미지에 레이어를 만들어낸다.

    When you change the Dockerfile and rebuild the image, only those layers which have changed are rebuilt. This is part of what makes images so lightweight, small, and fast, when compared to other virtualization technologies.

    Dockerfile을 변경하고 이미지를 새로 형성할 때 변경되는 부분의 레이어들만 새로이 형성한다. 이로 인해 도커 이미지들은 다른 virtualization 기술들에 비해 더욱 가볍고 작으며 빠른 성질을 갖게되는 것이다.

     

    Container:

    A container is a runnable instance of an image

    이미지의 실행가능한 인스턴스

    You can create, start, stop, move, or delete a container using the Docker API or CLI.

    도커 API나 CLI(Command Line Interface, 명령어 기반으로 조작하는 인터페이스)를 이용하여 도커 컨테이너를 생성, 실행, 중지, 이전할 수 있다.

    You can connect a container to one or more networks, attach storage to it, or even create a new image based on its current state.

    하나의 컨테이너를 하나 이상의 네트워크에 연결할 수 있으며 컨테이너에 스토리지를 첨가할 수도 있다. 심지어 컨테이너의 현재 상태를 기반으로 새로운 이미지를 만들어낼 수도 있다.

    By default, a container is relatively well isolated from other containers and its host machine. You can control how isolated a container’s network, storage, or other underlying subsystems are from other containers or from the host machine.

    기본적으로 하나의 컨테이너는 다른 컨테이너들 및 호스트 기기와는 상대적으로 잘 격리되어 있다.

    본인이 직접 컨테이너의 네트워크, 스토리지, 또는 다른 기반 서브시스템들과 다른 컨테이너 혹은 호스트 기기와의 격리 정도를 조정할 수 있다.

    A container is defined by its image as well as any configuration options you provide to it when you create or start it. When a container is removed, any changes to its state that are not stored in persistent storage disappear.

    컨테이너를 생성하거나 실행할 때 하나의 컨테이너는 그 컨테이너의 이미지와 본인의 설정 옵션들로 정의된다.

    컨테이너가 제거되면 영구 스토리지에 저장되지 않은 해당 컨테이너의 상태 변화는 모두 사라지게 된다.

     

     

    참고자료:

    https://l-0-l.tistory.com/40?category=997453 

    https://docs.docker.com/get-started/overview/

     

     

    [도커 다운로드]

     

    (Mac OS 기준)

    1) 해당 링크를 통해 들어가 자신의 OS에 맞는 도커 파일을 다운로드 한다.

    https://docs.docker.com/get-started/

     

    이때 Mac의 경우 최근 M1칩이 나왔었으므로 본인의 기기가 M1칩을 쓰고있는지 인텔칩을 쓰고 있는지 확인하고

    알맞은 버전으로 다운로드해준다.

     

    2) 설치 파일을 실행하여 진행한다.

     

    우선 다운로드 완료!

     

    [도커 실행]

    공식 문서를 따라 아래의 명령어를 실행해보았다.

     

    docker run -dp 80:80 docker/getting-started

    (여기서 -dp는 -d -p와 같이 나눠쓸 수도 있다.)

     

    -d - run the container in detached mode (in the background)

    d는 detached mode에서 컨테이너를 실행하는 데 쉽게 말해 일반모드와는 다르게 백그라운드에서 실행할 수 있게 해주는 플래그

    -p 80:80 - map port 80 of the host to port 80 in the container

    p는 port의 약자로서 호스트의 80번 포트와 컨테이너의 80번 포트를 이어주는 플래그

    docker/getting-started - the image to use

    사용할 이미지

     

    그 결과는 아래와 같은 형태로 나온다.

     

    hoon@Hoonui-MacBookAir ~ % docker run -dp 80:80 docker/getting-started
    Unable to find image 'docker/getting-started:latest' locally
    latest: Pulling from docker/getting-started
    어떤 코드: Pull complete
    어떤 코드: Pull complete
    어떤 코드: Pull complete
    어떤 코드: Pull complete
    어떤 코드: Pull complete
    어떤 코드: Pull complete
    어떤 코드: Pull complete
    어떤 코드: Pull complete
    Digest: sha256:블라블라
    Status: Downloaded newer image for docker/getting-started:latest
    어떤 코드
    hoon@Hoonui-MacBookAir ~ %

    이후 브라우저에서 localhost를 입력하면 도커 튜토리얼 화면이 나온다.

     

    cf) docker run을 하게되면 도커는 기본적으로 내 컴퓨터에서 이미지가 있는지 찾아보고 없다면

    도커 허브로부터 해당 이름으로된 이미지를 가져온다.

     

    참조자료:

    https://docs.docker.com/get-started/

     

     

    ▶ 느낀 점

     

    이전에 어느 개발자 분께서 영어가 가능하다면 어떤 개발 지식을 접할 때 공식문서를 많이 참조하라고 하신 게 생각났다.

    이유는 듣지 못했지만 개인적인 추측으로는 아마 해당 프로그램을 만든 곳이므로 그들의 설명이 곧 정의 그 자체일 확률이 높기 때문일 것 같다.

    즉, 도커의 사용법과 개념을 자신만의 색깔대로 정리한 블로그의 내용들과 비교해 왜곡된 내용없이 정확한 내용일 것이기에 공식문서를 열람한다면 처음부터 올바른 지식을 접할 수 있다.

    다만 공식 문서의 설명이 항상 알기 쉽고 친절한 것은 아니기에 자신들만의 눈높이로 기술한 다른 블로그들 역시 참조하는 편이다.

    또한 한 번에 모든 내용을 알 수 없어 모든 공식문서를 다 읽고 적용해보기보단 적용하면서 필요한 지식을 그때그때 찾아보는 것이 더욱

    효과적일 거라는 생각도 든다.

     

    ▶ 공부 시 참고 링크들

     

    문득 프록시에 대한 개념이 궁금하여 찾아본 블로그, 설명이 쉽게 잘 되어있다.

    https://iforint.tistory.com/145

     

    Proxy 프록시란?

    Proxy 란? Proxy 는 ‘대리', '대신' 이라는 뜻을 가진다. 주로 보안상의 문제를 방지하기 위해, 직접 통신하지 않고 중계자를 거친다는 개념이다. 이 때 중계의 기능을 하는 것이 ‘프록시 서버' 이

    iforint.tistory.com

     

     

     

     

     

    '항해 99' 카테고리의 다른 글

    항해 99 5기 TIL_92  (0) 2022.04.13
    항해 99 5기 WIL_13  (0) 2022.04.11
    항해 99 5기 TIL_90  (0) 2022.04.10
    항해 99 5기 TIL_89  (0) 2022.04.09
    항해 99 5기 TIL_88  (0) 2022.04.08
Designed by Tistory.