【Docker】Dockerfile / Docker Compose でシェルを実行する

■ はじめに

小ネタ。

以下「やりたいこと」をしたいので、
Dockerfile / Docker Compose でシェルを実行する方法を調べてみた

やりたいこと

* DB構築後、マスタデータを入れる
* Kafka構築後、Topicなどを作成する
 => Kafkaについては、以下の関連記事を参照のこと

https://dk521123.hatenablog.com/entry/2023/07/22/145643

後日談:「DB構築後、マスタデータを入れる」について

* volumesから指定できる。
 => 詳細は、以下の関連記事を参照のこと

https://dk521123.hatenablog.com/entry/2023/07/20/025544

目次

【0】実現方法
 1)CMD と ENTRYPOINT の違い
【1】CMD / command
 1)Dockerfile
 2)Docker Compose
【2】ENTRYPOINT / entrypoint
 1)Dockerfile
 2)Docker Compose

【0】実現方法

* シェルを実行する主な手段は以下の通り。

1)CMD / command
2)ENTRYPOINT / entrypoint

1)CMD と ENTRYPOINT の違い

* 以下のサイトが分かりやすい

https://pocketstudio.net/2020/01/31/cmd-and-entrypoint/

【1】CMD / command

* コンテナ実行時のデフォルト(初期設定)を指定するため

1)Dockerfile

https://docs.docker.jp/engine/reference/builder.html#cmd

FROM ubuntu: latest
CMD ["echo","Hello World!"]

2)Docker Compose

https://docs.docker.jp/v1.12/compose/compose-file.html#command

  postgres:
    image: postgres:latest
    container_name: container_postgres
    restart: always
    environment:
      POSTGRES_USER: postgres
      POSTGRES_PASSWORD: password
      PGPASSWORD: password
      POSTGRES_DB: sample
      TZ: "Asia/Tokyo"
    ports:
      - 5431:5432
    volumes:
      - postgres:/var/lib/postgresql/data
    # !! HERE !!
    command: ./sample.sh
volumes:
  postgres:
    name: vpg

【2】ENTRYPOINT / entrypoint

* コンテナ実行時にデフォルトで実行するコマンド

cf. ENTRYPOINT = 入り口

1)Dockerfile

https://docs.docker.jp/engine/reference/builder.html#entrypoint

FROM ubuntu: latest
ENTRYPOINT ["echo","Hello World!"]

2)Docker Compose

https://docs.docker.jp/v1.12/compose/compose-file.html#entrypoint

  postgres:
    image: postgres:latest
    container_name: container_postgres
    restart: always
    environment:
      POSTGRES_USER: postgres
      POSTGRES_PASSWORD: password
      PGPASSWORD: password
      POSTGRES_DB: sample
      TZ: "Asia/Tokyo"
    ports:
      - 5431:5432
    volumes:
      - postgres:/var/lib/postgresql/data
    # !! HERE !!
    entrypoint: ./sample.sh
volumes:
  postgres:

関連記事

Docker ~ 基礎知識編 ~
https://dk521123.hatenablog.com/entry/2020/04/24/160044
Docker ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2023/02/25/000000
Docker compose ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2022/05/21/222910
Docker compose ~ 基本編 ~
https://dk521123.hatenablog.com/entry/2020/04/11/000000
Docker compose ~ PostgreSQL
https://dk521123.hatenablog.com/entry/2023/07/20/025544
Docker compose で Kafka構築時に Topic を作るには
https://dk521123.hatenablog.com/entry/2023/07/22/145643