##前提として
dockerとは
- 軽量な仮想環境
- OSのカーネル部はホストOSのを使用する。軽量な理由でもある。
- Vagrantとかと比べると流石に比較にならないぐらいめっちゃ軽く感じる。
- 基本的にLinux系のカーネルを使用しないと動かない。
- docker for macがない場合はvagrantのゲストOSにLinuxたててその中でdockerを動かすとかやるっぽい。
- じゃあなんでdocker for mac使うと動くの?
docker for macは「HyperKit」という軽量な仮想化ツールを使って後ろでこっそりLinuxをたててるらしい。
一見macでも動いてるように思われるが基本的にLinuxがどっかに立ってないと使えないみたい。
- もちろんwindowsでも動かない。がmac同様にDocker for Windowsなるものがあるとのこと。
- Docker Toolboxというツールが以前は主流だったらしい。Vagrantの設定とかいろいろめんどくさいらしい。
環境
- 前提:macでやる windowsは知らないけどリファレンス見れば1発だと思う。
- 方法1:Ubuntu(vagrant) <- docker
- 方法2:docker for mac ##今回はこれを使う
##用語
-
イメージ
OS環境とかアプリケーションを含んだテンプレートイメージ。これを作ったり、流用することでどこでも割と簡単に色々構築できる。 -
コンテナ
イメージを元に、コンテナを作る
分離された名前空間とアプリケーションの実行環境。 -
レジストリ
gitと考えはほぼ同じ。リモートレポジトリとローカルレポジトリがあって、自分でdockerhubなどにレポジトリ作ってイメージとかをpullしたりpushしたりできる。
イメージを保存できる。
##超基本:イメージの検索からコンテナを立てるまで
イメージの検索
docker search centos
リモートにあるイメージをローカルレポジトリに保管
docker pull centos
ローカルにあるレポジトリ一覧
docker images
ローカルイメージの削除
docker rmi 名前:タグ名 or ID
docker rmi centos:latest
イメージから起動実行
docker run centos echo 'hello!'
実行中のコンテナ:プロセスの確認
docker ps
全てのコンテナ確認(実行中でないものも)
exit 0は正常終了と意味。
docker ps -a
docker ps -a -n=5
コンテナの削除
docker rm コンテナID
バックグランドで起動(デタッチド・モード)
docker run -d centos free -s 3
logの確認
docker logs コンテナID
デタッチドではない通常モードにプロセスも戻す
docker attach --sig-proxy=false コンテナID
コンテナの停止
docker kill ID
docker stop ID
コンテナの再起動
docker start ID
imageを作ってみる
ターミナルを開く
-i
はインタラクティブモード(対話的なモード)
-t
はターミナルを開く
docker run -i -t centos /bin/bash
適当にファイル作って抜ける
touch hello.txt
exit
コンテナからイメージを作る
docker commit id user名/イメージ名
docker images
##イメージからコンテナをたてて、そこからイメージを作るような手順を自動化する。
Dockerfileがスクリプトファイルになる。
vi Dockerfile
##FROM: どのイメージファイルを元にするか
FROM centos
##MAINTAINER: 作成者名をつける
MAINTAINER MYUZIN <email@sample.com>
## RUN: buildするときに実行される
RUN echo "now building..."
## CMD: runするときに実行される
## CMD echo "now running" ※以下の書き方が推奨されてる
CMD ["echo","now running"]
Dockerfileを元にビルド
docker build -t 作成イメージ名 dockerfileパス
docker build -t MYUZIN/echo .
レポジトリにMYUZIN/echoが追加されてることが確認できる。
ビルドしたイメージからコンテナを走らせる
docker run MYUZIN/echo
=>now running
##簡単にwebサーバーを作る
vim Dockerfile
FROM centos:6
MAINTAINER yamada tarou <sample@.example.com>
RUN yum install -y httpd
#ADD コピーファイル イメージ内のコピー先path
ADD ./index.html /var/www/html/
#EXPOSE ポートの開放
EXPOSE 80
CMD ["/usr/sbin/httpd","-D","FOREGROUND"]
vim index.html
<html>
hello! docker!!
</html>
docker build -t MYUZIN/httpd .
docker run -p 8080:80 -d MYUZIN/httpd
localhost:8080に接続するとhello! docker!!と表示される。
##imageをリモートリポジトリにプッシュする
※注意:image名のnamespaceはdockerhubと同様の名前にしておくこと。
dockerhubにアカウントを作る
githubのdocker版と考えてくれればOK
https://hub.docker.com/
Docker レジストリ・サーバに登録,ログインする
dockerのレジストリサーバを登録およびログインを行う。
URL指定がなかったら自動でdockerhubになる
docker login
イメージをプッシュする
docker push MYUZIN/httpd
##参考
docker for macについてわかりやすく書いくださってます。
https://qiita.com/nogizaka46/items/c48728d6c640a3e9d6aa
https://qiita.com/kmagai/items/a5023bcbae5ae9f4b046