Postgresドッカヌの公匏むメヌゞの䜿甚方法

投皿日 10月 5, 2022

Postgresは、珟圚利甚可胜な トップリレヌショナルマルチモデルデヌタベヌスの1぀です 。 これは、重芁なデヌタを゚ンドナヌザヌに盎接提䟛するか、APIを介しお別のアプリケヌションを介しお提䟛するデヌタベヌスアプリケヌションを匷化するように蚭蚈されおいたす。 䞀般的な Web サむトはその最初の䟋によく適合したすが、財務アプリ (PayPal など) は通垞、API を䜿甚しお芁求を凊理 GET たたは POST デヌタベヌス化したす。 

Postgres のオブゞェクトリレヌショナル構造ず䞊行性 は、MySQL のような代替手段よりも優れおいたす。 客芳的に最適なデヌタベヌステクノロゞヌはありたせんが、拡匵性、デヌタの敎合性、オヌプン゜ヌス゜フトりェアを重芖する堎合、Postgresは優れおいたす。 拡匵性が高く、耇雑な暙準ベヌスの SQL ク゚リをサポヌトしたす。 

Postgres Docker Official Image (DOI) を䜿甚するず、アプリケヌションに合わせお特別に調敎された Postgres コンテナを䜜成できたす。このむメヌゞは、倚くのコア セットアップ タスクも凊理したす。 コンテナ化ずPostgres DOIに぀いお説明し、開始方法を瀺したす。

このチュヌトリアルの内容:

なぜPostgresをコンテナ化する必芁があるのですか? 

Postgres公匏Dockerむメヌゞ 900x600 1

Postgresデヌタベヌスアプリケヌションはメむンアプリケヌションず䞀緒に実行できるため、コンテナ化は倚くの堎合有益です。 これにより、必芁な堎所にPostgresをスピンアップしおデプロむするのがはるかに速くなりたす。 たた、コンテナヌ化によっお、デヌタがデヌタベヌス アプリケヌションから分離されたす。 アプリケヌションに障害が発生した堎合、デヌタを危害から保護しながら別のコンテナヌを簡単に起動できたす。 

これは、Postgresをロヌカルにむンストヌルし、远加の構成を実行し、独自のバックグラりンドプロセスを開始するよりも簡単です。 このようなワヌクフロヌは䜙分な時間がかかり、より深い技術的知識を必芁ずし、倉化するアプリケヌション芁件にうたく適応したせん。 そのため、Dockerコンテナは芪しみやすく、迅速な開発に合わせお調敎されおいたす。

Postgresドッカヌの公匏むメヌゞは䜕ですか?

他の Docker むメヌゞず同様に、Postgres Docker 公匏むメヌゞには、アプリケヌションに必芁なすべおの゜ヌス コヌド、コア䟝存関係、ツヌル、およびラむブラリが含たれおいたす。 Postgres DOIは、デヌタベヌスアプリケヌションにデヌタの動䜜ず操䜜方法を指瀺したす。 䞀方、Postgres コンテナヌは、この暙準むメヌゞの実行䞭のむンスタンスです。

具䜓的には、Postgresは次のナヌスケヌスに最適です。

  • アプリケヌションぞの Docker 共有ボリュヌムの接続
  • 開発䞭のストレヌゞ゜リュヌションのテスト
  • 新しいバヌゞョンのメむンアプリケヌションたたはPostgres自䜓に察しおデヌタベヌスアプリケヌションをテストする

PostgreSQL Docker Community はこのむメヌゞを維持しおおり、その広範な魅力のために Docker Hub に远加したした。

Postgresコンテナを本番環境にデプロむできたすか?

はいこの答えにはいく぀かの泚意点があり、同時に実行するコンテナの数によっお異なりたす。 

本番環境でPostgres公匏むメヌゞを䜿甚するこずは可胜ですが、Docker Postgresコンテナはロヌカル開発に最適です。 これにより、Docker Compose などのツヌルを䜿甚しお、サヌビスをたずめお管理できたす。 耇数のデヌタベヌスコンテナを倧芏暡にやりくりする必芁はなく、これは困難な堎合がありたす。 

本番環境の Postgres コンテナヌを起動するずいうこずは、Kubernetes のようなオヌケストレヌション システムを䜿甚しお皌働状態を維持するこずを意味したす。 たた、Dockerの補品を補完するためにサヌドパヌティのコンポヌネントが必芁になる堎合もありたす。 ただし、Kubernetesに慣れおいる堎合は、絶察にこれを詊しおみるこずができたす。ArctypeのShanika Wickramasingheは 、そのための1぀の方法を共有しおいたす。

これらの理由から、少数のコンテナで本番テストを実行できたす。 ただし、それ以䞊の展開オプションに぀いおは、再怜蚎するこずをお勧めしたす。

ドッカヌでポストグレスを実行する方法

たず、 最新のDockerデスクトップリリヌスをダりンロヌドしおむンストヌル したす。 Docker Desktop には、Docker CLI、Docker Compose、および補足開発ツヌルが含たれおいたす。 䞀方、Docker ダッシュボヌド (Docker Desktop の UI コンポヌネント) は、むメヌゞずコンテナヌの管理に圹立ちたす。 

その埌、Postgresをドッカラむズする時が来たした!

クむックプルコマンドを入力する

Postgresドッカヌの公匏むメヌゞをプルするこずは、始めるための最速の方法です。 タヌミナルで、Docker Hub から最新の Postgres バヌゞョンを取埗するために入力したす docker pull postgres 。 

たたは、特定のタグで奜みのバヌゞョンを固定するこずもできたす。 通垞、ピン留めは Dockerfiles に関連付けられたすが、抂念は基本的なプル芁求に䌌おいたす。 

たずえば、必芁に応じお postgres v14.5 コマンド docker pull postgres:14.5を入力したす。䞀般に、特定のバヌゞョンの Postgres を䜿甚するこずをお勧めしたす。 バヌゞョンは :latest 新しいPostgresリリヌスごずに自動的に倉曎され、それらの新しいバヌゞョンが重倧な倉曎や脆匱性を導入するかどうかを知るのは困難です。 

どちらの方法でも、DockerはPostgresむメヌゞをロヌカルにマシンにダりンロヌドしたす。 CLI を䜿甚したプロセスは次のようになりたす。

プルが完了するず、端末から通知されたす。 これは、Dockerデスクトップ内で確認するこずもできたす。 巊偎のサむドバヌから、[ 画像] タブをクリックし、メむンりィンドりに衚瀺されるリストをスキャンしたす。 Docker デスクトップには、355.45 MB の画像が衚瀺されたす postgres 。

Postgres を含む珟圚のロヌカル むメヌゞの䞀芧を衚瀺する Docker Desktop ナヌザヌ むンタヌフェむス。

Postgresは、Docker Hubで最もスリムな䞻芁なデヌタベヌスむメヌゞの1぀です。 ただし alpine 、画像サむズをさらに瞮小し、基本パッケヌゞ(より単玔なプロゞェクトに最適)を含めるためのバリアントも利甚できたす。 アルパむンのメリットの詳现に぀いおは、 最近のDocker公匏むメヌゞの蚘事をご芧ください。

次に、新しいむメヌゞをコンテナヌずしお実行する堎合はどうでしょうか。 他の倚くの画像では、リスト内の画像にカヌ゜ルを合わせお衚瀺される青い[実行]ボタンをクリックするこずができたすが、Postgresには少し泚意が必芁です。 デヌタベヌスであるため、接続を成功させる前に環境倉数を蚭定する必芁がありたす。 それでは、詳しく芋おいきたしょう。

Postgres むンスタンスを起動する

次のコマンド docker run を入力しお、新しい Postgres むンスタンスたたはコンテナヌを起動したす。 

docker run --name some-postgres -e POSTGRES_PASSWORD=mysecretpassword -d postgres

これにより、名前 some-postgres の付いたコンテナヌが䜜成され、すべおをバックグラりンドで実行する前に重芁な環境倉数が割り圓おられたす。 Postgresが正しく機胜するにはパスワヌドが必芁なため、パスワヌドが含たれおいたす。 

このパスワヌドを既にお持ちの堎合は、Docker デスクトップ内で Postgres コンテナヌを起動できたす。 画像の暪にある前述の[実行]ボタンをクリックし、続行する前に[オプション蚭定]ペむン内にこのパスワヌドを手動で入力するだけです。
ただし、Postgres むンタラクティブタヌミナル psqlたたは を䜿甚しお、Postgres に盎接ク゚リを実行するこずもできたす。

docker run -it --rm --network some-network postgres psql -h some-postgres -U postgres
psql (14.3)
Type "help" for help.

postgres=# SELECT 1;
 ?column? 
----------
        1
(1 row)

ドッカヌ䜜成の䜿甚

耇数のサヌビスやデヌタベヌス管理ツヌルを䜿甚しおいる可胜性が高いため、Docker Composeを䜿甚するず、むンスタンスをより効率的に実行できたす。 1 ぀の YAML ファむルで、サヌビスの動䜜を定矩できたす。 Postgres の䟋を次に瀺したす。

services:
  db:
    image: postgres
    restart: always
    environment:
      POSTGRES_PASSWORD: example
    volumes:
      - pgdata:/var/lib/postgresql/data 

  adminer:
    image: adminer
    restart: always
    ports:
      - 8080:8080

volumes:
  pgdata:

䞡方のサヌビスが restart: alwaysに蚭定されおいるこずがわかりたす。 これにより、アプリケヌションが実行されおいるずきはい぀でもデヌタにアクセスでき、Adminer管理サヌビスを同時にアクティブに保ちたす。 これにより、コンテナヌに障害が発生するず、新しいコンテナヌがすぐに起動したす。

たずえば、起動時にすぐにデヌタを必芁ずする Web アプリを実行しおいるずしたす。 あなたのDocker䜜成ファむルはこれを反映するでしょう。 サヌビスず depends_on パラメヌタヌを远加しお web 、サヌビス間のスタヌトアップずシャットダりンの䟝存関係を指定したす。起動ずシャットダりンの順序の制埡に関するドキュメントから借甚するず、展開されたComposeファむルは次のようになりたす。

services:
  web:
    build: .
    ports:
      - "80:8000"
    depends_on:
      db:
        condition: service_healthy
    command: ["python", "app.py"]

  db:
    image: postgres
    restart: always
    environment:
      POSTGRES_PASSWORD: example
    healthcheck:
      test: ["CMD-SHELL", "pg_isready"]
      interval: 1s
      timeout: 5s
      retries: 10

  adminer:
    image: adminer
    restart: always
    ports:
      - 8080:8080

Postgres デヌタベヌスずサポヌト サヌビスを起動するには、コマンドを入力したす docker compose -f [FILE NAME] up 。 

、 psql、たたはDocker Composeのいずれかdocker runを䜿甚するず、公匏むメヌゞを䜿甚しおPostgresを正垞に起動できたす。これらは、「デフォルト」Postgresを操䜜するための信頌できる方法です。 ただし、デヌタベヌス アプリケヌションはさらに詳しく構成できたす。

Postgresむメヌゞを拡匵する

Postgres むメヌゞをカスタマむズたたは構成する方法はたくさんありたす。 あなたを助けるこずができる4぀の重芁なメカニズムに取り組みたしょう。

1. 環境倉数

Postgresの重芁性に぀いお POSTGRES_PASSWORD 簡単に觊れたした。 これを指定しないず、Postgresは効果的に実行できたせん。 ただし、コンテナヌの動䜜に圱響を䞎える他の倉数もありたす。 

  • POSTGRES_USER – スヌパヌナヌザヌ暩限を持぀ナヌザヌず、同じ名前のデヌタベヌスを指定したす。 Postgres は、これが空のずきに既定のナヌザヌを䜿甚したす。
  • POSTGRES_DB – デヌタベヌスの名前を指定するか、空癜のたたにするず既定倀 POSTGRES_USER になりたす。 
  • POSTGRES_INITDB_ARGS –匕数を送信 postgres_initdb し、機胜を远加したす
  • POSTGRES_INITDB_WALDIR – Postgres トランザクション ログ甚の特定のディレクトリを定矩したす。 トランザクションは操䜜であり、通垞はデヌタベヌスぞの倉曎を蚘述したす。 
  • POSTGRES_HOST_AUTH_METHOD –デヌタベヌス、ナヌザヌ、およびアドレスぞの接続 all を制埡したす auth-method host
  • PGDATA –デヌタベヌスファむル甚の別のデフォルトの堎所たたはサブディレクトリを定矩したす

これらの倉数はプレヌンテキスト .env 内にありたす ファむル。 最終的に、Postgresがデヌタベヌスを䜜成しお接続する方法を決定したす。 環境倉数の詳现に぀いおは、 GitHub Postgres 公匏むメヌゞのドキュメント を参照しおください。

2.ドッカヌの秘密

環境倉数は䟿利ですが、ホストずコンテナの間で環境倉数を枡すこずにはリスクが䌎いたす。 Docker シヌクレットを䜿甚するず、コンテナヌに既に存圚するファむルからこれらの倀にアクセスしお読み蟌むこずができたす。 これにより、ポヌト接続を介した転送䞭に環境倉数がむンタヌセプトされるのを防ぎたす。 次のコマンド (およびその反埩) を䜿甚しお、Postgres で Docker シヌクレットを掻甚できたす。 

docker run --name some-postgres -e POSTGRES_PASSWORD_FILE=/run/secrets/postgres-passwd -d postgres

手蚘 Docker シヌクレットは、特定の環境倉数ずのみ互換性がありたす。 詳现に぀いおは、ドキュメントを参照しおください 。

3. 初期化スクリプト

スクリプトずも呌ばれ init 、実行可胜なシェルスクリプトたたはコマンドベヌス .sql を実行したす Postgresが postgres-data フォルダを䜜成するずファむル。 これにより、サヌビスが完党に皌働する前に重芁な操䜜を実行できたす。 逆に、Postgres は、フォルダヌが初期化された堎合、 postgres-data これらのスクリプトを無芖したす。

4. デヌタベヌス構成

Postgresデヌタベヌスアプリケヌションはサヌバヌずしお機胜し、実行方法を制埡するこずは有益です。 デヌタベヌスを構成するず、Postgresコンテナが他のサヌビスずどのように通信するかが決たるだけでなく、Postgresの実行方法ずデヌタぞのアクセス方法も最適化されたす。 

Postgres でデヌタベヌス構成を凊理する方法は 2 ぀ありたす。これらの構成は、専甚ファむル内でロヌカルに適甚するか、コマンド ラむンを䜿甚できたす。 CLI は、゚ントリポむント スクリプトを䜿甚しお、Docker コマンドを Postgres サヌバヌ デヌモンに枡しお凊理したす。

手蚘 䜿甚可胜な構成は、Postgres のバヌゞョンによっお異なりたす。 構成ファむルのディレクトリも、PostgresDocker公匏むメヌゞのバリアントを䜿甚しおいる alpine ずきにわずかに倉曎されたす。

重芁な泚意事項ずデヌタストレヌゞのヒント

Postgresはかなりナヌザヌフレンドリヌですが、いく぀かの癖がありたす。 Postgres コンテナヌ むメヌゞを操䜜するずきは、次の点に泚意しおください。 

  • Postgresがコンテナ内でスピンアップしたずきにデヌタベヌスが存圚しない堎合は、デフォルトのデヌタベヌスが䜜成されたす。 このプロセスが展開されおいる間、そのデヌタベヌスは着信接続を受け入れたせん。
  • Docker Compose を䜿甚しお耇数のサヌビスを起動する堎合は、既存のデヌタベヌスを操䜜するのが最適です。 そうしないず、Postgresがデフォルトを䜜成しおいる間に自動化ツヌルが倱敗する可胜性がありたす。
  • Postgres コンテナヌが 64 MB のメモリ割り圓おを超えるず、Docker ぱラヌをスロヌしたす。
  • コマンドたたは Docker 䜜成を䜿甚しお、Postgres コンテナヌにより倚くのメモリを割り圓おるこずができたす docker run 。

デヌタを適切な堎所に保存

デヌタのアクセシビリティはPostgresが正しく機胜するのに圹立぀ため、デヌタを適切な堎所に保存しおいるこずを確認する必芁もありたす。 この堎所は、厄介な問題を防ぐために、PostgresずDockerの䞡方に衚瀺される必芁がありたす。 完璧なストレヌゞ゜リュヌションはありたせんが、 次の点に泚意しおください。 

  • ホストディスク(Docker管理)ぞのファむルの曞き蟌みず内郚ボリュヌム管理の䜿甚は透過的でナヌザヌフレンドリヌです。 ただし、これらのファむルは、コンテナヌの倖郚のツヌルやアプリからはアクセスできない堎合がありたす。 
  • バむンド マりントを䜿甚しお倖郚デヌタを Postgres コンテナヌに接続するず、デヌタのアクセシビリティの問題を解決できたす。 ただし、ディレクトリを䜜成し、アクセス蚱可たたはセキュリティを蚭定する責任がありたす。

最埌に、コマンドを䜿甚しおコンテナ docker run を起動する堎合は、ホストから適切なディレクトリをマりントするこずを忘れないでください。 フラグは -v これを可胜にしたす。 詳现に぀いおは 、Docker の実行に関するドキュメント を参照しおください。

今すぐ次のPostgresプロゞェクトをスタヌト

私たちが発芋したように、PostgresDocker公匏むメヌゞを利甚するこずは、ほずんどの堎合非垞に簡単です。 倚くのカスタマむズを䜿甚できるため、䜿い慣れた拡匵性オプションを調べるだけで枈みたす。 Postgresは拡匵機胜( PostGISなど)もサポヌトしおおり、さらに深い機胜を远加するこずができたす。 

党䜓ずしお、Postgresをロヌカルでドッキングするこずには倚くの利点がありたす。 Docker Hubでスむングし、最初の PostgresDocker公匏むメヌゞを プルしお実隓を開始したす。 デヌタベヌスのセットアップを匷化するためのさらに詳现な手順に぀いおは、 Postgres GitHub ペヌゞを参照しおください。 

螏み台が必芁ですか? Postgres を掻甚するこれらの Docker の玠晎らしい䜜成アプリケヌションをチェックしおください。 

関連蚘事