- kote2.tokyo
- >
- Blog
- >
- DockerでさくらVPS上にLAMP環境を1から作る
DockerでさくらVPS上にLAMP環境を1から作る
- Update2016-08-01
- Category
- Backend
- Other--
最近やっとDockerを使い始めました。ちょうど一昨日あたりか、Dockerのバージョンも正式版が出たようで、今後ますます使われそう。
今回は備忘録として、DockerをさくらVPS上で1からLAMPで構築してみたので備忘録メモとして残しておきます。なお、dockerの基本的な事については細かく書いていないのでドットインストールとか参考にしてください。
今回作る環境ですが、古いのも何なので、現時点(2016/8/1)での最新版で構築したいと思います。
OS:Ubuntu16.04 php:7.0.9 mysql:5.7 phpmyadmin:4.6.3
なお、さくらVPS上でUbuntu16.04はカスタムイメージ上からインストールできますのでインストール時の設定などは省略します。自分はこちらを参考にしました。
カスタムOSインストールガイド – Ubuntu 16.04
まずお決まりのアップデートをします。
sudo apt-get update sudo apt-get upgrade sudo reboot
vimをインストールしておきます。
sudo apt-get install vim
鍵認証の設定
SSHの設定を開いて、rootでのログインをnoにするなどの変更をします。
sudo vim /etc/ssh/sshd_config (ポート番号変更、rootログインno) sudo /etc/init.d/ssh restart
Macターミナル、Windowsの方はPuttyのごった煮などを使ってアクセスしてみます。以下はMacターミナルの方法です。ユーザー名kote2でアクセスしています。
ssh kote2@***.***.***.*** -p 10022 #***は自分のサーバーのIP
さてMac側に戻ってきて今度は鍵を作成
cd #ホームディレクトリに戻る。一応。 cd .ssh #.sshディレクトリ作成 ssh-keygen -t rsa #秘密鍵・公開鍵作成 (適宜id_rsa_**など名前変更) # cat id_rsa_sakura_vps2.pub #公開鍵の内容を表示$内容をコピーしておく
サーバー側でMacでコピーしておいたキーをauthorized_keysに追記します。パーミッションもこの時変更するのを忘れずに。
mkdir .ssh chmod 700 .ssh cd .ssh vim authorized_keys (コピーしてきたキーをペースト) chmod 600 authorized_keys
以下でアクセスできればOKです。
ssh -i .ssh/id_rsa_sakura_vps2 kote2@***.***.***.*** -p 10022
無事アクセスできたらSSHの設定を開いて追加でログイン方法でパスフレーズをnoにします。
sudo vim /etc/ssh/sshd_config (ログインパスno) sudo /etc/init.d/ssh restart
Dockerのインストール
基本的には公式ドキュメントを参考に。
https://docs.docker.com/engine/installation/linux/ubuntulinux/
ここいら辺は公式ドキュメント通りにやるだけです。
ssh -i .ssh/id_rsa_sakura_vps2 kote2@***.***.***.*** -p 10022 uname -r #カーネルの確認 sudo wget -qO- https://get.docker.com/ | sh #インストール docker -v #インストールのバージョン確認 sudo service docker start #docker起動 sudo docker run hello-world #hello worldコンテナ起動。この時はsudoをまだ使う。
Ubuntuは初期でrootは使えないので設定
sudo su - passwd #パスワードも設定
root権限でお使いのユーザーをdockerグループに登録します。これをやるとdockerコマンドを使うときにsudoをつけなくても良くなります。
su - sudo groupadd docker sudo usermod -aG docker kote2 cat /etc/group | grep kote2 #確認 exit #接続し直す docker run hello-world #sudoをつけなくてもコンテナ起動
Dockerイメージ
まずDorckerイメージをバックグラウンドで起動してみます。-dオプションはバックグラウンドで起動という意味です。
docker run -d php:7.0-apache #コンテナを起動 docker images #dockerイメージ一覧を表示 docker ps #起動中のコンテナを確認
次はブラウザで表示を確認します。-pオプションはポート番号指定で左側がホスト、右側がコンテナ側です。以下の場合はdockerコンテナ80番ポートをホスト側の80番ポートに転送します。
docker run -p 80:80 -d php:7.0-apache (ブラウザにアクセス。ForbiddenならOK) docker ps #起動中のコンテナを確認 docker rm -f ***(コンテナID) #コンテナIDのコンテナを削除
ちなみに起動したコンテナは-aオプションをつけると確認できます。また、起動したことのあるコンテナを一括削除する方法もあります。テストする際よく使うので覚えておくと便利かも。
docke ps -a #起動中、または起動したことのあるコンテナ一覧 docker rm -f $(docker ps -a -q)#登録されているコンテナを一括消去
今度は–nameでコンテナ名をつけて起動します。またコンテナ上で起動しているターミナルを利用してindex.phpを書き出します。
docker run -p 80:80 --name php -d php:7.0-apache docker exec -ti php bash #ターミナルに入る echo ' index.php #index.phpファイルを作る (ブラウザにアクセス。phpinfoが出ていればOK)
ホスト側にindex.phpを作成する
先程はコンテナにアクセスしてindex.phpを書き出しましたが、コンテナを止めたりするとindex.phpも消えちゃいます。なので今度はホスト側にindex.phpを持ってそれを表示させます。
ホスト側でindex.phpを作成し、-vオプションでコンテナ側のディレクトリをホスト側のディレクトリに転送するようにします。
vi /var/www/html/index.php #場所はどこでもよいです (phpinfo();を記述) docker rm -f ***(コンテナID) docker run -p 80:80 -v /var/www/html:/var/www/html --name php -d php:7.0-apache
これでホスト側のindex.phpを読みに行きます。
MySQLコンテナの作成
先ほどのコンテナはそのまま起動しつつMySQLコンテナを作ります。
docker run --name mysql -e MYSQL_ROOT_PASSWORD=pass -d mysql:5.7 docker exec -ti mysql bash #mysqlコンテナのターミナルにアクセス mysql -ppass #MySQLにログイン。確認したらByeしてください。
Dockerfileでの自動化
今までは手動でコンテナを作ってきましたが、Dockerfileを使って自動化してみます。
docker rm -f $(docker ps -a -q) #まずコンテナを一括消去 (適当な場所にDockerfileを作って以下を記入。例では/home/kote2/dockerに作ります。) FROM php:7.0-apache RUN apt-get update && \ docker-php-ext-install pdo_mysql mysqli mbstring docker build -t php:custom /home/kote2/docker #php:customというイメージを作成
Docker Hub上のMySQLはcharacter setがlatinになっているので、起動する際設定ファイルを使用して一部書き換えるようにしてみます。以下を記述して適当な場所に保存してください。
/home/kote2/docker/mysql_custom.conf
[mysqld] character-set-server=utf8
では先ほど作成したdockerイメージを使ってApacheコンテナを起動してみます。以前のMySQLコンテナは削除しておきます。
docker rm -f $(docker ps -a -q) #コンテナ一括消去 docker run --name mysql -v /home/kote2/docker:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=pass -d mysql:5.7 #起動
ApacheコンテナとMySQLコンテナをリンクさせる
起動したMySQLコンテナを以下コマンドでリンクさせてApacheコンテナを起動します。–linkを使います。
docker run -p 80:80 -v /var/www/html:/var/www/html --link mysql:mysql --name php -d php:custom docker exec -ti php bash #ターミナルに接続 cat /etc/hosts #mysqlがあれば成功
phpmyadminを使って確認してみる
次はphpmyadminを使ってブラウザ上でデータベースにアクセスできるか確認します。ホスト側にphpmyadminのファイルを展開します。
cd /var/www/html sudo wget https://files.phpmyadmin.net/phpMyAdmin/4.6.3/phpMyAdmin-4.6.3-all-languages.tar.gz sudo tar zxf phpMyAdmin-4.6.3-all-languages.tar.gz sudo rm phpMyAdmin-4.6.3-all-languages.tar.gz sudo mv phpMyAdmin-4.6.3-all-languages myadmin cd myadmin sudo cp config.sample.inc.php config.inc.php sudo vi config.inc.php #以下を記述 $cfg['Servers'][$i]['host'] = 'mysql';
phpmyadminにアクセスし、root,passでログインできればOKです。
PDOでデータを入れてみる
最後にphpからデータが入れられるか確認します。phpmyadminからデータベース作成します。
CREATE DATABASE test; USE test; CREATE TABLE test(name VARCHAR(100));
test.phpを作成し、アクセスします。
$db = new PDO('mysql:host=mysql;dbname=test', 'root', 'pass'); $db->query("INSERT INTO test VALUES('kote2さん')"); $st = $db->query("SELECT * FROM test"); var_dump($st->fetchAll());
phpmyadmin上でデータが入ってるか確認します。
いじょ!