タケハタのブログスマートフォン用の表示で見るタケハタのブログプログラマの生き方、働き方、技術について雑多に書いていくブログです。最近Kubernetesを覚えようと触っているのですが、その前段階としてDockerの復習もしたので、軽くまとめておきます。ローカルで構築する手順的な部分だけで、動かすこと優先でやっているので、それぞれの要素も説明とかは浅いです。すっ飛ばしてる内容もあるので、詳細は別途調べてもらえればと思います。参考にした資料は下記の書籍です。PCのローカル環境で実行します。下記のサイトから、ダウンロードしてインストールしてください。手順や確認方法も載っています。docs.docker.comコンテナとイメージDockerで作る仮想環境は、「コンテナ」という単位で管理します。そのコンテナを作るのに、イメージというものを使います。イメージ・・・コンテナを作るための設定や情報が入ったものみたいなイメージ。それぞれの詳細と作り方をもうちょっと説明します。Docker上で動かすサンプルプログラムまず、Docker上で動かす動作確認用のサンプルプログラムとして下記を作っておきます。}}イメージの作成まずはコンテナの元となるイメージを作成します。いう名前のファイル(拡張子なし)を作成して、下記を記述してください。]イメージは「コンテナを作るための設定や情報が入ったもの」と前述しましたが、その設定などがDockerfileに入っています。golang:1.9のFROMは、作りたいイメージのベースとなるイメージを設定しています。今回はGoを動かす環境を作りたいため、golangというイメージを指定しています。Hubというところからダウンロードされます(Dockerイメージの上がっているGitHubみたいなものです)。:の後の数字はは「タグ」と言われるもので、Gitのタグと同じようなものと考えて良いと思います。今回は1.9のバージョンのタグを使います。/sampleRUNはDockerイメージのビルド時に実行される処理です。サンプルプログラムを配置するための「sample」というディレクトリを作成しています。COPYはホスト(ビルドを実行している端末)にあるファイルをコンテナにコピーします。ここではビルドを実行しているディレクトリ内にある「hello.go」というファイルを先ほどRUNで作成した「sample」というコンテナ内のディレクトリにコピーします。]CMDは、Dockerコンテナを起動する時に、コンテナ内で実行する処理になります。ここでは起動時に先ほどコピーしておいた「hello.go」を実行しています。/sample/hello.goをスペースで区切って、分離して配列として書いているような形になります。このDockerfileを元に、Dockerイメージをビルドします。下記のコマンドで実行できます。.ntakehata/hello:latestの部分はコンテナの名前と、タグの名前(:から後ろ)になります。.はDockerfileの置いてある場所です。ここで指定したディレクトリからDockerfileという名前のファイルを探して、ビルドを始めます。下記のように表示されればビルド成功です。ntakehata/hello:latest作られたイメージは、下記のコマンドで確認できます。3hello.goを実行した状態のコンテナを作ることができます。前述したようにあくまでこれはイメージで、これだけでは何も動かないので、次は実際にコンテナを作ってアクセスしてみます。いうコマンドで、コンテナを起動できます。作成するコンテナ名を指定します。コンテナ名は省略した場合は、自動でランダムな名前が付けられます。いうイメージ名を指定しています。これで、「ntakehata/hello:latestのイメージを元にhelloというコンテナを作り、バックグラウンドで実行する」ことができます。いうコマンドで確認できます。helloこのコンテナは、前述の1/sampleというディレクトリを作成2hello.goを/sampleにコピー3hello.goを実行が実行され、hello.goが起動した状態のコンテナが自分のPCの中に作られたイメージです。アクセスしても接続できません。このアクセスをする方法を、これから説明します。Dockerコンテナの停止その前に、先ほど起動したコンテナを一度停止しましょう。いうコマンドで、コンテナIDかコンテナ名を指定します。8d6565e76f208d6565e76f20下記はコンテナ名で実行した例です。helloポートフォワードさて、それではコンテナ上で起動したhello.goで立てたサーバーにアクセスする方法です。これには「ポートフォワード」という機能を使います。下記のコマンドで、もう一度コンテナを起動してください。いうオプションを追加しています。これは「ポートフォワード」という機能を使うためのもので、この例で言うとローカル環境の9000ポートを経由して、コンテナhelloの8080へアクセスできるようになります。前が受け付けるローカル環境のポート、後が流したい先のコンテナのポートです。下記のcurlコマンドで9000ポートにアクセスすると、コンテナ上のhello.goにアクセスできているのが分かります。Hubというイメージを置いて公開できるGitHubのようなサイトがあります。こちらは必須ではないですが、もしこちらに置きたい場合は、下記のコマンドでPushできます。[docker.io/ntakehata/hello]Dockerfileで指定するイメージも、こちらに置いてあるものを指定することができます(先ほどのgolangのイメージも置いてあります)。HubにPushしてあるので、良ければ使ってみてください。Composeで複数コンテナの起動ここまででhello.goの起動まではできました。先ほどのやり方では1コンテナずつの起動しかできないので、今度は複数コンテナを同時に起動してみます。実際の環境構築はプログラムだけでなく、nginxやMySQLといったミドルウェアも一緒に必要になってくるのでこちらの方法を使います。Composeというものを使います。いう設定ファイルを書き、その内容に則ってコンテナを起動するものです。単一のコンテナの起動を試してみる下記の内容で、docker-compose.ymlという名前のファイルを作ってください。Composeのバージョンです。下に作成するコンテナの設定を書いています。今回は前述のコマンドラインで起動してたのと同じく、helloという名前で作成します。それぞれコンテナの元になるイメージ、ポートフォワードの設定を記述しています。コマンドを実行します。doneこれで先ほどコマンドで起動していたコマンドと同じものが立ち上がっています。docker_hello_1ちなみに名前だけ「docker」が付いたりと少し変わりますが、先ほどのコマンドラインで作成したのと同じコンテナが作られています。Composeで作成したコンテナの削除は、下記で実行します。docker_default複数コンテナを作成してみる今度は本題で、複数コンテナを一気に作成します。docker-compose.ymlを下記のように変更してください。80:80servicesの下に「nginx」という名前のコンテナを追加しました。Hub上にあるnginxのコンテナを作るためのイメージで、ここではローカルの80番ポートからコンテナ内の80番ポート(nginxのデフォルトポート)にポートフォワードしています。このように、servicesの下にコンテナの設定を羅列していくことで、複数のコンテナを同時に作成、起動することができます。コマンドで実行します。donehelloとnginx、2つのコンテナが起動しました。下記でhelloの動作確認。World!!そして下記で80番ポートにアクセスすると、nginxのデフォルトページが表示されると思います。アクセスしても、確認できると思います。次はKubernetesとりあえずDockerで基本的な環境を作るところまでできました。次はこれと同等の環境をKubernetesで作っていきます。はてなブログProプログラマとしての生き方とか、働き方とか、技術のことを雑多に書いていきます。CODE-セブンスコード-」のバックエンド技術DockerでMySQLを起動した時はバージョン差異に注意ブログの技術記事で書く内容をパターン分けしてみた2019年を雑に振り返る月別アーカイブはてなブログをはじめよう!take7010さんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。