[Docker-compose] WordPressを起動する

docker-compose.yml

version: '3.3'
services:
  mysql:
    image: mysql:5.7.28
    restart: unless-stopped
    networks:
    - wp_net
    volumes:
    - mysql_volume:/var/lib/mysql
    environment:
      MYSQL_ROOT_PASSWORD: password
      MYSQL_DATABASE: wordpress 
      MYSQL_USER: wordpress
      MYSQL_PASSWORD: password

  wordpress:
    image: wordpress:5.2.3-php7.3-apache
    restart: unless-stopped
    depends_on:
    - mysql
    networks:
    - wp_net
    ports:
    - 8080:80
    environment:
      WORDPRESS_DB_HOST: mysql:3306
      WORDPRESS_DB_NAME: wordpress
      WORDPRESS_DB_USER: wordpress
      WORDPRESS_DB_PASSWORD: password

networks:
  wp_net:
    driver: bridge
volumes:
  mysql_volume:
    driver: local

うおおおおおおおおおお
これはやばい

[Docker-compose] 入門

docker-compose.ymlで作成する

version: '3.3'
services:
  nginx:
    image: nginx:1.17.6-alpine
    ports:
    - 8080:80
    environment:
      MYENV: "hello compose"

k8sもymlで作成する
docker-compose up -d の「-d」はバックグラウンド実行

$ sudo docker-compose up -d
$ sudo docker-compose ps
Name Command State Ports
——————————————————————————–
c5_nginx_1 nginx -g daemon off; Up 0.0.0.0:8080->80/tcp,:::8080->80/tcp
$ sudo docker-compose down

なるほどー 入門になってないな…

S3のアクセス制限

– IAMグループを作成し、IAMグループに対しIAMポリシーを付けることで特定のフォルダしかアクセスできない様にする

ニャルほどー、これはエンドレスだわ…

[Docker] コンテナ上のアプリを動かす

dockerの場合はdaemonで動かすのではなく、アプリを直接動かすのが基本
起動時のコマンドが全てのプロセスの原点となる
-> bashを抜けるとコンテナが停止する

$ sudo docker run -it –name centos centos:7.7.1908 bash

start.sh

#!bin/sh
handle() {
	echo 'handle sigterm/sigint'
	exit 0
}
trap handle TERM INT

nginx -g "daemon off;" &
wait

Dockerfile

From python:3.7.5-slim
RUN pip install flask=1.1.1
COPY ./server.py /server.py
ENV PORT 80
STOPSIGNAL SIGINT
CMD ["python", "-u", "/server.py"]

### supervisorで複数の子プロセス(アプリ本体)を管理

From centos:7.7.1908
RUN yum install -y epel-release \
	&& yum install -y http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm \
	&& yum -y install nginx openssh-server supervisor \
	&& rm -rf /var/cache/yum/* && yum clean all
RUN ssh-keygen -A
COPY supervisord.conf /etc/supervisord.conf
EXPOSE 22 80
CMD ["/usr/bin/supervisord", "-c", "/etc/supervisord.conf"]
[supervisord]
nodaemon=true

[program:sshd]
command=/usr/sbin/sshd -D
autostart=true
autorestart=true

[program:nginx]
command=/usr/sbin/nginx -g "daemon off;"
autostart=true
autorestart=true

うーん、結構奥が深いな…

[Docker] goのイメージ作成

main.go

package main

import(
	"net/http"
	"fmt"
)

func main(){
	http.HandleFunc("/",
		func(w http.ResponseWriter, r *http.Request){
			fmt.Fprintf(w, "hello go")
		})
	http.ListenAndServe(":80", nil)
}

Dockerfile

From golang:1.13.4-alpine3.10
WORKDIR /src
COPY ./main.go /src
RUN go build -o /usr/local/bin/startapp main.go
WORKDIR /
CMD ["/usr/local/bin/startapp"]

$ sudo docker image build ./ -t c4app3
$ sudo docker run –rm -d -p 8080:80 –name myapp c4app3

1. イメージ作成に必要な作業を別のコンテナで実施
2. 作業用コンテナで作成したイメージから本番ようイメージで使うデータを持ってくる

as builderとして1つ目の作業イメージに名前を与え、2つ目のイメージ後半で–from=builderとしてバイナリファイルをイメージ内部にコピー

From golang:1.13.4-alpine3.10 as builder
WORKDIR /src
COPY ./main.go /src
RUN go build -o start_appserver main.go

From alpine:3.10.3
COPY --from=builder /src/start_appserver /bin/start_appserver
CMD ["/bin/start_appserver"]

OSを搭載しないイメージ(Scratchと呼ぶ)
こうも書ける

From golang:1.13.4-alpine3.10 as builder
WORKDIR /src
COPY ./main.go /src
RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -a installsuffix cgo -o startapp main.go

From scratch
COPY --from=builder /src/startapp /startapp
CMD ["/startapp"]

自分が手動で展開できないものはDockerfile上の手順に落とし込むことはできない
– スクリプト構成を理解
– 公式を展開
– 機能を追加 
などを手を動かしてやる

差分イメージは減らす

RUN yum update \
	&& yum install -y \
		package-bar \
		package-baz \
		package-foo \
	&& rm -rf /var/cache/yum/* \
	&& yum clean all

AWS Direct ConnectのDC側のルータ設定

### 前提
AWS Direct Connectに接続するためには、BGPのTCP MD4認証機能に対応したファームウェアが必要

LAN1のインターフェイスの設定: ip lan1 address 192.168.100.1/24
LAN2のインターフェイスの設定: vlan lan2/1 802.1q vid=${VLAN番号}
※物理的な接続形態とは独立して、仮想的なLANセグメントを作る技術

なるほどー

[AWS] オートヒーリングとは

EC2でオートリカバリーとオートヒーリングがある
似てるが、Auto Healingは数を確保するのに対し、AutoRecoveryは自動復旧

### Auto Recovery
– Auto Recoveryは既存インスタンスのCloudWatchメトリクス監視をトリガーとするEC2インスタンスの自動復旧の仕組み
– 新しい仮想サーバホストへ変わる

### Auto Healing
Auto HealingはAutoScalingグループで設定したステータスチェック失敗時に、異常のあるEC2インスタンスを削除し、新しいインスタンスを起動して、常に一定数のEC2インスタンスを維持する構成
-> Auto Scalingで台数を設定

なるほどー
どっちの方が良いかわからんね。。

AWS Direct Connectの冗長化

### DirectConnectの冗長化
– ネットワーク機器や回線を含めたネットワーク経路を、災害や障害などで停止させることなく通信経路を確保し続けること
– 可用性を高め、障害が発生した際の停止時間を短縮する

### 冗長化の留意点
– コストが高い: 複数の専用線やネットワーク機器を用意しなければならないため
– 管理業務の増加: 冗長化構成により複雑化し、管理業務が増加する
– 万能ではない: リージョンの大規模障害などが起きた時は万能ではない

### マルチPOP接続
– クラウド環境への出入口となるネットワークの物理的な接続拠点を「クラウドPOP(Points of Presence)」と呼んでいます。専用線経由でPOP接続することでダイレクト接続が可能になる。
エクイティニックス、アット東京社

### 冗長化構成の例
– シングル構成
– シングルロケーションでの冗長構成
– デュアルロケーション
– 4接続確保

なるほどー
Direct Connectを使うとなると、ルータが高いみたいだけど、どうなんだろうか…

PCI DSSとは

PCI DSSとは?
– クレジットカード会員データを安全に取り扱う事を目的として策定されたクレジットカード業界のセキュリティ基準
– セキュリティ対策フレームワーク
– Payment Card Industry Data Security Standardの頭文字をとったもの

### 認証の取得
1. PCI国際協議会によって認定された審査機関(QSA=Qualified Security Assessor)による訪問審査を受けて、認証を得る

2. PCI国際協議会によって認定されたベンダー(ASV=Approved Scanning Vendor) のスキャンツールによって、四半期に1回以上の点検を受けて、サイトに脆弱性のないことの認証を得る

3. 自己問診
PCIDSSの要求事項に基づいた、アンケート形式によるチェック項目に回答して、すべて「Yes」であれば、準拠していると認められる

1つ適用というわけではなく、カード情報の取り扱い規模や事業形態によって複数を実施する
AISやSDPなど各カードブランドのプログラムによって適用するレベルが異なる

### PCI DSSで定められている目標と要件
– 安全なネットワークとシステムの構築と維持
1.カード会員データを保護するために、ファイアウォールをインストールして維持する
2.システムパスワードおよびその他のセキュリティパラメータにベンダ提供のデフォルト値を使用しない

– カード会員データの保護
3.保存されるカード会員データを保護する
4.オープンな公共ネットワーク経由でカード会員データを伝送する場合、暗号化する

– 脆弱性管理プログラムの整備
5.マルウェアにしてすべてのシステムを保護し、ウィルス対策ソフトウェアを定期的に更新する
6.安全性の高いシステムとアプリケーションを開発し、保守する

– 強力なアクセス制御手法の導入
7.カード会員データへのアクセスを、業務上必要な範囲内に制限する
8.システムコンポーネントへのアクセスを識別・認証する
9.カード会員データへの物理アクセスを制限する

– ネットワークの定期的な監視及びテスト
10.ネットワークリソースおよびカード会員データへのすべてのアクセスを追跡および監視する
11.セキュリティシステムおよびプロセスを定期的にテストする

– 情報セキュリティポリシーの整備
12.すべての担当者の情報セキュリティに対応するポリシーを整備する

なるほどー、結構厳しいな…