今更ながらDockerまとめ

そもそもDockerって何?

コンテナ型の仮想環境を作成・配布・実行するためのプラットフォーム

だそう。



仮想環境(仮想マシン)って?

仮想化されたサーバーなどを「仮想環境(仮想マシン)」と呼ぶ。

仮想化

物理的な環境に囚われず仮想的な環境を作り出すこと。
一つの物理サーバに対し、サーバ内のリソースを分割することで仮想的にいくつものサーバが存在しているように見せる技術。



コンテナ型って?

仮想環境を作り出す方法の一つ。
仮想化の方法には大きく分けると、ホストOS型・ハイパーバイザ型・コンテナ型の3つある。

ホスト型

ホストOS上に土台となるソフトウェアをインストールし、そのソフトウェア上で仮想マシンを稼働させる方式。


ホストOSとゲストOSの違い

ホストOS=仮想環境の土台となるOS、つまり物理サーバにインストールされたOS。
ゲストOS=仮想マシン上にインストールされたOS。

ハイパーバイザー型

ハードウェアへ直接インストールし、その上で仮想マシンを稼働させる方式。


コンテナ型

ホストOSの上にゲストOSを起動せずに、仮想マシン(コンテナ)上のアプリのみを起動する仕組み。

仮想マシンと同じように、コンテナ内からはあたかも独立した物理マシン上で動作しているように見える。

仮想マシンとコンテナの違い

仮想マシンでは、それぞれにOSを動かさなくてはいけない。
そのため、仮想マシンごとにプロセッサやメモリを消費し、ストレージも必要になる。

一方コンテナでは、1つのOSで稼働するため、プロセッサやメモリの消費は少なく、ストレージの使用もわずかで済む。
そのため、仮想マシンに比べて起動時間が短く、同じ性能のハードウェアであれば、より多くのコンテナを同時に動かすことが可能。



さっきからちょいちょい出てくるコンテナとは?

一言でいうと空間?(合っているのか...?)

Dockerは、従来のハイパーバイザー型の仮想化とは異なり、
1つのOS環境に、コンテナと呼ばれる分離された空間を作成し、
その分離された空間(コンテナ)ごとに異なるOS環境を実現することができる。

イメージを基にコンテナが作られる。



イメージとは?

コンテナを実行するときに必要なファイルシステム(記憶装置に保存されたデータを管理し、操作するために必要な機能)。
イメージを実体化(インスタンス化)したものが、コンテナと呼ばれる。



Docker Compose

Dockerに含まれるツールの一つ。
複数のコンテナを実行・管理するためのツール。
複数のコンテナから成るサービスを構築・実行する手順を自動的にし、管理を容易にする機能。

→docker-compose.ymlファイルを実行してる部分がまさにそれ。
ファイルには、各コンテナはどのイメージから作るかや、追加設定を書き込んでおくことができる。



Dockerfile

コンテナの構成内容をまとめて記述したもの。
docker buildコマンドでDockerfileの上から順に処理されていく。

公開されているDockerイメージをそのまま使うのではなく、必要なパッケージやアプリ、各種設定を含んだDockerイメージを自分で作成して使用することができる。
その場合、Dockerfileを作成し、それを使用して必要なDockerイメージを作成することができる。
Dockerfileには、ベースとするDockerイメージに対して実行する内容を記述することになる。

リモートサーバーでmysqldumpしてローカルに転送する方法

リモートサーバーに接続

ssh centos@xx.xx.xx.xx

// さらに違うサーバーに接続
ssh 02



mysqldump

mysqldump -uユーザー名 -pパスワード db名 > sample.dump



ローカルへ転送

一旦02サーバーを抜けて(exit)、02にあるダンプファイルを持ってくる

scp 02:/home/centos/sample.dump /home/centos


ローカルへ戻って、ローカルへダンプファイルを持ってくる

scp centos@xx.xx.xx.xx:/home/centos/sample.dump ./



んー他にもっとシンプルな方法がありそうなきがするけど、どうなんだろう

docker上のmysqlのタームゾーン設定

mysqlに設定されているタームゾーンを確認。

show variables like '%time_zone%';
+------------------+--------+
| Variable_name    | Value  |
+------------------+--------+
| system_time_zone | UTC    |
| time_zone        | SYSTEM |
+------------------+--------+

UTC設定になってるー。
これをJTSに変えたい。



解決方法

db-docker-compose.ymlに下記を追加

services:
  db:
    image: mariadb:10.1
    environment:
      - MYSQL_ROOT_PASSWORD=***
      - "TZ=Asia/Tokyo" // これを追加


もう一度確認すると

MariaDB [mysql]> show variables like '%time_zone%';
+------------------+--------+
| Variable_name    | Value  |
+------------------+--------+
| system_time_zone | JST    |
| time_zone        | SYSTEM |
+------------------+--------+

Wordpress 本番環境と同じ環境を作る

サーバーはAWSを使う
awswordpressをインストールする方法:http://brian.hatenablog.jp/entry/build-wordpress-blog-on-aws



wordpressのエクスポート・インポート:https://techacademy.jp/magazine/7859

Scala 謎かったところまとめ

val, var, defの違い

valは定数、varは変数、defはコード

valは定数なので、割り当てられたオブジェクトは置き換えができない。 逆にvarは変数なので、割り当てられたオブジェクトは置き換えられる。

defはメソッドを定義する際に使う。

trait(トレイト)

traitは、Javaインターフェイスのようなものらしい。 なので直接インスタンス化はできない。

lazy

値を遅延評価する。 具体的には、最初にアクセスされたときのみ評価され、定義時には評価されない。 lazyはvalのみに設定できる。 複数回呼び出した場合は、2回目以降は値は評価が行われず、初回の評価結果が返される。 何回評価を行なっても評価結果は同じものに対して使えばいいのかな?

implicit

直訳すると「暗黙的な」という意味。 暗黙的に何かをしてくれる

implicitにはいくつか機能があるらしい

拡張メソッド(enrich my library)

「=>」はいったい何を

trait DogTable extends DefaultJsonProtocol {
  this: MySQLDBImpl =>
  
  // MySQLDBImplのが使える?
}

コンパニオンオブジェクト

同じソース、パッケージ、クラス内で定義された同名オブジェクトのことで、お互いにプライベートなメンバにアクセスできるやつ

case class(ケースクラス)

ケースクラスの特徴 * インスタンス生成newを省略できる * 基本コンストラクタ引数にすべてvalがついた状態になる * パターンマッチに使える * コンパニオンオブジェクトが生成される * 便利なメソッドが生成される

使えるメソッド

apply applyメソッドはインスタンスを生成します

WordPressのアップデート 参考ページ

バックアップ

WordPressの「インポート/エクスポート」を使ってサイトをバックアップし復元する | ブログ工房

アップデート

定期的にやっておきたいWordPressを安全に更新する方法

バグった時の対応

WordPress で画面が真っ白になってしまった場合の3つの対処法 | ブログ工房