20210506のdockerに関する記事は9件です。

ローカルにdockerでwordpress環境を作成する

本記事ではdockerを使って、ローカルで動作するwordpress環境を作成します。 対象 なるべく簡単にwordpressの環境を作りたい人 ローカルで動くwordpressの環境を作りたいひと 既存のwordpress開発環境をdockerで作成し直したい人 前提条件 docker for desktopインストール済み または dockerとdocker composeコマンドが実行できること 手順概要 ファイル&ディレクトリ作成 docker-compose.ymlを記述 コンテナの作成 wordpressの初期設定 ファイル&ディレクトリ作成 適当なディレクトリに以下のファイルとディレクトリを作成してください。 . ├── docker-compose.yml └── wordpress docker-compose.ymlを記述 docker-compose.ymlに作成するコンテナの情報を記述します。環境変数などは、自分用に変更して使用してください。また、mysqlとwordpressのバージョンは自分に合ったものを使用してください。 基本的に最新のものを使用で問題ないとは思いますが、latestはやめましょう。他環境との整合性が取れなくなる可能性があります。 docker-compose.yml version: "3" #docker-composeのバージョン services: db: #wordpressで使用するmysqlコンテナを作成 name: wordpress_db image: mysql:5.7 volumes: #データを永続化させるためにローカルのファイルにマウント - db_data:/var/lib/mysql restart: always environment: #mysqlの環境変数(自由に設定する) MYSQL_ROOT_PASSWORD: rootpassword MYSQL_DATABASE: wordpress MYSQL_USER: user MYSQL_PASSWORD: password wordpress: #wordpressを実行するコンテナを作成 name: wordpress_server depends_on: #依存関係を記述 - db image: wordpress:latest ports: #ポート番号を指定。他で使っている場合は左側を変更 - "8080:80" restart: always volumes: #データを永続化させるためにローカルのファイルにマウント - ./wordpress/:/var/www/html environment: #wordpressの環境変数(上で作成したDBを指定) WORDPRESS_DB_HOST: db:3306 WORDPRESS_DB_NAME: wordpress WORDPRESS_DB_USER: user WORDPRESS_DB_PASSWORD: password volumes: db_data: docker-composeの簡単な解説 全くわらかない場合は以下がおすすめです docker-compose.ymlの書き方について解説してみた 重要なポイント 環境変数を設定 mysqlのDB情報、wordpressに接続するDB情報を各コンテナのenvironmentで記述してします。 そのため、ローカルではないデータベースを使用したい場合は、ここを書き換えるだけで大丈夫です。 データの永続化 コンテナを再作成してもデータが消えないように、mysql・wordpressともにローカルのファイルにマウントしています。 コンテナの作成 docker-compose.ymlがあるディレクトリで以下のコマンドを実行します。 docker-compose up -d 初回起動時は時間がかかりますが、ターミナルに以下のようなメッセージが表示されると作成完了です。 何かエラーが出た場合は修正してください。大抵ググると同じ悩みを経験した人がいます。 Status: Downloaded newer image for wordpress:5.7.1-php7.4-apache Creating wordpress-local_db_1 ... done Creating wordpress-local_wordpress_1 ... done wordpressの初期設定 http://localhost:8080/にアクセスします。 すると以下のような画面が表示されますので、表示にしたがって設定を行いましょう。 コンテナ作成直後は、エラーが表示されるかもしれません。その場合は時間を空けてアクセスし直してください。 実行後のディレクトリ構成 以下のようにwordpressディレクトリ下にファイルが作成されています。 テーマなどを自作したい場合は、以下を追加・修正することでコンテナの環境にも反映されます。 . ├── docker-compose.yml └── wordpress ├── index.php ├── license.txt ├── readme.html ├── wp-activate.php ├── wp-admin ├── wp-blog-header.php ├── wp-comments-post.php ├── wp-config-docker.php ├── wp-config-sample.php ├── wp-config.php ├── wp-content ├── wp-cron.php ├── wp-includes ├── wp-links-opml.php ├── wp-load.php ├── wp-login.php ├── wp-mail.php ├── wp-settings.php ├── wp-signup.php ├── wp-trackback.php └── xmlrpc.php この環境のメリット&デメリット (+)ローカルでソースコードを変更できる (+)簡単に環境が作成できる (ー)本番環境用に環境変数などを変更する必要がある
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Rancher2サーバが落ちていて起動しない時の対処(2021年皐月)

初めに こんにちは、今更な感じもありますが、困っている人がいるかもしれないのと、自分の備忘録を兼ねて本書を記します。ご覧になっていただき、読者のみなさまに感謝します。 対象の読者 以下のような方々のお役にたてれば幸いです。 rancher2を内部自己署名TLS証明書で動かしている 導入してから1年以上アップデートしていない 久しぶりに管理画面を見ようとしたらサーバが停止していた 更新方法がよくわからない 原因 Rancher内臓のTLS証明書の期限が1年間であり、放置していると切れてしまい、証明書不正で動作不可となった。これは再起動しても改善されない。 課題 既存Rancher環境での緒設定を壊してしまうと、最初からさ設定のやり直しになるので、正規の手順に従って作業する必要がある。 対処方法 Rancher2サーバのデータ領域からTSL証明書を削除し、新バージョンにアップデートすれば、TLS証明書も新規作成されて動作するようになる、さらにどのバージョンからかは忘れたが、再起動か何かで古いTLS証明書を再作成する機能が加わったようだ。 Rancher2 update tls 以下の記事を参考にして、順次アップデートしていく。 以下のようにして、処理をすすめる。 1.サーバの確認 rancher2サーバのバージョンを確認。 docker ps -a 出力の一例 rancher2サーバのIMAGE(イメージ名)は、「rancher/rancher:TAG」となっていて、大抵は最後の行に現れる。下の例では「rancher/ranchre:stable」となっており、NAMES(名称)は「rancher2-server」となっている。なお、名称は起動時の指定で好きにつけられるので、別の名前になっていることもある。 CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES f4b50bdeed46 f29ece87a195 "run.sh" 13 seconds ago Exited (1) 13 seconds ago k8s_cluster-register_cattle-cluster-agent-db695c944-nwrlp_cattle-system_bab5ca79-ad23-4644-9373-c818ba29e69d_1739 . . . . . 7063f22dd646 rancher/rancher-agent:v2.3.5 "run.sh -- share-r..." 14 months ago Exited (0) 6 days ago share-mnt 9e2eee18a879 rancher/rancher:stable "entrypoint.sh" 14 months ago Restarting (1) 30 hours ago rancher2-server バージョン確認 TAGがstableだと、実際のバージョンが不明なので、「docker inspect」 にて調査する。 docker inspect 9e2eee18a879 | grep "CATTLE_SERVER_VERSION" # 出力例 "CATTLE_SERVER_VERSION=v2.3.5", 設定データの保存 「rancher2-server」コンテナを停止し、データを保存するコンテナ「rancher2-data」を作成する。 # stop rancher2-server docker stop rancher2-server # create volume as rancher2-data docker create --volumes-from rancher2-server --name rancher2-data rancher/rancher:stable データ確認 busyboxコンテナを利用し作成したボリューム内のデータを確認する。 # exec sh with volume docker run -it --volumes-from rancher2-data -v $PWD:/backup busybox sh # inspect 上記「busybox」コンテナ内部にて ls -l /var/lib/rancher/ # 出力例 total 0 drwxr-xr-x 4 root root 32 Feb 27 2020 k3s drwx------ 8 root root 109 Feb 27 2020 management-state バックアップ busyboxから戻り、バックアップしてからアップデートする。 # backup docker run --volumes-from rancher2-data -v $PWD:/backup busybox tar cvzf /backup/rancher-data-backup-ORG.tgz -C /var/lib/ ./rancher アップデート 方針としては、現バージョンから始め、「最後のパッチバージョン=>マイナーバージョンアップ」を繰り返す。rancher独自のTLS証明書を使う場合は、古いTLS証明書を削除してからアップデートする。以下、ポート設定などは標準と異なるので、注意されたし。 例)v2.3.5=>v2.3.10=>v2.4.0=>v2.4.15=>. . . . . # 変数設定 RC2_VER=v2.3.10 TODT=$(date +%y%m%d-%H%M) # backup and clear tls docker run --volumes-from rancher2-data -v $PWD:/backup busybox tar cvzf /backup/tls-back.tgz -C /var/lib/rancher/k3s/server ./tls docker run --volumes-from rancher2-data -v $PWD:/backup busybox sh -c 'rm -r /var/lib/rancher/k3s/server/tls/*' # rename old server docker rename rancher2-server rancher2-server-old # get newly image docker pull rancher/rancher:${RC2_VER} # start with volume docker run -d --volumes-from rancher2-data \ --name=rancher2-server \ --restart=unless-stopped \ -p 81:80 -p 444:443 \ --privileged \ rancher/rancher:${RC2_VER} 動作確認 Rancher2の管理画面にアクセスして状況を確認する。 複数ノードでクラスタを組んでいる場合など、「cluster unavailable」が表示されて、クラスタ操作不能のトラブルとなる場合もある。 Rancher画面の、cluster -> edit で、 □etcd □controlplane □worker の3つを現状の設定に合わせてチェックして、 クラスタの中心ノードで、表示されたスクリプトを再実行してみる。 自分の場合は、これでagentが実行され、環境が正常になる。 # スクリプトの一例 sudo docker run -d --privileged --restart=unless-stopped --net=host -v /etc/kubernetes:/etc/kubernetes -v /var/run:/var/run rancher/rancher-agent:v2.3.4 --server https://172.30.16.240:444 --token xhwwc2q9475pkz2tqlzzvrfs8mtltdkf2c8gk7gv8ztfhwzwch27n2 --ca-checksum 1aa4680ce04d83a774052634cc6fc23d0d6fe60bb59d5b9e058b40147d4fcdf8 --etcd --controlplane --worker 古いコンテナの削除 # remove old docker rm -f rancher2-server-old アップデートスクリプト TLSの問題がない場合は、以下のようにしてアップデートを自動化できる。 RC2_VER=v2.4.0 # RC2_VER=v2.4.15 # RC2_VER=v2.5.0 # RC2_VER=v2.5.7 TODT=$(date +%y%m%d-%H%M) # stop rancher2-server docker stop rancher2-server # backup docker run --volumes-from rancher2-data -v $PWD:/backup \ busybox tar zcvf /backup/rancher-data-backup-bfr_${RC2_VER}-${TODT}.tgz -C /var/lib/ ./rancher # rename old docker rename rancher2-server rancher2-server-old # get newly image docker pull rancher/rancher:${RC2_VER} # start with volume docker run -d --volumes-from rancher2-data \ --name=rancher2-server \ --restart=unless-stopped \ -p 81:80 -p 444:443 \ --privileged \ rancher/rancher:${RC2_VER} # remove old docker rm -f rancher2-server-old Docker領域のお掃除 なんやかんやで領域を食いつぶしている場合に、以下のように掃除してみるとよいかも。 system prune 不要なデータを削除 docker system prune builder prune docker builder prune log files ログ削除 sudo sh -c "ls -al /var/lib/docker/containers/*/*-json.log" sudo sh -c "truncate -s 0 /var/lib/docker/containers/*/*-json.log"
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

VSCでリモートサーバー上のDockerを用いる3つの方法

一番直感的な操作はVSCではRemote-SSHでリモートサーバーに接続し、その上でRemote-Containerを利用することだが、現状のVSCでは実装されていない。VSCのドキュメントに替わりの方法として大まかに三通りの入り口が載っていたが、自分には最後の方法が一番使いやすそう。 1. Remote-SSHを用いる VSCのDocumentで第一に記載されている方法だが、 The Docker extension supports debugging .NET Core-based and Node.js-based services running inside a container. Other programming languages are not supported at this time. とのことで、.NET Core-basedの言語か、Node.jsでしか使えないよう。 2. docker contextで切り替える ssh-agentを設定した上で、SSH tunnelingを用いてremote Docker engineを指定したdocker contextを作成し、適宜切り替える。この場合、dockerコマンド自体のcontextが切り替わるので、ローカルマシン上のDocker engineを使用しようとすると毎度切り換えないといけない。 そのまま"Open folders in Containers"を実行すると、ローカルフォルダをマウントしようとしてエラーになる。Remote ExplorerやDocker extentionタブからすでに作成されているコンテナを選択し、Attach to containerでコンテナに入るのが良いか。 3. docker.hostを利用する ssh-agentの設定は2と同様に行い、settings.json内のdocker.hostを設定する。これはDOCKER_HOSTでdocker contextをオーバーライドするのと恐らく等価。空のフォルダを作ってワークスペース設定として設定すれば、ローカル/リモートなど複数のDocker engineを同時に利用できる。これは2.の方法にはない利点。 またこの方法では、ローカルマシンに"devcontainer.json"を作成することでローカルなDockerfileからコンテナ作成や、リモートマシン上のフォルダのマウントなどを設定することができる。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Deno in ARM64 Docker

Deno を Docker で動かしたい、しかも Arm64 のマシン上で なぜ? Apple M1 な Macbook 上で Remote Containers を使用してお勉強をしたい。 しかし、公式ではそもそも Docker image を提供していないし、Arm64 に至ってはバイナリファイルを提供していない。(Apple M1 用のバイナリはあるよ、Linux Arm64 バイナリがないんだよ、だから Docker では簡単に動かないんだよ) どうするの? この人のを使え! いやなら、自分でビルドしな!公式の手順通りにやればコンパイルできたよ。メモリは 7G くらいは必要だけどね。 いつまで使うの? 公式の進捗を待て!
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Docker X Laravel ハンズオンイベントを主催して分かったことまとめ

イベント DockerでLaravelのローカル環境を構築するハンズオン(オンライン) https://php-builders.connpass.com/event/211985 合計65人の方に参加申し込みいただきました。ありがとうございます? discordのイベントチャンネルも50人以上オンラインになっておりハンズオンにしては大規模な開催となり嬉しく思います。 約12名の方に一緒にハンズオンしていただき、全員ハンズオン成功しました。 PHP Builders(ぴーえっちぴー びるだーず) PHPerによる、PHPerのための、PHPを勉強する勉強会コミュニティです。 教えたい/教わりたい/勉強したい方を歓迎してます! connpass内にDiscordグループの招待リンクがあります。 質問や相談、雑談などもできますので、気軽にご参加ください。 https://php-builders.connpass.com 資料 ハンズオン資料記事: https://qiita.com/ucan-lab/items/56c9dc3cf2e6762672f4 完成したリポジトリ: https://github.com/ucan-lab/docker-laravel-handson 宣伝 LaravelのOSSパッケージ開発を行なってます。 よければStarいただけると嬉しいです。 https://github.com/ucan-lab/docker-laravel https://github.com/ucan-lab/laravel-dacapo ハンズオン参加レポート ガミネさん(@gaminessium)が参加レポートを書いてくださりました? https://gaminessium.github.io/2021/05/02/laravel-handson-202105 ハンズオン中の問題 ハンズオン中に発生したトラブルをまとめした。 docker compose コマンドがない docker compose コマンドは、docker desktop 3.2.1以降に技術プレビュー版としてリリースされた新しい docker コマンドのサブコマンドです。 Docker for Mac, Docker for Windowsを予めアップデートしておく必要がある。 docker compose down -v がバグってる docker compose は技術プレビュー版のためか名前付きボリュームが削除されないバグがある。 https://github.com/docker/compose-cli/issues/1553 https://github.com/docker/compose-cli/pull/1618 修正済みですが、記事執筆時点(v1.0.14)ではまだリリースされてない模様です。 謎のエラー ハンズオン中にでた謎のエラーです。 実はリハーサルしてて同じエラーが出ていました。結局原因はわからないままですがdocker desktopをrestartすることで解決しました。 【Docker】Error response from daemon: invalid mount config for type "bind": bind source path does not exist マイグレーションでエラー このエラーが出た時は、原因わからなくて少し焦ってたんですがチャットサポートしてくれた方が教えてくださりました。 $ docker compose exec app bash root@28e246f56b19:/work# php artisan migrate Illuminate\Database\QueryException SQLSTATE[HY000] [1130] Host '172.22.0.2' is not allowed to connect to this MySQL server (SQL: select * from information_schema.tables where table_schema = laravel_local and table_name = migrations and table_type = 'BASE TABLE') at vendor/laravel/framework/src/Illuminate/Database/Connection.php:678 674▕ // If an exception occurs when attempting to run a query, we'll format the error 675▕ // message to include the bindings with SQL, which will make this exception a 676▕ // lot more helpful to the developer instead of just the database's errors. 677▕ catch (Exception $e) { ➜ 678▕ throw new QueryException( 679▕ $query, $this->prepareBindings($bindings), $e 680▕ ); 681▕ } 682▕ このエラーが発生した場合は my.cnf を作成する前に docker compose up -d でビルドしてしまった可能性が高いです。 (って自分のハンズオン記事の補足に書いてありました...) $ docker-compose down --volumes $ docker compose build db $ docker compose up -d docker compose down --volumes は名前付きボリュームを削除してくれない問題がある https://qiita.com/ucan-lab/items/56c9dc3cf2e6762672f4#%E3%83%9E%E3%82%A4%E3%82%B0%E3%83%AC%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%82%A8%E3%83%A9%E3%83%BC%E3%81%AE%E8%A3%9C%E8%B6%B3 Firefoxでアクセスできない 普段Firefox使ってなかったので知らなかったです。 これはとても勉強になりました。 https://tenforward.hatenablog.com/entry/20070810/1186724991 公開ポート番号を80から8080など別の番号に変更してもアクセスできるみたいです。 ネットワーク回線遅い問題 docker pullやcomposer install等、ネットワーク回線によってなかなか進めない人がいた。 これは各家庭にnuro光を導入してもらうことで解決。 予めdockerイメージをpullしておいたり、ネットワーク使う箇所は質問タイムや解説タイムに使うといいかもしれないです。 雷は防げない 当日は雷の鳴る中のハンズオンイベントとなりました。 雨の音や雷の音が響く中、ハンズオンイベントが進められていました。 何かしらトラブルは起きるだろうと予想していましたが、参加者の中に停電が発生してしまう方がいました。 ノートPCは生きててもルーター落ちたら通信できなくて詰みますね... 質問 ハンズオン中に出た質問をまとめます。 phpMyAdminを入れるにはどうしたらいいか? 今回のハンズオンの対象ではないですが、そんなこともあろうかと記事を書いておきました。 Docker x Laravel phpMyAdmin のコンテナを構築する MySQLのGUIクライアントで接続したいのですがどうしたらいいか? Sequel Proという便利なMySQLのGUIクライアントツールがありますが、MySQL8に対応できていませんでした。 後継アプリのSequel Aceというアプリを紹介している記事があったのでご紹介します。 Sequel AceでMySQLに接続する(Sequel Proの後継) 最小限の環境でLaravelを動かしてみたい docker-compose.yml 1ファイルでLaravel環境を作ることもできます。 webサーバーとdbサーバーなしの構成です。 Docker x Laravel 脅威の1ファイル!最小構成でローカル開発環境を構築する 感想 人数多かった割には大きな問題が起こることなく時間通りにハンズオン進めたのでとてもよかったです。 知らないエラーにも出会えて、私自身もとても勉強になりました。 都合が悪く参加できなかった方もいらっしゃるので、機会があればまたイベントを開催したいと思います。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

AWS EC2インスタンスにDocker環境を入れてDiscord Botを動かす(Python)

導入 Docker上でDiscordのBotを動かす のアイデアを元に誰かがボイスチャットに入ったときに入場曲を流すBotを、勉強を兼ねてPython/Docker/AWS EC2の環境で作成してみました。 ローカルで実行したいだけの場合や、ローカルのDocker環境で実行したい場合はDockerのくだりやEC2のくだりを適宜省略すれば動かせます。 下準備 discordのBotを作成し、アクセストークンを控えておく。 参考: 簡単なDiscord Botの作り方(初心者向け) EC2インスタンスを作成し、SSH接続できるようにしておく。今回は無料枠のAmazon Linux 2 t2.microを選びます。 参考:【初心者向け】Amazon EC2にSSH接続する【Windows、Macintosh】 EC2インスタンス上にdocker環境を構築しておく。こちらの2,3をご参考に。 参考: AWS EC2インスタンスにdockerとdocker-composeをインストールして簡単なWEBサービスを立ち上げる方法 これで進捗90%です。 Pythonコードの作成 discord.py の使用を前提で作成します。 discord.PCMVolumeTransformer(xxx, volume=0.04)の部分で音量を絞っています。結構小さめですが、これくらいがちょうどよいです。 if before.channel is None:で、接続なしの状態からそのチャンネルに入った場合のみの再生に限定しています。 sleep()で時間を決めて退出していますが、もっといいやり方があるかも。 今回は複数の音源をランダムに再生するように決めています。確率はお好みで。人によって再生する音源を変えても良いです。 entrancebot.py import discord import random from time import sleep # Botのアクセストークン discord_token = 'XXXX0XXX0000XX00.XXX00XX0.x000XXX0-XXXXX00000XXX0X000X' client = discord.Client() @client.event async def on_ready(): print('Botを起動しました') @client.event async def on_voice_state_update(member, before, after): if member.bot: return if before.channel is None and after.channel.id == 000000000000000000: # 接続するボイスチャンネルのID sleep(1) await member.voice.channel.connect() print('接続しました。') num = random.randint(0,5) if num == 0: member.guild.voice_client.play(discord.PCMVolumeTransformer(discord.FFmpegPCMAudio("makenai.mp3"), volume=0.04)) sleep(22) elif 1 <= num <= 2: member.guild.voice_client.play(discord.PCMVolumeTransformer(discord.FFmpegPCMAudio("tigau.mp3"), volume=0.04)) sleep(20) elif 3 <= num <= 4: member.guild.voice_client.play(discord.PCMVolumeTransformer(discord.FFmpegPCMAudio("arigatou.mp3"), volume=0.04)) sleep(20) elif num == 5: member.guild.voice_client.play(discord.PCMVolumeTransformer(discord.FFmpegPCMAudio("ambitious.mp3"), volume=0.04)) sleep(14) member.guild.voice_client.stop() await member.guild.voice_client.disconnect() print('接続解除しました。') client.run(discord_token) Dockerfileの作成 dockerイメージの元となるDockerfileを作成します。拡張子のないただのテキストです。 今回は音声を扱うのでffmpegをインストールし、音声を扱えるdiscord.py[voice]を入れます。 ローカルで実行する場合もこれらをインストールしておけば動きます。 Dockerfile FROM python:3.9.4-buster WORKDIR /app COPY . /app RUN apt-get update && apt-get install -y ffmpeg RUN python -m pip install \ --upgrade pip \ --upgrade setuptools \ discord.py[voice] CMD ["python3.9", "entrancebot.py"] docker-compose.ymlファイルの作成 直接Dockerfileで構築する場合は不要ですが、使っておきます。 ほぼbuild: .でDockerfileを指定しているだけです。 docker-compose.yml version: "3" services: python-service: restart: always build: . container_name: "pythonContainer" working_dir: "/app" tty: true ディレクトリの作成 作った3ファイル+音源ソースファイルを同じディレクトリにぶち込んでおきます。今回はentrancebotディレクトリとします。 ディレクトリのコピー 下準備のssh接続完了後、entrancebotディレクトリの上階層で下記を実行し、ローカルのディレクトリをEC2インスタンス上のディレクトリにコピーします。 指定するユーザー名はデフォルトではec2-user, IPアドレスはご確認を。 $ scp -r -i ~/.ssh/xxxx.pem entrancebot ec2-user@xx.xxx.xxx.xx:/home/ec2-user dockerイメージ・コンテナの作成 まずはEC2インスタンスの中に入ります。 $ ssh -i ~/.ssh/xxxx.pem ec2-user@xx.xxx.xxx.xx 入るとホームディレクトリ/home/ec2-userにいるはずです。 そこで $ cd entrancebot で、先程コピーしたディレクトリの中に移動します。 さらに、 $ docker-compose up -d --build で、dockerイメージとコンテナが作成され、起動されるはずです。 これでPythonコード上で指定したボイスチャンネルに入場すれば、Botが歌ってくれます! ちなみに $ docker-compose exec python-service /bin/sh でdockerコンテナの中に入ることもできます。 片付け $ docker container ls -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES daad8f6d5c15 entrancebot_python-service "python3.9 entranceb…" 21 seconds ago Up 20 seconds pythonContainer で表示されたIDを使って、 $ docker container stop daad8f6d5c15 $ docker container rm daad8f6d5c15 コンテナを停止して、削除。さらに、 $ docker image ls REPOSITORY TAG IMAGE ID CREATED SIZE entrancebot_python-service latest e235b4decbcd 4 minutes ago 1.15GB python 3.9.4-buster 8f3a05c42ee5 32 hours ago 886MB で表示されたIDを使って、 $ docker image rm e235b4decbcd $ docker image rm 8f3a05c42ee5 イメージを削除。 あるいはコンテナ・イメージ削除はdocker-composeコマンドでまとめてできます。 $ docker-compose down --rmi all また、cd ../でentrancebotディレクトリの上階層に移動して $ rm -r entrancebot でディレクトリを削除。最後に、 $ exit EC2を抜けて、ローカルに戻れます。お疲れさまでした。 実行内容を変えたい場合はリファレンスをご参考に。 不明点・うまく行かなかったところ ローカル(macOS)のdocker環境で実施したときは生成されるimageはentrancebot_python-service1つのみで、pythonが別に先に持ってこられることはなかったのだが、EC2上ではpythonイメージが別にある。この違いはなに...?どちらも空の状態から実行したけれど。。理解が足りていない。。 ローカルのdocker環境では問題はなかったが、EC2インスタンス上ではentrancebot.pyでconnect()前にsleep()等で間隔開けないとうまく再生されなかった。性能の問題...? Python/Docker/EC2 すべてが初めて触るものだったので、特定できず。。 詳しい方、コメントいただければと思いますm(_ _)m
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

オプションrm付きで起動したdockerコンテナ環境を保存しておく

概要 オプションrm付きで起動したdockerコンテナ環境で色々と試しているうちに、そのコンテナ環境を保存しておきたいと思うことがあった。ちょっと調べてみたけど、オプションを無効化する方法は無いっぽい。代替としては、コンテナからCTRL+P+CTRL+Qでデタッチして、環境をコミットする方法を使うしかないみたい。 ※ コンテナからCTRL+Dでデタッチしてしまうと、オプション通りにコンテナが終了してしまうので注意が必要。 Docker Version: 20.10.6, API Version: 1.41 詳細 オプションrm付きでdockerコンテナを起動する $ sudo docker run -it --rm --name="<CONTAINER_NAME>" <IMAGE_NAME> コンテナからCTRL+P+CTRL+Qでデタッチ # [CTRL+P] [CTRL+Q] コンテナに名前を付けて、環境をコミット $ sudo docker commit <CONTAINER ID/NAME> <IMAGE NAME> 関連記事 https://tech.withsin.net/2015/09/30/docker-container-detach/
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Docker buildx でラズパイ用のDockerイメージをクロスビルドした

ことの始まり 僕は役職パネルっていうDiscord BOTを運用しているのだが、開発パートナーがDockerを勉強したいとのことで、Dockerを導入することにした。 しかし、通常のPCのCPUアーキテクチャはamd64で、ラズベリーパイはarm64というものだ。アーキテクチャが違うと、イメージの共有はできない。しかしラズベリーパイでビルドはあまりしたくない。 そこで、「docker buildx」でマルチプラットフォーム向けにビルドできるので使ってみた。 下準備(最初だけでOK) qemuの準備をする docker run --rm --privileged multiarch/qemu-user-static --reset -p yes 最初とfailed to load LLB: runtime execution on platform linux/arm64 not supported みたいなエラーが出てきたら実行する。 ビルダーインスンタンスを準備する name引数は適当でもOK docker buildx create --name builder --use ビルド docker buildx build . みたいな感じに、いつもビルドするときと同じようにビルドすればOK。 プラットフォームを指定したいときは docker buildx build --platform=linux/amd64 . みたいな感じにプラットフォームを指定する。(複数指定に関しては後述) マルチプラットフォーム向けのビルド プラットフォームを複数指定したい場合は、以下のようにすればよいのだが これだけだとイメージが保存できずにエラーを吐く! docker buildx build --platform=linux/amd64,linux/arm64 . じゃあどうするのかというと、DockerHubなどのレジストリにプッシュしてあげれば良い。 プッシュはこんな感じにする docker buildx build --platform=linux/amd64,linux/arm64 --push --tag . 参考URL
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

rails Dockerfile docker-compose を別pjから移したときにGemfile.lockが原因で起動しなかった

docker-compose.yml、Dockerfileなどを別プロジェクトから移行してきたときに以下のようなエラーが出て起動できなかった。メモ用に エラー $ docker-compose up --build を実行したときに以下のようなエラーが出た app_1 | Bundler::GemNotFound: Could not find gem 'mysql2 (>= 0.4.4)' in any of the gem sources listed in your Gemfile. app_1 | /usr/local/lib/ruby/2.6.0/bundler/resolver.rb:287:in `block in verify_gemfile_dependencies_are_found!' app_1 | /usr/local/lib/ruby/2.6.0/bundler/resolver.rb:255:in `each' app_1 | /usr/local/lib/ruby/2.6.0/bundler/resolver.rb:255:in `verify_gemfile_dependencies_are_found!' app_1 | /usr/local/lib/ruby/2.6.0/bundler/resolver.rb:49:in `start' app_1 | /usr/local/lib/ruby/2.6.0/bundler/resolver.rb:22:in `resolve' app_1 | /usr/local/lib/ruby/2.6.0/bundler/definition.rb:258:in `resolve' app_1 | /usr/local/lib/ruby/2.6.0/bundler/definition.rb:170:in `specs' app_1 | /usr/local/lib/ruby/2.6.0/bundler/definition.rb:237:in `specs_for' app_1 | /usr/local/lib/ruby/2.6.0/bundler/definition.rb:226:in `requested_specs' app_1 | /usr/local/lib/ruby/2.6.0/bundler/runtime.rb:108:in `block in definition_method' app_1 | /usr/local/lib/ruby/2.6.0/bundler/runtime.rb:20:in `setup' app_1 | /usr/local/lib/ruby/2.6.0/bundler.rb:107:in `setup' app_1 | /usr/local/lib/ruby/2.6.0/bundler/setup.rb:20:in `<top (required)>' app_1 | /usr/local/lib/ruby/2.6.0/rubygems/core_ext/kernel_require.rb:54:in `require' app_1 | /usr/local/lib/ruby/2.6.0/rubygems/core_ext/kernel_require.rb:54:in `require' app_1 | bundler: failed to load command: puma (/webapp/vendor/bundle/ruby/2.6.0/bin/puma) 解決 Gemfile.lockの中身を削除して再度 docker-compose up --buildを再度実行。 必要に応じてコンテナ内でbundle installを実行する
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む