GNU/Linux >> Linux の 問題 >  >> Linux

mysql コンテナーにデータをコミットする

@dekin の調査に基づいて、この問題を解決するためにこれを行いました:

Dockerfile:

FROM mysql:latest

RUN cp -r /var/lib/mysql /var/lib/mysql-no-volume

CMD ["--datadir", "/var/lib/mysql-no-volume"]

ビルドして実行:

docker build . -t my-mysql
docker run -e MYSQL_ROOT_PASSWORD=root -it my-mysql

@Robertの回答に基づいて、私はこの Dockerfile になりました :

FROM mysql:5.6.22

RUN cp -r /var/lib/mysql /var/lib/mysql-no-volume

RUN sed -i -e "s|/var/lib/mysql|/var/lib/mysql-no-volume|" /etc/mysql/my.cnf

CMD オーバーライドが機能しませんでした。コンテナーが奇妙なエラーで停止しました:

2019-02-21 15:18:50 1 [Note] Plugin 'FEDERATED' is disabled.
mysqld: Table 'mysql.plugin' doesn't exist
2019-02-21 15:18:50 1 [ERROR] Can't open the mysql.plugin table. Please run mysql_upgrade to create it.

元の CMD だと思います コマンドは(@Robertの回答で)不足しているより多くのことを行っていたので、別のアプローチでそれを行いました.latestでは試しませんでした. バージョンですが、動作するはずです。


docker-compose を使用している場合 、カスタム イメージをビルドする必要はありません。フラグ --datadir=/var/lib/mysql-no-volume を追加するだけです mysql をプルするときのコマンドに

例:

version: '2.4'
services:
  mysql:
    image: mysql:5.7
    command: "mysqld --character-set-server=utf8 --collation-server=utf8_general_ci --datadir=/var/lib/mysql-no-volume"

公式の mysql イメージは、データをボリュームに格納します。通常、これはコンテナーの寿命を超えてデータを保持できるようにするために必要ですが、データ ボリュームはユニオン ファイル システムをバイパスし、イメージにコミットされません。

ボリュームのない独自の mysql ベース イメージを作成することで、やろうとしていることを達成できます。その後、データを追加してイメージにコミットできますが、コミット後に実行中のコンテナーに追加されたデータは、コンテナーがなくなると失われます。


Linux
  1. Dockerイメージに変更をコミットする方法

  2. Docker イメージ/コンテナの中身は?

  3. mysql インポートの速度を向上させる

  1. DockerコンテナでMySQLを実行する方法

  2. MySQL データをファイルに出力できません

  3. mysql で LOAD DATA LOCAL INFILE を有効にする

  1. MySQL –InnoDBのテーブルごとのデータへの変換

  2. Buildahを使用したコンテナイメージビルドの高速化

  3. Terraform – Python Lambdaをデプロイする(コンテナーイメージ)