2018年7月29日日曜日

docker ymlの書き方


image
タグや image ID の一部です。ローカルでもリモートでも構いません。ローカルに存在しなければ、Compose はイメージを取得(pull)します。

image: mysql:5.7



build
Dockerfile のあるディレクトリのパスを指定します。この値が相対パスで指定された場合は、yml ファイル自身がある場所からの相対パスになります。また、ディレクトリは内容構築のため、Docker デーモンにも送られます。
Compose は構築し、生成した名前をタグ付けし、以後のイメージでも使われます。
build: /path/to/build/dir

dockerfile
代替用の Dockerfile です。
Compose は構築時に指定されたファイルを使います。
dockerfile: Dockerfile-alternate

command
デフォルトのコマンドを上書きします。
command: bundle exec thin -p 3000

links
コンテナを他のサービスにリンクします。サービス名とリンク・エイリアス(サービス:エイリアス)を指定できるだけでなく、あるいは、サービス名(エイリアスとしても使われます)でも指定できます。
links:
 - db
 - db:database
 - redis
エイリアス名を記述すると、コンテナ内の /etc/hosts の中にサービス名が追加されます。例:
172.17.2.186  db
172.17.2.186  database
172.17.2.187  redis
環境変数も作成されます。詳細は環境変数リファレンスをご覧ください。

external_links
この docker-compose.yml や、とりわけ Compose の外にある共有ないし共通サービスが提供するコンテナとリンクします。external_links はコンテナ名やリンク・エイリアス(CONTAINER:ALIAS)の指定時に links と似たような意味あいを持ちます。
external_links:
 - redis_1
 - project_db_1:mysql
 - project_db_1:postgresql

extra_hosts
ホスト名のマッピングを追加します。docker クライアントの --add-host パラメータと同じ値です。
extra_hosts:
 - "somehost:162.242.195.82"
 - "otherhost:50.31.209.229"
入力した IP アドレスとホスト名は、コンテナ内の /etc/hosts にサービスと記載されます。例:
162.242.195.82  somehost
50.31.209.229   otherhost

ports
ポートを公開(expose)します。ホストとポートを指定(ホスト:コンテナ)するか、コンテナのポートのみ指定します(ホスト側のポートはランダムに選ばれます)。
メモ:ポートのマッピングに ホスト:コンテナ の形式を使うとき、コンテナのポートが 60 以下の場合はエラーが表示されるでしょう。これは YTML がxx:yy 形式を60進数と認識するためです。そのため、常に明確なポートのマッピングを文字列で指定することを推奨します。
ports:
 - "3000"
 - "8000:8000"
 - "49100:22"
 - "127.0.0.1:8001:8001"

expose
ホストマシン上にポートを露出(expose)しますが、公開はしません。リンクされたサービスのみアクセスできます。内部ポートのみ指定できます。
expose:
 - "3000"
 - "8000"

volumes
パスをボリュームとしてマウントします。オプションとしてホスト側のパスを指定(ホスト:コンテナ)したり、アクセスモードを指定します(ホスト:コンテナ:ro)。
volumes:
 - /var/lib/mysql
 - cache/:/tmp/cache
 - ~/configs:/etc/configs/:ro

volumes_from
他のサービスやコンテナから、全てのボリュームをマウントします。
volumes_from:
 - service_name
 - container_name

environment
環境変数を追加します。配列や dictionary(訳注;YAML のハッシュ)を使えます。
キーだけの環境変数は、Compose 起動時に用いられる値があてられますので、秘密にしたい値やホスト固有の値を指定しやすいです。
environment:
  RACK_ENV: development
  SESSION_SECRET:

environment:
  - RACK_ENV=development
  - SESSION_SECRET

env_file
ファイルから環境変数を追加します。リストには1つの値です。
Compose でファイルを docker-compose -f ファイル名 で指定した場合は、env_file のパスはそのファイルがあるディレクトリからの相対パスになります。
environment で指定した環境変数は、これらの値に上書きされます。
env_file: .env

env_file:
  - ./common.env
  - ./apps/web.env
  - /opt/secrets.env
Compose は環境変数で指定されたファイルの各行が 変数=値 の形式とみなします。#` で始まる行は無視され(例:コメント)、空白行として扱われます。
# 環境変数 Rails/Rack の設定
RACK_ENV=development

extends
現在のファイルや別のファイルから、他のサービスを拡張します。オプションで設定を上書きします。
以下は簡単な例です。2つのファイル common.ylm と development.yml があります。extends を使って development.yml のサービスを定義します。このサービスとは common.yml で定義されているものです:
common.yml
webapp:
  build: ./webapp
  environment:
    - DEBUG=false
    - SEND_EMAILS=false
development.yml
web:
  extends:
    file: common.yml
    service: webapp
  ports:
    - "8000:8000"
  links:
    - db
  environment:
    - DEBUG=true
db:
  image: postgres
ここでは、development.yml の web サービスは、common.yml の webapp サービスの設定を継承します。build、environment のキーと、ports と links 設定を追加します。新しい値を持つ環境変数(DEBGUG)が定義されると、既存のものを上書きします。
他の環境変数(SEND_EMAILS)はそのままです。
extends の詳細は、チュートリアルやリファレンスをご覧ください。

lables
Docker lables を使ってコンテナにメタデータを追加します。配列やハッシュが使えます。
逆引き DNS の概念を使い、他のソフトウェアが使うラベルと衝突しないようにすることをお勧めします。
labels:
  com.example.description: "Accounting webapp"
  com.example.department: "Finance"
  com.example.label-with-empty-value: ""

labels:
  - "com.example.description=Accounting webapp"
  - "com.example.department=Finance"
  - "com.example.label-with-empty-value"

log driver
docker 実行時のオプションで(ドキュメントはこちら(英語)です) --log-driver を使い、ログ記録用のドライバを指定します。
現時点で使える値は json-file、syslog、none です。暫くすると Docker エンジンにドライバが更に追加され、一覧が変わる可能性があります。
デフォルトの値は json-file です。
log_driver: "json-file"
log_driver: "syslog"
log_driver: "none"

net
ネットワーキング・モードを指定します。Docker クライアントで --net パラメータを指定したときと同じです。
net: "bridge"
net: "none"
net: "container:[name or id]"
net: "host"

pid
pid: "host"
PID モードを host PID モードにセットします。これにより、コンテナとホスト・オペレーティング・システム上の PID アドレス空間を共有します。ベアメタルマシンの名前空間などで、他のコンテナにアクセス・操作できるように、コンテナ起動時にこのフラグを使います。

dns
DNS サーバーを設定します。1つまたはリストで記述します。
dns: 8.8.8.8
dns:
  - 8.8.8.8
  - 9.9.9.9

cap_add, cap_drop
コンテナの性能を追加したり下げたりします。man 7 capabilities で詳細をご覧ください。
cap_add:
  - ALL

cap_drop:
  - NET_ADMIN
  - SYS_ADMIN

dns_search
DNS の search ドメインを設定します。1つまたはリストで記述します。
dns_search: example.com
dns_search:
  - dc1.example.com
  - dc2.example.com

devices
デバイス・マッピングの一覧です。Docker クライアントで作成時のオプション --device と同じ形式の使い方です。
devices:
  - "/dev/ttyUSB0:/dev/ttyUSB0"

security_opt
それぞれのコンテナ毎に、デフォルトのラベリング・スキーマを上書きします。

  security_opt:
    - label:user:USER
    - label:role:ROLE


raspberry pi:dockerにてwordpressを導入する。

1)raspberry piにdocker環境を導入する。
$ sudo apt-get install curl
$ curl -sSL https://get.docker.com/ | sh
$ sudo apt-get install docker-compose
$ curl -s https://packagecloud.io/install/repositories/Hypriot/Schatzkiste/script.deb.sh | sudo bash
$ sudo apt-get install git
$ git clone https://github.com/rothgar/rpi-wordpress


2)作成用にディレクトリを作成する
$ mkdir wordpress_1
$ cd wordpress_1


3)composeファイル生成する。
$ vi docker-compose.yml

########### docker-compose.yml ###############
version: '2'

services:

  wordpress:
    image: arm32v7/wordpress
    restart: always
    ports:
      - 8001:80
    environment:
      WORDPRESS_DB_PASSWORD: password
    volumes:
      - ./html:/var/www/html
  mysql:
    image: hypriot/rpi-mysql
    restart: always
    ports:
    - 3307:3307
    environment:
      MYSQL_ROOT_PASSWORD: password
    volumes:
    - ./wpdb:/var/lib/mysql/wordpress
#############################################

注意:赤字は、raspberry pi用。


4)以下を実行することにより、実行可能。

$ docker-compose up -d

2018年6月29日金曜日

docker for mac(wordpress)

◾️Docker for Macを導入する
導入方法については、割愛。

◾️wordpress用のディレクトリを作成する。
$ mkdir my_wordpress

$ cd my_wordpress/$ touch docker-compose.yml$ vi docker-compose.yml

◾️ブラウザでhttp://localhost:8000にアクセスする。


◾️wordpress用のdockerファイルを作成する。

############  docker-compose.yml  ##############
version: '3'

services:
   db:
     image: mysql:5.7
     volumes:
       - db_data:/var/lib/mysql
     restart: always
     environment:
       MYSQL_ROOT_PASSWORD: somewordpress
       MYSQL_DATABASE: wordpress
       MYSQL_USER: wordpress
       MYSQL_PASSWORD: wordpress

   wordpress:
     depends_on:
       - db
     image: wordpress:latest
     ports:
       - "8000:80"
     restart: always
     environment:
       WORDPRESS_DB_HOST: db:3306
       WORDPRESS_DB_USER: wordpress
       WORDPRESS_DB_PASSWORD: wordpress
volumes:
    db_data:
############################################



◾️$ docker-compose up -dを実行することにより
wordpressのコンテナ一式の作成が始まる。


◾️以後、wordpressの設定画面に推移するので
必要な設定を行うこと。

GCP(Memorystore)Redisの設定方法

GCPにて、Redisの設定方法を記述します。


1)Memorystoreを選択する。


2)インスタンス作成を選択。


(1)任意の名称を記載
(2)冗長構成の設定ができる(標準を選択すると冗長構成になる)
(3)ロケーションの指定(任意のロケーションを選択できるが、特に変更してない)
(4)全体のリソースの設定
(5)設定後、作成ボタンを押す。














2018年6月28日木曜日

通信速度を計測できるる6つのコマンド

インターネットの通信速度を計測するコマントどして、以下が取り上げられている。
  • wget - ダウンロードスピードテスト向け
  • wput - アップロードスピードテスト向け
  • axel - 軽量ダウンロードアクセラレータ
  • iperf - ネットワークスループット試験向け
  • speedtest-cli - インターネットスピードテスト
記事では、上記のコマンド以外にもlftpを使って通信速度を計測する方法が紹介されている。その0利用例は次のとおり。

lftpを使ったダウンロードスピードテスト

lftp -e 'pget ダウンロードファイルのURL; exit;'

wgetを使ったダウンロードスピードテスト

wget -O /dev/null ダウンロードファイルのURL

lftpを使ったアップロードスピードテスト

lftp -u ユーザ名 ホスト名 -e 'put ファイルパス; bye'

iperfを使った2ホスト間ネットワークスループットテスト

ホストA
    iperf -s -B ホストAのIPアドレス

ホストB
    iperf -c ホストAのIPアドレス -d -t 60 -i 10

GCP MySQL(冗長構成)の作成方法について

以下、GCPにてMySQL(冗長構成)の生成方法について記載する。


◾️SQLを選択する。


◾️インスタンス作成を選択。



◾️今回は、MySQLを選択する。



◾️今回は、MySQLの本番環境は選択。





◾️MySQLに関する詳細設定を記載していく。

(1)インスタンスID                  [任意の名前の記載]
(2)パスワードを入力する  [任意のパスワードを記載]






◾️MySQL 5.7を選択(基本的に、触る必要無し)

◾️変更ボタンを押すことにより、スペック変更可能となる。





◾️自動バックアップについて

(1)自動バックアップの時間を指定する
(2)デフォルトで名称が記載されているので、触る必要が無い。



◾️以降の項目については、現時点で触れてない。





◾️作成を押す。




◾️作成ボタンを押した後の様子。

(1)作成中の様子1



(2)作成中の様子2




これにて、完成。




2018年6月26日火曜日

GCP Kubernetesにてwordpressの構築を行ってみる。

CGPのkubernetesにてwordpressを構築する方法を記載します。


1)Kubernetes Engine 環境を設定します。

gcloud config set project PROJECT_ID
  ->該当するプロジェクトIDを入力すること!!

gcloud config set compute/zone us-central1-b
       ->対象のゾーンエリアを選ぶ。(今回は、”us-central1-b”を選択)


2)クラスタの作成を行う。
大きな処理能力は必要ないので、1 つの g1-small ノードを使ってクラスタを作成します。

gcloud container clusters create hello-world \
    --num-nodes 1 \
    --machine-type g1-small


3)作成が成功したかコマンドで確認してみる。

gcloud compute instances list



4)ポッドの作成
ポッドは管理とネットワーキングを目的に結合されたコンテナのグループです。
ポッドには 1 つのコンテナを含めることも、多数のコンテナを含めることもできます。
この例で必要なコンテナは 1 つだけで、tutum/wordpress イメージを使用して作成します。
このコンテナはポート 80 でコンテンツを提供します。
kubectl run コマンドを使用してポッドを作成します。

kubectl run wordpress --image=tutum/wordpress --port=80


5)外部トラフィックの許可(ロードバランサー)
デフォルトでは、ポッドにはクラスタ内の内部IPからしかアクセスできません。Kubernetes 仮想ネットワークの外部から wordpress コンテナに
アクセスできるようにするには、ポッドをサービスとして公開する必要があります。
kubectl expose コマンドを使用してポッドを公開します。
--type=LoadBalancer フラグを指定して、ポッドがトラフィックを受け付ける
外部 IP を作成します。


kubectl expose deployment wordpress --type=LoadBalancer


<メモ>
ロードバランサが作成されるまでに数分かかることがあります。
kubectl describe を実行すると進行状況を確認できます。

kubectl describe services wordpress


6)新しいウェブサイトの確認
実際の動作を確認するには、前のステップで作成した
外部 IP アドレスにアクセスします。
IP アドレスは、作成したサービスの EXTERNAL-IP 列に表示されます。

kubectl get services wordpress





この例では http://EXTERNAL-IP:80 にアクセスします。


◾️作業内容のイメージショット

wordpress(一括管理方法)

1.メインで使用してるwordpressを管理用と位置ずけしてする。
2.管理用と監視対象のwordpressに以下のプラグインを導入する。

◾️管理用Wordpress
MainWPというプラグインを導入

◾️監視対象Wordpress
MainWPChildというプラグインを導入



2018年6月25日月曜日

kubernetes: コンテナイメージにログインする方法

kubernetes: コンテナイメージにログインする方法について記載をする。

1)pod名を確認する。

$ kubectl get pod


2)kubectl execコマンド実行

$ kubectl exec -it <Pod名> /bin/bash

Lambda + SSM Run Commandで、数十台のEC2のuserdata結果を一括確認する

コードを1枚貼って、テストイベントを実行するだけで、 全台の確認結果が返ってくる手順です。 [ゴール] Nameタグが web-* / api-* / batch-* のEC2すべてに確認コマンドを流し、 NGの台だけ を結果に表示します。確認対象のuserdata(Ubu...