sample

# ログインコマンドを取得
$ (aws ecr get-login --no-include-email --region ap-northeast-1)
Unable to locate credentials. You can configure credentials by running "aws configure".  <- error

# credentialsを設定
$ aws configure
AWS Access Key ID [None]: {Access Key}
AWS Secret Access Key [None]: {Secret Access Key}
Default region name [None]: ap-northeast-1
Default output format [None]: json
docker login -u AWS -p xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx https://xxxxxxxxxxxxx.dkr.ecr.ap-northeast-1.amazonaws.com


# ログインコマンドを実行
$ docker login -u AWS -p xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx https://xxxxxxxxxxxxx.dkr.ecr.ap-northeast-1.amazonaws.com
WARNING! Using --password via the CLI is insecure. Use --password-stdin.
Login Succeeded
# Docker イメージを構築
docker build -t zo-saiyou .

4) 構築が完了したら、このリポジトリにイメージをプッシュできるように、イメージにタグを付けます: docker tag zo-saiyou:latest 811268186672.dkr.ecr.ap-northeast-1.amazonaws.com/zo-saiyou:latest

5) 以下のコマンドを実行して、新しく作成した AWS リポジトリにこのイメージをプッシュします: docker push 811268186672.dkr.ecr.ap-northeast-1.amazonaws.com/zo-saiyou:latest

プロキシ

プロキシとは

プロキシとは、ブラウザに代わってwebサーバーにリクエストするやつ。

ブラウザ -> プロキシ -> webサーバー
ブラウザ <- プロキシ <- webサーバー

なぜわざわざワンクッション挟むのか

  1. 匿名性
    プロキシを経由しないで、webサーバーへアクセスした場合、アクセス先のサーバーにIPアドレスなどの個人的な情報がわかってしまう。
    プロキシを挟むことで、直接サーバーへアクセスしないので、情報の漏洩を防ぐことができる。

  2. キャッシュ機能による高速化
    プロキシにはキャッシュ機能が付いているため、一度アクセスしたページの情報を貯めておくことができる。
    そのため、同じサイトへもう一度アクセスする際には、webサーバーまでいかずに、プロキシが情報を返してくれる。
    これによって、ページの表示速度がはやくなる。

バイナリデータ・シリアライズ・デシリアライズ

バイナリデータ

バイナリデータとは、コンピュータで扱えるデータで、人間が見ても理解できないデータ

シリアライズ

ソフトウェア内部で扱っているデータをそのままDBへ保存したり送受信できるようにすること。

たとえば、配列をDBへ保存する際に、
普通、DBには「フィールド:値」という形式で保存されるため、配列のデータをそのまま保存することはできない。
仮に「array(‘a’, ‘b’, ‘c’)」という値を保存した場合、それはただの文字列でしかない。
しかし、シリアライズすると、配列データを配列データとして保存することができる。

シリアライズ

シリアライズの逆。
シリアライズしたデータを復元すること。

MinioをDocker上で動かす

minioをインストール

docker pull minio/minio:edge
docker run -p 9000:9000 minio/minio:edge server /data

Dockerfile

RUN mkdir -p /tmps3

docker-compose.yaml

  minio:
    image: minio/minio:latest
    ports:
    - "9000:9000"
    volumes:
    - "./tmps3:/export"
    command: server /data
    environment:
      - "{AccessKey}"
      - "{SecretKey}"

Gemfile

gem 'asset_sync'

asset_sync.yaml

defaults: &defaults
  fog_provider: 'AWS'
  aws_access_key_id: '{AccessKey}'
  aws_secret_access_key: '{SecretKey}'
  # To use AWS reduced redundancy storage.
  # aws_reduced_redundancy: true
  fog_directory: "new-bucket" # バケット名を指定

development:
  <<: *defaults
  enabled: false

test:
  <<: *defaults
  enabled: false

staging:
  <<: *defaults
  fog_directory: "staging-hogehoge"

production:
  <<: *defaults
  fog_directory: "production-hogehoge"

development.rb

  # s3 route
  config.action_controller.asset_host = '//localhost:9000/minio/new-bucket/'

dockerを起動

docker-compose up

ローカルからminioにファイルをアップロード

# s3cmdをインストール
brew install s3cmd

# 設定
s3cmd --configure

Access Key  S3のアクセスキー指定
Secret Key  S3のシークレットアクセスキーを指定
Encryption password GPG encryptionを用いる事でデータを暗号化してくれる。(とりあえず空欄でおk)
Path to GPG program [/usr/bin/gpg]  GPGの場所を指定。(とりあえず空欄でおk)
Use HTTPS protocol [No] S3への通信をHTTPSにするか否か
HTTP Proxy server name  Proxyを使う場合はその指定

# s3cmdが使えることを確認
s3cmd ls

# アップロード
s3cmd put --recursive stylesheets/ s3://zeroone-views/assets/stylesheets/

Dockerを起動させてRailsを動かす

Dockerfileを作成

FROM ruby:2.5
RUN apt-get update -qq && apt-get install -y build-essential libpq-dev nodejs
RUN mkdir /myapp // 変更
WORKDIR /myapp // 変更
COPY Gemfile /myapp/Gemfile // 変更
COPY Gemfile.lock /myapp/Gemfile.lock // 変更
RUN bundle install
COPY . /myapp // 変更



docker-compose.yamlを作成

version: '3'
services:
  web:
    build: .
    command: bundle exec rails s -p 3000 -b '0.0.0.0'
    volumes:
      - .:/myapp // 変更
    ports:
      - "3000:3000"



docker-composeを起動

docker-compose run web rails new
docker-compose build
docker-compose up


ブラウザ上でアクセスできるか確認



docker-composeを停止

docker-compose down