1
0

More than 1 year has passed since last update.

VSCodeにてDocker(CentOS7)のFlask環境を構築(venv使用)

Last updated at Posted at 2022-11-08

環境

macOS Monterey
VSCode 1.73.0
docker desktop 4.13.1
docker Engine 20.10.20
docker Compose v2.12.1
Python 3.9.15
Flask 2.2.2

DockerにてCentOS7立ち上げ

Dockerインストール
https://qiita.com/suzukiti/items/391bfce352ba94ad3f0d#docker%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB

なんか以前自分が書いたみたいでした。
VSCodeのDev containers拡張機能を使います。(これも上の記事に書いてあった)

コード(結論)

devcontainer.json
{
  "name": "sample_flask_app",
  "dockerComposeFile": ["./docker-compose.yml"],
  "service": "app",
  "workspaceFolder": "/home",
  "forwardPorts": ["50000:5000"],
  "extensions": [
    "streetsidesoftware.code-spell-checker", // スペルミス防止
    "mhutchie.git-graph", // Git見やすく
    "eamodio.gitlens", // Git見やすく
    "oderwat.indent-rainbow", // インデントわかりやすく
    "mosapride.zenkaku", // 不必要なミス防止
    "ms-python.python",
    "KevinRose.vsc-python-indent"
  ]
}
docker-compose.yml
version: '3.8'

services:
  app:
    build: ./
    container_name: flask-docker
    ports:
      - "50000:5000"
    volumes:
      - "/Users/suzukiti/dev/sample_flask_app:/home/sample_flask_app"
    command: /bin/bash
    tty: true
dockerfile
FROM centos:centos7
RUN mkdir /home/sample_flask_app

補足(直面したエラー)

  1. load metadata for docker.io/library/centos:centos7server misbehaving
    DNSの問題だそうです。
    ホスト(mac)の/etc/resolv.confのnameserverを8.8.8.8にする。

  2. The path /User/suzukiti/dev/sample_flask_app is not shared from the host and is not known to Docker.
    Userではなく、Usersです。(スペルミス)
    それでもエラるなら、docker>Preferences>Resources>File sharingで該当のパスを追加してあげる。

  3. Ports are not available
    netstat -ao | grep [ポート番号]で該当ポート使用状況を確認。
    変える場合は、

  • devcontainer.jsonforwardPorts["Macのポート番号:コンテナ(docker)のポート番号"]にする
  • docker-compose.ymlports"Macのポート番号:コンテナ(docker)のポート番号"にする

Python3インストール

CentOS7に標準で入っているPythonバージョンは2.x系でEOLなので
3.x系をインストールします。
今回は、3.10.8を使います。
※3.10.8でインストールしようとすると、
centosのopensslのversionが1.1.0より前(1.0.2)なので、
上手くインストールできません。(3.10以降は1.1.0以降が必須みたい)
https://www.python.jp/news/wnpython310/require-openssl11.html

centosにopensslの1.1.0以降を入れればいけますが、
サードパーティのリポジトリを入れたりと、大変なので、今回は3.9.15で行きます。

ターミナル
# システムパッケージをアップデート
yum -y update
# 依存パッケージのインストール;https://github.com/pyenv/pyenv/wiki#suggested-build-environment
yum install -y gcc zlib-devel bzip2 bzip2-devel readline-devel sqlite sqlite-devel openssl-devel tk-devel libffi-devel xz-devel git
# make使えないとエラるのでそれも追加
yum install -y make
# pyenvリポジトリをクローン
git clone https://github.com/pyenv/pyenv.git $HOME/.pyenv
# .bash_profileにpyenvのPATHを追加
echo 'export PATH="$HOME/.pyenv/bin:$PATH"' >> ~/.bash_profile
echo 'eval "$(pyenv init -)"' >> ~/.bash_profile
source ~/.bash_profile
# pyenvバージョン確認
pyenv --version

# 現在のpythonバージョンを確認
python --version
# python3.9.15インストール
pyenv install 3.9.15
# pythonバージョン切り替え
pyenv global 3.9.15
pyenv rehash
# 変更されたか確認
python --version

venv(仮想環境)構築

ターミナル
cd sample_flask_app
# 新環境作成
python3 -m venv venv
# アクティベート
source venv/bin/activate
# バージョン確認
python -V
# pipアップデート
pip install --upgrade pip
# pipバージョン確認
pip -V
# パッケージインストール
pip install [package name]
# インストール済みのパッケージ確認
pip freeze
# ディアクティベート
deactivate
# pipバージョン確認
pip -V

deactivate前後でおそらくpipのバージョンが異なると思います。
venv構築成功です。

flaskインストール

ターミナル
# 仮想環境アクティベート
cd sample_flask_app
source venv/bin/activate
# インストール
pip install Flask
# バージョン確認
flask --version

所感

時間かかるし、大量にエラるしで、
pythonのインストールが大変でした。
参考になれば幸いです。

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