継続は力なり

タイトル通り定期的な更新を心掛けるブログです。

Docker 実践活用ガイド 6章

タダです。

今回はDocker実践活用ガイドの6章を読んだ内容をまとめていきます。 ※記事は理解ができるたびに何度もアップデートしていこうと思います。 book.mynavi.jp

なお、副教材としてドットインストールも使っていこうと思います。

目次

なお、各章の内容は次の通りです。

  • 1章 Dockerとは
  • 2章 Dockerの仕組み
  • 3章 Dockerのインストール
  • 4章 Dockerを使ってみよう(コマンド編)
  • 5章 Dockerを使ってみよう(Kitematic(GUI)編)
  • 6章 Dockerイメージの操作
  • 7章 Dockerを使いこなす
  • 8章 複数のDokcerを使う(Docker Machine、Docker Swarm、Docker Compose)
  • 9章 Dockerをクラウドで使う(Docker Cloud)
  • 10章 DockerとJavaScriptウェブサービスを作る(簡易オンラインジャッジシステム)
  • 11章 DOckerを利用した実運用ウェブサービス構築事例(paizaオンラインジャッジシステム)
  • 12章 paizaの実行環境APIを使いウェブサービスを作る(簡易オンラインジャッッジシステム)
  • 13章 Dockerの内部

6.1

  • Dockerイメージは、コンテナで利用するファイルシステムや実行環境・設定を1つにまとめたもの
  • Dockerイメージに関する主な操作は以下のとおり
    • Docker Hubからイメージをダウンロードする(docker pull)
    • ローカルリポジトリのDockerイメージを使ってコンテナを作成する(docker run)
    • コンテナ内のファイルシステムからDockerイメージを作成する(docker commit)
    • Dockerfileで記述した構築方法をもとにDokcerイメージを自動生成(docker build)
    • DockerイメージをDocker Hubに保存する(docker push)

6.2

  • Dockerイメージのダウンロードはdocker pullを使う
docker pull ubuntu
Using default tag: latest
latest: Pulling from library/ubuntu
22dc81ace0ea: Download complete
1a8b3c87dba3: Download complete
91390a1c435a: Download complete
07844b14977e: Download complete
b78396653dae: Download complete
・
・
省略
  • イメージ一覧はdocker imagesで使える

6.3

  • コンテナからDockerイメージを作成する手順は以下のとおり
    • 1.コンテナをシェルで実行する
    • 2.コンテナ内でアプリケーションのインストールなどを行い、ファイルを変更する
    • 3.コンテナからDockerイメージを作成する
  • Ubuntuのイメージを元にNode.jsの環境を作る
    • まずは、docker runでコンテナ上でシェルを実行する
 docker run -i -t ubuntu /bin/bash
  • コンテナにアプリケーションをインストールする
# apt-get update
# apt-get install -y curl
# curl -sL https://deb.nodesource.com/setup_4.x | bash -
# apt-get install -y nodejs
  • 最後にDockerイメージを作成する
$ docker commit <コンテナID> <Dockerイメージ名>

6.4

  • docker commitではDockerイメージを作成できるが、この方法ではDockerイメージを作り直すたびにコマンドで手で入れる必要がある
    • コマンドの実行結果が残らないし、どのようにファイルを編集したかも忘れてしまう
  • DockerfileにDockerイメージの構築手順をかいて、その手順からDockerイメージを自動生成(ビルド)することができる
  • Dockerfileをつくってみる
FROM ubuntu

RUN apt-get update
RUN apt-get install -y curl
RUN curl -sL https://deb.nodesource.com/setup_4.x | bash -
RUN apt-get install -y nodes
  • Dockerイメージのビルドdocker buildコマンドでDockerfileからDockerイメージを作成する
$ docker build -t ubuntu-nodejs-2 .
$ docker images

6.5

  • Dockerイメージを元に、アプリケーションのDockerイメージを作成する
    • アピリケーションのコードを書く(app.js)
var express = require('express');
var app = express();

app.get('/', function (req, res){
    res.send('Hello world\n');
});

app.listen(8080);
console.log('Running on port 8080');
  • 次にアプリケーションの情報を記述する(pakerge.json)
{
    "name": "docker_web_app",
    "version": "1.0.0",
    "dependencies": {
        "express": "^4.13.3"
    }
}
  • Dockerイメージ構築手順をDockerfileに記述する
    • ADDコマンドは、ローカルにある指定したファイルを、Dockerイメージの指定したディレクトリを追加する
    • WORKDIRコマンドは、コンテナ実行時のデフォルトの作業ディレクトリを指定する
    • EXPOSEコマンドでは、アプリケーションが待ち受けているポート番号を書く
    • CMDコマンドでは、コンテナ実行時にデフォルトで実行するコマンドを指定する
FROM ubuntu-node-js-2

RUN mkdir /app
ADD app.js /app
ADD packege.json /app

WORKDIR /app
RUN npm install

EXPOSE 8080
CMD [ "node", "app.js"]
  • Dockerfileのビルドする("ubuntu-node-app")
$ docker build -t ubuntu-node-app .

6.6

  • 作成したDockerイメージはDocker Hubなどのレジストリにアップロードして保存する
  • Dockerイメージをアップロードする(docker tagコマンドでDockerイメージの名前を変更する)
$ docker tag ubuntu-node-app ユーザー名/ubuntu-node-app
$ docker login
$ docker push ユーザー名/ubuntu-node-app

6.7

  • DockerイメージはDocker Hubからダウンロードしたり、コンテナから作成したり、Dockerfileからビルドできる
  • Dockerfileを使うことで、構築手順を明確にして再利用が可能になる
  • 作成したDockerイメージをDocker Hubにアップロードして、再利用や共有が可能になる

次回は7章です。