前回はRailsを使ったアプリ開発環境をDockerfileを書くことで構築しました。
しかし、手を動かしてやってみた人は気付いたと思うが、docker run のオプションが長すぎる。。
👇前回の記事はこちら
そこで今回はdocker-composeを使用することでこれまでの問題を解決してみよう。
✅$ docker runコマンドが長くなる時
✅複数のコンテナをまとめて起動する時
👇まずはdocker-compose.ymlをVScodeで開く
1 2 |
<command> [~/Desktop/product-register] $ code docker-compose.yml |
👇docker-composeを編集します
1 2 3 4 5 6 7 8 9 10 11 12 |
<docker-compose.yml> # docker-composeのバージョン version: '3' services: web: build: . ports: - '3000:3000' volumes: - '.:/product-register' tty: true stdin_open: true |
ここでdocker-composeのコマンドを見てみよう。
気付いたと思うが、dockerコマンドと大きな差はない、以下のものをまずは覚えればいいとしよう。
docker-composeコマンド:()はdockerコマンドとの比較
👇それではdocker-composeをビルドしていきます
1 2 3 4 5 6 7 8 9 10 11 |
<command> [~/Desktop/product-register] $ docker-compose up -d [~/Desktop/product-register] $ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES bde6dee7b3c6 product-register_web "irb" 33 seconds ago Up 30 seconds 0.0.0.0:3000->3000/tcp product-register_web_1 [~/Desktop/product-register] $ docker-compose ps Name Command State Ports product-register_web_1 irb Up 0.0.0.0:3000->3000/tcp [~/Desktop/product-register] $ docker-compose exec web bash root@bde6dee7b3c6:/product-register# |
docker-compose コマンドの際のエラー対策
👇エラー文(スナップショットのアップデートができない)
1 2 3 |
[~/Desktop] $ docker-compose ps cannot update snap namespace: cannot create symlink in "/etc/docker": existing file in the way snap-update-ns failed with code 1 |
👇対策(/etc/dockerを消してスナップショットを更新する)
1 2 3 4 5 6 7 |
[~/Desktop] $ sudo rm -rf /etc/docker [~/Desktop] $ sudo snap refresh docker 20.10.8 from Canonical✓ refreshed [~/Desktop] $ docker-compose ps Name Command State Ports ------------------------------ |
はい、以上でdocker-compose.ymlからビルドしたコンテナに入れたかと思います。
次回はRailsのセットアップをやっていきます。
Railsなんて触ったことないよって方も多いと思いますが、Dockerを用いてWebアプリ環境をどう構築するかを理解することが大事になるので、少し趣旨とは外れますがやっていきましょう!
では今回はこの辺で、バイバイ👋
$ docker-compose build : docker imageをビルド($ docker build <build context>)
$ docker-compose up : dockerをrunする($ docker run <imageID>)
$ docker-compose up -d – – build : コンテナをビルドしてrunする($ docker build .)
$ docker-compose ps : コンテナ一覧表示($ dokcer ps)
$ docker-compose exec <service> <command>
: <service>コンテナに入る($ docker exec <container><command>)
$ docker-compose stop : コンテナをExit状態にする
$ docker-compose down : コンテナをExit状態にして削除する