• ..

Stripe

    プロセス一覧

    ps コマンド

    psコマンドを使うとプロセスを一覧できます。

    docker ps

    -a, --all オプション

    オプションを何も指定しない場合は現在稼働中のプロセスが一覧されますが、-a, -allオプションを指定すると稼働が終了したプロセスに関しても表示できます。

    docker ps -a
    # docker ps --all

    -f, --filter オプション

    filterオプションを使うことで指定したcolと等しいものだけに結果を絞れます。例えばdocker run時に付けたnameで絞りたい場合は、-f 'name=...'labelの場合は-f 'label=...'という具合です。

    docker ps -f 'name=...'
    
    # すべてのプロセス対象
    docker ps -f 'label=...' -a
    
    # 稼働してないプロセス一覧
    docker ps -f status=exited -a

    --format オプション

    formatオプションを使うことで出力形式をカスタマイズできます。例えば、{{.Names}}という指定でnameだけを取得でき、table {{.Names}}のように頭にtalbeと書くことでテーブルヘッダを付けて出力できます。指定の部分はスペースの数など好きに指定できます。

    これで「稼働していないプロセス一覧のidを取得したい」というような場合は、

    docker ps -a -f status=exited --format '{{.ID}}'
    docker ps -a -f status=exited --format '{{.ID}}' | xargs docker rm

    という感じで取得できます。2行目のようにそれをdocker rm渡してまとめて削除するといったことができます。

    自分のログイン済 Now を扱えるプライベート Docker イメージを作る

    動機

    nowはCLIを提供していてくれてすごく便利なんですけど、ログインするのに入力が必要な感じなのでcliだけで自動処理させようとか思っても無理です。APIはあるので、一時期自作してましたがメンテナンスが面倒くさいのでやっぱりどうしても公式のを使いたい。

    5分で作れる

    方法は以下の通り

    1. 公式のnodeイメージを使ってコンテナを走らせる
    2. 中でnowにログイン
    3. docker commit
    4. DockerHubへpush

    DockerHubへプッシュ前にプライベートリポジトリを作っておくのと、docker loginはしておく必要があります。

    コンテナを走らせる

    以下のようなコマンドで立ち上げて中に入ります。--nameには分かりやすい名前を付けるといいです。

    docker run -it --rm --name now node:10 /bin/sh

    nowにログイン

    中にはいったらまずnowコマンドをインストール。そしてnow loginと実行するとメールアドレスを聞かれるので入力して認証します。

    yarn global add now
    # [1/4] Resolving packages...
    # [2/4] Fetching packages...
    # [3/4] Linking dependencies...
    # [4/4] Building fresh packages...
    # success Installed "now@11.4.0" with binaries:
    #       - now
    now login
    # > Enter your email:

    認証が終わった直後の状態をイメージ化

    ここまで終わったら一旦コンテナから抜けます。抜ける方法はctrl+p``ctrl+qです。exitしちゃったりしたら最初からです。
    そしてdocker commitします。以下のコマンドはnowという名前のコンテナからnju33/nowというイメージを作るというような意味です。名前はDockerHub上に作ったリポジトリと同じにします。

    docker commit now nju33/now

    できたら以下のコマンドで出てくるか確認します。

    docker image ls
    # REPOSITORY                 TAG                 IMAGE ID            CREATED             SIZE
    # nju33/now                  latest              xxxxxxxxxxxx        3 days ago          790MB

    DockerHubへプッシュ

    以下のようにイメージ名を指定してpushするだけです。

    docker push nju33/now

    使用例

    # 一覧
    docker run --rm nju33/now now ls
    # static deploy
    docker run -it --rm -v `pwd`/src:/root/src nju33/now now /root/src

    Docker Compose で MySQL が起動しなくなった

    問題

    ログ。

    db_1   | mysqld(_Z24ha_initialize_handlertonP13st_plugin_int+0x4f)[0x5564931aebff]
    db_1   | mysqld(+0xb138e6)[0x5564936258e6]
    db_1   | mysqld(_Z40plugin_register_builtin_and_init_core_sePiPPc+0x2f0)[0x556493628ad0]
    db_1   | mysqld(+0x64a566)[0x55649315c566]
    db_1   | mysqld(_Z11mysqld_mainiPPc+0xc71)[0x55649315e121]
    db_1   | /lib/x86_64-linux-gnu/libc.so.6(__libc_start_main+0xf1)[0x7f570700f2e1]
    db_1   | mysqld(_start+0x2a)[0x55649315480a]
    db_1   | The manual page at http://dev.mysql.com/doc/mysql/en/crashing.html contains
    db_1   | information that should help you find out what is causing the crash.
    xxx_db exited with code 2

    解決

    docker-compose down
    docker-compose kill
    # したのち
    docker-compose up

    Postgresql を建てる

    ターミナルでずっと開いていて ctrl+c で壊せるやつ

    起動

    docker run --rm \
      --publish 32778:5432 \
      --env POSTGRES_PASSWORD=postgres \
      postgres

    ログイン

    以下で中に入れます。

    sh -c "PGPASSWORD=postgres psql -h0.0.0.0 -p32778 -Upostgres"

    日本語化

    公式のpoostgresイメージそのままでは日本語化できないようなので、できるものを作りました。

    DockerHub - nju33/postgres