wckr / wocker

Create your WordPress development environment in 3 SECONDS!
https://wocker.dev/
MIT License
480 stars 42 forks source link

DockerHubに格納されているWordPressイメージを再度Wocker環境にマウントさせることは可能でしょうか? #62

Closed echizenyayota closed 7 years ago

echizenyayota commented 7 years ago

いつもお世話になっております。


【質問の主旨】

現在DockerHubに格納されているe-yota_imageをローカル開発環境上のWockerにプルして、クライアントPC上にマウントさせて、Wocker上で編集作業を行いたいと考えています。そのようなことは可能でしょうか?

【質問の補足】

1. 先日、自分の操作ミスで wocker/wocker イメージ(b25801588468)(コンテナ名e-yota)を うっかり削除してしまいました。

2. そのあとにVPSにアップロードしたe-yotaをプラグイン「Theme Check」によるチェックをかけたところ多数の問題点が発見されました(今はサーバーの電源を落としています)

3. なのでもう一回ローカル開発環境でテーマの内容を見直して編集したいと考えています。dockerhubからechizenya/e-yota_image:latesをプルしてきて、wocker.devのアドレスでブラウザに表示させるところまでは可能なのですが、クライアントPC上には当該コンテナ(ディレクトリ)はマウントされていません。(添付画像1枚目、2枚目)そのため、現在 e-yotaというコンテナ(ディレクトリ)を編集することができません。

echizenya/e-yota_image:latesをb25801588468というイメージに変更することは可能でしょうか?

1 2

おいそがしいところ誠に恐れ入りますが、おてすきの時にでもご確認よろしくお願い申し上げます。

ailispaw commented 7 years ago

前にもどこかで書いたと思いますが、コンテナ内のディレクトリを外部にマウントするのではなく、 外部のディレクトリをコンテナ内にマウントする形になります。 なので、まず、外部のディレクトリを復元してからコンテナを起動する時にマウントします。

  1. e-yota 内のファイルの吸い出し

    wocker ~ $ docker stop e-yota
    wocker ~ $ docker cp e-yota:/var/www/wordpress ~/data/e-yota
    wocker ~ $ docker rm e-yota
  2. echizenya/e-yota_image:latest の DB や設定を使いつつ、ファイルは ~/data/e-yota を使う

    wocker ~ $ docker run -d --name e-yota -p 80:80 -p 3306:3306 -v ~/data/e-yota:/var/www/wordpress:rw echizenya/e-yota_image

追記:上記のコマンドは次の @ixkaito さんのコメントの2つ目と等価です。

これで、echizenya/e-yota_image を使いながらもファイルは外部の ~/data/e-yota を使う形になるので、編集が反映されるようになります。

もし、echizenya/e-yota_image:latest 内の DB や設定が必要ない(テーマファイルだけでいい)なら、

wocker ~ $ wocker run --name e-yota

毎度になりますが、上記の docker コマンドが何をしているのか理解してからお試し下さい。

ixkaito commented 7 years ago

@echizenyayota

@ailispaw さんの 1. の通り、まずはコンテナ内のデータをローカルに吸い出してください。

そのあと、Wocker のデフォルトのイメージを使うのであれば、

wocker ~ $ wocker run --name e-yota

echizenya/e-yota_image:latest を使うのであれば

wocker ~ $ wocker run --name e-yota echizenya/e-yota_image:latest

どちらもイメージがない場合は自動的に Docker Hub から先にダウンロードします。

echizenyayota commented 7 years ago

@ailispaw さん。@ixkaito さん。 それぞれ詳しいご説明ありがとうございます。教えていただいたアドバイスにもとづいて、 自分なりの検証をしてみました。ひょっとしたら私のMac環境のせいで、このような結果に なったかもしれません。行き違いがございましたら、誠に恐れ入ります。

1. docker run -d --name e-yota -p 80:80 -p 3306:3306 echizenya/e-yota_image docker cp e-yota:/var/www/wordpress ~/data/e-yota

2. wocker run --name e-yota

3. docker run -d --name e-yota -p 80:80 -p 3306:3306 -v ~/data/e-yota:/var/www/wordpress:rw echizenya/e-yota_image

今回の場合、2. がもっともしっくりきたので、2. の方法を採らせていただきます。


頂いたアドバイスについて、誠に恐縮ですが、質問が2点ございます。

【質問の主旨】

1.

上記の 3. のコマンドのうち、-p 3306:3306のオプションは何を示しているのでしょうか?3306のポートを割り当てているという意味であると推察されますが、何のために存在するのでしょうか?

2.

wocker/wocker とした出来上がったイメージを再度、echizenyaイメージにしてDockerHubへ プッシュするためには、どうすれば良いでしょうか?(添付画像2枚目)

【質問の補足】

1.

3. のコマンドを自分なりに分解すると、以下のことが分かりました。

参考ページ https://docs.docker.com/engine/reference/run/ 参考書籍 プログラマのためのDocker教科書

2.

自分なりに試した方法が以下のとおりです。e-yotaにスタートさせて、コミットさせても 「そんなコンテナはない」と指摘されてしまいます。

wocker ps -a wocker start e-yota wocker commit echizenya/e-yota_20170224_copy Error response from daemon: No such container: echizenya/e-yota_20170224_copy docker commit echizenya/e-yota_20170224_copy Error response from daemon: No such container: echizenya/e-yota_20170224_copy

参考ページ http://dotinstall.com/lessons/basic_docker/27708


お忙しいところ、お手数をおかけして誠に恐れ入りますが、ご確認やアドバイスをいただけましたら幸いです。以上、よろしくお願い申し上げます。

3 4
ailispaw commented 7 years ago

一つ一つ順にご説明致します。

まず、大前提として、

前提1.これからご説明する(今までご説明した)コマンドを実行する際の状態

wocker ~ $ wocker ps -a

を実行した際に、最初のご質問時のように、echizenya/e-yota_image:latest を使った e-yota というコンテナが見えている状態からの説明になっています。

前提2.コマンドの先頭にあるプロンプト wocker ~ $ はローカルマシンの Mac から vagrant ssh をした直後(VM にログインした直後)の VM 内で作業することを意味しています。 よって、

wocker ~ $ ls
data/

のように data フォルダだけ見えてる状態です。 ちなみに説明の中で使っている ~/data~ はログインディレクトリを示していて、 ~/wocker/data というものは無いはずです。

前提3.また、最初のご質問時のように ~/data/e-yota はまだ存在しないことを前提とします。

さて、上記を前提(初期状態)としまして、

[手順1] 時系列的にまず手順1を実行します。

wocker ~ $ docker stop e-yota
wocker ~ $ docker cp e-yota:/var/www/wordpress ~/data/e-yota
wocker ~ $ docker rm e-yota

これで、e-yota コンテナの /var/www/wordpress フォルダの中身を ~/data/e-yota にコピーします。 最初の docker stop はコピーの前に念の為コンテナを停止しています。 最後の docker rm wocker rm ではありません) は、中身のコピーは済んだので e-yota コンテナを削除しています。 (この後、目的のコンテナを起動する際に既にあるとこちらを使ってしまうため、削除します。)

補足: ここで、上記の @echizenyayota さんのコメントの1を見てみますと、

docker run -d --name e-yota -p 80:80 -p 3306:3306 echizenya/e-yota_image
docker cp e-yota:/var/www/wordpress ~/data/e-yota

となっており、1行目で echizenya/e-yota_image直接 使った マウント状態の無い e-yota コンテナを起動した 後に 、2行目で中身をコピーをしただけの(手順2をまだしていない)状態です。 よって、起動しているコンテナは一行目のコンテナなので、まだ目的のコンテナではありません。

[手順2] これで ~/data/e-yota が出来ているはずなので、これを元に e-yota コンテナを再度新規に作成します。

コンテナの作成方法は、私の示した方法でも @ixkaito さんの方法でもやっていることは同じで、2種類あります。@ixkaito さんの方法の方が wocker 本来の使い方でしょう。 ただし、どの方法を用いても上記の手順1の 直後 で行って下さい。 また、どれか一つ を行って下さい。 (他の方法を試す時は手順1の状態に戻してから行って下さい)

手順2の1つ目

wocker ~ $ wocker run --name e-yota

手順2の2つ目

@ixkaito さんの方法

wocker ~ $ wocker run --name e-yota echizenya/e-yota_image:latest

または、私の方法(やっていることは同じ)

wocker ~ $ docker run -d --name e-yota -p 80:80 -p 3306:3306 -v ~/data/e-yota:/var/www/wordpress:rw echizenya/e-yota_image

補足: 上記の @echizenyayota さんのコメントでは、それぞれ3つの方法が時系列を示しているのか、独立しているのか、わかりにくかったです。 手順1ー>@echizenyayota さんの2としているのであれば、@echizenyayota さんの2は、まさに @ixkaito さんが示した1つ目の方法なので、問題なく動作するはずです。 @echizenyayota さんの3は、最初に私の示した1つ目の方法ですが、~/data/e-yota が無い状態から(手順1の直後ではないか、 削除された後)行われたように見えます。

ご質問について

質問1. -p 3306:3306
これはデータベースの MySQL サーバーにアクセスするためのポートで、このポートを公開していると VM やローカルの Mac からツールを使って、Wordpress のデータベースを操作することが出来るようになります。必要無ければ省くことも出来ます。 同じように -p 80:80 があるおかげで、Mac のブラウザから Wordpress にアクセス出来ています。

質問2.wocker/wocker とした出来上がったイメージを再度、echizenyaイメージにしてDockerHubへ プッシュするには?
これは、echizenya/e-yota_image を作成した際とまったく同じ方法です。

質問3.コマンドの意味
これは docker run の解説を勉強して下さい。

質問4.「そんなコンテナはない」と指摘される wocker commit の使い方が間違っています。 e-yota のコンテナがあって、それをコミット(それからイメージを作成)する場合、正しくは、

wocker ~ $ docker commit e-yota echizenya/e-yota_20170224_copy

です。

echizenyayota commented 7 years ago

@ailispaw さん。コメントありがとうございます! またお礼のメッセージが遅くなり、大変おそれいります。

@ailispaw さんから頂いたアドバイスにもとづき、自分でい試してみましたが、 どうもアドバイスいただいた通りに動きません。おそらく自分が触っている途中で 前提条件を変えてしまったからだと思います。さらにその前提条件についてどこを変えてしまったのか、 自分でも分からない状態になり、文章で表すことが難しくなってきました。

そこで @ixkaito さんにお願いをして、3月7日(火)現在のWocker内にあるイメージを見てもらい、 修正などをしてもらうことになりました。

ですので、3月7日以降にどのような結果になったのか、改めてコメントいたします。 以上、よろしくお願い申し上げます。

ailispaw commented 7 years ago

@echizenyayota お力になれなくて残念です。

@ixkaito 私の提供してしまった裏技のせいで、非公式の操作に対してサポートすることになってしまい、すみません。よろしくお願いします。

ixkaito commented 7 years ago

@ailispaw とんでもないです。いろいろとサポートしていただいてすごく助かってます。むしろ最近忙しさを言い訳に開発が滞っていることがとても申し訳ないです。

echizenyayota commented 7 years ago

@ailispaw さん。 いつもお世話になっております。 本日、@ixkaito さんに直接お会いして、個人レッスンという形で、 自分が抱えていた、イメージやコンテナの不具合を直接見ていただきました。

@ixkaito さんの作業を横目に見ながら、修正していただいたので、 何がどうおかしかったのは、私が文章で表すことはできませんが、 今の自分が作成しているWordPressについて、ベストな状態にすることができました。

DockerHub https://hub.docker.com/r/echizenya/e-yota/tags/

Github https://github.com/echizenyayota/e-yota/tree/private_lesson_20170307

@ailispaw さん、@ixkaito さん。本当にありがとうございました。 今後ともどうぞよろしくお願いします!