【Docker】Docker小技集

 Dockerについて記事にするには小さいネタが貯まっていたのでまとめて紹介します。

exitしたコンテナの中に入る

DockerFileを作っている時、本当に役に立ちます。

docker commit {docker psで見えるexitしたコンテナのイメージのID} {適当なコンテナ名}
docker run --rm -it {一つ前で使った適当なコンテナ名} sh

 上のコマンドでexitしたコンテナと同じ中身のコンテナがshコマンドで走り出します。shで入った中でエラー原因の特定などをします。

今動いていないコンテナ、イメージ、ボリュームをまとめて削除するワンライナ

Docker環境が無暗に増えてきたと思った時に便利です。最近使っているコンテナを立ち上げた状態で次のコマンドを実行するとまとめて使ってないものが消えます。

docker system prune -a --volumes

container_nameをつけないことでコンテナを衝突させない

docker-composeではコンテナの名前をcontainer_nameでつけることができます。

version: "3"
services:
  mysql:
    # コンテナ名はmysql
    container_name: mysql
    build:
      context: ./docker/mysql
      args:
        - MYSQL_VERSION=8.0
    volumes:
      - ./docker/log/mysql:/var/log/mysql

 これをあえてつけないでおくとDockerは手持ちの情報から他コンテナと衝突しないコンテナ名をよしなにつけてくれます(おそらくカレントディレクトリ名 + サービス名 + 連番。例えば /php74_test_mysql_1)。

container_nameを汎用的な名前にする

container_nameを汎用的なもの(mysqlなど)にすることで別プロジェクトで同じコンテナを参照する前提の環境構築をしやすくできます。この時のvolumeのマウント領域が必要以上にプロジェクトに依存しない様注意しましょう。container_nameを汎用的なものにすると同じSQLサーバの違うデータベースで開発する、一つのmailhogで複数プロジェクトのメールを受け取る、などができてポートが占有されずに便利です。dozzleの様な一括管理サービスは特に複数同時に動く必要がないので、無駄に複数立ち上げない様にcontainer_nameを汎用的なものにしてしまうのがいいです(container_nameが同じコンテナが既に立ち上がってると、同名のコンテナを後から立ち上げられない)。

nodeの様な実行ファイルをコンテナにする

コンテナ上のnodeを用いることで誰でも同じバージョンのアプリケーションを使って開発していると信じられます。同じバージョンのアプリケーションで開発することが重要な時、開発者らが各々インストールを探る必要もなくなります。

version: "3"
services:
  node:
    image: node:12.13-alpine
# 誰もが同じバージョンのnodeを使います
docker-compose exec node npm run hogehoge
>株式会社シーポイントラボ

株式会社シーポイントラボ

TEL:053-543-9889
営業時間:9:00~18:00(月〜金)
住所:〒432-8003
   静岡県浜松市中央区和地山3-1-7
   浜松イノベーションキューブ 315
※ご来社の際はインターホンで「316」をお呼びください

CTR IMG