1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Python+Flask+Docker使ってブラウザでサイト見れるようにする

Last updated at Posted at 2020-12-03

これは備忘録なので、ほぼコマンドだけ羅列する感じの記事です。
調べながらやってると、一つの記事で何回か躓いたので、
うまくいった流れを書いておきます。

誰かの役に立てばそんなにうれしいことはないです。

本当はPython+Flask+ApacheでWSGI使ってやりたいんですけど、
まずはその手前までの分をメモしておきます。

Dockerインストール(公式サイト)

公式サイトからダウンロード
今回はWindowsマシンでやってます。
https://docs.docker.com/engine/installation/
次のコマンドインストール成功したか確認

powershell
$ docker --version

CentOS7をコンテナ起動(PowerShell)

以下のページからOSイメージを探して使います。
https://hub.docker.com/_/centos/

powershell
# docker pull [イメージ名]:[タグ名]
$docker pull centos:centos7
# インストールされたか確認
$docker images

ポートつないでコンテナ開く(PowerShell)

ここがかなりの躓きポイントでした。
あとからApache使うつもりだったのですが

powershell
docker run -d --privileged --name docker_test -it -p 5000:5000 centos:centos7 /sbin/init

docker exec -it docker_test /bin/bash
# LinuxCUI 終了コマンド
> exit

今後再起動するとき用に--name docker_testでコンテナに名前を付けてます。

ポートをつなぐ

Linux上でFlaskをLocalhostの5000番ポートで実行したとき
それをWindowsマシンのLocalhost5000番ポートにつなぐみたいな感じ?
-it -p 5000:5000
-p [Windowsマシン側]:[コンテナ側]
仕事で急を要したから今回挑戦しているのですが、このあたりの知識かなり弱いので
もっと勉強しないといけないですね。。。
正確な表現あればコメントで教えてください~~

特権モードでコンテナを起動

これは私がこのあと、Apacheを使いたかったのでやっています。
systemctlがcentos上で使えなかったので調べてみたところ
最初にコンテナを作成するときに以下のように
--privileged, /sbin/init
つけないといけないっぽかったです。
-dはなくてもいいかも -itの代わりに使うみたいなことを
書いていたところもあったので

再起動

先ほど終了したコンテナを再起動してログインします。

powershell
docker start -a -i [コンテナ名(docker_test)]

Pythonセットアップ

CentOS
$ yum install python3
$ curl "https://bootstrap.pypa.io/get-pip.py" -o "get-pip.py"
$ python3 get-pip.py
$ pip3 install flask
$ pip3 install ipaddress
CentOS
 $ yum install wget
yum install gcc
yum --setopt=group_package_types=mandatory,default,optional groupinstall "Development Tools"
yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel python-devel libffi-devel
cd /usr/local/src
wget https://www.python.org/ftp/python/3.7.2/Python-3.7.2.tgz
$ tar xvfz Python-3.7.2.tgz
   $ cd Python-3.7.2
  ./configure -prefix=/usr/local/
  ./configure --enable-shared
make altinstall

又、シンボリック・リンクにの作成例は以下の通り。

$ ln -s /usr/local/bin/python3.7 /usr/bin/python3

$ ln -s /usr/local/lib/libpython3.7m.so.1.0 /lib64/

$ ln -s /usr/local/bin/pip3.7 /usr/bin/pip3.7

ソースファイルの転送

WindowsマシンからDockerのコンテナ上に
ファイルをコピーする方法です。

powershell
# docker cp [Windows上のソースパス] [コンテナ名]:[コピー先パス]
docker cp .\src\ docker_test:/var/lib/src
CentOS
# Python実行
$ cd /var/lib/src
$ python3 main.py

以下ほんとのメモ

httpdインストール
$ docker run -d --privileged --name docker_test centos /sbin/init
$ docker exec -it docker_test /bin/bash
yum install -y httpd httpd-devel
# yum install -y httpd
# systemctl start httpd
# systemctl status httpd
WSGIインストール
yum install mod_wsgi
pip3 install mod_wsgi
find / -name mod_wsgi*so  
cd /etc/httpd/conf.d
vi wsgi.conf
systemctl restart httpd.service
chmod +x /var/lib/app/app.wsgi 
# wsgi.conf
LoadModule wsgi_module /usr/local/lib/python3.7/site-packages/mod_wsgi/server/mod_wsgi-py37.cpython-37m-x86_64-linux-gnu.so


WSGIDaemonProcess myapp user=apache group=apache
WSGIProcessGroup myapp
WSGISocketPrefix /var/run/wsgi
WSGIScriptAlias /app /var/lib/app/yourapplication.wsgi

<Directory /var/lib/app/>

  Options ExecCGI MultiViews Indexes
  MultiViewsMatch Handlers

  AddHandler wsgi-script .py
  AddHandler wsgi-script .wsgi

  DirectoryIndex index.html index.py app.wsgi

  Order allow,deny
  Allow from all

</Directory>
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?