PLCNEXT#podmanでImagesを作成しよう

今回の記事ではPLCNEXTを使用しDockerイメージを作成し、podmanから起動させます。Docker Fileのコンセプトにも少し触れますので、よろしくおねがいします。

Reference Link

PLCNEXT#Node-redでNodeインストールエラーのトラブル対処法
PLCNEXT#AXCF 2152にdocker,podmanを試してみよう
PLCNEXT#Play with InfluxDB x telegraf
PLCNEXT#Play with Influxdb
Docker#Installation in Ubuntu
ROS#Run in Docker
Docker#Installation in Windows

Docker file?

Dockerfile はコンテナイメージを作成するために使われているFileです。そしてコンテナを構築するときそのFileが実行されます。

Dockerfile にはコンテナーの構成内容をまとめて記述するため、構成管理にも役立ちます。

いままでDockerベージから公開されているイメージをそのまま使うのが多いですが、実は

必要なパッケージやアプリ、各種設定を含んだDockerイメージを自分で作成して使用するケースが出てきます。

その場合、Dockerfileが必要になります。そのDockerFileを作成し、必要なDockerイメージを作成することができます。Dockerfileには、ベースとするDockerイメージに対して実行する内容を記述します。

そしてDockerfileは、Dockerコンテナをビルドするためのテキストファイルで、コンテナ内で実行するアプリケーションやサービスの構成を定義します。

Dockerfileには、以下のような構成があります。

  • Base Imageの指定: Dockerコンテナは、基本となるイメージから構築されます。Dockerfileでは、FROM命令を使用してそのBase Imageを指定します。
  • アプリケーションやサービスの構成: Dockerコンテナ内で実行するアプリケーションやサービスの構成を指定します。例えば、RUN命令を使用してパッケージのインストールしたりCOPY命令を使用してファイルのコピーしたりEXPOSE命令を使用してポートの公開などの操作になります。
  • コンテナ起動時の設定: Dockerコンテナが起動する際の設定を指定します。例えば、CMD命令を使用してデフォルトのコマンドや引数を指定することができます。

Dockerfileを使用することで、開発者はアプリケーションやサービスの構成を明確に定義し、再現可能な環境を構築することができます。また、Docker HubなどのDockerレジストリにDockerfileをアップロードすることで、他のユーザーが同じ環境を構築することができるようになります。

Implementation

login as root

sshでrootをLoginします。

admin@axcf2152:~$ su

File Structure

こちらはFileの構造です。

Dockerfile

こちらは今回使用するDocker Fileです。

FROM python:3.9

WORKDIR /app

COPY helloworld.py .

RUN apt update

# install python and pip
RUN apt install -y python3 python3-pip
RUN pip install –upgrade pip

COPY requirements.txt .

FROM

ベースとするDockerイメージを指定しています。ローカルにない場合は、Dockerイメージ作成のコマンド実行時に自動で取得してきます。今回指定するBase-Imageはpython:3.9です。

実際にImageのVersionがDockerのWebから確認できます。

TagsのTabを開いて、各VersionのTagsも確認いただけます。

COPY

COPYコマンドは、ローカルファイルシステム上のファイルやディレクトリを、Docker Containerのファイルシステムにコピーするために使用されます。構文は以下になります。

COPY <src> <dest>
<src> 

 ローカルファイルシステム上のファイルまたはディレクトリになります。

<dest> 

Dockerコンテナ内のコピー先になります。

WORKDIR

WORKDIRは、Dockerfile内で使用されるディレクトリを設定するための命令です。この命令は、cdコマンドと同じく、Dockerfile内での作業ディレクトリを指定することができ

ます。たとえば、以下のように使用します。

例えば、Dockerコンテナ内での作業ディレクトリを/appに設定します。それ以降のRUN、CMD、およびENTRYPOINTなどのコマンドで指定されたコマンドは、この作業ディレクトリ内で実行されます。

WORKDIR /app

RUN

RUNコマンドは、Dockerfile内でコマンドを実行するための命令です。この命令は、Dockerコンテナ内で実行するLinuxコマンドを指定することができます。たとえば、以下のようにDockerコンテナ内でapt-getコマンドを使用して、Python3をインストールすることができます。複数のコマンドを実行する場合は、&&で区切って指定すればOKです。

RUN apt-get update && apt-get install -y python3

そのWORKDIRとRUNコマンドを組み合わせることで、Dockerfile内で特定のディレクトリで作業し、必要なコマンドを実行することが可能です!

build

Docker Fileが作成終わったらbuildコマンドでImageをビルドします。

そのDocker buildは、DockerイメージをビルドするためにDockerfileを使用するコマンドです。

root@axcf2152:/pythonDocker# podman build –network=host -t mypythondocker:1.0 . 

–network=host

–network=hostは、Docker buildコマンドのオプションの1つで、ホストネットワークモードを使用することを指定するものです。つまり、–network=hostオプションを使用することで、Docker buildコマンドがホスト上のネットワークインターフェースを直接使用し、ホスト上のネットワーク設定をDockerイメージ内に反映することができます。このオプションを使用することで、Dockerコンテナ内でホスト上のリソースにアクセスすることができるようになります。

ですが、セキュリティ上の問題が生じる可能性があるので、慎重に使用する必要があります。また、このオプションはLinux環境でのみ使用できます。

Check

Build終わったらpodman imagesでImagesが作成されたかを確認しましょう。

root@axcf2152:/pythonDocker# podman images
REPOSITORY                TAG    IMAGE ID      CREATED         SIZE
localhost/mypythondocker  1.0    91c0ac482909  21 minutes ago  789 MB
docker.io/library/python  3.9    9a628174e171  5 days ago      725 MB

run

次はrun コマンドでDockerイメージからDockerコンテナを作成し、実行します。

root@axcf2152:/pythonDocker# podman run –name mypyserver -it -d mypythondocker:1.0

Name (–name)

–nameオプションは、Dockerコンテナに名前を付けるためのオプションです。Dockerコンテナを作成するときにこのオプションを使用することで、Dockerコンテナに固有の名前を付けることができます。

-it

-itは、Dockerコンテナ内でユーザーが対話的に操作できるようにするためのオプションです。例えば、docker run -it ubuntu /bin/bashというコマンドを実行すると、Ubuntuコンテナ内でbashシェルを開始し、ユーザーはコンテナ内でコマンドを入力したり、ファイルを編集したりすることができます。

-i

-iは「対話的」を意味し、コンテナ内の標準入力(stdin)を開いて、ユーザーがコンテナ内での操作を継続的に行えるようにします。

-t

tは「tty」を意味し、コンテナ内の仮想端末(tty)を開き、コンテナ内で操作を行うためのインターフェースを提供します。

-d

-dは、Dockerコンテナをバックグラウンドで実行するためのDocker runコマンドのオプションで、detached(分離)を意味し、コンテナをバックグラウンドで実行し、コマンドラインの制御をユーザーに返します。

Result

exec

最後はexecコマンドです.、Dockerコンテナ内に入りましょう。

root@axcf2152:/pythonDocker# podman exec -it mypyserver bash

Container内のPythonバージョンを確認します。3.9.16です。

root@9588a0907eb4:/app# python
Python 3.9.16 (main, Apr 12 2023, 19:35:10)
[GCC 10.2.1 20210110] on linux
Type “help”, “copyright”, “credits” or “license” for more information.
>>> 

exit コマンドでContainerから離れます。

root@9588a0907eb4:/app# exit

次はPLCNEXT本体のPythonバージョンを確認します。

自分には2023.0が入っていますので、Pythonが3.10.8になります。

admin@axcf2152:~$ python3
Python 3.10.8 (main, Oct 11 2022, 11:35:05) [GCC 11.3.0] on linux
Type “help”, “copyright”, “credits” or “license” for more information.
>>> 
Footer_Basic

Please Support some devices for my blog

Amazon Gift List

Find ME

Twitter:@3threes2
Email:soup01threes*gmail.com (* to @)
YoutubeChannel:https://www.youtube.com/channel/UCQ3CHGAIXZAbeOC_9mjQiWQ

シェアする

  • このエントリーをはてなブックマークに追加

フォローする