Upgrade to Pro — share decks privately, control downloads, hide ads and more …

(取っ掛かりとしての)Docker入門

 (取っ掛かりとしての)Docker入門

社内向け勉強会の資料となります

Avatar for Satoshi Shinyashiki

Satoshi Shinyashiki

June 01, 2019

Other Decks in Programming

Transcript

  1. 1.Dockerとは      Linux OS Docker (デーモンプロセス) コン テナ Dockerコンテナ型仮想化 ・アプリケーション実行環境を構築するツール ・Linux標準のコンテナ型仮想化技術を使用している

    ・「コンテナ」とよばれる仮想領域ごとにアプリケーションと実行環境をまとめる ・コンテナはDockerが導入されているサーバであれば配布が可能 カーネル CentOS Apache RedHat Tomcat Ubuntu MySQL Linux OS Docker カーネル Ubuntu MySQL Linux OS Docker カーネル RedHat Tomcat CentOS Apache
  2. 1.Dockerとは Dockerイメージ、コンテナ、レジストリの関係 openjdk8のイメージを 取得 Javaアプリを デプロイ コンテナ化 イメージ「java-app」とし て登録 登録したイメージを

    別環境で取得 openjdk8 Javaアプリ openjdk8 openjdk8 Javaアプリ openjdk8 Javaアプリ コンテナ化 Dockerレジストリ openjdk8 java-app
  3. 3.実演 1)もっとも簡単なやりかた # Elastic社公式Dockerイメージを取得 $ docker image pull docker.elastic.co/elasticsearch/elasticsearch:7.0.1 # イメージを確認

    $ docker image ls # コンテナ化 $ docker container run -d --name sample-es01 -p 19200:9200 -e "discovery.type=single-node" docker.elastic.co/elasticsearch/elasticsearch:7.0.1 # コンテナ確認 $ docker container ls # Elasticsearch確認 $ curl localhost:19200 # コンテナ内に疑似ログイン $ docker container exec -it sample-es01 bash 例えばElasticsearchなどのミドルウェアを手軽に試してみたい場合、 docker image pull と docker container run のたった2つのDockerコマンドで 簡単にコンテナを作成することができる
  4. 3.実演 2)Dockerfileを使用したやりかた #ベースはCentOS7 FROM centos:centos7 #必要なソフトウェアをインストール RUN yum install -y java

    wget #ユーザ「elasticsearch」を追加 RUN groupadd -g 1000 elasticsearch && \ adduser -u 1000 -g 1000 -d /usr/share/elasticsearch elasticsearch USER elasticsearch WORKDIR /usr/share/elasticsearch #Elasticsearch7のダウンロード RUN wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.0.1-linux-x86_64.tar.gz \ && tar zxvf elasticsearch-7.0.1-linux-x86_64.tar.gz #Elasticsearchの初期設定 RUN echo -e $"\n\ network.host: 0.0.0.0\n\ discovery.type: single-node\n\ " >> /usr/share/elasticsearch/elasticsearch-7.0.1/config/elasticsearch.yml #コンテナ起動時にElasticsearchをフォアグラウンドで起動 CMD ["/usr/share/elasticsearch/elasticsearch-7.0.1/bin/elasticsearch"] EXPOSE 9200 Dockerfile
  5. 3.実演 2)Dockerfileを使用したやりかた $ ls Dockerfile # ビルド実行 $ docker image build

    -t sample-es02 . # コンテナ化 $ docker container run -d --name sample-es02 -p 29200:9200 sample-es02 # Elasticsearch確認 $ curl localhost:29200 Dockerfile作成後は docker image build でイメージのビルドを行う
  6. 公式リポジトリ 3.実演 3)Dockerイメージの共有 作成したイメージはDokcer Hubに登録することで別環境との共有が可能。 なお、イメージは自分( Docker Hubアカウント)が所有するリポジトリにのみ登録することができる。 イメージ取得 イメージをカスタマイ ズしてビルド

    イメージ名 sample-es02 イメージ名 shinyashikis/my-elasticsearch7:0.0.1 イメージにタグ付け shinyashikisが 所有するリポジトリ CentOS7 CentOS7 my-elasticsearch 7:0.0.1 CentOS7 Elasticsearch7 CentOS7 Elasticsearch7 イメージ登録 Docker Hub
  7. 3.実演 3)Dockerイメージの共有 # 3.実演 2)で作成したイメージ「sample-es02」に対しタグ付け $ docker image tag sample-es02 shinyashikis/my-elasticsearch7:0.0.1 #

    イメージ確認 $ docker image ls Docker Hub上の自分のリポジトリに登録するには、まず登録するイメージに対し、  Docker HubアカウントID/イメージ名[:タグ名] の形式でタグ付けを行う必要がある。
  8. 3.実演 3)Dockerイメージの共有 # Docker Hubにログイン $ docker login -u shinyashikis -p

    xxxxxxxxxxxxx # タグ付けしたイメージをDocker Hubに登録 $ docker push shinyashikis/my-elasticsearch7:0.0.1 ---------------------------------------- # 別環境でDocker HubよりイメージをPULL $ docker pull shinyashikis/my-elasticsearch7:0.0.1 タグ付け後は、Docker Hubへログインし、docker push コマンドにより登録処理を行う。
  9. 3.実演 4)Docker Composeを使用したやりかた 複数コンテナ構成の場合、コンテナ間の通信やコンテナの起動順などを考慮する必要が出てくる。 そのようなケースにおいては、マルチコンテナ管理ツールである Docker Composeを使用したほうが管 理しやすい。 イメージを取得 アプリの デプロイ

    この一連の作業をDockerfileに記載する コンテナ化 連携 イメージを 取得 この一連の作業をDocker Composeで管理する CentOS7 Elasticsearch7 openjdk8 spring-boot アプリ openjdk8 openjdk8 shinyashikis/my -elasticsearch7: 0.0.1 openjdk8 spring-boot アプリ CentOS7 Elasticsearch7 コンテナ化 Docker Hub
  10. 3.実演 4)Docker Composeを使用したやりかた $ tree . ├── docker-compose.yml # コンテナの構成を管理するファイル └──

    my-spring-boot ├── Dockerfile # spring-boot用Dockerfile └── sample-es-0.0.1-SNAPSHOT.jar # spring-bootアプリ 以下のディレクトリ構成で必要な資材を配置する。 なお、Elasticsearchのイメージについては、「3.実演 3)」で作成したイメージを使用する。
  11. 3.実演 4)Docker Composeを使用したやりかた #ベースはJDK8イメージ FROM openjdk:8-jdk-alpine #アプリをjava-app.jarとしてデプロイ COPY ./sample-es-0.0.1-SNAPSHOT.jar java-app.jar #アプリ実行

    CMD ["java","-jar","/java-app.jar"] my-spring-boot/Dockerfile version: "3" services: my-spring-boot: build: my-spring-boot/ # spring-boot用Dockerfileの格納先を指定 image: sample-sb04 #イメージ名 container_name: sample-sb04 #コンテナ名 ports: - 48080:8080 links: - my-elasticsearch #Elasticserchコンテナへ通信する際のエイリアス my-elasticsearch: image: shinyashikis/my-elasticsearch7:0.0.1 #3)で作成したイメージを指定 container_name: sample-es04   #コンテナ名 ports: - 49200:9200 docker-compose.yml
  12. 3.実演 4)Docker Composeを使用したやりかた $ ls docker-compose.yml my-spring-boot #ビルド実行 $ docker-compose up

    -d #コンテナ確認 $ docker-compose ps #ブラウザで確認 http://localhost:48080/myEsInfo docker-compose.ymlなど必要な資材配置後は docker-compose up コマンド一発でビルド&コンテナの 起動が行われる。