uiuifree.com

- サイト制作のノウハウと最適化を目指して-

2020.6.9Docker初心者に覚えて欲しい8個のコマンド

Docker初心者に覚えて欲しい8個のコマンド

開発チームにアサインされたメンバーが初めてDockerを使うこと多くなりましたね Dockerを使えば開発環境の構築が共通化できて楽になる、でもインフラ知識なくて立ち上げまで苦労することもあるある。 そんな時に使えるコマンド紹介しましょう。

dockerとdocker-composeとdocker-sync

前提として覚えていて欲しいのはdocker docker-compose docker-sync重要な役割を担っています。

docker

dockerはコンテナ型の仮想環境を作成、配布、実行するためのプラットフォームです。 Dockerfileというファイルにミドルウェアのインストールや環境設定をコード化して定義し、そこから仮装コンテナを立ち上げます。 開発環境が共通化できるというのはコード化されたDockerfileをgitなどに含めチームに配布することで各々のPCで環境を立ち上げ開発/本番環境へのリリースも一環として行えるようになるということです。

立ち上げコマンド
docker run --name sample -d -p 8080:80 nginx

コンテナの立ち上げはイメージを選択しポート番号などを指定して行います。

docker-compose

docker-composeはdockerの立ち上げコマンドや複数のdockerイメージの関連をyamlファイルとして定義したものです。 dockerファイルでサーバー設定の共通化を行うことができましたが、そのままではport番号の設定や環境変数の設定など毎回打たないといけません。 もっとスマートにファイル定義化したのがdocker-composeです。

docker-compose.yml
version: '3'
services:
 service- nginx:
    container_name: service- nginx
    build: ./
    ports:
    - "80:3000"
    restart: always
    volumes:
    - ../:/var/www/html/

docker-sync

docker-syncはMacを使ってる方は必要になります。 なぜならmacでDocker環境を立ち上げると実行が鬼がかって遅いです。MacとDockerのファイルマウントの相性が悪いらしく開発できたものではありません。 その遅さを解決してくれるのがdocker-syncになります、ディスクの読み込みを非同期的にすることで一定速度の問題を解決する理由から導入必須。 docker-sync.ymlに設定

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 ps

Dockerの立ち上げ中のプロセスを確認するコマンド

docker-compose up -d --build

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

コンテナ内に入りコマンドを叩きたい時に使用 docker exec -it {container-name} /bin/bashでbashを開いてますが、phpなりlsなりコンテナ内で使えるコマンドなら指定可能

-u 1000 など追加で指定するとUID 1000で実行したりもできます。 デフォルトだと結構ログの書き込み権限が合わなかったりするので必要に応じて変更すること

docker stop {container-id}

立ち上がってるコンテナを停止します。

docker rm {container-id}

指定したコンテナを削除します。 docker rm -f {container-id}などにすれば立ち上がっていても強制的に削除可能

docker system prune -a

Docker環境を作っていくと不要なゴミコンテナやイメージが溜まっていきます。 docker system prune -aは現状立ち上がっていないコンテナやイメージを全て削除します、本番環境では気軽に使わないように

まとめ

以上がdocker環境で使うコマンドになります、応用的なことをすれば足りず公式リファレンス見ながらする必要もありますが開発する上ではこれくらいで十分です。 それよりかはDockerfile docker-compose.yml docker-sync.ymlのそれぞれの役割を覚え、動作しないときにトラブルシューティングできるような力を身につけましょう。CICD環境作ったり並大抵のことはできるようになります。

目次
PROFILE

このサイトを運営してるuiuifreeです。
渋谷のベンチャー企業で2年ほど新規事業を担当した後にフリーランスエンジニアにキャリア転換。
求人サイトの開発が多くエンジニア/看護師/保育士などの分野でサイトを運営しています。

アウトプット中の技術

リーダブルコード ―より良いコードを書くためのシンプルで実践的なテクニック (Theory in practice)