Dockerの大まかなイメージから自分が作成したものをDockerhubにあげて、インストールして実行まで
参考:http://docs.docker.jp/index.html
今後必要url
dockerhub
※ここにあるイメージを使ってコンテナ作成したり、ここのイメージを親クラスとして新しいイメージを作成するために。
Dockerで行うことの大まかなイメージ
まず初めに『Docker』というものは、『コンテナ』というものを使います。
その『コンテナ』を使うために必要なことがたくさんあります。
その必要なことをここで書いていきたいと思います。
ここから『コンテナ』の道のりを話していくので、一度頭の中を真っ白にしてください。
まず土台となる『マシーン』なるものが必要になります。
いわば作業する土台です。
それは、Web開発している方におなじみ『VirtualBox仮想マシン』です。
仮想マシンで捉えにくければマシーンで大丈夫です。
ウィーン、ウィーンって操作するあのマシーンです。
次ですが、その『マシーン』の中で動かす『コンテナ』なるものが必要になってきます。
早速今回の『コンテナ』が出てきました。
しかし、このコンテナを作成するのにもまだまだ少しひと手間が必要です。
順番でいうと
『Dockerfile』→ 『Dockerimage』→ 『コンテナ』以下図参考
いきなり沢山の用語が出てきてこんがらがるかもしれませんが、引かないでください。
まず、Dockerfileとはいわば設計書の本体だと思ってください。
そしてその本体をコピーして色々なところで使います。
そのコピーされるものがDockerimageだと思ってください。
そのコピーを使って実際動く『コンテナ』を作成、動かす感じです。
で、動かすための環境にマシーンなるものが大元にあると行った感じ。
なので、まとめると
マシーンの中にDockerfileを作って、DockerfileからDockerimageなるものを作成して、コンテナをたてて、動かすです。
ちなみに、『Dockerfile』は自分で作成することも可能ですが、誰かが使ったものを使うことも可能です。
自分で作成すると書いてはいますが、本当の一からだとかなりしんどいはずです。
なので一般的には、公式などが作成したものを『ベース』にして追加して作成していく感じです。
もちろん自分が追加作成したものも、誰かが追加作成したものを『ベース』にすることもできます。
その公式が作ったもの、自分で作ったもの、他の人が作ったベースがあるところが、Dockerhubです。
ここまででコンテナの話をしてきましたが、このコンテナで知っておかないといけない大事なことがあります。それは、コンテナ一つは一つのサーバーとしてしか扱えないということ。
世の中のサービスはWebサーバー、データーベースサーバー、メールサーバー色々あって、それを連携させていますが、ここでのコンテナも同じようにサーバーを一つ一つ作るようにコンテナを一つ一つ作らないといけません。
しかし、それだと毎回大変ですし、いつもなら忘れないのに、忘れてうまくいかないなどがあります。
なのでDockerにはこの作業を書いておく手順書を用意して、その手順書の実行を行えばそれ通りに行ってくれるようにしてくれるものがあります。
それがDocker Composeなるものです。以下図参考
ちなみにこれ以降に関してDocker Composeのお話をしませんのでご了承ください。
※以下でDocker Composeの話は行なっていません。
では、色々Dockerのイメージが少なからずつかめたので次は早速使っていきたいと思います。
最初は最初のマシーンを入れるまでの作業ぐらいに思って進めていただければ嬉しいです。
使い方
まず初めに
※環境はmacです。
- Macのバージョンの確認を行います。DockerはOS X 10.8 「Mountain Lion」以上のバージョンが必須なので、そうでない場合マックのOSのバージョンをあげてください。
- https://store.docker.com/editions/community/docker-ce-desktop-mac でDockerMacのインストール(intelチップの方)
以下いるか入らないか不安になってきたので一旦斜線します
- 以下のコマンドでDockertoolboxのインストール
$ brew update
$ brew install docker-toolbox --cask
※少し前までは『$ brew cask install docker-toolbox』
参考:https://www.mathkuro.com/mac/brew-cask-command-error/
再インストールしたい場合は以下のコマンドを
$ brew cask reinstall docker-toolbox
参考:https://qiita.com/Ryosuke-Hujisawa/items/67f9dff2fadd729165dc
- virtualboxが自分のパソコンに入っていようが、いまいが最新でなければインストールして最新にする。結構大事見たい。 インストールしなおせば勝手に上書きされて最新になるみたい。 ダウンロードはこちら→ https://www.virtualbox.org/wiki/Downloads
いよいよ
インストールしたDockerのアイコンクリックで問題なさそうです。
- アプリケーションにDocker Quickstart Terminalいるはずなのでクリックして起動。すぐなければDocerフォルダとかの中みるとあるかと思う。でここからは打つコマンド入れながら書きます。と思っていましたが入れる環境で異なるみたいです。アプリケーション内に以下のアイコンがあればクリックしてください。そうするとスタートできます。
$ docker-machine ls
でdocker-machine入っているのないかな?ってみる。defaultってやつ入ってないかなって
入ってなかったら以下のコマンド打って、Dockerを操るdefaultマシーンを入れる
$ docker-machine create --driver virtualbox default
※このコマンドでVirtualBox仮想マシンを作成・起動してる。結構時間かかる。通信具合でも異なるかもですが、2時間ぐらいかかりました。この時にvirtualboxのGUIを開いていればインストールと同時にdefaultのものが以下画像のようにぴょこんっと出てきます。
ちなみに次起動する時は$ docker-machine start default
より、
virtualboxのGUIから起動する方が確かそうです。。きっと使うものによって変わるかもしれません。
そのあとに上記のアプリケーションに**Docker Quickstart Terminal起動した方が確かそう…(アプリケーションのDockerの中に入っている、以下のもの)
次に以下のコマンド打って環境変数のセットを行う
$ docker-machine env default
それだけではダメで以下のコマンドで環境変数マシンにセットする。今後行わないようにする設定もできるみたいですが、今はシンプルに覚えたいのでそういうのは書きません。
$ eval "$(docker-machine env default)"
これである程度できたのでDockerhubのリポジトリからimage取得コンテナ実行まで行う以下のコマンドうつ。
$ docker run hello-world
説明:run=コンテナ作成実行 hello-world=Dockerhubにあるimage
本当はタグの指定するのもありだけど指定しなければ最新の持ってくるらしいのでお試しないらないかと…
ちなみに出力は以下のようなものがでればOKです。
Hello from Docker!
This message shows that your installation appears to be working correctly.
To generate this message, Docker took the following steps:
1. The Docker client contacted the Docker daemon.
2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
(amd64)
3. The Docker daemon created a new container from that image which runs the
executable that produces the output you are currently reading.
4. The Docker daemon streamed that output to the Docker client, which sent it
to your terminal.
一段階終わってとりあえず休憩
$ docker run docker/whalesay cowsay boo
※booのところ色々変えれば色々くじらさんがつぶやいてくれる。
$ docker run sachikokame/docker-whale
※勝手に色々喋るくじらさん
$ docker run -d -p 8000:80 nginx
※nginxのイメージをポート8000で自分のローカルのwebブラウザで見れるようにする。
webブラウザに上にwelcom nginxってでる。$ http://<自分のipアドレス>:8000/
ちなみに自分のipアドレスは$ docker-machine ip default
で確認できる。ちなみにポートが4000なら$ http://<自分のipアドレス>:4000/
みたいな感じで。
自分でイメージを作成してDockerhubにあげて、あげたものをインストールして実行まで
※Dockerhubのアカウントない場合作らないとこれはできません。
こちらで登録を→ https://cloud.docker.com/
※全てをかくと読むのがいやになるので流れを書きます。詳しくは以下のurlに乗ってます
(簡単な方)
http://docs.docker.jp/docker-for-mac/step_four.html
と
(難しい方)
http://docs.docker.jp/get-started/part2.html
- ディレクトリ作成
$ mkdir mydockerbuild
- ディレクトリ移動
$ cd mydockerbuild
- 大事なDockerfileをつくる
$ touch Dockerfile
- 使いたいファイルもあれば作る
$ touch 作りたいファイル
- 開いて必要事項の記述、Dockerfile、使いたいファイルなど。ファイルは記入終わったらcommand+Sで保存することを忘れない
$ open -e Dockerfile
- イメージを作成、イメージの名はfriendlyhello。別になんでもいいとは思います。このイメージ名はどうせあとで変更するので。最後の.も忘れないように
$ docker build -t friendlyhello .
- 作成したイメージがあるかの確認一覧にfriendlyhelloが入ればイメージの作成無事にできてる。
$ docker images
先に行く前にDockerhubでのリポジトリを作らないと。送る先がなければ送れない。
https://hub.docker.com/
に行き、以下の感じでリポジトリの作成を
- Dockerhubにイメージを送るためタグ付けとイメージ名の変更をする。 ※最後のlatestはタグ名。無難に。
docker tag <名前を変更したいイメージ名> <自分のDockerhubのユーザ名>/<作成したリポジトリ名>:latest
又は
docker tag <名前を変更したいイメージのid> <自分のDockerhubのユーザ名>/<作成したリポジトリ名>:latest
どっちでも行けそう?
- dockerhubにログインする
$ docker login -p=<Dockerhubのパスワード> -u=<Dockerhubのユーザー名>
※Login Succeededって最後に出ればログインできたということ。
- 作ったリポジトリにイメージを上げる、最後のlatestのタグは違うものにした場合変更してください。
$ docker push <自分のDockerhubのユーザ名>/<作成したリポジトリ名>:latest
- pushが無事にできたら今あるものをイメージid指定で削除する。削除しないと持ってこれないから。
$ docker rmi -f <Dockerイメージid>
- 自分が作成したイメージの取得、コンテナ作成、実行。作ったものによってまちまち
$ docker run <自分のDockerhubのユーザ名>/<作成したリポジトリ名>
とか
$ docker run -p 4000:80 <自分のDockerhubのユーザ名>/<作成したリポジトリ名>:latest
とか
こんなエラーが出たら1
<エラー内容>
docker: Error response from daemon: driver failed programming external connectivity on endpoint hungry_swartz ………: Bind for 0.0.0.0:8000 failed: port is already allocated.
解決策
以下のコマンドで動いているの表示して
$ docker ps
動いている IDを指定して終了させる
$ docker kill a1ssdsf612b20f //こんな感じ
消したの確認できたら再度試したいコマンドを実行させる。
こんなエラーが出たら2
<エラー内容>
Couldn't connect to Docker daemon. You might need to start Docker for Mac.
マシンを動かせばいいので
$ docker-machine start default
あらかじめ作っておいたマシーンの再スタート今回のマシーン名はdefault
$ docker-machine env default
$ eval "$(docker-machine env default)"
次に環境変数のセット
こんなエラーが出たら3
<エラー内容>
ERROR: for nginx Cannot start service nginx: b'driver failed programming external connectivity on endpoint nginx (893cfd4931f8f898adb32abb2a9a94ad50c951e4fa7f869605d86f1182802f3a): Bind for 0.0.0.0:80 failed: port is already allocated'
他のでこのポート使っているようなので
$ docker ps
のコマンド打って起動中のものを確認おそらく PORTS のところで0.0.0.0:80なのあるからその子を消すためにそのコンテナID今回<6cf85db82a03>指定して終了させる
$ docker stop 6cf85db82a03
最後にパッとみたいコマンド集(例)
$ docker-machine ls ドッカーマシン一覧の確認
$ docker-machine stop default デフォルトのドッカーマシンのストップ
$ docker-machine start default デフォルトのドッカーマシンのスタート
$ docker images 自分のDockerマシーンで作成しているイメージ一覧みたい時に
$ docker rmi -f <削除したいイメージid> イメージの削除(削除しないと同じものdockerhubからインストールできないとか)
$ docker rmi $(docker images) イメージ全削除
$ docker run -p 4000:80 friendlyhello をポート4000でfriendlyhelloのイメージをフォアで実行
$ docker run -d -p 4000:80 friendlyhelloをポート4000でfriendlyhelloのイメージをバックで実行
$ docker stop <終わらせたいコンテナid> 指定したコンテナを終了させる。
$ docker kill <終了したいコンテナid> 終了したいコンテナを終了させる
$ docker rm <削除したいコンテナid>
$ docker rm $(docker ps -a -q) 全ての終了しているコンテナの削除$(docker ps -a -q)はコンテナのid達の集約
$ docker ps 実行中コンテナのみ表示
$ docker ps -a 全てのコンテナの表示
$ docker container ls 作成したDockerコンテナの一覧みたい時に
$ docker-machine ip default ipアドレスの確認defaultは現在使ってるマシーン名
$ docker logs acf008c9058b acf008c9058bにはコンテナのIDを入れる
$ docker inspect web webはイメージ名 ボリュームがホスト上で使っている場所を探す
$ docker image prune 不要な宙ぶらりんイメージの削除
https://docs.docker.jp/config/pruning.html#prune
Dockerfileメモ
- 行うこと→変数に値入れて、ログ出しているだけの例
ENV HOGE hoge
RUN ["bin/bash", "-c", "echo $HOGE"]
RUN /bin/bash -c "HOGE=hoge; echo $HOGE"
ENV HOGE="hoge"
RUN echo $HOGE
- 行いそうなミス
('ls') #「Shift」+「7」
$ docker-machine ls ドッカーマシン一覧の確認
$ docker-machine stop default デフォルトのドッカーマシンのストップ
$ docker-machine start default デフォルトのドッカーマシンのスタート
$ docker images 自分のDockerマシーンで作成しているイメージ一覧みたい時に
$ docker rmi -f <削除したいイメージid> イメージの削除(削除しないと同じものdockerhubからインストールできないとか)
$ docker rmi $(docker images) イメージ全削除
$ docker run -p 4000:80 friendlyhello をポート4000でfriendlyhelloのイメージをフォアで実行
$ docker run -d -p 4000:80 friendlyhelloをポート4000でfriendlyhelloのイメージをバックで実行
$ docker stop <終わらせたいコンテナid> 指定したコンテナを終了させる。
$ docker kill <終了したいコンテナid> 終了したいコンテナを終了させる
$ docker rm <削除したいコンテナid>
$ docker rm $(docker ps -a -q) 全ての終了しているコンテナの削除$(docker ps -a -q)はコンテナのid達の集約
$ docker ps 実行中コンテナのみ表示
$ docker ps -a 全てのコンテナの表示
$ docker container ls 作成したDockerコンテナの一覧みたい時に
$ docker-machine ip default ipアドレスの確認defaultは現在使ってるマシーン名
$ docker logs acf008c9058b acf008c9058bにはコンテナのIDを入れる
$ docker inspect web webはイメージ名 ボリュームがホスト上で使っている場所を探す
$ docker image prune 不要な宙ぶらりんイメージの削除
https://docs.docker.jp/config/pruning.html#prune
- 行うこと→変数に値入れて、ログ出しているだけの例
ENV HOGE hoge
RUN ["bin/bash", "-c", "echo $HOGE"]
RUN /bin/bash -c "HOGE=hoge; echo $HOGE"
ENV HOGE="hoge"
RUN echo $HOGE
- 行いそうなミス
('ls') #「Shift」+「7」
ではなく
(`ls`) #「Shift」+「Option」+「_」
コマンドの詳しい説明→
[全て]
http://docs.docker.jp/engine/reference/commandline/index.html
[run]
http://docs.docker.jp/engine/reference/commandline/run.html
[build]
http://docs.docker.jp/engine/reference/commandline/build.html
そのほか
https://docs.docker.com/engine/reference/builder/#usage
最後に
今後は自在にDockerfileを書きたい、自在にバーチャル世界を作りたい( ・ὢ・ )
よろしくお願いします。
sachikomemo
docker exec -it [Dockerコンテナid] bash
mysql -u root -p mysqlログイン
hostname -i
docker-compose up
docker-compose up --build
docker-compose up --build -d コンテナの中に入りたい時に使う。
docker exec -i -t コンテナ名 bash コンテナの中に入る
Author And Source
この問題について(Dockerの大まかなイメージから自分が作成したものをDockerhubにあげて、インストールして実行まで), 我々は、より多くの情報をここで見つけました https://qiita.com/sachiko-kame/items/35e0cf07d117c3b92613著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .