【初心者向け】dockerでコンテナを作ってみたい(Dockerインストール編)
こんにちは、ぴよまるです。
今私の会社ではVMwareで仮想サーバを乱立させる運用方法をしています。
自分の環境(mac)の上にESXiサーバを構築して、その上に仮想サーバを...ということもやれなくはないのですが、私のmacちゃんが耐えられるのか...?という心配の方が大きく、何か違う方法でやれないものか。と思っていた所でした。
世間のアプリケーション開発を行う企業ではコンテナ化がどんどん進み、仮想サーバの構築なんて遅くてやってらんない〜時代はコンテナっしょ?なんて話も聞くので、いい機会だしdockerを使ってコンテナの上でシステムを構築してみることにしました。
- 1. Dockerをインストールしよう!
- 2. Docker アカウントを作成しよう!
- 3 Docker Desktopアプリを立ち上げてサインインしよう!
- 4 Dockerが動くか確認しよう!
- 5. Dockerインストール完了
1. Dockerをインストールしよう!
コマンドプロンプトから以下のコマンドを使用して、インストールを行います。無事インストールが完了すると、/Application
にDockerのクジラアイコンができていると思います。
brew cask install docker
2. Docker アカウントを作成しよう!
hub.docker.com
Docker Hubからアカウントを作成します。
入力項目はDocker ID、E-mail、パスワードです。
作成を進めていくと、課金額設定の項目が出てきますが、今回は私はローカルでの検証目的なので、無料のものを選択しました。
ここは用途に合わせて選択してください。
3 Docker Desktopアプリを立ち上げてサインインしよう!
/Application
に入っていたクジラのアイコンを開くと、サインインの画面が出てきます。
ここに先ほど作成したアカウント情報を使ってログインします。
4 Dockerが動くか確認しよう!
デスクトップの右上にDockerのアイコンがあることを確認します。
そしたらコマンドプロンプトに戻って、念のためDockerが動いていることを、Dockerのバージョン確認のコマンドを使って確認します。
$docker --version:version Server: Docker Engine - Community Engine: Version: 19.03.12 API version: 1.40 (minimum version 1.12) Go version: go1.13.10 Git commit: 48a66213fe Built: Mon Jun 22 15:49:27 2020 OS/Arch: linux/amd64 Experimental: false containerd: Version: v1.2.13 GitCommit: 7ad184331fa3e55e52b890ea95e65ba581ae3429 runc: Version: 1.0.0-rc10 GitCommit: dc9208a3303feef5b3839f4323d9beb36df0a9dd docker-init: Version: 0.18.0 GitCommit: fec3683
19.03.12が入っているようですね。
ちなみにdocker
と打つと、使用可能なコマンドやオプションを一覧で出してくれます。
$docker Usage: docker [OPTIONS] COMMAND A self-sufficient runtime for containers Management Commands: builder Manage builds config Manage Docker configs container Manage containers context Manage contexts image Manage images network Manage networks node Manage Swarm nodes plugin Manage plugins secret Manage Docker secrets service Manage services stack Manage Docker stacks swarm Manage Swarm system Manage Docker trust Manage trust on Docker images volume Manage volumes Commands: attach Attach local standard input, output, and error streams to a running container build Build an image from a Dockerfile commit Create a new image from a container's changes cp Copy files/folders between a container and the local filesystem create Create a new container diff Inspect changes to files or directories on a container's filesystem events Get real time events from the server exec Run a command in a running container export Export a container's filesystem as a tar archive history Show the history of an image images List images import Import the contents from a tarball to create a filesystem image info Display system-wide information inspect Return low-level information on Docker objects kill Kill one or more running containers load Load an image from a tar archive or STDIN login Log in to a Docker registry logout Log out from a Docker registry logs Fetch the logs of a container pause Pause all processes within one or more containers port List port mappings or a specific mapping for the container ps List containers pull Pull an image or a repository from a registry push Push an image or a repository to a registry rename Rename a container restart Restart one or more containers rm Remove one or more containers rmi Remove one or more images run Run a command in a new container save Save one or more images to a tar archive (streamed to STDOUT by default) search Search the Docker Hub for images start Start one or more stopped containers stats Display a live stream of container(s) resource usage statistics stop Stop one or more running containers tag Create a tag TARGET_IMAGE that refers to SOURCE_IMAGE top Display the running processes of a container unpause Unpause all processes within one or more containers update Update configuration of one or more containers version Show the Docker version information wait Block until one or more containers stop, then print their exit codes
5. Dockerインストール完了
ここまででDockerのインストールが無事に完了です!次からはコンテナを作成していきたいと思います!
pythonでflaskを使ってwebサーバを建てたい
- 環境説明
- そもそもFlaskって何?
- flaskをインストール
- どんなファイルを作ればいいの?
- いざwebサーバを立ち上げ!ようとするも...
- flaskへのPathが通っていない?
- リトライ!→失敗 もう一度flaskについて学び直す
- virtualenvのインストール
- virtualenvで仮想環境を作成
- 仮想環境を有効化する
- 仮想環境へflaskをインストール
- routing.pyの実行
- 仮想環境の無効化
こんにちは、ぴよまるです。いよいよwebサーバを建てる時が来ました。
しかし、pythonは勉強をはじめたばかりで右も左もわかりません。そんな中での試行錯誤した点をまとめてみました。全くの初心者が知識豊富な人の記事を見てもついていけない時があります。そんな時にこういう初心者まるだしの記事がほしいなぁ、と自分では思っていたのでこういう初心者丸出し記事も作っていくことにしました。解答一直線の記事も別で作成します。
今回のサーバ構築は以下のような環境で行います。
そもそもFlaskって何?
全く知識のなかった私は、webサーバを構築する時にはFlaskというフレームワークを使うと良いのだということだけしか知らず、どのようにディレクトリ構成を組んでいったら良いのかすら検討がつきませんでした。
調べた所、前身にpythonファイル1個だけから成る「bottole」というwebのフレームワークがあり、それの機能拡張版のようです。ふむ。
とりあえず何事もインストールからだ!ということでインストールをしてみます。
flaskをインストール
$ pip install flask
無事にインストール完了です。
/Users/piyomaru/.pyenv/versions/3.8.0/bin/
と/Users/piyomaru/.pyenv/versions/3.8.0/lib/
にflaskが入っていることを確認できました。
どんなファイルを作ればいいの?
Flaskを動作させるためには、ルーティングをしてくれるpythonのファイルと、テンプレートとなるhtmlファイルがあればひとまず動くようです。
しかし、ベストプラクティスの構成で最初から作りたい!ということで以下を参考にしました。
qiita.com
めちゃめちゃ作るディレクトリ多い...。
ということで一旦ベストプラクティスの構成は諦めて、必要最低限の以下のディレクトリ構成にしてみます。
/Users `--piyomaru `--piyomaru `--python |--routing.py --- ルーティング用 |--static | `--index.html --- 一番最初に出力されるHTML `--templates `--echo.html --- ルーティングされた先の出力用
作成するファイルは3つ!
そんなわけで、作成するのはこの3つです。
- routing.py
- index.html
- echo.html
routing.py
ルーティング用のpythonファイルはこんな感じ。Flaskの静的ファイルのホームディレクトリはstaticになります。
from flask import Flask, render_template app = Flask(__name__) @app.route("/") def home(): return app.send_static_file('index.html') @app.route('/echo/<name>/<place>') def echo(name, place): return render_template('echo.html', name=name, place=place) app.run(port=5000, debug=True)
/static/index.html
次はstaticディレクトリに置く、index.htmlは以下のような感じで特に何も書いてません。文字が表示されるだけ。
<!DOCTYPE html> <html lang="ja"> <head> <meta charset="utf-8"> <title>Index</title> </head> <body> Welcome to my home page!!! </body> </html>
/template/echo.html
最後にTemplateディレクトリのecho.htmlです。こっちはちょっとギミック入り。echo.htmlに引数name
とplace
を渡すと、その引数を使った文字が表示されます。
<!DOCTYPE html> <html lang="ja"> <head> <meta charset="utf-8"> <title>Flask test</title> </head> <body> Hello {{ name }}! Welcome to {{ place }}! </body> </html>
いざwebサーバを立ち上げ!ようとするも...
さぁ、routing.pyを実行してwebサーバを立ち上げよう!とするものの...
$ python routing.py Unable to import 'flask' pylint(import-error) [3,1]
なんでなんで!確かにインストールしたのに!flaskのimportができません...。
flaskへのPathが通っていない?
この辺りまで来ると、~/.bash_profile をいじるのに抵抗がなくなってきました。
さくっとflaskが入っていた、/Users/piyomaru/.pyenv/versions/3.8.0/bin/
と/Users/piyomaru/.pyenv/versions/3.8.0/lib/
をパスに追加します。
リトライ!→失敗 もう一度flaskについて学び直す
$ python routing.py Unable to import 'flask' pylint(import-error) [3,1]
ちーん。うんともすんともです。何か間違っている気がするので、もう一度ここでflaskについての情報を探します。
すると、こんな記事を見つけました。
qiita.com
どうやら、プロジェクトごとに個別の実装環境を構築するようです。
virtualenvのインストール
virtualenvはシステムの中に分離されたPythonの仮想環境を作るためのソフトウェアです。つまりここに使用するpythonとflaskが同居していれば、pythonがflaskを見つけられて動くようになるということですね。また、いつもと違うバージョンでシステムを作りたい時にも重宝すると思います。
pip install virtualenv
インストールが完了。
virtualenvで仮想環境を作成
それでは仮想環境を作っていきます。まずは作成するディレクトリまで移動します。
cd /Users/piyomaru/piyomaru/python
そしたら、下記のコマンドでPython仮想環境を作成します。
python -m venv env
pythonディレクトリの中にenvというディレクトリが作成されます。この中にpythonも入っています。
今のディレクトリ構成はこんな感じ。
/Users `--piyomaru `--piyomaru `--python |--routing.py |--static | `--index.html |--templates | `--echo.html `--env
仮想環境を有効化する
以下のコマンドで仮想環境を立ち上げることができます。
$source env/bin/activate (env)$
$マークの前に(env)がついていれば成功です。
仮想環境へflaskをインストール
もう一度、今度は仮想環境の方へflaskをインストールします。
pip install flask
無事にインストール完了です。
routing.pyの実行
python routing.py * Serving Flask app "routing" (lazy loading) * Environment: production WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. * Debug mode: on * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit) * Restarting with stat * Debugger is active! * Debugger PIN: 830-317-826
うおおお!動いた!サーバが立ち上がりました!ちなみに書いてある通りCTRL+Cでサーバはとまります。
さて早速ブラウザで表示されるか見てみよう。
http://127.0.0.1:5000/
で接続したところ、無事にWelcome to my home page!!!と歓迎してくれました。
そしてhttp://127.0.0.1:5000/echo/Piyomaru/Japan
で接続すると、上手くルーティングしてくれてHello Piyomaru! Welcome to Japan!と日本に来たことを歓迎してくれます。
仮想環境の無効化
使い終わった後は一応、仮想環境の無効化をしておきます。
deactivate
無事になんとかflaskを使用したwebサーバの構築は成功です。いやぁ、長かったなぁ...。
macのターミナルでコマンドが効かない
こんにちは、ぴよまるです。
pythonのパスを通そうと、~/.bash_profileをいじっていたら、macのターミナルでls
やvi
ができなくなっていることに気がつきました。
ls
なんてめちゃくちゃ使うのに困った...!となったので、復旧方法について書いておきます。
$ ls -bash: : command not found
ああああ!なんで!ディレクトリの中身を見せてください!
まずは初期値に戻す
teratail.com
ここを参考に、以下をターミナルで入力し、初期のパスに戻します。
$ export PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin
pythonで設定していたパスをもう一度記載
$ vi ~/.bash_profile export PYENV_ROOT="$HOME/.pyenv" export PATH="$PYENV_ROOT/bin:$PATH" eval (pyenv init -)
変更内容を適用
source ~/.bash_profile
これで完了!
これでまたls
を使ってディレクトリの中身を見られるようになりました。
ls
意外にもsudo
ができなくなるみたいです。困っちゃいますね。
Pythonのバージョンが変わらないときの対処法
Pythonをinstallした後にpyenv global 3.8.0
をしてもバージョンが2.6.1のままだ...!
どうしよう!というような感じでつまったので、対応方法について記載しておきます。
ちなみに私の環境はOS:mac OS Catalina 10.15.4です。(2020/8/11 現在)
バージョン違いが発覚
pythonを使って、WEBサーバを立ち上げようとしたのですが、以下のコマンドが通らず...。
$ python -m http.server 8000
おかしいなぁ、と思って調べた所、上記の記述はpython3でWEBサーバを立ち上げるものだったことが発覚。
python2ではこのように書きます。
$ python -m SimpleHTTPServer 8000
こっちだとサーバが起動したため、ここで導入したはずのバージョンと起動しているバージョンが違うことに気づきました。あほのこや。
バージョンの確認
現状を確認するためにバージョン確認コマンドを打ちます。
$ python -V Python 2.6.1
うわぁ、やはりPython2で動いていらっしゃる。
pyenvを使用してpythonのバージョンを切り替える
pyenvとはPythonの実行環境を管理してくれる便利ツールです。pyenvの導入は別記事で書いているのでこちらを参照ください。
grwm-itinfra.hatenablog.com
バージョンの切り替えコマンドを打った後、バージョンを確認してみると...。
$ pyenv global 3.8.0 $python -V Python 2.6.1
変わっていない!なぜ!
~/.bash_profileを書き換える
ここでいろいろなWebページを参考に、自分と全く同じ状況の方を見つける。
qiita.com
あった!これや!といそいそとviで~/.bash_profileを編集します。自分の場合、pyenv init -
だけだと変わらなかったので以下の3行を追記。
export PYENV_ROOT="$HOME/.pyenv" export PATH="$PYENV_ROOT/bin:$PATH" eval (pyenv init -)
書き換えた後に適用するためsource ~/.bash_profile
を実行。
そしてもう一度バージョン変更&確認をしたところ...
$ pyenv global 3.8.0 $python -V Python 3.8.0
おおおお!!変わってる!!もうQiita様に足向けて寝られない!
ということで、無事に使いたかったバージョンのpythonを使えるようになりました。
【初心者向け】Pythonのインストール手順(for mac)
Pythonとは?
Pythonは、Webシステムや組込みシステムなど様々な分野で利用されている言語です。Pythonでは、多くのWebシステムが開発されており、「Django」「Bottle」「Flask」など、たくさんのフレームワークが準備されています。
Python以外だと「Apache」や「nginx」などがフレームワークでは有名ですね。
今回は「Flask」を利用したWebサーバを建てることを目標にインストールから進めていきます。
Pythonをインストールしよう
今回はmac OS X の環境へインストールしていきます。実はCatalinaの場合は、すでにPythonは入っていますが、最新のバージョンを入れたいのでインストールし直します。
pkgからGUIでインストールする方法もありますが、今回はターミナルからCUIでインストールしていきます。
1. ターミナルを起動
アプリケーションのユーティリティの中にターミナルがあるので、起動しましょう。
2. Homebrewをインストール
HomebrewはMac OS Xで使用できる、ソフトウェアの導入を手助けしてくれるパッケージ管理システムです。
以下のサイトよりインストール用のコマンドを拾ってきます。
https://brew.sh/index_ja
拾ってきたコマンドをターミナルへ入力します。
3. Pyenvをインストール
pyenvとはPythonの実行環境を管理してくれる便利ツールです。こちらも入れておいた方が後々役に立つので入れておきましょう!
$ brew install pyenv
pyenvを使って、インストールできるpythonのバージョンを確認できます。
$ pyenv install -l Available versions: 2.1.3 2.2.3 2.3.7 2.4.0 2.4.1 2.4.2 2.4.3 2.4.4 2.4.5 2.4.6 2.5.0 2.5.1 2.5.2 ... ...
いっぱい出てきますね...。
4.Pythonをインストール
それでは先ほど確認した、利用できるバージョンのPythonをインストールしてみましょう!
$pyenv install 3.8.0
処理が全部終わればPythonがインストールできているはずです。
さあ、バージョンを確認してみましょう!
$python -V Python 2.6.1
...あれぇ?あれぇ!?入れたバージョンと違うのですが!?
慌てることなかれです。MacにもともといたPythonが悪さをしているだけです。
パスを追記してあげれば問題なく動きますよ!
(動かすまで2時間ぐらい四苦八苦したので、ここは別の記事でも書いておきます。
ここでは問題なく動くようになるまでの一連の手順を書いておきます。)
grwm-itinfra.hatenablog.com
5. ~/.bash_profileの編集
(1)ターミナルで~/.bash_profileを開く
vi ~/.bash_profile
(2)vi モードになったら[ i ]キーを押してinsertモードに切り替え、以下の記述を追記
$ export PYENV_ROOT="$HOME/.pyenv" $ export PATH="$PYENV_ROOT/bin:$PATH" $ eval (pyenv init -)
(3)[esc]キーを入力後、[:wq] を入力して変更内容を保存
Linuxを触っていると脳死でviで編集できてしまうと思いますが、このブログではプログラミング初心者が脳死でできるようできるだけ細かく書いてます。
(4)変更した内容を適用
$ source ~/.bash_profile
これでパスは通ったはずです。
6. 変更できるバージョンの確認
$ pyenv versions *2.6.1 3.8.0
あとはバージョンを変えるだけです!