DockerによるLinuxサーバ上のPython環境の作成(プライマリサーバ)


なぜDockerを使うのですか?


Linuxサーバ上でPython環境を構成するには、プロジェクトに関連するPython環境でパッケージ管理が必要ですが、毎回適応しにくいです.パッケージ依存性によるエラーやPythonバージョンの違いによって変更された関数を排除したり、環境変数の設定など、私が心を込めて設定した設定をサーバに移動したり、設定を他のサーバや私の環境に適用したりした場合、OSSによって設定が面倒になり、Dockerを利用して環境に合ったDockerイメージを簡単に作成することができます.環境を迅速に構成します.
Dockerfileを作成する方法もありますが、ドッキングコンテナに直接接続して環境を構成します.
Dockerfileを作成するには、Google検索で説明しやすい点が多く、https://docs.docker.com/engine/reference/builder/でDockerfileを簡単に作成できるため、これを選択します.

1.Dockerイメージの作成


📌Python Version = 3.8.13


1-1. DockerイメージDockerハブからインポート

# docker pull python:3.8

3.8: Pulling from library/python
Digest: sha256:8b0fc420ec9b030c8c788ecd6dc9ad6b2f695dce183dc6a470f74c732e019a4a
Status: Downloaded newer image for python:3.8
docker.io/library/python:3.8

# docker images

REPOSITORY       TAG       IMAGE ID       CREATED        SIZE
remote_jupyter   latest    cd58f260bfad   46 hours ago   1.23GB
python           3.8       0a91fd9cc482   3 days ago     912MB
docker imagesでは、Python 3.8のバージョンがDocker Hubからリリースされていることがわかります.

1-2. Dockerコンテナの作成

# docker run -d -it --name my_python -p 10880:8888 python:3.8

b65eb318f92cbcac4741d0f8a47b526f98ee152c519dff1d260f31cee03d5de1

# docker ps -a

CONTAINER ID   IMAGE        COMMAND     CREATED         STATUS         PORTS                     NAMES
b65eb318f92c   python:3.8   "python3"   6 seconds ago   Up 3 seconds   0.0.0.0:10880->8888/tcp   my_python
オプションの説明
-d:docker内部で追加モードで実行する必要のない要素をバックグラウンドで実行できます.
-i:コンテナに接続せずに連続したコマンド入力を受信
-t:TTYモードを使用します.Bashを使用するには、このオプションを設定する必要があります.
-p:myport:ポートをcontainer portに転送
# docker ps -a

CONTAINER ID   IMAGE        COMMAND     CREATED         STATUS         PORTS                     NAMES
b65eb318f92c   python:3.8   "python3"   6 seconds ago   Up 3 seconds   0.0.0.0:10880->8888/tcp   my_python
docker ps -aコマンドは、コンテナが正常に動作していることを確認します.

1-3. DockerコンテナCLI接続

# docker exec -it my_python bin/bash

root@b65eb318f92c:/#
これは、docker execコマンドを使用し、-it(cli 접속)オプションを使用して、<コンテナ>のbinファイル内でbashを実行することを意味します.

1-4. Python環境の設定


1-4-1. Pythonバージョンの確認

# python --version

Python 3.8.13

1-4-2. Python仮想環境の作成


vertuarenvを使用して環境を構成します.
# cd home
# mkdir work
# ls
work
# pip install virtualenv
ホームディレクトリに移動し、workというフォルダを作成し、vertulenvをダウンロードしてホームで仮想環境を作成します.
# python -m venv .venv
# ls -a
.  ..  .venv  work
.venvという仮想環境管理フォルダを作成します.
# source ./.venv/bin/activate
# which python
/home/.venv/bin/python
ソースコマンドによる<仮想環境フォルダ>//activateコンテンツの実行
pythonの場所を確認すると、仮想環境Pythonに適用されていることがわかります.

1-4-3. 必要なパッケージのダウンロード


ここではジューペテルサーバの連動のみを記録しているので、必要な人はそれぞれインストールしてください.
# pip install --upgrade pip
# pip install jupyterlab
pipバージョンを最新バージョンにアップグレードし、バージョンの競合を回避
私がJupyter labを選んだのは、Jupyter labが好きなのでJupyter labを選んだのですが、Jupyter notebookとか他の場合、この手順は同じですので、選択して使用してください.

1-4-4. apt upgradeとvim editorダウンロード

# apt-get update
# apt-get install vim

1-4-4. jupyterプロファイルの作成

# jupyter notebook --generate-config -y
Writing default config to: /root/.jupyter/jupyter_notebook_config.py
生成されたパスの確認

1-4-5. jupyterプロファイルの変更

# ipython
Python 3.8.13 (default, Mar 31 2022, 00:26:41)
Type 'copyright', 'credits' or 'license' for more information
IPython 8.2.0 -- An enhanced Interactive Python. Type '?' for help.

In [1]: from notebook.auth import passwd

In [2]: passwd()
Enter password:
Verify password:
Out[2]: 'argon2:$argon2id$v=19$m=10240,t=10,p=8$dDRJ6dknUMy1277hlE60mg$0aQlg75qiRXJppnYTo6rKVXApyixaYVZH++Rc8SMdp4'
ipythonを実行してhashパスワードを作成してコピーします.ctrl+zでipythonをリリース
# vi ~/.jupyter/jupyter_notebook_config.py
viエディタとして実行します.
「」を入力して、下線の一番下に移動します.
iで入力モードに入ります.
c=get_config()

c.NotebookApp.ip='localhost'
c.NotebookApp.open_browser=False
c.NotebookApp.password='argon2:$argon2id$v=19$m=10240,t=10,p=8$j0lA7sC6xTk3x4b3rd7vFw$DdCUnYmzWUWrfsI4UoV3pA'
c.NotebookApp.password_required=True
c.NotebookApp.port=8888
c.NotebookApp.iopub_data_rate_limit=1.0e10  
c.NotebookApp.terminado_settings={'shell_command': ['/bin/bash']}  # terminal을 bash로 실행
下線に内容を追加します.

Esc->:wq書き込みを入力してVimエディタを終了します.

1-5. Jupeter接続の確認


1-5-1. Jupeterサーバの起動


私の場合、JupeterサーバはバックグラウンドでもCLIも使いたいので、後でJupeterモードで実行しました.
以前のようにJupeterノートパソコンを実行したい場合は、nohup &を外してください.
# nohup jupyter lab --ip 0.0.0.0 --allow-root &
[1] 880
jupyter labにlocalhostのroot権限を付与することによって実行されます.
PID 880で実行されることを示します.nohup로 실행할 때는 엔터를 두번 쳐 주시면 됩니다.
# ps -ef

UID        PID  PPID  C STIME TTY          TIME CMD
root         1     0  0 06:39 pts/0    00:00:00 python3
root        16     0  0 06:52 pts/1    00:00:00 bash
root       865    16  0 07:28 pts/1    00:00:00 /home/.venv/bin/python /home/.venv/bin/ipython
root       869     0  0 07:30 pts/2    00:00:00 bin/bash
root       880   869  0 07:38 pts/2    00:00:00 /home/.venv/bin/python /home/.venv/bin/jupyter-lab --ip 0.0.0.0 --allow-
root       882   869  0 07:40 pts/2    00:00:00 ps -ef
ps -efをもう一度確認してください

1-5-2. ジュピット接続


  • Webブラウザを実行し、127.0.0.1:port(10880)またはlocalhost:port(10880)に接続します.

  • 先ほど設定したパスワードを入力します.


  • /homeディレクトリに基づいて実行されるjupyterlabを表示できます.

  • 1-6. 画像ファイルを保存


    これで、すべてが順調であることを確認しました.画像ファイルをローカルファイルに保存してください.
    他のオペレーティングシステム(Linux、Woo奮闘、Macなど)にもDockerのみがインストールされ、イメージファイルのみが保存されている場合は、これまで設定した環境で実行できます.
    以前に使用したコンテナ内部cliに加えて、オペレーティングシステム上のcliは続行されます.
    # docker commit my_python my_python:3.8.13
    docker commit<コンテナ名><コミットする画像名:tag>を使用して、コンテナ内容を画像として作成します.
    # docker save -o my_python.tar my_python:3.8.13
    docker save-o(ファイル出力)コンテナ画像をローカルファイル<出力するファイル名><画像名:tag>に保存します.
    my_python.tarファイルが作成されているかどうかを確認できます.

    2.Dockerイメージを読み込み、他の環境で使用


    2-1. Dockerイメージのロード


    私が使用しているサーバ環境はLinuxや執筆時にサーバを復元できないためmac上で実行します.이미지를 통한 작업을 해보시고 Dockerfile을 만들어서 Dockerfile을 통한 build로 진행하시는 것을 권유드립니다.
    # docker load -i my_python.tar
    docker load-i(tar archive fileから読み込む)コマンドは、ローカルファイルをdockerイメージファイルにロードします.
    # docker images
    
    REPOSITORY   TAG       IMAGE ID       CREATED          SIZE
    my_python    3.8.13    4a39243501c2   26 minutes ago   1.39GB

    2-2. Dockerイメージコンテナと接続


    イメージが正しくロードされていることがわかります.
    次に、画像をコンテナとして実行し、接続します.
    # docker run -d -it my_python -p 10880:8888 -v $(pwd):/home/work
    オプションの説明
    -v:volumeの略称は<ユーザディレクトリ>:<コンテナディレクトリ>
    docker exec -it my_python bin/bash
    cliに接続すると、正常に動作していることがわかります.
    これで、以前のように仮想環境に接続してjupyter labを実行できます.

    2-3. Jupeterサーバの起動

    # cd home
    # source .venv/bin/activate
    # nohup jupyter lab --ip 0.0.0.0 --allow-root &
    実行後にポート転送のipに接続します.

    2-4. 外部接続の検証



    ポート転送されたIPはmacプライマリサーバに接続されている.

    3.終了


    Dockerイメージを作成した後、読み込んで適用するチュートリアルは、自分の好みに合わせて使用してください.