Docker Hubへのpushとpull(メモ)

Docker Hubへのpushとpull

push,pullとは

push・・・Docker Hubへ作成したイメージをアップロードすること。
pull・・・Docker Hubからイメージをダウンロードすること。

Docker Hubの登録

DockerHub
ここでアカウント作成
- DockerID - Email - Password 認証メールが届くので、認証して登録完了

Create a Repository

f:id:zare926:20220115073432p:plain ※2022/1/14時点のリポジトリを作成してない場合の画面
Create a Repositoryをクリック
f:id:zare926:20220115073428p:plain プルダウンのメニューはアカウントを選びます。
Nameはリポジトリの名前
Descriptionは説明書き
PublicとPrivateの選択ができますが、アカウント作成時に無料プランを選んでいる場合Privateは1つまでです。
作成後Privateのリポジトリを削除すれば別Privateリポジトリを作れます。

レジストリサーバーへのログイン

次にDocker Hubへログインをして、作成したイメージをDocker Hubへpushのやり方。

$ docker login

上記がログインコマンド

$ docker login
Login with your Docker ID to push and pull images from Docker Hub. If you don't have a Docker ID, head over to https://hub.docker.com to create one.
Username:登録したユーザー名を入力
Password:パスワードを入力 // 入力中は見えませんが、そのまま入力してください

Login Succeeded //これが出ればOK!

ログイン完了

Docker Hubにおけるタグ付ルール

<Docker ID>/<イメージ名>:<タグ名>
// タグ名は省略可能

上記の形式でタグ付けする必要あり
タグ名を省略すると自動でlatestになる。

まずはタグ付け
今回はdocker-whaleというイメージをpushするので、docker-whaleにタグ付けします。

$ docker tag docker-whale ユーザー名/docker-whale:ver1

Push!

次にPushコマンド

$ docker push <Docker ID>/<イメージ名>:<タグ名>

今回だとこのようなコマンドになる

$ docker push ユーザー名/docker-whale:ver1

The push refers to repository [docker.io/zare926/docker-whale]
f5b6ab1593d7: Pushed
5f70bf18a086: Mounted from docker/whalesay
d061ee1340ec: Mounted from docker/whalesay
d511ed9e12e1: Mounted from docker/whalesay
091abc5148e4: Mounted from docker/whalesay
b26122d57afa: Mounted from docker/whalesay
37ee47034d9b: Mounted from docker/whalesay
528c8710fd95: Mounted from docker/whalesay
1154ba695078: Mounted from docker/whalesay
ver1: digest: sha256:3a7d145a0d7c829585da330c031169048c246e9864585be6d6093a0411c2255f size: 2614

Pushされてました。 f:id:zare926:20220115073600p:plain

Pull!

一度ローカルから先程pushしたイメージを削除して、Docker Hubからpullします。

$ docker rmi -f イメージのID

あとはpushコマンドのpushをpullに変えるだけ

$ docker pull ユーザー名/docker-whale:ver1

ver1: Pulling from zare926/docker-whale
e190868d63f8: Already exists
909cd34c6fd7: Already exists
0b9bfabab7c1: Already exists
a3ed95caeb02: Already exists
00bf65475aba: Already exists
c57b6bcc83e3: Already exists
8978f6879e2f: Already exists
8eed3712d2cf: Already exists
24b8cff02913: Already exists
Digest: sha256:3a7d145a0d7c829585da330c031169048c246e9864585be6d6093a0411c2255f
Status: Downloaded newer image for zare926/docker-whale:ver1
docker.io/zare926/docker-whale:ver1

これで権限さえあればどのPCでも同じ環境を用意できるという状態にできるということ!

Docker ビルドについて(メモ)

Dockerイメージをビルドする

Dockerfile

Dockerイメージを作成するための指示書となる設定ファイル。
デフォルトでDockerfileという名前のファイルがイメージのビルドに使用される。
別名のDockerfileを使用することも可能。
Dockerビルドをした場合、Dockerfileに定義された内容を上から順位処理していき、最終的な状態の環境がDockerイメージとして保存される。

Dockerfileの作成

ターミナル

$ mkdir imagebuild && cd imagebuild && touch Dockerfile

作成したDockerfile

FROM docker/whalesay:latest

RUN apt-get -y update && apt-get install -y fortunes

CMD /usr/games/fortune | cowsay
  • FROM命令・・・イメージを作成する際に元となるイメージを指定する命令
    元のレイヤーの上に新しいレイヤーを重ねてカスタマイズしていくことが可能
  • RUN命令・・・イメージビルドの際に実行を命令するコマンド
    今回は引数にapt-get -y update && apt-get install -y fortunesをとり、fortunesをインストールするように命令している。
  • CMD命令・・・コンテナ起動時に行う命令
    今回は英文の格言をwhalesayにしゃべらせるというコマンド命令

Dockerfileからイメージをビルドする

$ docker build -t docker-whale .
  • build・・・イメージをビルドするサブコマンド
  • -t docker-whale・・・タグ名を指定している
    今回はdocker-whaleと名付けている
  • .・・・ビルドコンテキストの指定
    ビルドコンテキストとは
    イメージをビルドする際にDockerデーモンに送信をするOS側のディレクトリのことをビルドコンテキストという
$ docker build -t docker-whale .
[+] Building 30.7s (6/6) FINISHED
 => [internal] load build definition from Dockerfile                   0.1s
 => => transferring dockerfile: 156B                                   0.0s
 => [internal] load .dockerignore                                      0.0s
 => => transferring context: 2B                                        0.0s
 => [internal] load metadata for docker.io/docker/whalesay:latest      0.0s
 => [1/2] FROM docker.io/docker/whalesay:latest                        0.3s
 => [2/2] RUN apt-get -y update && apt-get install -y fortunes        30.0s
 => exporting to image                                                 0.3s
 => => exporting layers                                                0.2s
 => => writing image sha256:3f2ef4559f8a54019fca50dd8b2904ba33bf26b87  0.0s
 => => naming to docker.io/library/docker-whale                        0.0s

Use 'docker scan' to run Snyk tests against images to find vulnerabilities and learn how to fix them

ビルドキャッシュ

Dockerイメージをビルドした際に、イメージのレイヤーごとにビルド結果をキャッシュしている。
Dockerfileの内容が変更されていない場合はキャッシュを利用して、初回よりも早くビルドが完了する。
パッケージのインストールをする際に、update文などを入れて、ビルドの度最新のパッケージを取得する場合も、Dockerfileに変更がない場合はスルーされてしまう。
キャッシュを利用しない場合は、ビルドの際に--no-cacheを付け加えてビルドする。

$ docker build --no-cache -t docker-whale .

これでキャッシュを利用せずにビルドされます。

run!

$ docker run docker-whale
 _________________________________________
/ <Knghtbrd> It's a trackball for one     \
| <wichert> so it's not a rodent          |
| <wichert> it's a turd with a ball       |
| sticking out <wichert> which you fondle |
\ constantly                              /
 -----------------------------------------
    \
     \
      \
                    ##        .
              ## ## ##       ==
           ## ## ## ##      ===
       /""""""""""""""""___/ ===
  ~~~ {~~ ~~~~ ~~~ ~~~~ ~~ ~ /  ===- ~~~
       \______ o          __/
        \    \        __/
          \____\______/

fortunesの格言って結構ふざけてる

Dockerイメージについて(メモ)

Dockerイメージとは

Dockerイメージ

  • コンテナ実行に必要なファイルをまとめたファイルシステム
  • AUFSなどの特殊なファイルシステムが使用される
    AUFSとはストレージドライバーでHDなどにストレージのデータを書き込むためのソフトウェアのこと。
    Dockerで使用できるストレージドライバーの一種。
    レイヤーという階層構造で特殊なファイルシステム(らしい)
  • イメージ上のデータはレイヤーで構成され読み取り専用

Dcokerイメージのファイルシステム

文章だけではわかりづらいが、Dockerイメージは階層構造でデータが管理されている。
各層のことをレイヤーと呼ぶ。
基本的にコマンドを実行するたびに積み上げていく仕組みとなっている。
レイヤーは全て読み取り専用となる。

Dockerイメージを基にコンテナを起動すると、新たに読み書き可能なコンテナレイヤーという層が作られる。
このコンテナレイヤーでファイルの追加削除やパッケージの追加や削除を行い、それをもとにイメージを作成することも可能。
ただし、過去のレイヤーで削除したファイルなど、追加時点のレイヤーには残ってしまうため、イメージ全体のサイズは変わらない。
Dockerのメリットである、軽量ですぐに環境を立ち上げられるからかけ離れてしまう。

複数のイメージで継承関係を作れる

CentOSのベースイメージを持ったイメージにRubyのイメージを継承させ、CentOSRubyのレイヤーを一つのイメージにまとめられる。
さらにRailsのイメージを継承させて、CentOS,Ruby,Railsのまとまったイメージを作れる。
同じDockerイメージを継承するメリットとしては、
CentOS,Rubyがまとまったイメージ
CentOS,MySQLがまとまったイメージ
①と②ともにCentOSは同じなので、CentOSは同じデータを利用してくれる。
同じレイヤーを使用している場合、同じレイヤーのデータを参照してくれる。
そのためレイヤーがダブることなく、イメージサイズが小さくなりやすい。

ローカル上にダウンロードしているDockerイメージ一覧表示

$ docker images
REPOSITORY        TAG       IMAGE ID       CREATED        SIZE
hello-world       latest    feb5d9fea6a5   3 months ago   13.3kB
sample/webrick    latest    2ffdacbd6685   4 months ago   864MB
ruby              2.7       89699f4d76cf   4 months ago   864MB
docker/whalesay   latest    6b362a9f73eb   6 years ago    247MB

左から順に
REPOSITORY・・・どのリポジトリからダウンロードしたかものを表しています。
TAG・・・どのタグをダウンロードしたのか確認できる
IMAGE ID・・・イメージを識別するためのID
CREATED・・・いつ作成したか
SIZE・・・サイズ

イメージにタグ付を剃るコマンド

ローカル上に存在するイメージのみ可能。
まずエイリアスとするパターン

$ docker tag docker/whalesay test_whalesay
  • tag・・・タグ付けするサブコマンド
  • docker/whalesay・・・元となるイメージ名
  • test_whalesay・・・新しいイメージ名

実行後

$ docker images
REPOSITORY        TAG       IMAGE ID       CREATED        SIZE
hello-world       latest    feb5d9fea6a5   3 months ago   13.3kB
sample/webrick    latest    2ffdacbd6685   4 months ago   864MB
ruby              2.7       89699f4d76cf   4 months ago   864MB
test_whalesay     latest    6b362a9f73eb   6 years ago    247MB // 増えた
docker/whalesay   latest    6b362a9f73eb   6 years ago    247MB


タグ付は上記のコマンドに:TAGとすればできる。

$ docker tag docker/whalesay test_whalesay:ver1

$ doker images
REPOSITORY        TAG       IMAGE ID       CREATED        SIZE
hello-world       latest    feb5d9fea6a5   3 months ago   13.3kB
sample/webrick    latest    2ffdacbd6685   4 months ago   864MB
ruby              2.7       89699f4d76cf   4 months ago   864MB
docker/whalesay   latest    6b362a9f73eb   6 years ago    247MB
test_whalesay     latest    6b362a9f73eb   6 years ago    247MB
test_whalesay     ver1      6b362a9f73eb   6 years ago    247MB // ここ

IMAGE IDが同じなので、ショートカット的な状態。

イメージの詳細情報を表示するコマンド

$ docker inspect test_whalesay
  • inspect・・・イメージの詳細情報を表示するサブコマンド
  • test_whalesay・・・対象のイメージ名かイメージIDでも可能
    たくさんの情報が出てくるので割愛

ローカルのイメージを削除する方法

$ docker rmi docker/whalesay
  • rmi・・・イメージの削除をするサブコマンド
  • test_whalesay・・・対象のイメージ名かイメージIDでも可能
$ docker rmi -f docker/whalesay
  • -f・・・矯正削除する場合に-fをつける
    すでに削除したいイメージが含まれた状態で作成されたコンテナが存在する場合に、使用する。
    またはコンテナを削除してからイメージを削除する方法もある。
$ docker rmi docker/whalesay
Untagged: docker/whalesay:latest
Untagged: docker/whalesay@sha256:178598e51a26abbc958b8a2e48825c90bc22e641de3d31e18aaf55f3258ba93b

$ docker images
REPOSITORY       TAG       IMAGE ID       CREATED        SIZE
hello-world      latest    feb5d9fea6a5   3 months ago   13.3kB
sample/webrick   latest    2ffdacbd6685   4 months ago   864MB
ruby             2.7       89699f4d76cf   4 months ago   864MB
test_whalesay    latest    6b362a9f73eb   6 years ago    247MB
test_whalesay    ver1      6b362a9f73eb   6 years ago    247MB

本家のwhalesayがなくなりました。

イメージを取得(pull)するコマンド

$ docker pull docker/whalesay
  • pull・・・イメージの削除をするサブコマンド
  • docker/whalesay・・・対象のイメージ名
    Docker Hub上にあるイメージを取得してくるコマンド
    タグを指定しない場合、latestタグを取得してくるが、必ずしも最新バージョンがlatestであるということではない点を注意する必要がある。
$ docker pull docker/whalesay
Using default tag: latest
latest: Pulling from docker/whalesay
Image docker.io/docker/whalesay:latest uses outdated schema1 manifest format. Please upgrade to a schema2 image for better future compatibility. More information at https://docs.docker.com/registry/spec/deprecated-schema-v1/
e190868d63f8: Already exists
909cd34c6fd7: Already exists
0b9bfabab7c1: Already exists
a3ed95caeb02: Already exists
00bf65475aba: Already exists
c57b6bcc83e3: Already exists
8978f6879e2f: Already exists
8eed3712d2cf: Already exists
Digest: sha256:178598e51a26abbc958b8a2e48825c90bc22e641de3d31e18aaf55f3258ba93b
Status: Downloaded newer image for docker/whalesay:latest
docker.io/docker/whalesay:latest

$ docker images
REPOSITORY        TAG       IMAGE ID       CREATED        SIZE
hello-world       latest    feb5d9fea6a5   3 months ago   13.3kB
sample/webrick    latest    2ffdacbd6685   4 months ago   864MB
ruby              2.7       89699f4d76cf   4 months ago   864MB
docker/whalesay   latest    6b362a9f73eb   6 years ago    247MB // 増えてる
test_whalesay     latest    6b362a9f73eb   6 years ago    247MB
test_whalesay     ver1      6b362a9f73eb   6 years ago    247MB

Docker動作確認(Docker Desktop)

Dockerの動作確認

動作確認前に必要なもの

  • Docker Desktopのインストール
  • ターミナル

コマンド

$  docker run hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
2db29710123e: Pull complete
Digest: sa256:975f4b14f326b05db86e16de00144f9c12257553bba9484fed41f9b6f2257800
Status: Downloaded newer image for hello-world:latest

Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
    (amd64)
 3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
 $ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker ID:
 https://hub.docker.com/

For more examples and ideas, visit:
 https://docs.docker.com/get-started/

Hello form Docker!と出れば成功

$ docker run hello-world hello
  • docker
    dockerコマンド
  • run
    サブコマンド
  • hello-world
    イメージの指定

流れ

①DockerクライアントがDockerデーモンへhello-worldのイメージを取ってきてと指示する。
②Dockerデーモンがインターネットを通じてDocker Hubへ頼まれたイメージを取りに行く。
③DockerデーモンがDockerクライアントへ取得したイメージをPC上へ保存して、実行をする
PC上にイメージが存在する場合はイメージを取りに行かず、Dockerデーモンがイメージを実行する。

docker runのコマンドは複数コマンドを実行している

$ docker run hello-world hello
// docker pull: イメージの取得
// docker create: コンテナの作成
// docker start: コンテナの起動

docker run は上記3つのコマンドを一括して行っている

Docker Hubとは

  • Dockerイメージのレジストリサービス
  • Dockerイメージの公開、検索、ダウンロードをすることができる
    Docker Hub
    公式が提供しているイメージや、公式ではない作成されたイメージなどが提供されている。
    自身でもアップ可能。
    使用する場合はなるべく公式のイメージを選んだほうがよさそうだが、信頼できそうな作成者のものかどうかを調べて使うのもよさそう。
    公式かどうか判断は画像のOfficial Imageがあるかどうか

    f:id:zare926:20220115072903p:plain

イメージのタグ付

Docker Hubのイメージの中にTagsというタブがあり、その中でバージョンなどのタグを指定できる。
タグはイメージの後ろに:で区切って指定をする。

$ docker run hello-world hello

上記の場合だとタグをつけていないので、自動的にlatestタグのイメージがダウンロードされている。

$ docker run hello-world hello:latest

でも同じ結果を得られる

Docker入門メモ

Dockerとは

  • コンテナ型仮想環境を作成、実行、管理するためのプラットフォーム
  • Dockerのソフトウェアを使い、素早くコンテナを起動して様々なアプリを実行することができる
  • 異なる設定環境のPCでも簡単に同じ仮想環境を再現できる
  • DockerはGo言語で書かれている

Dockerの用語

Dockerイメージ

Dockerコンテナを作成するための雛形となるもの。
Dockerイメージは、アプリケーション、ライブラリ、設定ファイルなど、アプリケーションを実行するのに必要なものを一式にまとめたもの。
出来上がったアプリケーションをDockerイメージとして保存して、別のサーバーへ持っていくことで同じ環境を別のサーバーでも再現することが可能

Dockerコンテナ

Dockerイメージをもとに作成されるコンテナ型仮想環境のことをDockerコンテナ、またはコンテナと呼ぶ
イメージからコンテナを作成することで、何度でも同じ仮想環境を作成することができる
コンテナを起動することで、イメージにセットアップしたアプリケーションの機能を提供することができる。

Docker Hub

Dockerイメージを保存するための機能などを提供しているサービス。
別の方が作成したイメージもダウンロードでき、コンテナとして動かすことができる
Docker Hubのようなイメージを補完できる機能を持ったものをレジストリと呼ぶ

ユースケース

  • アプリケーション開発
  • 検証環境、本番環境
  • Webサーバー、DBサーバーの構築
  • その他のミドルウェアの環境設定

Dockerを使うメリット

  • プログラムの実行環境を素早く立ち上げられる
  • 再現性のある環境を用意できる、違うPCやサーバー間で動かす場合も差異が生まれにくい
  • 設定ファイルを共有することでプロジェクトメンバー間で同じ環境を立ち上げられる
    インフラ環境のコードを定義したものをinfrastructure as codeと呼んだりする。
    設定ファイルをもとに環境を作ることができ、設定ファイルを見れば何がインストールされているのかもわかる。
  • PC環境を汚さずにすむ

npm ERR! ERESOLVE unable to resolve dependency treeの対処方法

npm ERR! ERESOLVE unable to resolve dependency treeの対処方法

SPAのブラウザバックのscroll復活をしたく、ためにしにreact-scroll-restorationを導入しようとしたらタイトルのエラーがでました。
react-scroll-restoration

結論

-save --legacy-peer-depsをnpm installのあとにつければいいそうです。

実際のエラー

$ npm install react-scroll-restoration
npm ERR! code ERESOLVE
npm ERR! ERESOLVE unable to resolve dependency tree
npm ERR! 
npm ERR! While resolving: testApp@0.1.0
npm ERR! Found: react-router-dom@5.3.0
npm ERR! node_modules/react-router-dom
npm ERR!   react-router-dom@"^5.2.0" from the root project
npm ERR! 
npm ERR! Could not resolve dependency:
npm ERR! peer react-router-dom@"^4.0.0" from react-scroll-restoration@1.0.8
npm ERR! node_modules/react-scroll-restoration
npm ERR!   react-scroll-restoration@"*" from the root project
npm ERR! 
npm ERR! Fix the upstream dependency conflict, or retry
npm ERR! this command with --force, or --legacy-peer-deps
npm ERR! to accept an incorrect (and potentially broken) dependency resolution.
npm ERR! 
npm ERR! See /Users/userName/.npm/eresolve-report.txt for a full report.

npm ERR! A complete log of this run can be found in:
npm ERR!     /Users/userName/.npm/_logs/2021-12-28T11_47_37_669Z-debug.log

npm ERR! Found: react-router-dom@5.3.0
↑因果関係があるライブラリの今使ってるバージョン
npm ERR! peer react-router-dom@"^4.0.0" from react-scroll-restoration@1.0.8
↑実際にさぽーとサポートしているバージョン

$ npm install react-scroll-restoration -save --legacy-peer-deps

npm WARN EBADENGINE Unsupported engine {
npm WARN EBADENGINE   package: '@jest/types@27.0.6',
npm WARN EBADENGINE   required: { node: '^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0' },
npm WARN EBADENGINE   current: { node: 'v12.10.0', npm: '7.16.0' }
npm WARN EBADENGINE }
npm WARN EBADENGINE Unsupported engine {
npm WARN EBADENGINE   package: 'diff-sequences@27.0.6',
npm WARN EBADENGINE   required: { node: '^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0' },
npm WARN EBADENGINE   current: { node: 'v12.10.0', npm: '7.16.0' }
npm WARN EBADENGINE }
npm WARN EBADENGINE Unsupported engine {
npm WARN EBADENGINE   package: 'jest-diff@27.0.6',
npm WARN EBADENGINE   required: { node: '^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0' },
npm WARN EBADENGINE   current: { node: 'v12.10.0', npm: '7.16.0' }
npm WARN EBADENGINE }
npm WARN EBADENGINE Unsupported engine {
npm WARN EBADENGINE   package: 'jest-get-type@27.0.6',
npm WARN EBADENGINE   required: { node: '^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0' },
npm WARN EBADENGINE   current: { node: 'v12.10.0', npm: '7.16.0' }
npm WARN EBADENGINE }
npm WARN EBADENGINE Unsupported engine {
npm WARN EBADENGINE   package: 'pretty-format@27.0.6',
npm WARN EBADENGINE   required: { node: '^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0' },
npm WARN EBADENGINE   current: { node: 'v12.10.0', npm: '7.16.0' }
npm WARN EBADENGINE }

added 1 package, and audited 2569 packages in 13s

166 packages are looking for funding
  run `npm fund` for details

43 vulnerabilities (27 moderate, 13 high, 3 critical)

To address issues that do not require attention, run:
  npm audit fix

To address all issues (including breaking changes), run:
  npm audit fix --force

Run `npm audit` for details.

無理やり入れているのでWARN出まくってますが、とりあえずinstallはできました。
余談ですが、インストールしようとしていたreact-scroll-restorationはうまく機能しませんでした。

PostgreSQL導入で躓いた

postgresを導入して起動したかったけどできなかった

備忘録として残してます。

macなのでbrewでインストール

$ brew install postgresql

文字コードUTF-8でデータベースの初期化

$ initdb /usr/local/var/postgres --encoding=UTF-8 --locale=ja_JP.UTF-8

The files belonging to this database system will be owned by user "username".
This user must also own the server process.

The database cluster will be initialized with locale "ja_JP.UTF-8".
initdb: could not find suitable text search configuration for locale "ja_JP.UTF-8"
The default text search configuration will be set to "simple".

Data page checksums are disabled.

initdb: directory "/usr/local/var/postgres" exists but is not empty
If you want to create a new database system, either remove or empty
the directory "/usr/local/var/postgres" or run initdb
with an argument other than "/usr/local/var/postgres".

で、ここからDBの起動をしてエンコードを確認したかったのにこれ

$ postgres -D /usr/local/var/postgres
2021-12-28 08:55:23.530 JST [63749] FATAL:  lock file "postmaster.pid" already exists
2021-12-28 08:55:23.530 JST [63749] HINT:  Is another postmaster (PID 63717) running in data directory "/usr/local/var/postgres"?

Postgres が起動しなくなったら
ここを参照してみたものの治らず

$ psql 
psql: error: connection to server on socket "/tmp/.s.PGSQL.5432" failed: FATAL:  database "username" does not exist

と思ったらデータベース作ってないので、最初は上記の文言が出るようです。

$ psql -l

エンコードも確認ができました。