最近web側の開発をやってなかったのと、友人が勉強したいということで、web apiのサーバーを作ってみることにした。
友人のスキルセットと解析系の処理をするつもりだったのでpythonを選択し、なんとなくfast apiがいいのかなと思いfast apiでapiサーバーを立てることに。
また、共有を楽にしたかったのでDockerを用いた。
今回は、ひとまず公式のDockerイメージを動かすところまで。
なお、執筆は2022年5月だが作業は1月末に行っている。
公式ドキュメントに公開されているDockerイメージを使ったやり方がある。
Dockerの起動でいくつか躓いたのでメモ。
インストーラー をDLしてきて、インストール。。。
Error
Errorに書かれているリンク先にある対応をしてみたが、ダメだった。
BIOS のCPU設定で「Intel Virtualization Technology」を有効化することで動いた。(ものによっては「Intel VT-x」らしい)
そして、Errorのおかわり。
リンク先の「手順 4 - Linux カーネル更新プログラム パッケージをダウンロードする」実施で解決し、Dockerが動かせるようになった。
FROM tiangolo/uvicorn-gunicorn-fastapi:python3.7
COPY ./app /app
このようなディレクトリ構造になっていればOK
appやmainにしたくない場合はDockerfileでCMDを書けばいいはず!
.
├── app
│ └── main.py
└── Dockerfile
$ docker build -t fastapi_image .
ちなみにdocker buildがDockerfileをもとにイメージをビルドするコマンド
https://docs.docker.jp/engine/reference/commandline/build.html
-t はtagのことでイメージに名前が付けられる。
$ docker run -d --name fastapi_container -p 80:80 fastapi_image
docker runで実行している。
https://docs.docker.jp/engine/reference/commandline/run.html
--name: コンテナの名前
-p(--expose): ポートの公開と露出(コロンの左側がホストで右側がコンテナのポート)
-d: バックグランドで実行
http://127.0.0.1/items/5?q=somequery
をブラウザで開く。
-p について補足
前項の起動コマンドでは、コンテナの80番ポートをホストの80番ポートにバインド(割り当て)をしている。
下記のように変えると、ホスト側の8080ポートとバインドされるので、urlがhttp://127.0.0.1:8080/items/5?q=somequery になる。
$ docker run -d --name fastapi_container -p 8080:80 fastapi_image
なお、ホスト側の80番ポートについてはイメージの仕様で決まっている。
ひとまず動かすところまで。次は、開発環境を整えてみます。