Docker の Alpine で Bottle を使う


こちらと同様のことを行いました。
AlpineでBottleを使う

イメージの作成

docker run -dit -p 49153:3000 --name bottle_app alpine

Alpine に接続

docker exec -it bottle_app ash
$ docker exec -it bottle_app ash
/ # 

必要なソフトのインストール

/ # apk add python3 py3-pip tree
/ # pip3 install bottle
/ # mkdir /home/bottle
/ # cd /home/bottle
/home/bottle # 

次の2つのファイルを作成します。

/home/bottle # tree
.
├── server.py
└── views
    └── sample.html
server.py
from bottle import route, run, template
import random

@route('/')
def index():
    images = [
        "fmervo000001gsle.jpg",
        "rn2ola000000lk6e.jpg",
        "rn2ola000001gogf.jpg",
        "6fujishigai_s_s.jpg",
        "rn2ola000000lk6r.jpg",
        "5fujikawarakuza_s_s.jpg"
        ]

    url_base = "https://www.city.fuji.shizuoka.jp/page/gazou/fmervo000001dsro-img/"
    url = url_base + random.choice(images)

    return template('sample', url=url)
#
run(host="0.0.0.0", port=3000, debug=True)
views/sample.html
<!DOCTYPE html>
<html lang="ja">
<head>
<meta http-equiv="CONTENT-TYPE" content="text/html; charset=utf-8" />
<title>富士山</title>
</head>
<body>
<div class="container">
<p>富士山 航空写真</p>
<blockquote>
<img src="{{url}}" />
</blockquote>
<p>Courtesy: <a href="https://www.city.fuji.shizuoka.jp/page/gazou/fmervo000001dsro.html">富士市</a></p>
</div>
Jul/05/2021<br />
</body>
</html>

次のようにホストからコピーすることもできます。
CONTAINER ID は変更して下さい。

docker cp server.py 01dd1f42040a:/home/bottle
docker cp views 01dd1f42040a:/home/bottle/

CONTAINER ID の調べ方

$ docker ps -a
CONTAINER ID   IMAGE     COMMAND     CREATED          STATUS          PORTS                                         NAMES
bbe3d679a9c4   alpine    "/bin/sh"   34 minutes ago   Up 34 minutes   0.0.0.0:49153->3000/tcp, :::49153->3000/tcp   bottle_app

サーバーの起動

# python3 server.py 
Bottle v0.12.19 server starting up (using WSGIRefServer())...
Listening on http://0.0.0.0:3000/
Hit Ctrl-C to quit.

クライアントで
http://localhost:49153/
にアクセス