[docker] 基本を学習する

$ sudo docker pull httpd

docker engineがアクセスを受けたポート番号をもとに、受信対象のコンテナが待ち受けているポート番号に通信を送る
$ sudo docker run -p 8080:80 -d httpd

nginxのリバースプロキシを使って外部からのアクセスをnginxが一次受けし、対応するapacheに振り分ける方法がよく使われる
$ sudo docker run -v /home/vagrant/dev/docker/basic/webcontents/:/usr/local/apache2/htdocs/ -p 8080:80 -d httpd

### データボリュームを操作
$ sudo docker volume create –name=datavolume
$ sudo docker volume ls
$ sudo docker run -it -v datavolume:/tmp/ ubuntu /bin/bash
root@e428992c764c:/# touch /tmp/data.txt
$ sudo docker rm e428992c764c
$ sudo docker run -it -v datavolume:/tmp/ ubuntu /bin/bash
root@8f091764ad1d:/# ls /tmp/
data.txt

### データボリュームコンテナ
$ sudo docker volume create –name=datavolume
$ sudo docker run –name=data-container -v datavolue:/tmp ubuntu
$ sudo docker run –volumes-from data-container -it ubuntu /bin/bash

なるほど、コンテナをボリュームとしてattachする方法があるのか
とはいえ、頭の中はCI/CDのところで一杯だが…

[docker] container基礎

$ sudo docker run -it –name=ping_in_ubuntu ubuntu /bin/bash
# ping localhost
bash: ping: command not found
# apt update
# apt install iputils-ping
# ping localhost
PING localhost (127.0.0.1) 56(84) bytes of data.

インストールした後は削除してコンテナサイズを小さくする
# apt clean
# rm -rf /var/lib/apt/lists/*

### アタッチとデタッチ
アタッチはコンテナを前面で動かし、デタッチはバックグラウンドで動かす
ctl + p, clt + q でデタッチすることができる
$ sudo docker attach 22b3765372ae

### コンテナをイメージ化
$ sudo docker commit 22b3765372ae ping_in_ubuntu
$ sudo docker images;
$ sudo docker tag ping_in_ubuntu:latest ping_in_ubuntu:Ver.1.00

### docker saveとdocker export
docker saveはベースイメージと各レイヤー情報をそのままtarファイルとして保存
docker exportは差分のレイヤー情報は持たずに最終的なコンテナの内部構成をtarファイルにする

LAMP環境を構築してexportしてレイヤーを作るなどはよくある
$ sudo docker save ping_in_ubuntu:latest > ping_save.tar
$ sudo docker export 22b3765372ae > ping_export.tar
$ sudo docker rmi ping_in_ubuntu:latest ping_in_ubuntu:Ver.1.00
$ sudo docker load < ping_save.tar $ sudo docker import ping_export.tar なるほど、やればやるほど周辺知識は付いてくるな

Kubernetesとは

k8sはコンテナのオーケストレーションツール
複数の物理マシンに複数のコンテナがあることが前提
1台1台の物理マシンの中に複数のコンテナがある
定義ファイル(マニュフェストファイル)を作成すれば、コンテナを作成管理してくる
 L etcd(データベース)に書き込まれる
docker-composeは作って終わりだが、k8sはその状態を維持する。監視も行う

### マスターノードとワーカーノード
クラスターは定義ファイルに基づいて自立して動く
k8sは仮想ネットワークドライバであるCNIをインストールする必要がある
マスターノードではコントロールプレーンでワーカーノードを管理

### 用語
Pod: コンテナとボリュームがセットになったもの
Service: Podをまとめて管理する
ReplicaSet: Podの数を管理

### 定義ファイル

apiVersion: v1
kind: Pod
metadata:
  name: apa000pod
  labels:
    app: apa000kube
spec:
  containers:
    - name: apa000ex91
      image: httpd
      ports:
        - containerPort: 80

apa000dep.yml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: apa000dep
spec:
  selector:
    matchLabels:
      app: apa000kube
  replicas: 3
  template:
    metadata:
      labels:
        app: apa000kube
    spec:
      containers:
      - name: apa000ex91
        image: httpd
        ports:
        - containerPort: 80

service

apiVersion: v1
kind: Service
metadata:
  name: apa000ser
spec:
  type: NodePort
  ports:
  - port: 8099
    targetPort: 80
    protocol: TCP
    nodePort: 30080
  selector:
    app: apa000kube

### kubernetsコマンド
$ kubectl ${command} ${option}
create, edit, delete, get, set, apply, describe, diff, expose, scale, autoscale, rollout, exec, run, attach, cp, logs, cluster-info, top

$ kubectl apply -f *.yml
$ kubectl get pods
$ kubectl apply -f *.yml
$ kubectl get services

OK、さー仕事するぞー

[Docker] docker-compose基礎

コンテナ、ネットワーク、ボリュームなどのコマンドをまとめて定義ファイルを書く 、イメージはdockerfile
docker-compose up: 定義ファイルに書かれた内容に従ってイメージをダウンロードしたり、コンテナを作成起動したりする
docker-compose down: コンテナとネットワークを停止・削除、停止のみの場合はstopコマンド

version: "3"

services:
  apa000ex2:
    image: httpd
    ports:
      - 8080:80
    restart: always
version: "3"

services:
  wordpress000ex12:
    depends_on:
      - mysql000ex11
    image: wordpress
    networks:
      - wordpress000net1
    ports:
      - 8085:80
    restart: always
    environment:
      WORDPRESS_DB_HOST=mysql000ex11
      WORDPRESS_DB_NAME=wordpress000db
      WORDPRESS_DB_USER=wordpress000kun
      WORDPRESS_DB_PASSWORD=wkunpass

services, networks, volumesについて定義する
servicesはコンテナのこと
restartはコンテナが停止した時の再試行ポリシー、no, always, on-failure, unless-stoppedがある
depend_onは作る順番、連動して作成したか

version: "3"

services:
  mysql000ex11:
    image: mysql:5.7
    networks:
      - wordpress000net1
    volumes:
      - mysql000vol11:/var/lib/mysql
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: myrootpass
      MYSQL_DATABASE: wordpress000db
      MYSQL_USER: wordpress000kun
      MYSQL_PASSWORD: wkunpass
  wordpress000e12:
    depends_on:
      - mysql000ex11
    image: wordpress
    networks:
      - wordpress000net1
    volumes:
      - wordpress000vol12:/var/www/html
    ports:
      - 8085:80
    restart: always
    environment:
      WORDPRESS_DB_HOST: mysql000ex11
      WORDPRESS_DB_NAME: mysql000db
      WORDPRESS_DB_USER: mysql000kun
      WORDPRESS_DB_PASSWORD: wkunpass
networks:
  wordpress000net1:
volumes:
  mysql000vol11:
  wordpress000vol12:

ふむふむ やりながら慣れるしかないな

[Docker] Redmineのコンテナを作成してみよう

### 作成手順
ネットワークを作る -> MySQLコンテナを作る -> Redmineコンテナを作る -> 確認 -> 後始末
※WordPressとほぼ同じ構成だがオプションの名前が異なる

$ sudo docker network create redmine000net2
$ sudo docker run –name mysql000ex13 -dit –net=redmine000net2 -e MYSQL_ROOT_PASSWORD=myrootpass -e MYSQL_DATABASE=redmine000db -e MYSQL_USER=redmine000kun -e MYSQL_PASSWORD=rkunpass mysql –character-set-server=utf8mb4 –collation-server=utf8mb4_unicode_ci –default-authentication-plugin=mysql_native_password
$ sudo docker run -dit –name redmine000ex14 –network redmine000net2 -p 8086:3000 -e REDMINE_DB_MYSQL=mysql000ex13 -e REDMINE_DB_DATABASE=redmine000db -e REDMINE_DB_USERNAME=redmine000kun -e REDMINE_DB_PASSWORD=rkunpass redmine

うおおおおおお
何これ?

[docker] 複数コンテナを動かしてみる

wordpress: wordpress, apache, php, mysql

$ sudo docker network create wordpress000net1
$ sudo docker run –name mysql000x11 -dit –net=wordpress000net1 -e MYSQL_ROOT_PASSWORD=myrootpass -e MYSQL_DATABASE=wordpress000db -e MYSQL_USER=wordpress000kun -e MYSQL_PASSWORD=wkunpass mysql –character-set-server=utf8mb4 –collation-server=utf8mb4_unicode_ci –default-authentication-plugin=mysql_native_password
$ sudo docker run –name mysql000x12 -dit –net=wordpress000net1 -p 8085:80 -e WORDPRESS_DB_HOST=mysql000ex11 -e WORDPRESS_DB_NAME=wordpress000db -e WORDPRESS_DB_USER=wordpress000kun -e WORDPRESS_DB_PASSWORD=wkunpass wordpress

うむ、Wordpressは少し慣れた感がある

[Docker基礎] 基本コマンド

$ sudo docker run –name apa000ex1 -d httpd
$ sudo docker ps
$ sudo docker stop apa000ex1
$ sudo docker rm apa000ex1

### apache
apacheは80ポートで待ち構えている
$ sudo docker run –name apa000ex2 -d -p 8080:80 httpd
$ sudo docker stop apa000ex2
$ sudo docker rm apa000ex2

うーん、apacheは少し慣れてきた。

AWS S3のデータ保護

### S3バケットのデータ保護
S3はデータセンターのディスクに書き込むときにデータをオブジェクトレベルで暗号化し、ユーザーがデータにアクセスするときに復号する。

### 暗号化の種類
### SSE-S3
S3が管理するキーによるサーバ側の暗号化
SSE-S3を使用すると、オブジェクトは一意のキーで暗号化される
AES-256を使用して暗号化する

### SSE-KMS
AWS KMSに保存されているカスタマーキー(CMK)によるサーバー側の暗号化

### SSE-C
ユーザが指定したキーによるサーバ側の暗号化(SSE-C)

### クライアント側の暗号化
S3に送る前にデータを暗号化
AWS Encryption SDKを使用すると暗号化を容易に実装可能

なるほど、少しずつ理解してきた