ソフトウェア -> Docker

Docker で秘匿情報を環境変数を通じて渡す方法

結論 「docker build を実行する際の書き方」と「Dockerfile の書き方」の 2つ の書き方を双方とも適用する必要がある。 docker build を実行する際の書き方 RAILS_MASTER_KEY という環境変数に渡したいデータが格納済みとする。 $ docker build --secret id…

GitHub Actions を用いて Cloud Run にデプロイする

前提 Dockerイメージは Artifact Registry に保存し、リージョンは asia-northeast1(東京)とします Cloud Run のデプロイ先のリージョンは asia-northeast1(東京)とします 必要なもの サービスアカウントの認証用 JSON ファイルが必要です。以下のような…

サービスアカウントで Cloud Run にデプロイするための権限

結論 Dockerイメージ の保存場所には Artifact Registry を使うことを前提として、以下の権限がおそらく最小です。 Artifact Registry 管理者 サービス アカウントユーザー Cloud Run デベロッパー 画像

GitHub Actions の "MySQL GitHub Action" で v5 を用いるときは step に sudo service mysql restart を入れる

MySQL GitHub Action (mysql-action) とは github.com 結論 標題通りです。sudo service mysql restart しないと MySQL が起動しませんでした*1。 さらに起動を待つとより安全 以下の Issue にもあるように、起動を待つとより安全です。 github.com v8 以上…

GitHub Actions で MySQL 5 を services: で用いると日本語が文字化けする

具体例 on: push: jobs: my_job: runs-on: ubuntu-latest services: mysql: image: mysql:5.7 このとき、日本語が文字化けします。 どうするか 1. MySQL 8(以上)を使う MySQL 8(以上)のイメージを使えば解決します。 2. mirromutth/mysql-action@v1.1 を…

Docker の「ボリューム(bindではないボリューム)」の具体的な中身を見たり、中身をホストにコピーしたりしたいとき

結論 マウントするだけのコンテナを適当なイメージから作って、それを用いて中身を見たり $ docker container cp すればいいです。 よく記事で見る、特権を使って中身を覗く方法も手っ取り早いと思います*1。 具体例 用いるイメージは Ubuntu 20.04 で特に問…

Docker Compose での VS Code Dev Container において "Rebuild Container Without Cache" を選んでも全てのコンテナは止まらない(のでエラーになる)

※2022/01/18現在の情報です 結論 VS Code Dev Container のメニューで Rebuild Container の項目があります。この項目はさらに以下の 2つ の項目に分かれます。 Remote-Containers: Rebuild Container Without Cache Remote-Containers: Rebuild Container …

Docker での apt-get があまりにも遅いとき

結論 Dockerfile の最初の方で以下のように実行し、 /etc/apt/sources.list を書き換えてしまいます。なお以下の例は Ubuntu 20.04 の場合です。 RUN echo " deb http://jp.archive.ubuntu.com/ubuntu/ groovy main restricted\n\ deb-src http://jp.archive…

$ docker build するときの Dockerfile の置き場によっては ERROR [internal] load build definition from Dockerfile が出る

結論 標題のとおりです。たとえば /tmp/Dockerfile に置いてしまうとエラーが出ます。

Docker のボリュームを --mount オプションかつ bind で共有する場合には予め対象ディレクトリを作っておかないとエラーになることがある

結論 こちらの Issue のとおりです。 github.com 対応方法としては予めディレクトリを作っておくことですが、動的に生成する場合などにはスクリプトが必要になったりと余計な手間が増えるので、素直に -v を使うのが賢明ではないかと思います。

Docker でボリュームの所有者が root になってしまう問題のポイント

結論 とりあえずこの記事を見ればよいです。 qiita.com 以下は、上記の記事を実際にやってみて思ったことを書きます。 方法としては「うまくいく方法1 : ENTRYPOINTでuseraddでユーザーを作る」が良さそう もちろんケース・バイ・ケースではありますが、上記…

Docker でコマンド実行の CLI を作る場合は ENTRYPOINT で実行コマンドを書き、CMD で実行オプション等の引数を渡すようにする

理由 CMD に実行コマンドを書くと、引数が使えなくなるからです。docker run 時に与えた引数は、CMD を上書きしてしまうからです 実行コマンドは ENTRYPOINT に書きましょう。 具体例 foo というコマンドを Docker で実行したいとします。完成形は以下のよう…

docker-compose で引数(サービス名)込みで -d オプションを付けた時に引数が消える現象が起きたとき

状況 $ docker-compose up foobar -d というコマンドを実行した際に $ docker-compose up -d が実行されてしまうという状況です。CI*1 で起きたことがあります。 どうするか -d オプションを先にもってくる。 $ docker-compose up -d foobar *1:GitHub Actio…

WSL2 (Ubuntu), Intel Mac、M1 Mac、Raspberry Pi に Docker Compose v2 をインストールする方法 (2022/01/05)

結論 公式リポジトリからバイナリを落とす。実行権限を付与する。 github.com どこに置くかは以下を参照。 github.com 最後に確認をしておきましょう。 $ docker compose version Docker Compose version v2.3.4 $ docker-compose version Docker Compose ve…

Docker でコンテナを作成する際にボリュームを指定するとコンテナの内容を上書きしてしまうため、node_modules などが消える現象を防ぐ

全体 Dockerfile で yarn install*1 をして node_modules 配下にライブラリがインストールされたイメージが作成されたとします。このイメージからコンテナを作成する場合、例えば /path/to:/app のようにボリュームを指定すると、せっかく作られた node_modu…

VS Code の Dev Container では Dockerfile の ENTRYPOINT が実行されない(っぽい)ので "postCreateCommand" プロパティで代替する

結論 devcontainer.json 内に、たとえば以下のように書きます。 { (中略) "postCreateCommand": ".devcontainer/devcontainer_entrypoint.sh" (中略) } 上記の devcontainer_entrypoint.sh 内に、Dockerfile の ENTRYPOINT の内容を移植すればよいかと思…

Rails を Docker 環境で動かす際にローカル環境と共存させるとエラーが出る

結論 表題のとおりです。 .bundle とか tmp/ とか vendor/ とかがローカル環境と混ざるとエラーが起き得ます*1。Docker 環境で使うディレクトリは Docker 環境だけで使いましょう。ローカル環境で使いたい場合には別途ディレクトリを作りましょう。 *1:gem …

Docker Compose で作ったコンテナ内からプロキシ経由でアクセスする方法

結論 当該コンテナの環境変数に HTTPS_PROXY や HTTP_PROXY を追加します。 例 version: '3.8' services: foobar: (省略) environment: - HTTPS_PROXY=http://hoge.example.com:12345 - HTTP_PROXY=http://fuga.example.com:54321 (省略)

CircleCI 内で Docker のコマンドを使いたい場合

結論 steps の中で setup_remote_docker を実行(記述)した後、docker コマンドを実行します。 具体例 NG な例(setup_remote_docker を実行しない場合) setup_remote_docker を実行しないと次のようにエラーになります。 .circleci/config.yml は次のとお…

Nextcloud を Docker Compose で使用している時にバージョンアップをする方法

結論 1. 実行を停止する $ docker-compose down 2. docker-compose.yml に最新バージョンを記述する latest の場合はこの項目は飛ばして OK (省略) image: nextcloud:21.0.2 (省略) 3. 起動する 結構時間がかかります。 $ docker-compose up -d 注意点 …

DiscordChatExporter の Docker コンテナは arm(Raspberry Pi など)では実行できない

DiscordChatExporter とは github.com 結論 以下のようにエラーが出ます。 $ docker run --rm tyrrrz/discordchatexporter:stable Unable to find image 'tyrrrz/discordchatexporter:stable' locally stable: Pulling from tyrrrz/discordchatexporter f7ec…

Heroku に GitHub 経由で継続的にコンテナデプロイをする方法

結論 heroku.yml を用いましょう。 devcenter.heroku.com 例えば、超単純な heroku.yml ならば以下のようになります*1。 build: docker: web: Dockerfile 補足 ざっくりと Web の記事を検索したところ、CLI 経由でのデプロイしか見当たらなかったので書きま…

Docker Compose でボリュームをマウントする際、type: を用いたときに "services.postgresql.volumes contains an invalid type, it should be a string" と怒られてしまう場合への対処法

状況 docker-compose.yml の volumes: が以下のように書かれていたとします。 volumes: - type: bind source: ./foo target: /var/lib/bar その上で、$ docker-compose up を実行した際に以下のようなエラーが出る場合を考えます。 $ docker-compose up ERRO…

Docker Registry にイメージを push した際に "blob unknown" ("blob unknown to registry") とエラーが出る場合の対応方法の一つ

Docker Registry とは 自前の Docker Hub です。 docs.docker.com 結論 環境変数に以下を追加します。 REGISTRY_HTTP_RELATIVEURLS=true 環境 この状況に陥った環境は以下のとおりです。 インターネット上に Docker Registry を作る(例えば my-docker-reg.e…

Raspberry Pi で Docker Registry に Webインターフェイス を用意する

結論 Webインターフェイス を用いるためにはいくつかの選択肢がありますが、Raspberry Pi でも使えて*1、GitHub のスター数も考慮した結果、docker-registry-ui を用いることにしました。 github.com Raspberry Pi で docker-registry-ui を用いるための doc…

Docker Registry を立てるときの docker-compose.yml

Docker Registry とは 要は自前で立てる Docker Hub です。公式に提供されています。 docs.docker.com 結論 以下のような docker-compose.yml になりました。 docker-compose.yml と同じディレクトリに registry ディレクトリと certs ディレクトリと auth …

Docker コンテナを起ち上げた後、とあるサブネットのクライアントから別のサブネットの特定のサーバに対してだけ突然 SSH ができなくなり ping も通らなくなったとき

理由 異なるサブネットから SSH して Docker コンテナを起ち上げたから 前提 他のサーバには問題ない 本当に「突然」のように感じた サーバは Raspberry Pi である エラーログとしては以下のような感じです $ systemctl status docker.service ● docker.serv…

Docker Compose で MySQL 8 のコンテナを作るときに、自由にスクリプトを実行して環境を作る方法

結論 コンテナ側の /docker-entrypoint-initdb.d 配下に実行したいスクリプトを置きます。するとコンテナ作成時にそれらのスクリプトをファイル名の順番で実行してくれます。 コンテナ作成時にホスト側の適当なディレクトリにスクリプトファイルを詰め込み、…

Docker のイメージやコンテナの保存場所をデフォルトの位置 (/var/lib/docker) から変更する

動機 Raspberry Pi の MicroSD カード上で Docker を操作すると凄まじく遅く、また容量を食いまくるので、外部ストレージに移したいから。 結論 デフォルトの保存先である /var/lib/docker にシンボリックリンクを張ります。 具体的には以下の記事に書かれて…

Raspberry Pi (arm64) の Ubuntu に Docker Compose をインストールする方法

結論 apt で入れます。 具体的方法 apt install を実行してインストールします。 $ sudo apt install -y docker-compose 正しくインストールされたかを確認します。 $ docker-compose -v docker-compose version 1.25.0, build unknown

Powered by はてなブログ