docker初心者の私が中級者になるためにいちから調べなおしました。
そのなかで一回読んだだけだとわからなかったり、いろいろな記事を読むことでわかるようになったことについてまとめます。
#dockerのライフサイクル
dockerってなにがどうなって使える(実際にコンテナに入って作業ができる)ようになるのかがわかりませんでした。
まとめです。
参考
http://enakai00.hatenablog.com/entry/20140628/1403933390
http://blog.kamiazya.tech/post/docker-lifecycle/
#dockerとdocker-composeの違い
dockerを調べていると、docker
コマンドとdocker-compose
コマンドの2つを目にします。
その違いについてです。
docker
は主に単一のコンテナの操作を行ったり(コンテナの起動や、コンテナのログの出力など)、docker全体の情報を出力したり(dockerのバージョンなど)するときに使います。
docker-compose
は、複数のコンテナをまとめて管理することが可能になります。
コンテナのビルドから連携までをymlファイルを使って実行することができます。
###そもそも複数コンテナはどんなときに作るのか?
webアプリを作成する場合、たいていはアプリのサーバーだけではなくDBも作ることになると思います。
これをdockerで動かす場合は、アプリで1コンテナ、DBで1コンテナ、とそれぞれ別のコンテナを使うことをお勧めされています。
参考:https://qiita.com/koka/items/3d3d4ee5680f92a0ad89#docker-compose
#dockerにexecすると、常にルートディレクトリ
Linux系のOSでコンテナを作りログインすると、(ユーザーを作って指定しない限り)rootユーザーでログインすることになります。
ホームディレクトリは/root
なので、ログインしたときの最初のディレクトリ(ワーキングディレクトリ)も/root
になるはずと思っていたのですが、常にルートディレクトリ(/)になってしまいます。
ワーキングディレクトリはデフォルトで/
になっています。
別のディレクトリにしたい場合は、コンテナを作成する時に設定が必要です。
$ docker run -it --workdir /root <IMAGE> bash
これでワーキングディレクトリが/rootになります。
#-p と expose と -P
runコマンドのオプションに―p
、--expose
、-P
などのポート関連のコマンドがいくつかあります。
それぞれどう使えばよいかわからなかったのでまとめます。
###-p
コンテナのポートをホスト側に公開する。
$ docker run -it -p 8080:80 <IMAGE> bash
ホストで8080
にアクセスすると、コンテナの80
ポートにつながります。
(この時に--expose
などをする必要はありません。)
###--expose
コンテナのポートを公開する。ただしホストには公開しない。
$ docker run -it --expose 80 <IMAGE> bash
コンテナの80
ポートが他のコンテナに対して公開されます。
###-P
exposeされているポートをホスト側に公開する。
$ docker run -it --expose 80 -P <IMAGE> bash
ホスト側のポートは自動的に割り振られます。
上記のようにrun
コマンドでexposeオプションを使った場合も、DockerfileにEXPOSE
命令を書いた場合もホスト側に公開されます。