これはおそらくある時点で尋ねられたのですが、どこにも見つかりません。コミットしているコンテナー内のファイルの変更を失うことなく、Docker イメージへの変更をコミットすることができない (または方法がわからない) ようです。これが私のユースケースです。WindowsでBoot2Dockerを使用していますが、
Client version: 1.4.1
Client API version: 1.16
Go version (client): go1.3.3
Git commit (client): 5bc2ff8
OS/Arch (client): linux/amd64
Server version: 1.4.1
Server API version: 1.16
Go version (server): go1.3.3
Git commit (server): 5bc2ff8
dockerHub からジェンキンスの最新バージョンを取得します。
docker pull jenkins
私はそれを実行し、Webインターフェイスポートを再ルーティングします
docker run -dt -p 8010:8080 jenkins
インターフェイスに移動して、いくつかのプラグインをインストールします。プラグインをインストールしてから、Jenkins を再起動します。次に、変更をコミットしようとします。
docker commit $(docker ps -lq) <my_user_name_on_docker_hub>/<name_of_the_new_image>
docker ps -lq は、最後に実行されたコンテナーの ID を返します。現時点ではこのコンテナーのみを実行しているため、これが正しい ID を返すと確信しています (docker ps を実行して実際にコンテナーを検索することでも確認しました)。次に、変更をプッシュします。
docker push <my_user_name_on_docker_hub>/<name_of_the_new_image>
プッシュは、dockerHub に既に存在するすべてのリビジョンを通過し、最後のリビジョンに到達して 4 メガバイトがレジストリにアップロードされるまでそれらをすべてスキップします。それでも、この新しいイメージを実行しようとすると、何も変更されていないジェンキンスの基本イメージにすぎません。私がインストールしたプラグインなしで。私が理解している限り、イメージのユニオン ファイル システムへの変更 (jenkins プラグインはそこにバイナリとしてインストールされます) をコミットする必要があります。変更を加えた新しいイメージが必要です。
私は何を間違っていますか?
編集:いくつかのテスト ジョブを作成して実行し、docker exec -it bash を使用してファイル システムを歩き回り、jenkins は /var/jenkins_home/jobs の下に各ジョブの新しいディレクトリを作成しますが、docker diff を実行すると、一時ファイルのみが作成されたことを示しています。そして、コンテナーをコミット、プッシュ、停止し、プッシュされたばかりのイメージから新しいコンテナーを実行すると、ジョブ フォルダーは他のすべてのものと一緒に消えます。
EDIT2:他のフォルダーにファイルを作成しようとしましたが、docker diff は、/var/jenkins_home/ ディレクトリ以外のすべての場所で変更を確認しているようです。
EDIT3:これは関連しているようです-Jenkins DockerHubページから
この画像の使い方
docker run -p 8080:8080 jenkins これにより、ワークスペースが /var/jenkins_home に保存されます。プラグインや構成を含め、すべての Jenkins データがそこに存在します。おそらくそれを永続的なボリュームにしたいと思うでしょう:
docker run --name myjenkins -p 8080:8080 -v /var/jenkins_home jenkins 「myjenkins」という名前のコンテナーのボリュームは永続的になります。
ホストからボリュームにマウントをバインドすることもできます。
まず、コンテナー内の jenkins ユーザー (jenkins ユーザー - 通常は uid 102 - または -u root を使用) が /your/home にアクセスできることを確認してから、次のようにします。
docker run -p 8080:8080 -v /your/home:/var/jenkins_home ジェンキンス
-v トグルを使用してコマンドを実行しようとしましたが、実際にはコミットが永続化されませんでした。