これは備忘録なので、ほぼコマンドだけ羅列する感じの記事です。
調べながらやってると、一つの記事で何回か躓いたので、
うまくいった流れを書いておきます。
誰かの役に立てばそんなにうれしいことはないです。
本当はPython+Flask+ApacheでWSGI使ってやりたいんですけど、
まずはその手前までの分をメモしておきます。
Dockerインストール(公式サイト)
公式サイトからダウンロード
今回はWindowsマシンでやってます。
https://docs.docker.com/engine/installation/
次のコマンドインストール成功したか確認
$ docker --version
CentOS7をコンテナ起動(PowerShell)
以下のページからOSイメージを探して使います。
https://hub.docker.com/_/centos/
# docker pull [イメージ名]:[タグ名]
$docker pull centos:centos7
# インストールされたか確認
$docker images
ポートつないでコンテナ開く(PowerShell)
ここがかなりの躓きポイントでした。
あとからApache使うつもりだったのですが
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の代わりに使うみたいなことを
書いていたところもあったので
再起動
先ほど終了したコンテナを再起動してログインします。
docker start -a -i [コンテナ名(docker_test)]
Pythonセットアップ
$ 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
$ 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のコンテナ上に
ファイルをコピーする方法です。
# docker cp [Windows上のソースパス] [コンテナ名]:[コピー先パス]
docker cp .\src\ docker_test:/var/lib/src
# 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>