Docker/Kubernetes 実践コンテナ開発入門

サポートページ

この記事を読むのに必要な時間:およそ 0.5 分

ダウンロード

以下のファイルをダウンロードできます。圧縮ファイルをダウンロードしていただき,適宜解凍してご利用ください。
収録内容にミスがありましたため,内容を更新しました。2019年8月28日以前にダウンロードされた方は,お手数ですが,再度ダウンロードし直してください。

(2019年8月28日最終更新)

ダウンロード
サンプルファイル(20190828版)

補足情報

P.290 # 8.1.5の連携が動作しない

(2019年2月4日最終更新)

イメージの更新に伴い,書籍中のコードでは動作しません。サンプルファイルを参照し,そのファイルで実行してください。

(以下2018年11月13日更新)

P253 # 7.3.5の最後の実行例のheml install

Chartの更新に伴い,kubectl describeの適用ができなくなっていました。
下記のようにバージョンを固定して動作させてください。


helm install -f jenkins.yaml --name jenkins stable/jenkins --version 0.13.0


(以下2018年10月2日更新)

Docker Toolboxを用いた際の2章などのlocalhostへのアクセス例について

Docker Toolboxでは書籍中に示したようなlocalhostへのアクセスが動作しません。
代わりに192.168.99.100などのIPアドレスを指定して動作させます。
このIPアドレスはdocker-machine default ipで取得します。

なお,本書ではDocker for Windows/Macを主な動作対象として検証しております。
ここでのDocker Toolboxの使い方に関する説明はあくまで補足的なもので,Docker Toolboxの操作方法等についてはご質問を受け付けておりません。

お詫びと訂正(正誤表)

下記の誤りがありました。ご迷惑をおかけいたしました。

(2019年8月28日最終更新)

なお,正誤表をページ順に並べ替えたPDFを用意しました。

P.156 # 4.5.3のDockerfile-nuxt

本来バックスラッシュを挿入すべき箇所がvになっていました。
またCMD以降の指定の記法がnginxのものと異なっていました。正しいコードは下記です。
コメントは実際には実行時にエラーになるので適宜外して実行してください。


FROM nginx:1.13

RUN apt-get update
RUN apt-get install -y wget
RUN wget
https://github.com/progrium/entrykit/releases/download/v0.4.0/entrykit_0.4.0_linux_x86_64.tgz
RUN tar -xvzf entrykit_0.4.0_linux_x86_64.tgz
RUN rm entrykit_0.4.0_linux_x86_64.tgz
RUN mv entrykit /usr/local/bin/
RUN entrykit --symlink

RUN rm /etc/nginx/conf.d/*
COPY etc/nginx/nginx.conf.tmpl /etc/nginx/
COPY etc/nginx/conf.d/ /etc/nginx/conf.d/

ENTRYPOINT [ \
  "render", \
      "/etc/nginx/nginx.conf", \
      "--", \
  "render", \
      "/etc/nginx/conf.d/upstream.conf", \
      "--", \
  "render", \
      "/etc/nginx/conf.d/nuxt.conf", \ # <-- public.confからnuxt.confに変更
      "--" \
]

CMD ["nginx", "-g", "daemon off;"]

(以下2019年6月11日更新)

P.86 # 3.1.1の脚注2

外側からdocekr stopなどで
外側からdocker stopなどで

P.213〜214 # 6.4 todo-api.yamlの内容

Deployment.spec.template.metadata.labelsの指定で本来appとすべき箇所がnameになっていました。

正しいのは下記のコードです。


apiVersion: v1
kind: Service
metadata:
  name: todoapi
  labels:
    app: todoapi 
spec:
  selector:
    app: todoapi
  ports:
    - name: http
      port: 80

---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: todoapi 
  labels:
    app: todoapi
spec:
  replicas: 2
  selector:
    matchLabels:
      app: todoapi
  template:
    metadata:
      labels:
        app: todoapi
    spec:
      containers:
      - name: nginx
        image: gihyodocker/nginx:latest
        imagePullPolicy: Always
        ports:
        - containerPort: 80
        env:
        - name: WORKER_PROCESSES
          value: "2"
        - name: WORKER_CONNECTIONS
          value: "1024"
        - name: LOG_STDOUT
          value: "true"
        - name: BACKEND_HOST
          value: "localhost:8080"
      - name: api
        image: gihyodocker/todoapi:latest
        imagePullPolicy: Always
        ports:
        - containerPort: 8080
        env:
        - name: TODO_BIND
          value: ":8080"
        - name: TODO_MASTER_URL
          value: "gihyo:gihyo@tcp(mysql-master:3306)/tododb?parseTime=true"
        - name: TODO_SLAVE_URL
          value: "gihyo:gihyo@tcp(mysql-slave:3306)/tododb?parseTime=true"

P.235 # 7.2の節内での今後の作業の進め方を説明した箇所

本来はパブリッククラウドで検証する部分でしたが,誤ってローカルKubernetes環境としていました。

以後、ローカルKubernetes環境を利用して実際にRBAC関連リソースを作成し、認証ユーザーで認証を行った上でのKubernetesの操作を行います。次に、ServiceAccountを利用したPodからのKubernetes API利用について解説します。
以後、パブリッククラウドを想定して実際にRBAC関連リソースを作成し、認証ユーザーで認証を行った上でのKubernetesの操作を行います。次に、ServiceAccountを利用したPodからのKubernetes API利用について解説します。

P.235 # 7.2.1のリソースに関する表の上の説明文

本来はパブリッククラウドで検証する部分でしたが,誤ってローカルKubernetes環境としていました。

これらのリソースを使用して、ローカルKubernetes環境で認証ユーザーの権限制御を行ってみましょう。
これらのリソースを使用して、認証ユーザーの権限制御を行ってみましょう。

(以下2019年3月6日更新)

P.37 # 2.1.1のコンテナ停止のコマンド実行例

docekr stop $(docker container ls -q)


docker stop $(docker container ls -q)

(以下2019年2月4日更新)

P.218 # 6.5のリスト

6.5の最下部のkubectl apply -f ingress.yamlは正しくは6.6のファイル表記の下に配置されます。

P.142 # 4.3.6のリスト

ファイル名が誤っていました。

todomysql_master
todo_mysql_master
todmysql_slave
todo_mysql_slave

正しいリストの全体像を以下に掲載します。


version: "3"
services:
  api:
    image: registry:5000/ch04/todoapi:latest
    deploy:
      replicas: 2
      environment:
        TODO_BIND: ":8080"
        TODO_MASTER_URL: "gihyo:gihyo@tcp(todo_mysql_master:3306)/tododb?parseTime=true"
        TODO_SLAVE_URL: "gihyo:gihyo@tcp(todo_mysql_slave:3306)/tododb?parseTime=true"
      networks:
        - todoapp
networks:
  todoapp:
    external: true

(以下2018年11月13日更新)

P.98 # 3.4.2の最後の実行例

不要なバッククォートが残っていました。


docker container run -v `${PWD}`:/tmp \


docker container run -v ${PWD}:/tmp \

P.293 # 8.1.5のyamlを適用する部分の説明

次のようにelasticsearch.yamlを反映します。KibanaのServiceは`kube-system`に配置されているので、`-n`オプションでNamespaceである`kube-system`を指定します。
次のようにkibana.yamlを反映します。

(以下2018年10月2日更新)

P.46 # 2章の脚注21

exmaple/echo
example/echo

P.75 # 2.6.1の最初のリストのjenkinsのイメージ名

書籍中で指定したイメージ名,バージョンでは動作しなくなってしまいました。
jenkinsci/jenkins:2.142-slimを利用してください。


image: jenkins:latest


image: jenkinsci/jenkins:2.142-slim

P.78 # 2.6.3の最初のリストのjenkinsのイメージ名

書籍中で指定したイメージ名,バージョンでは動作しなくなってしまいました。
下記の通り修正してください。


services:
  master:
    container_name: master
    image: jenkinsci/jenkins:2.142-slim
    ports:
      - 8080:8080
    volumes:
      - ./jenkins_home:/var/jenkins_home
    links:
      - slave01

  slave01:
    container_name: slave01
    image: jenkinsci/ssh-slave
    environment:
      - JENKINS_SLAVE_SSH_PUBKEY=ssh-rsa AAAAB3NzaC1yc2EA........

P.80 # 2.6.3の「最終調整」の実行例

プラグインのバージョンが上がったことで書籍の通りには動作しなくなりました。

「秘密鍵」はJenkinsマスター上の~/.sshからを選択します。
「秘密鍵」にはホストの./jenkins_home/.ssh/id_rsaの内容を貼り付けます。
画像

画像をクリックすると大きく表示できます。

P.105 # 3.5.2の説明文

Dockerイメージはregistyコンテナにpushしてある
Dockerイメージはregistryコンテナにpushしてある

P.129 # 4.2.5のスクリプト名の誤り

dd-server-id.shをdocker-entrypoint.shの前に実行できます。
add-server-id.shをdocker-entrypoint.shの前に実行できます。

P.146 # 4.4.1の「バックエンドサーバの振り分けの設定値」コード部分と続く解説

動作はしますがfailsのつづりを誤っていました。

BACKEND_MAX_FAILES
BACKEND_MAX_FAILS

P.150 # 4.4.3のコード部分の設定値

動作はしますがfailsのつづりを誤っていました。

BACKEND_MAX_FAILES
BACKEND_MAX_FAILS

P.158 # 4.5.4のコード部分の設定値

動作はしますがfailsのつづりを誤っていました。

BACKEND_MAX_FAILES
BACKEND_MAX_FAILS

P.334 # 9.2.3の「パッケージマネージャapkを操作する」のapk delに関する解説

本来リスト外に出るべき解説箇所が,誤ってリスト内に入ってしまっていました。
下記部分はリスト外の解説分です。


apk del

apk delではインストールされているパッケージをアンインストールします。apk add --virtualなどと組み合わせ
て使わなくなったパッケージの削除に用います。

P.398 # helm packageの書式

helm pacakge [options] Chartへのパス
helm package [options] Chartへのパス

(以下2018年9月18日更新)

P.194 # 5.10.1 の冒頭の実行例


$ kubectl apply -f simple-deployment.yaml


$ kubectl apply -f simple-service.yaml


(以下2018年9月11日更新)

P.131 # 4.2.6のtodo-mysql.ymlの表記

MYSQL_ROOT_PASSWORDを文中で二回設定していました。正しくは一回です。


    environment:
      MYSQL_MASTER_HOST: master
      MYSQL_ROOT_PASSWORD: gihyo 
      MYSQL_DATABASE: tododb 
      MYSQL_USER: gihyo 
      MYSQL_PASSWORD: gihyo 
      MYSQL_ROOT_PASSWORD: gihyo 
      MYSQL_REPL_USER: repl 
      MYSQL_REPL_PASSWORD: gihyo 


    environment:
      MYSQL_MASTER_HOST: master
      MYSQL_ROOT_PASSWORD: gihyo 
      MYSQL_DATABASE: tododb 
      MYSQL_USER: gihyo 
      MYSQL_PASSWORD: gihyo 
      MYSQL_REPL_USER: repl 
      MYSQL_REPL_PASSWORD: gihyo 

P.156 # 4.5.3のnuxt.conf.tmplのerror_logの設定


error_log /var/log/nginx/asserts_error.log


error_log /var/log/nginx/assets_error.log

P.160 # 4.5.4のdockerコマンド実行例の1行目


docker \container exec -it manager \


docker container exec -it manager \

P.194 # 5.10の実行例

-fオプションの位置が誤っていました。


kubectl -f apply


kubectl apply -f

P.312 # 8.3.2の脚注13

Pod AntiAaffinity
Pod AntiAffinity

P.321 # 9.1.1のオートスケールの説明に関する文章

新規のノードが追加されるます。
新規のノードが追加されます

(以下2018年9月5日更新)

P.86 # 3.1.1のDockerイメージビルド時の表示

Step 7/7 : CMD [ "touch", "/etc/cron.d/example", "&&", "cron", "-f" ]
Step 7/7 : CMD ["cron", "-f"] 

(以下2018年9月4日更新)

P.109 # 3.5.3のStackのサブコマンドに関する表

rmとservicesで項目が逆になっていました。

rm Stack内のService一覧を表示する
rm デプロイされているStackを削除する
services デプロイされているStackを削除する
services Stack内のService一覧を表示する

P.227 # 7.1の脚注4

失敗したiPod
失敗したPod

P.310 # 8.3.2の下の見出し

Node障害の際にKubernetesの挙動
Node障害時のKubernetesの挙動

(以下2018年8月24日更新)

P.37 # 2.1のコンテナ停止の説明

コマンド停止させられます。
コマンド停止させられます。

P.211 # 6.3.3のyamlの反映ファイル名

mysql-master.yamb
mysql-master.yaml

P.352 # 10.2.1のタグ付けのイメージ名

ch09/jq:latest
ch10/jq:latest

P.358 # 10.3.1の最後のコマンド実行例

ch09-locust.yml
ch10-locust.yml