Closed echizenyayota closed 7 years ago
前にもどこかで書いたと思いますが、コンテナ内のディレクトリを外部にマウントするのではなく、 外部のディレクトリをコンテナ内にマウントする形になります。 なので、まず、外部のディレクトリを復元してからコンテナを起動する時にマウントします。
e-yota
内のファイルの吸い出し
wocker ~ $ docker stop e-yota
wocker ~ $ docker cp e-yota:/var/www/wordpress ~/data/e-yota
wocker ~ $ docker rm e-yota
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 コマンドが何をしているのか理解してからお試し下さい。
@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 から先にダウンロードします。
@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
お忙しいところ、お手数をおかけして誠に恐れ入りますが、ご確認やアドバイスをいただけましたら幸いです。以上、よろしくお願い申し上げます。
一つ一つ順にご説明致します。
前提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
はまだ存在しないことを前提とします。
さて、上記を前提(初期状態)としまして、
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をまだしていない)状態です。 よって、起動しているコンテナは一行目のコンテナなので、まだ目的のコンテナではありません。
~/data/e-yota
が出来ているはずなので、これを元に e-yota
コンテナを再度新規に作成します。コンテナの作成方法は、私の示した方法でも @ixkaito さんの方法でもやっていることは同じで、2種類あります。@ixkaito さんの方法の方が wocker 本来の使い方でしょう。 ただし、どの方法を用いても上記の手順1の 直後 で行って下さい。 また、どれか一つ を行って下さい。 (他の方法を試す時は手順1の状態に戻してから行って下さい)
wocker ~ $ wocker run --name e-yota
@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
の解説を勉強して下さい。
-d
は バックグラウンドでの起動を指示しています。--name e-yota
で起動するコンテナの名前を指定しています。-p 80:80
でホスト(VM)の 80 ポートをコンテナ内の 80 ポートに割り当てています。-v ~/data/e-yota:/var/www/wordpress:rw
は、ホスト(VM)の ~/data/e-yota
フォルダをコンテナ内の /var/www/wordpress
にマップしています。最後の :rw
は読み書き可能を示していて、これはデフォルトと同じなので、省略可能です。:ro
とすると書き込み不可でマウントされます。echizenya/e-yota_image
は使用する Docker イメージを指定しています。wocker のデフォルトでは wocker/wocker
となっているところです。質問4.「そんなコンテナはない」と指摘される
wocker commit
の使い方が間違っています。
e-yota
のコンテナがあって、それをコミット(それからイメージを作成)する場合、正しくは、
wocker ~ $ docker commit e-yota echizenya/e-yota_20170224_copy
です。
@ailispaw さん。コメントありがとうございます! またお礼のメッセージが遅くなり、大変おそれいります。
@ailispaw さんから頂いたアドバイスにもとづき、自分でい試してみましたが、 どうもアドバイスいただいた通りに動きません。おそらく自分が触っている途中で 前提条件を変えてしまったからだと思います。さらにその前提条件についてどこを変えてしまったのか、 自分でも分からない状態になり、文章で表すことが難しくなってきました。
そこで @ixkaito さんにお願いをして、3月7日(火)現在のWocker内にあるイメージを見てもらい、 修正などをしてもらうことになりました。
ですので、3月7日以降にどのような結果になったのか、改めてコメントいたします。 以上、よろしくお願い申し上げます。
@echizenyayota お力になれなくて残念です。
@ixkaito 私の提供してしまった裏技のせいで、非公式の操作に対してサポートすることになってしまい、すみません。よろしくお願いします。
@ailispaw とんでもないです。いろいろとサポートしていただいてすごく助かってます。むしろ最近忙しさを言い訳に開発が滞っていることがとても申し訳ないです。
@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 さん。本当にありがとうございました。 今後ともどうぞよろしくお願いします!
いつもお世話になっております。
【質問の主旨】
現在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というイメージに変更することは可能でしょうか?
おいそがしいところ誠に恐れ入りますが、おてすきの時にでもご確認よろしくお願い申し上げます。