今や環境構築の保存や移行などが比較的自由にできるようにはなってきていると思います。
自分の場合は未だにvagrantのイメージフォルダを移行してやっていますが(汗)。
参考リンク
やってみるとわかるんですけどvagrantの場合、非常に重いんですよね、boxを移行すると何Gも取られることが多いため、複数の環境を気軽に移行したりはできないんではないかなと思います。
(そういう用途では使わない気もしますし。)
そんなこともあり、仮想環境ツールとしてdockerを復習してます。
以前は2年ぐらい前に勉強してましたね・・・
やたらエラーがボコボコ出て結局断念した記憶があります。今回は数時間程度ですが、そこまでトラブルはなく無事にすすめられました(と言っても超基本的なことしかやってませんが。)
Contents
以前の学習リンク
vagrantとdockerの違い
vagrant
- VirtualBox起動の代理(これを使うことでVirtualBoxの起動や設定が楽になる)
【決定版】仮想環境ってなに?Vagrantってなんなの?に答える! - カーネル(OSの中核部分)を含めて仮想環境を丸ごと構築
- イメージでいうとサーバーを丸ごと作るのに近い
- vagrantの内で全て完結
- ホスト環境に依存しないため、丸ごと環境を移管したい時に便利かも。
- かなり重く、起動時間も時間がかかる。複数のvagrantを入れたりするとPC自体を圧迫する
docker
- カーネル部分はホスト環境の物を使うため、比較的軽量
- 比較的素早く環境を建てたいor壊したい時などに便利
- Windowsだと動かないことが結構あるらしい
- Linux上でしか使えないため、使用する場合はVirtualBoxで仮想環境を作るか、Windows or Mac用のdockerツールを使う。
Macでのインストール
docker.hub(https://hub.docker.com/)でアカウントを作成後、
https://hub.docker.com/editions/community/docker-ce-desktop-mac
上記リンクの「Get Docker Desktop for Mac (Stable)」からダウンロードすればOKです。
その後、docker version
で下記のようにdockerの情報が表示されればOKです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
Client: Docker Engine - Community Version: 18.09.2 API version: 1.39 Go version: go1.10.8 Git commit: 6247962 Built: Sun Feb 10 04:12:39 2019 OS/Arch: darwin/amd64 Experimental: false Server: Docker Engine - Community Engine: Version: 18.09.2 API version: 1.39 (minimum version 1.12) Go version: go1.10.6 Git commit: 6247962 Built: Sun Feb 10 04:13:06 2019 OS/Arch: linux/amd64 Experimental: false |
おおまかな一連のプロセス
imageのpull
例えばCentOS6に環境を作りたいとき、CentOS6のイメージ(CentOS6のテンプレート的なもの)を取得します。
1 2 3 4 5 6 7 8 9 |
//image+タグで取得 docker pull centos:6 //インストールしたdockerのリストは下記コマンド docker images //コンテナ作成 //centos:6というイメージからcentos6というコンテナを作成 //nameをつけないとうまく動かないことがあるのでつけておいたほうがいいでしょう。 docker run -it --name centos6 centos:6 /bin/bash //上記コマンドを実行した瞬間にコンテナ(centos6)のなかにログインします。 |
Dockerではイメージから作られた実環境のことを「コンテナ」と言います。基本的にはrunコマンドからコンテナを作成します。
必要な作業を色々
例えばhttpd,php,mysqlを実際にyumで入れるなど
適当なところでコミット&プッシュ
ある程度色々な作業をしたところでcommitをします。
このコマンドによってコンテナの状態をイメージとして登録することができます。後述しますが、この時点でDockerHubに登録することを前提としてアカウント名/リポジトリ名にします。
この時点でDockerHubに入ってリポジトリ(centos6)を作成します。
pushコマンドとはDockerHubに作成したイメージをpushします。gitのpushと全く同じです。
1 2 3 |
docker commit コンテナ名(コンテナID) 任意の名前 (例 docker commit centos6 umanari145/centos6) docker push umanari145/centos6:latest |
pushしようとしたところusername,passwordが正しくないと出ました。
Docker for macでログインはしているんですが・・・
調べたところemail、passwordでログインしてしましたが、docker login
で再度username,passwordを入力します。
コンテナ削除&再作成
1 2 3 4 |
#これでコンテナを一瞬で削除できます docker rm {CONTAINER ID} #コンテンナを再作成 docker run -it -p 8080:80 -v /Users/*****/docker_dev:/var/www/html --name centos umanari145/centos6 /bin/bash |
vagrantでもそうですが、
- 実ホストからアクセス
- エディタで編集をするために実ホスト上で共有フォルダを作る
が必要になります。(準備ができていたら最初のrunコマンドからでもいいですが・・・)
1ですが、vagrantは別環境なのでipでアクセスしますが、dockerの場合はコンテナのポートを割り当てます。そのオプションが-p 8080:80
です。これはコンテナの80番を実ホストの8080に割り当てるという処理です。
これによりlocalhost:8080
でアクセスした時にコンテナ上の/var/www/html
を見に行くようになります。
2ですがコンテナ上でソースを編集する場合、共有するフォルダがなければ延々とvimで作業することになります。そのため共有フォルダを作るために-v /Users/*****/docker_dev:/var/www/html
というオプションで共有できるようにします。
ソース自体はコンテナではなくホスト上においておきましょう。同期を取るので、ホスト上のものが基本的に優先されます。(これはvagrantも一緒です。)