質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.51%
Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

Apache

Apacheは、Apache HTTP Serverの略で、最も人気の高いWebサーバソフトウェアの一つです。安定性が高いオープンソースソフトウェアとして商用サイトから自宅サーバまで、多くのプラットフォーム向けに開発・配布されています。サーバーソフトウェアの不具合(NCSA httpd)を修正するパッチ(a patch)を集積、一つ独立したソフトウェアとして開発されました。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

pip

pipとは、Pythonを用いて書かれているパッケージソフトのインストールや管理を行うためのパッケージマネジメントシステムです。pipを使う主なメリットは、コマンドラインインターフェースにて容易にPythonパッケージソフトをインストール可能だという点です。

Q&A

解決済

1回答

1248閲覧

Dockerfileでpython仮想環境にライブラリがインストールされない

takatoyo0903

総合スコア9

Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

Apache

Apacheは、Apache HTTP Serverの略で、最も人気の高いWebサーバソフトウェアの一つです。安定性が高いオープンソースソフトウェアとして商用サイトから自宅サーバまで、多くのプラットフォーム向けに開発・配布されています。サーバーソフトウェアの不具合(NCSA httpd)を修正するパッチ(a patch)を集積、一つ独立したソフトウェアとして開発されました。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

pip

pipとは、Pythonを用いて書かれているパッケージソフトのインストールや管理を行うためのパッケージマネジメントシステムです。pipを使う主なメリットは、コマンドラインインターフェースにて容易にPythonパッケージソフトをインストール可能だという点です。

0グッド

0クリップ

投稿2022/04/13 01:52

Docker初心者です。
EC2上で稼働しているDjangoサービス(Apacheで稼働)をECS Fargateに載せ替えようとしています。

【ハマっているところ】
EC2ではPython仮想環境を作成してそこにpip installしたものを入れていました。
Amazonlinux2をベースにDocker For Windowsで対話形式で下記の同様の作業をしたところ、イメージが作成され正常に稼働したのでDockerfileで再現しようとしたところ下記作業のうち

pip install -r ~/requirements_python3_2.txt

が pip not foundになってしまいます。
↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓

Docker

1★yumで必要なものをインストール 2bash-4.2# yum -y update && yum -y install systemd sudo vim tar less which shadow-utils procps wget unzip 3bash-4.2# wget https://bootstrap.pypa.io/ez_setup.py -O - | sudo python 4★ec2-userを追加し ec2-userにsu 5bash-4.2# useradd "ec2-user" && echo "ec2-user ALL=NOPASSWD: ALL" >> /etc/sudoers 6★apache その他インストール 7[ec2-user@bed0dd8f0ea3 /]$ sudo yum install -y httpd httpd-devel 8[ec2-user@bed0dd8f0ea3 /]$ sudo systemctl enable httpd.service 9[ec2-user@bed0dd8f0ea3 /]$ sudo yum install -y httpd-devel python3-devel gcc gcc-c++ 10★pythonインストール 11[ec2-user@bed0dd8f0ea3 /]$ sudo yum install python3.7 python3-devel postgresql-devel httpd-devel -y 12[ec2-user@bed0dd8f0ea3 /]$ echo 'alias python=python3.7' >> ~/.bashrc 13[ec2-user@bed0dd8f0ea3 /]$ source ~/.bashrc 14[ec2-user@bed0dd8f0ea3 /]$ python --version 15Python 3.7.10 16★仮想環境インストール 17[ec2-user@bed0dd8f0ea3 /]$ sudo python3 -m pip install virtualenv 18[ec2-user@bed0dd8f0ea3 /]$ sudo python3 -m pip install source 19[ec2-user@bed0dd8f0ea3 /]$ python3 -m virtualenv ~/virtual_envs/tpr 20[ec2-user@bed0dd8f0ea3 /]$ python3 -m source ~/virtual_envs/tpr/bin/activate 21[ec2-user@bed0dd8f0ea3 /]$ . ~/virtual_envs/tpr/bin/activate 22 23(tpr) [ec2-user@bed0dd8f0ea3 /]$ pip install --upgrade pip 24Requirement already satisfied: pip in /home/ec2-user/virtual_envs/tpr/lib/python3.7/site-packages (22.0.4) 25★以下のコマンドで仮想環境以下のsite-packageディレクトリにライブラリ関連のファイルが作成される。 26(tpr) [ec2-user@bed0dd8f0ea3 ~]$ cp /tmp/requirements_python3_2.txt . 27(tpr) [ec2-user@bed0dd8f0ea3 ~]$ pip install -r ~/requirements_python3_2.txt 28・・・アプリに必要なPGMをコピー等の作業

↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑

Dockerfileの記述は以下です


Dockerfile

1FROM amazonlinux:2 2# yum 3RUN yum -y update && yum -y install systemd sudo vim tar less which shadow-utils procps wget unzip lsof 4RUN yum install -y openssh-server openssh-clients 5RUN wget https://bootstrap.pypa.io/ez_setup.py -O - | sudo python 6RUN sudo yum -y install python-psycopg2 7 8# ec2-user追加 パスワード無しでsu設定 9RUN useradd "ec2-user" && echo "ec2-user ALL=NOPASSWD: ALL" >> /etc/sudoers 10 11# ユーザー変更 12USER ec2-user 13WORKDIR /home/ec2-user 14 15# apache 16RUN sudo yum install -y httpd httpd-devel 17RUN sudo systemctl enable httpd.service 18 19# python3 20RUN sudo yum install -y httpd-devel python3-devel gcc gcc-c++ 21RUN sudo yum install python3.7 python3-devel postgresql-devel httpd-devel -y 22 23 24# 仮想環境 25RUN echo 'alias python=python3.7' >> ~/.bashrc 26RUN source ~/.bashrc 27RUN sudo python3 -m pip install virtualenv 28RUN sudo python3 -m pip install source 29RUN python3 -m virtualenv /home/ec2-user/virtual_envs/tpr 30RUN python3 -m source /home/ec2-user/virtual_envs/tpr/bin/activate 31RUN . /home/ec2-user/virtual_envs/tpr/bin/activate 32RUN echo 'source ~/virtual_envs/tpr/bin/activate' >> ~/.bashrc 33 34# 必要なツールインストール 35COPY ./requirements_python3_2.txt /home/ec2-user/requirements_python3_2.txt 36# 以下で site-packege内にファイルができる 37※※※以下のコマンドが pip not found になる 38   ちなみに pip3 にするとインストールされるが、仮想環境のsite-package に入ってくれない 39RUN pip install -r /home/ec2-user/requirements_python3_2.txt

USER ec2-user で su ec2-user と同じ扱いになり、対話形式同様 pip install が可能だと思っているのですが
認識が間違っているのでしょうか?

対話形式で構築したコンテナをcommitしたものをECSFargateで起動すれば
アプリは稼働するのですが、運用の観点からできればCodebuildでDockerfile
をもとにイメージを作成したいと思っています。

Dockerfileによるイメージ作成で上記 pip install コマンドが pip not found
になってしまう原因と解決方法を教えていただきたいです。

・Python3.7
・上記作業でインストールしたライブラリ一覧

boto==2.49.0
certifi==2019.11.28
chardet==3.0.4
defusedxml==0.6.0
diff-match-patch==20181111
Django==2.2
django-appconf==1.0.3
django-cors-headers==3.2.0
django-crontab==0.7.1
django-import-export==2.0
django-maintenancemode==0.11.3
django-netfields==1.2.2
ecdsa==0.14.1
et-xmlfile==1.0.1
future==0.18.2
idna==2.8
ipaddress==1.0.23
IPy==1.0
jdcal==1.4.1
MarkupPy==1.14
mod-wsgi==4.7.0
netaddr==0.7.19
odfpy==1.4.0
openpyxl==3.0.2
psycopg2==2.8.4
psycopg2-binary==2.8.4
pyasn1==0.4.8
pycryptodome==3.9.4
python-dateutil==2.8.1
python-jose==3.0.1
pytz==2019.3
PyYAML==5.2
requests==2.22.0
rsa==4.0
six==1.13.0
sqlparse==0.3.0
tablib==0.14.0
urllib3==1.25.7
xlrd==1.2.0
XlsxWriter==1.2.6
xlwt==1.3.0

以上よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

Dockerfile

1RUN . /home/ec2-user/virtual_envs/tpr/bin/activate

Dockerfile の上記の行で Python の仮想環境を設定しているわけですが、内容はシェル変数の設定になります。

なので、RUN を分割せずに続けてコマンドを実行しないと仮想環境の設定が有効になりません。

投稿2022/04/13 02:17

chirimen

総合スコア189

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

takatoyo0903

2022/04/13 04:52

早速ありがとうございます。 &&でコマンドをつなげたところ、意図した動作をするようになりました! 大変助かりました! ベストアンサーとさせていただきます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.51%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問