Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Virtualbox+vagrant+docker

907 views

Published on

アルカナ勉強会#sa_study

Published in: Internet
  • Be the first to comment

  • Be the first to like this

Virtualbox+vagrant+docker

  1. 1. ローカル環境をvirtualboxとvagrantと dockerで作る 2017-09-28 スタジオ・アルカナ かつみゆきひろ
  2. 2. virtualboxとvagrantとdockerの解説
  3. 3. Linuxカーネルにおける「libcontainer」と呼ばれるLinuxコンテナ技 術[3]とaufsのような特殊なファイルシステムを利用してコンテナ型 の仮想化を行う[4]。VMware製品などの完全仮想化を行うハイパーバ イザー型製品と比べて、ディスク使用量は少なく、インスタンス作成 やインスタンス起動は速く、性能劣化がほとんどないという利点を持 つ。Dockerfileと呼ばれる設定ファイルからコンテナイメージファイ ルを作成可能という特性を持つ。一方で、コンテナOSとしてはホスト OSと同じLinuxカーネルしか動作しない。 docker Vagrantを用いると、構成情報を記述した設定 ファイルを元に、仮想環境の構築から設定まで を自動的に行うことができる[2]。当初は VirtualBoxをターゲットとしていたが、1.1以降 のバージョンではVMwareなどの他の仮想化ソ フトウェアやAmazon EC2のようなサーバー環 境も対象とできるようになった[3]。Vagrant自 身はRubyで作成されているが、PHPやPython、 Java、C#、JavaScriptといった、他のプログラ ミング言語の開発においても用いることができ る[4][5]。バージョン1.6以降ではコンテナ管理 フレームワークのDockerがネイティブサポート されており、軽量コンテナLXCを取り扱えない WindowsやMac上でも各種Linuxベースの開発 環境を容易に利用できるようになった。[6]また vagrant-libvirtプラグインにより、仮想化管理 用APIのlibvirtもサポートされている vagrant wikiの説明 既存のオペレーティング・システム(ホスト OS)上にアプリケーションの一つとしてインス トールされ、この中で追加のオペレーティン グ・システム(ゲストOS)を実行することがで きる。例えば、Windows XPが「ホストOS」と して動作しているマシン上で、Linuxをゲストと VirtualBox
  4. 4. • Virtualbox – macとかwindowsでlinuxとかを動かす – ハイパーバイザ型の仮想化ツール • Vagrant – virtualboxを使うツール • Docker – linuxでlinuxを動かす – コンテナ型の仮想化ツール
  5. 5. 使用バージョン
  6. 6. virtualboxとvagrantのバージョンが重要で、どちらかが新し かったり古かったりすると動かないことがあります。 ここで記載しているバージョンであればとりあえず動きます。 • Virtualbox 5.1.24 • Vagrant 1.9.7 • Docker version 17.07.0-ce ホストは mac sierra 10.12.5 を使用しています
  7. 7. Virtualboxのインストール • https://www.virtualbox.org/wiki/Download_Old_Builds_5_1 最新版が動いたら最新版でok
  8. 8. Vagrantのインストール • https://releases.hashicorp.com/vagrant/ 最新版が動いたら最新版でok
  9. 9. Virtualboxでubuntuを立ち上げる git clone https://github.com/y-katsumi/garbage.git cd garbage/study/localdev vagrant up で立ち上がります。パスワード入力を求められます。 最初は結構時間がかかります。パスワード聞かれるのが嫌だったら、 config.vm.synced_folder "./src", "/home/vagrant/src", id: "core1", :nfs => true, :mount_options => ['nolock,vers=3,udp'] の:nfs => true, :mount_options => [‘nolock,vers=3,udp’]を消してくださ vagrant ssh でubuntuにログインします。
  10. 10. dockerコンテナを立ち上げる cd docker-compose/first docker-compose build docker-compose up –d mac(ホスト)のパスで garbage/study/localdev/src/ がドキュメントルートになっています。 garbage/study/localdev/src/index.phpを作って http://192.168.33.10/ にブラウザからアクセスしてみてください。
  11. 11. おわり
  12. 12. Laravel開発する場合
  13. 13. 1.webコンテナに入る docker exec -it first_web_1 /bin/zsh 2.composerコマンドでlaravelを入れる cd /var/www/src composer create-project --prefer-dist laravel/laravel blog 3.コンテナから出る control押しながらpqと順番に押す(mac) 4.webコンテナのドキュメントルートを変える docker-compose.ymlを変更 5.laravelでDBを触れるようにする blog/.envを変更
  14. 14. 4.docker-compose.yml environment: DOCUMENT_ROOT: /var/www/src ↓ environment: DOCUMENT_ROOT: /var/www/src/blog/public
  15. 15. 5. blog/.env DB_HOST=first_db_1 DB_DATABASE=first DB_USERNAME=root DB_PASSWORD=
  16. 16. 6.コンテナ再起動 docker-compose kill docker-compose up -d
  17. 17. databaseの作成 webサーバにはmysqlがないのでmysql –u root –h first_web_1 できません http://192.168.33.10:81/index.php にアクセスして適当に作ってね。 コンテナ抜ける時はcontrol押しながらpqと順番に押す(mac) - exitとかだとコンテナが停止します
  18. 18. databaseの作成 mac(ホスト)のディレクトリ garbage/study/localdev に mysqlのファイル(/var/lib/mysql)があります。 ここをコピーしたりするとバックアップ作れます。
  19. 19. 設定ファイルの解説
  20. 20. Vagrantfile config.vm.network "private_network", ip: "192.168.33.10” config.vm.synced_folder "../src", "/home/vagrant/src", id: "core1", :nfs => true, :mount_options => ['nolock,vers=3,udp'] config.vm.synced_folder "../dbbackup", "/home/vagrant/dbbackup", id: "core2", :nfs => true, :mount_options => ['nolock,vers=3,udp'] config.vm.provision "shell", inline: <<-SHELL SHELL macとvirtualboxを繋ぐポート macとvirtualboxの共有するディレクトリ nfsは早いけどこれつけてるとウイルスソフトに 怒られるきがする(未確認) 日本語設定とdockerのインストール 初回起動時のみ走るようになっている 〜
  21. 21. Dockerfile 最後の方 ADD init.sh /usr/local/bin/init.sh RUN chmod u+x /usr/local/bin/init.sh CMD ["/usr/local/bin/init.sh"] コンテナが停止しないように起動シェルを実行
  22. 22. 例)頭の良い人の起動シェル https://github.com/docker-library/mysql/blob/0590e4efd2b31ec794383f084d419dea9bc752c4/5.7/docker- entrypoint.sh
  23. 23. 例)頭の悪い人の起動シェル https://github.com/y-katsumi/garbage/blob/master/study/localdev/docker- compose/Dockerfile/mysql/init.sh
  24. 24. 例)頭の悪い人の起動シェル https://github.com/y-katsumi/garbage/blob/master/study/localdev/docker- compose/Dockerfile/mysql/init.sh sudo rm -rf /var/lib/mysql/mysql.sock.lock service mysqld start cat <<EOF >>~/.zshrc trap 'service mysqld stop; exit 0' TERM EOF exec /bin/zsh
  25. 25. コツとか
  26. 26. • 今回は一応apacheとmysqlを分けてみたけ ど、ローカルなら一緒の方が簡単 – ログ見るときとか設定とか圧倒的に楽 – というかDockerfileの作成はハードル高い • dockerfileじゃなくてdocker run で image をコミットした方が簡単 • DockerはもちろんVirtualboxも使い捨てで きるようにしておく – OSが不調で強制終了しちゃってVMが立ち上が らないことが良くある – vmdkは一度サイズが増えると減らすことがで きない
  27. 27. • dockerfileとか作るの大変だからもともとあるの使えば良 いと思っている • wordpress(docker-compose.yml) – https://docs.docker.com/samples/library/wordpress/#- via-docker-stack-deploy-or-docker-compose • php – https://hub.docker.com/_/php/ • alpineのimage使っているやつは超軽量コンテナが作れる(やったこ とない) • mysql – https://hub.docker.com/_/mysql/
  28. 28. あとがき
  29. 29. コマンドとか間違ってたらごめん
  30. 30. あとpdfのアップ 遅くなってごめんなさい

×