기초에서 이해하는 Docker

13972 단어 Dockertech

개시하다


업무에서 사용하는 Docker의 구조와 정체성 등 기초적인 이해를 이해하고자 총결산을 해봤습니다.
내용의 경우 앞부분은 이론적인 것을 가볍게 표현하고 뒷부분은 공식적인 튜토리얼을 소재로 실제 현지에서 Docker를 움직이면서 동작을 한다.
key
value
개발자
Docker, Inc.
공식 사이트
Empowering App Development for Developers | Docker
GitHub
docker/docker-ce
프로그래밍 언어
Go
대응 OS
Linux/macOS/Windows

독자 대상

  • Docker를 사용한 적이 없음
  • 도입하고 싶은데 학습 비용을 생각해서 도입하지 않은 사람
  • 잘 모르겠는데 자꾸 쓰고 있는 사람
  • Docker 소개


    결론적으로 말하면Docker는'용기형 가상화 기술'을 활용해 응용프로그램을 개발·활용하는 플랫폼이다.
    갑자기'용기형 가상화 기술'이라는 단어가 등장했다.컴퓨터에 가상 환경을 자주 구축하기 때문에 많은 사람들이 가상화라는 단어를 들은 적이 있죠.그렇다면'용기형 가상화 기술'은 이전의 가상화와 무엇이 다를까.

    지금까지의 가상화 기술, 그리고 컨테이너


    이를 통해 PC(호스트 OS)에서 가상화 소프트웨어를 사용하여 고객 OS를 구성하는 전통적인 가상화와 Docker가 구현한 용기 가상화 기술을 비교함으로써 용기 가상화 기술을 이해할 수 있다.

    일반 가상화



    초진동기를 통해 인산선소 위에서 흑체를 이동한다.기본적으로 흑체당과 인산염의 자원을 공유한다.VirtualBox 등 가상화 도구를 많이 사용하면 시작하는 몬스터 편지에 실제 필요한 중간부품과 프로그램 라이브러리를 설정합니다.

    컨테이너 가상화



    한편, 용기형 가상화는 인산 커널을 활용해 Docker Engine에서 용기를 구축한다.용기의 과정과 사용자는 인산 아드레날린과 분리된 독립된 동작 때문에 인산 아드레날린에 검은 체를 세운 것과 같다.
    또 운영체제를 혼자 준비할 필요가 없고 자원을 낭비하지 않기 때문에 동작이 경쾌하고 고속인 것도 특징이다.

    컨테이너 해결 과제


    그렇다면 기존 가상화와 비교해 구성이 어떻게 다른지 알고 컨테이너를 구체적으로 활용하면 즐거울 수 있다는 점에 주목해보자.조사를 많이 했다고 하는데 그중에 가장 중요한 것은환경 구축 과정 인코딩 및 공유 가능그건 엄청나게 크겠지.
    기존의 가상 환경 구축에서 고객 OS에 들어간 후 프로그램 라이브러리와 중간부품을 설치해야 한다는 것을 상세히 설명한다.그 작업은 수동으로 명령을 내리는 것이기 때문에 오류와 버전의 차이가 발생할 수 있습니다.또 같은 개발팀 내 구성원 간에도 현지 환경에서 차이가 생길 수 있다.
    다른 한편, Docker를 사용하여 컨테이너를 가상화할 때 컨테이너의 정의는 하나의 파일Dockerfile로 정의된다.개발진에서는 그 파일만 공유하면 주변에서 같은 환경을 만들 수 있어 유지보수성이 좋다.
    이 이야기는 개발뿐만 아니라 제품 제공에도 영향을 미친다.일반적으로 제품이 출시되면 검증 환경, 무대 환경, 공식 환경과 인프라를 준비한다.그러나 많은 개발자들은 개발 절차를 확정하더라도 검증 환경, 무대 환경에서 발생하지 않을 고장은 정식 환경에서만 발생한다는 경험을 가지고 있다.Docker를 사용하면 모든 환경에서 같은 용기가 작동하는 환경을 만들 수 있기 때문에 이론적으로 이런 현상이 발생하지 않는다.

    실천하다


    드디어 실사Dockerfile를 써서 운행해야 한다.이번에 사용된 소스 코드는 공식 튜토리얼[1]의 소스 코드를 직접 사용합니다.이번 목적은 기초를 이해하는 것이기 때문에 접촉만 하고 더 많은 것을 배우고 싶다면 반드시 잘 활용하세요.

    Hello world


    어쨌든 Hello World부터 해볼게요.
    # ローカルのマシンに docker が入っているか確認
    $ docker --version
    Docker version 19.03.8, build afacb8b
    
    # `docker run`イコマンドでメージからコンテナを起動
    $ docker run hello-world
    # ローカルに指定したイメージがない場合は、docker hub より自動でインストールされる
    Unable to find image 'hello-world:latest' locally
    latest: Pulling from library/hello-world
    0e03bdcc26d7: Pull complete
    Digest: sha256:d58e752213a51785838f9eed2b7a498ffa1cb3aa7f946dda11af39286c3db9a9
    Status: Downloaded newer image for hello-world:latest
    # イメージが作られ Hello world と出力された
    Hello from Docker!
    This message shows that your installation appears to be working correctly.
    
    To generate this message, Docker took the following steps:
     1. The Docker client contacted the Docker daemon.
     2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
        (amd64)
     3. The Docker daemon created a new container from that image which runs the
        executable that produces the output you are currently reading.
     4. The Docker daemon streamed that output to the Docker client, which sent it
        to your terminal.
    
    To try something more ambitious, you can run an Ubuntu container with:
     $ docker run -it ubuntu bash
    
    Share images, automate workflows, and more with a free Docker ID:
     https://hub.docker.com/
    
    For more examples and ideas, visit:
     https://docs.docker.com/get-started/
    
    # `docker image` コマンドでイメージの一覧を確認
    $ docker image ls
    REPOSITORY            TAG                 IMAGE ID
    hello-world           latest              bf756fb1ae65        1 minutes ago        13.3kB
    
    # `docker ps` コマンドでプロセスを確認
    $ docker ps --all
    c0d1570f2fc2        hello-world           "/hello"                 8 minutes ago       Exited (0) 8 minutes ago
    
    디테일을 완전히 이해할 필요가 없기 때문에 여기서 Docker 이미지를 얻고 컨테이너를 가동하는 대체적인 절차를 잡는 것이 중요하다.

    Docker file 만들기


    공식적으로 준비한 이미지를 사용자 정의합니다.이 경우 사용자 정의 내용을 Dockerfile 파일로 만들고 정의합니다.
    # 公式の Python がインストールされたベースイメージを利用
    FROM python:2.7-slim
    
    # コンテナ内の作業ディレクトリを /app に設定
    WORKDIR /app
    
    # 現在のディレクトリの内容を、コンテナ内の /app にコピー
    COPY . /app
    
    # requirements.txt で指定された必要なパッケージを全てインストール
    RUN pip install --trusted-host pypi.python.org -r requirements.txt
    
    # ポート 80 番をコンテナの外でも利用可能に設定
    EXPOSE 80
    
    # 環境変数を定義
    ENV NAME World
    
    # コンテナ起動時に app.py を実行
    CMD ["python", "app.py"]
    
    다음에 용기에서 이동하는 프로그램으로 app.py의 이름으로 파이톤 파일을 제작한다.
    from flask import Flask
    from redis import Redis, RedisError
    import os
    import socket
    
    # Connect to Redis
    redis = Redis(host="redis", db=0, socket_connect_timeout=2, socket_timeout=2)
    
    app = Flask(__name__)
    
    @app.route("/")
    def hello():
        try:
            visits = redis.incr("counter")
        except RedisError:
            visits = "<i>cannot connect to Redis, counter disabled</i>"
    
        html = "<h3>Hello {name}!</h3>" \
               "<b>Hostname:</b> {hostname}<br/>" \
               "<b>Visits:</b> {visits}"
        return html.format(name=os.getenv("NAME", "world"), hostname=socket.gethostname(), visits=visits)
    
    if __name__ == "__main__":
        app.run(host='0.0.0.0', port=80)
    
    마지막으로 용기에 설치하려는 프로그램 라이브러리, 중간부품이 requirements.txt에 기록된 텍스트 파일을 Docker file에서 참조합니다.
    Flask
    Redis
    
    준비하고 집행한다.
    # 現在このような状況になっている
    $ ls
    Dockerfile		app.py			requirements.txt
    
    # 作った Dockerfile をビルドして、イメージを作成
    # `--tag` オプション: イメージにタグを付与
    $ docker build --tag=friendlyhello .
    Sending build context to Docker daemon   5.12kB
    Step 1/7 : FROM python:2.7-slim
    
    ...
    
    略
    
    ...
    
    Successfully built 8f74a6392754
    Successfully tagged friendlyhello:latest
    
    # ビルドが終わったら、一旦イメージの一覧を確認
    $ docker image ls
    REPOSITORY            TAG                 IMAGE ID
    hello-world           latest              bf756fb1ae65
    friendlyhello         latest              326387cea398
    
    # イメージが作成されているのを確認できたらコンテナを起動
    #  `-d` オプション: コンテナをバックグラウンドで実行
    #  `-p` オプション: ポートの割り当てを指定
    $ docker run -d -p 4000:80 friendlyhello
    
    $ docker ps 명령을 통해 상태가 Up로 바뀌면 용기가 안전하게 이동한다.브라우저로localhost:4000에 접근하면Helloworld와 내용 표시도 확인할 수 있습니다.
    Docker file, 제작Docker イメージ 자신이 준비하고 싶은 프로그램의 실행 환경コンテナ에서 이런 곳을 이동하면 대체로 완성된다.

    총결산

  • Docker는 "컨테이너형 가상화 기술"을 제공하는 소프트웨어 플랫폼
  • 용기형 가상화 기술은 기존 가상화 기술을 대체하는 위영 표준이 되었다
  • Docker가 환경 구축 과정에 대한 인코딩과 효율화를 실현
  • 또한 이 메커니즘에서 가볍고 빠른 응용 실행 환경을 제공
  • 업무상 거의 모든 프로젝트가 Docker에 도입되었고 앞으로도 사용할 기회가 증가할 것이기 때문에 이 시기에 개념과 장점을 되돌아볼 수 있어서 정말 좋습니다.좀 더 참고할 수 있었으면 좋겠어요.

    사이트 축소판 그림


    http://docs.docker.jp/index.html
    https://qiita.com/woz/items/43462398765f8036f3a8
    https://qiita.com/enta0701/items/b872eef6d910908c0e6c
    https://docs.docker.com/get-started/
    각주
    Orientation and setup | Docker Documentation ↩︎

    좋은 웹페이지 즐겨찾기