開発チームにアサインされたメンバーが初めてDockerを使うこと多くなりましたね Dockerを使えば開発環境の構築が共通化できて楽になる、でもインフラ知識なくて立ち上げまで苦労することもあるある。 そんな時に使えるコマンド紹介しましょう。
前提として覚えていて欲しいのはdocker
docker-compose
docker-sync
重要な役割を担っています。
dockerはコンテナ型の仮想環境を作成、配布、実行するためのプラットフォームです。
Dockerfile
というファイルにミドルウェアのインストールや環境設定をコード化して定義し、そこから仮装コンテナを立ち上げます。
開発環境が共通化できるというのはコード化されたDockerfile
をgitなどに含めチームに配布することで各々のPCで環境を立ち上げ開発/本番環境へのリリースも一環として行えるようになるということです。
docker run --name sample -d -p 8080:80 nginx
コンテナの立ち上げはイメージを選択しポート番号などを指定して行います。
docker-composeはdockerの立ち上げコマンドや複数のdockerイメージの関連をyamlファイルとして定義したものです。 dockerファイルでサーバー設定の共通化を行うことができましたが、そのままではport番号の設定や環境変数の設定など毎回打たないといけません。 もっとスマートにファイル定義化したのがdocker-composeです。
version: '3'
services:
service- nginx:
container_name: service- nginx
build: ./
ports:
- "80:3000"
restart: always
volumes:
- ../:/var/www/html/
docker-syncはMacを使ってる方は必要になります。
なぜならmacでDocker環境を立ち上げると実行が鬼がかって遅いです。MacとDockerのファイルマウントの相性が悪いらしく開発できたものではありません。
その遅さを解決してくれるのがdocker-syncになります、ディスクの読み込みを非同期的にすることで一定速度の問題を解決する理由から導入必須。
docker-sync.yml
に設定
version: '2'
syncs:
service- nginx-volume:
src: '.'
sync_userid: '1000'
sync_groupid: '1000'
sync_excludes: ['.git', 'storage/logs']
docker-sync start
ここからが本題のDockerコマンド達、見覚えのあるコマンドばっかりだったら問題ないです
Dockerの立ち上げ中のプロセスを確認するコマンド
docker-compose.ymlの立ち上げコマンド
引数がいろいろあり、普段からdocker-compose -f ./docker-compose.yml up -d --build
まで使い覚えてると良いかと思います。
引数 | 意味 |
---|---|
-f | 立ち上げたいdocker-composeファイルを指定(省略可) |
up | コンテナを立ち上げ |
-d | バックグラウンド起動、省略するとログ出力がそのまま吐き出されます |
--build | イメージをビルドし直す |
コンテナ内に入りコマンドを叩きたい時に使用
docker exec -it {container-name} /bin/bash
でbashを開いてますが、phpなりlsなりコンテナ内で使えるコマンドなら指定可能
-u 1000
など追加で指定するとUID 1000で実行したりもできます。
デフォルトだと結構ログの書き込み権限が合わなかったりするので必要に応じて変更すること
立ち上がってるコンテナを停止します。
指定したコンテナを削除します。
docker rm -f {container-id}
などにすれば立ち上がっていても強制的に削除可能
Docker環境を作っていくと不要なゴミコンテナやイメージが溜まっていきます。
docker system prune -a
は現状立ち上がっていないコンテナやイメージを全て削除します、本番環境では気軽に使わないように
以上がdocker環境で使うコマンドになります、応用的なことをすれば足りず公式リファレンス見ながらする必要もありますが開発する上ではこれくらいで十分です。
それよりかはDockerfile
docker-compose.yml
docker-sync.yml
のそれぞれの役割を覚え、動作しないときにトラブルシューティングできるような力を身につけましょう。CICD環境作ったり並大抵のことはできるようになります。