ラベル AlpineLinux の投稿を表示しています。 すべての投稿を表示
ラベル AlpineLinux の投稿を表示しています。 すべての投稿を表示

2022年3月14日月曜日

Dockerでpg_dumpをインストールしたイメージ(Alpine3.15ベース)を作成してバックアップを行う

Dockerでpg_dumpをインストールしたイメージ(Alpine3.15ベース)を作成してバックアップを行うには、以下の手順を実行します。バックアップの取得と同時に圧縮も行います。

実行手順

1. 以下のDockerfileを使用してPostgreSQLのpg_dumpをインストールしたイメージを作成します。
Dockerfile
FROM alpine:3.15
RUN apk --no-cache add postgresql-client \
  && mkdir /data
WORKDIR /data
VOLUME ["/data"]
ENV PG_HOST=localhost \
  PG_USER=postgres \
  PGPASSWORD=postgres \
  PG_DB=postgres \
  PG_PORT=5432 \
  BASENAME=backup \
  POSTFIX=_
CMD ["/bin/sh", "-c", "/usr/bin/pg_dump -h ${PG_HOST} -p ${PG_PORT} -U ${PG_USER} ${PG_DB}  | gzip > /data/${BASENAME}${POSTFIX}.dmp.gz"]

・イメージビルド用コマンド
docker build --no-cache -t mypgdump .

2. 以下のコマンドでコンテナ内のpg_dumpコマンドを実行します。
適宜、環境変数を変更してください。
docker run --rm -it -e PGPASSWORD=mypostgres -e PG_HOST=myhost -e PG_PORT=5432 -e PG_USER=postgres -e PG_DB=mydb -e BASENAME=backup -e POSTFIX=`/bin/date '+%Y%m%d-%H%M'` -v `pwd`:/data mypgdump

関連情報

・KubernetesでCronJobとして動作させる場合は、以下のページを参照してください。
Microk8sでCronJobを使用してPostgreSQLのバックアップを行う

2022年2月3日木曜日

DockerでMantis Bug Tracker、PostgreSQL14がインストールされたコンテナ(Alpine 3.15版)を構築する

Mantis Bug Trackerは、PHP製のバグ追跡・課題管理サーバです。

〇Mantis Bug Trackerの画面
デフォルトユーザ/パスワードはadministrator/rootです。

構築方法

以下の手順で、Mantis Bug TrackerとPostgreSQLのコンテナを構築・実行します。
1.DockerとDocker Composeをインストールしていない場合は、以下の手順を実行します。
以下のページを参照してDockerとDocker Composeをインストールします。

Debian 11(Bullseye)にDocker/Docker Compose V2系をインストールする

Ubuntu 20.04にDocker/Docker Compose V2系をインストールする

2. Mantis Bug Trackerイメージの作成(Dockerfileがあるフォルダで実行)
docker build -t mantisbtpg .

Dockerfile
FROM alpine:3.15
WORKDIR /
RUN  apk update \
  && apk add --no-cache apache2 php8-apache2 php8-pgsql php8-pdo php8-pdo_pgsql php8-intl php8-mbstring php8-session php8-curl php8-json php8-xml php8-zip php8-tokenizer php8-ctype php8-gd php8-xmlwriter php8-xmlreader php8-dom php8-zlib php8-iconv php8-simplexml php8-fileinfo openssl openrc unzip \
  && rm -rf /var/cache/apk/* \
  && wget https://sourceforge.net/projects/mantisbt/files/mantis-stable/2.25.2/mantisbt-2.25.2.tar.gz \
  && tar xvfz mantisbt-2.25.2.tar.gz \
  && rm -f mantisbt-2.25.2.tar.gz \
  && mv /var/www/localhost/htdocs /var/www/localhost/htdocs.bak \
  && mv mantisbt-2.25.2 /var/www/localhost/htdocs \
  && chown -R apache:apache /var/www/localhost/htdocs \
  && mkdir -p /run/apache2
EXPOSE 80
VOLUME ["/var/www/localhost/htdocs/config"]
CMD ["/usr/sbin/httpd", "-D", "FOREGROUND"]

3. Mantis Bug TrackerとPostgreSQLコンテナの構築・実行(docker-compose.ymlがあるフォルダで実行)
docker-compose up -d

docker-compose.yml
version: "3.3"
services:
  mantisbt:
    image: mantisbtpg
    container_name: "mantisbt"
    volumes:
      - "mantisbt-data:/var/www/localhost/htdocs/config"
    ports:
      - "8080:80"
    depends_on:
      - db
    restart: always
  db:
    image: postgres:14-alpine
    environment:
      POSTGRES_DB: mantisbt
      POSTGRES_USER: mantisbt
      POSTGRES_PASSWORD: mantisbt
    ports:
      - "5432:5432"
    container_name: postgres
    volumes:
      - "db-data:/var/lib/postgresql/data"
    restart: always
volumes:
  db-data:
    driver: local
  mantisbt-data:
    driver: local

4. ブラウザからhttp://<Dockerホスト名またはIP>:8080/にアクセス
Installer Optionsで以下の項目を入力する
Type of Database: PostgreSQL
Hostname (for Database Server): db
Username (for Database): mantisbt
Password (for Database): mantisbt
Database name (for Database): mantisbt

2021年12月2日木曜日

DockerでMantis Bug Tracker、MariaDBがインストールされたコンテナ(Alpine 3.14)を構築する

Mantis Bug Trackerは、PHP製のバグ追跡・課題管理サーバです。

〇Mantis Bug Trackerの画面
デフォルトユーザ/パスワードはadministrator/rootです。

構築方法

以下の手順で、Mantis Bug TrackerとPostgreSQLのコンテナを構築・実行します。
1.DockerとDocker Composeをインストールしていない場合は、以下の手順を実行します。
以下のページを参照してDockerとDocker Composeをインストールします。

Debian 11(Bullseye)にDocker/Docker Compose V2系をインストールする

Ubuntu 20.04にDocker/Docker Compose V2系をインストールする

2. Mantis Bug Trackerイメージの作成(Dockerfileがあるフォルダで実行)
docker build -t mantisbtmariadb .

Dockerfile
FROM alpine:3.14
WORKDIR /
RUN  apk update \
  && apk add --no-cache apache2 php8-apache2 php8-mysqli php8-pdo php8-pdo_mysql php8-intl php8-mbstring php8-session php8-curl php8-json php8-xml php8-zip php8-tokenizer php8-ctype php8-gd php8-xmlwriter php8-xmlreader php8-dom php8-zlib php8-iconv php8-simplexml php8-fileinfo openssl openrc unzip \
  && rm -rf /var/cache/apk/* \
  && wget https://sourceforge.net/projects/mantisbt/files/mantis-stable/2.25.2/mantisbt-2.25.2.tar.gz \
  && tar xvfz mantisbt-2.25.2.tar.gz \
  && rm -f mantisbt-2.25.2.tar.gz \
  && mkdir -p /opt \
  && mv mantisbt-2.25.2 /opt/mantisbt \
  && chown -R apache:apache /opt/mantisbt \
  && ln -s  /opt/mantisbt /var/www/localhost/htdocs \
  && mkdir -p /run/apache2 \
  && mkdir -p /var/mantisbt \
  && chown -R apache:apache /var/mantisbt
EXPOSE 80
VOLUME ["/var/mantisbt","/opt/mantisbt"]
CMD ["/usr/sbin/httpd", "-D", "FOREGROUND"]

3. Mantis Bug TrackerとMariaDBコンテナの構築・実行(docker-compose.ymlがあるフォルダで実行)
docker-compose up -d

docker-compose.yml
version: "3.9"
services:
  mantisbt:
    image: mantisbtmariadb
    container_name: "mantisbt"
    volumes:
      - "mantisbt-data:/var/mantisbt"
      - "mantisbt-opt:/opt/mantisbt"
    ports:
      - "80:80"
    depends_on:
      - db
    restart: always
  db:
    image: mariadb:latest
    command: mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci --default-authentication-plugin=mysql_native_password --skip-innodb-read-only-compressed
    ports:
      - "3306:3306"
    volumes:
      - "db-data:/var/lib/mysql"
    environment:
      MYSQL_ROOT_PASSWORD: mantisbt
      MYSQL_DATABASE: mantisbt
      MYSQL_USER: mantisbt
      MYSQL_PASSWORD: mantisbt
    restart: always
volumes:
  db-data:
    driver: local
  mantisbt-data:
    driver: local
  mantisbt-opt:
    driver: local

4. ブラウザからhttp://<Dockerホスト名またはIP>/mantisbt/にアクセス
Installer Optionsで以下の項目を入力する
Type of Database: MySQL Improved
Hostname (for Database Server): db
Username (for Database): mantisbt
Password (for Database): mantisbt
Database name (for Database): mantisbt

2021年12月1日水曜日

DockerでMantis Bug Tracker、PostgreSQL14がインストールされたコンテナ(Alpine 3.14)を構築する

Mantis Bug Trackerは、PHP製のバグ追跡・課題管理サーバです。

〇Mantis Bug Trackerの画面
デフォルトユーザ/パスワードはadministrator/rootです。

構築方法

以下の手順で、Mantis Bug TrackerとPostgreSQLのコンテナを構築・実行します。
1.DockerとDocker Composeをインストールしていない場合は、以下の手順を実行します。
以下のページを参照してDockerとDocker Composeをインストールします。

Debian 11(Bullseye)にDocker/Docker Compose V2系をインストールする

Ubuntu 20.04にDocker/Docker Compose V2系をインストールする

2. Mantis Bug Trackerイメージの作成(Dockerfileがあるフォルダで実行)
docker build -t mantisbtpg .

Dockerfile
FROM alpine:3.14
WORKDIR /
RUN  apk update \
  && apk add --no-cache apache2 php8-apache2 php8-pgsql php8-pdo php8-pdo_pgsql php8-intl php8-mbstring php8-session php8-curl php8-json php8-xml php8-zip php8-tokenizer php8-ctype php8-gd php8-xmlwriter php8-xmlreader php8-dom php8-zlib php8-iconv php8-simplexml php8-fileinfo openssl openrc unzip \
  && rm -rf /var/cache/apk/* \
  && wget https://sourceforge.net/projects/mantisbt/files/mantis-stable/2.25.2/mantisbt-2.25.2.tar.gz \
  && tar xvfz mantisbt-2.25.2.tar.gz \
  && rm -f mantisbt-2.25.2.tar.gz \
  && mkdir -p /opt \
  && mv mantisbt-2.25.2 /opt/mantisbt \
  && chown -R apache:apache /opt/mantisbt \
  && ln -s  /opt/mantisbt /var/www/localhost/htdocs \
  && mkdir -p /run/apache2 \
  && mkdir -p /var/mantisbt \
  && chown -R apache:apache /var/mantisbt
EXPOSE 80
VOLUME ["/var/mantisbt","/opt/mantisbt"]
CMD ["/usr/sbin/httpd", "-D", "FOREGROUND"]

3. Mantis Bug TrackerとPostgreSQLコンテナの構築・実行(docker-compose.ymlがあるフォルダで実行)
docker-compose up -d

docker-compose.yml
version: "3.9"
services:
  mantisbt:
    image: mantisbtpg
    container_name: "mantisbt"
    volumes:
      - "mantisbt-data:/var/mantisbt"
      - "mantisbt-opt:/opt/mantisbt"
    ports:
      - "80:80"
    depends_on:
      - db
    restart: always
  db:
    image: postgres:14-alpine
    environment:
      POSTGRES_DB: mantisbt
      POSTGRES_USER: mantisbt
      POSTGRES_PASSWORD: mantisbt
    ports:
      - "5432:5432"
    container_name: postgres
    volumes:
      - "db-data:/var/lib/postgresql/data"
    restart: always
volumes:
  db-data:
    driver: local
  mantisbt-data:
    driver: local
  mantisbt-opt:
    driver: local

4. ブラウザからhttp://<Dockerホスト名またはIP>/mantisbt/にアクセス
Installer Optionsで以下の項目を入力する
Type of Database: PostgreSQL
Hostname (for Database Server): db
Username (for Database): mantisbt
Password (for Database): mantisbt
Database name (for Database): mantisbt

2020年8月15日土曜日

Dockerでpython3.8とnewspaper3kをインストールしたコンテナ(Alpine3.12ベース)を作成する

newspaper3kでウェブページを読み込んで解析する事ができます。

イメージの作成と実行

以下のコマンドとDockerfileを使用してpython3.8とnewspaper3kがインストールされたイメージを作成する事ができます。

docker build -t dk-newspaper3k .

Dockerfile
FROM python:3.8-alpine3.12
RUN apk --no-cache add libstdc++ \
    libxml2 \
    libxslt \
    libjpeg-turbo \
  && apk --no-cache --virtual pydeps add gcc \
    g++ \
    python3-dev \
    musl-dev \
    cython \
    libxml2-dev \
    libxslt-dev \
    jpeg-dev \
    zlib-dev \
    libpng-dev \
  && pip install newspaper3k \
  && apk del --purge pydeps
CMD ["/bin/sh"]

以下のコマンドでサンプルコードを実行して、ウェブページから題名、本文を表示します。
docker run -v `pwd`:/tmp --rm -it dk-newspaper3k /usr/local/bin/python3 /tmp/test.py

test.py
from newspaper import Article
a = Article('https://www.python.org/', language='en')

a.download()
a.parse()
# print title/text of the page.
print(a.title)
print(a.text)

関連情報

・プロジェクトgithubリポジトリ https://github.com/codelucas/newspaper

2019年9月8日日曜日

DockerでPostgreSQL clientをインストールしたイメージ(Alpine3.10ベース)を作成する

以下の手順でPostgreSQL clientのイメージ作成と実行を行うことができます。

1. 以下のコマンドとDockerfileを使用してPostgreSQL client(psql)をインストールしたイメージを作成します。
docker build --no-cache -t mypsql .

Dockerfile
FROM alpine:3.10
RUN apk --no-cache add postgresql-client \
  && mkdir /data 
WORKDIR /data
VOLUME ["/data"]
CMD ["/usr/bin/psql"]

2. 以下のコマンドでコンテナ内のpsqlコマンドを実行します。
docker run -it -e PGPASSWORD=mypassword -v `pwd`:/data mypsql /usr/bin/psql -h dbserver -U postgres -d dwh -f ./test.sql

2019年6月29日土曜日

DockerでPython3.7、requests、slackがインストールされたコンテナ(Alpine3.9ベース)を作成する

requestsとslackでネットワークにアクセスした結果に応じてslackの通知するようなプログラムを作成する事ができます。

1.イメージの作成
以下のコマンドとDockerfileでPython3.7、requests、slackがインストールされたコンテナを作成します。
docker build --no-cache -t slack-requests:1.0 .

Dockerfile
FROM python:3.7-alpine3.9
RUN apk --no-cache add libstdc++ \
  && apk --no-cache --virtual pydeps add gcc \
    g++ \
    python3-dev \
    musl-dev \
    cython \
    libffi-dev \
  && pip install requests \
  && pip install slackclient \
  && apk del --purge pydeps
CMD ["/bin/sh"]

2. 以下のサンプルプログラムでrequestsとslackを活用して簡単なURLの生死監視・エラーチェックを行うことができます。
下記monitor_urls.pyの他に監視したいURLを保持したurls.txt(1行に1URLを書いてください)と通知時のメッセージヘッダーを保持したheader.txtを同じフォルダに用意します。
Botsの登録などはあらかじめ行い、TOKENを控えてください。

monitor_urls.py
import os
import requests
from requests.exceptions import ConnectionError
import slack
import json

header = ""
with open(os.environ['HEADER']) as fheader:
  header = fheader.read()

with open(os.environ['URLS']) as furls:
  urls = furls.readlines()

errors=[]

for url in urls:
  url = url.rstrip('\n')
  try:
    result = requests.get(url, timeout=10)
    if result.status_code >= 400:
      errors.append({'status_code':result.status_code, 'reason':result.reason, 'url':url})
  except ConnectionError as err:
    errors.append({'status_code':-1, 'reason':'No response', 'url':url})

if len(errors) > 0:
  client = slack.WebClient(token=os.environ['SLACK_TOKEN'])
  response = client.chat_postMessage(
    channel=os.environ['SLACK_CHANNEL'],
    username=os.environ['SLACK_USER'], icon_emoji=os.environ['SLACK_ICON'],
    text=header + json.dumps(errors, indent=2))

実行は以下のコマンドを実行します。slackへのトークン情報やurlを格納したファイルなどの情報は環境変数を指定して渡します。
docker run -e SLACK_TOKEN='<slack token>' \
  -e SLACK_CHANNEL='#general' \
  -e SLACK_USER='mybot' \
  -e SLACK_ICON=':cat:' \
  -e URLS='/tmp/query.txt'
  -e HEADER='/tmp/header.txt'
  -v `pwd`:/tmp  -it slack-requests:1.0 /usr/local/bin/python3 /tmp/monitor_urls.py

2019年6月28日金曜日

DockerでPythonコードをフォーマッティングするblackをインストールしたコンテナ(Alpine3.9ベース)を構築する

blackでPythonコードをフォーマッティングする事ができます。
イメージは以下のDockerfileとコマンドで構築します。
docker build --no-cache -t myblack:1.0 .

Dockerfile
FROM python:3.7-alpine3.9
RUN pip install black \
  && mkdir /src
WORKDIR /src
CMD ["black"]

コンテナを実行するには、以下のコマンドを実行します。
docker run -v `pwd`:/src --rm -it myblack:1.0 black <ソースコードファイル名>

DockerでPostgreSQLにクエリーを実行した結果をslackに通知するコンテナ(Alpine3.9ベース)を作成する

python3.7にslackclientとpandasとpsycopg2をインストールしたコンテナを作成し、PostgreSQLにクエリーを発行した結果が1行以上あればslackに通知するコンテナは以下の手順で作成します。
データベースのデータ監視などに利用する事ができます。

1.イメージの作成
docker build -t slack-pandas-pg:1.0 .

Dockerfile
FROM python:3.7-alpine3.9
RUN apk --no-cache add libstdc++ \
    postgresql-dev \
  && apk --no-cache --virtual pydeps add gcc \
    g++ \
    python3-dev \
    musl-dev \
    cython \
    libffi-dev \
  && pip install pandas \
  && pip install psycopg2 \
  && pip install slackclient \
  && apk del --purge pydeps
CMD ["/bin/sh"]

2. コンテナの実行
下記queryresult.pyの他にクエリーを保持したquery.txtと通知時のメッセージヘッダーを保持したheader.txtを同じフォルダに用意します。
Botsの登録などはあらかじめ行い、TOKENを控えてください。

queryresult.py
import os
import pandas as pd
import psycopg2
import slack

query = ""
with open(os.environ['QUERY']) as fquery:
  query = fquery.read()

header = ""
with open(os.environ['HEADER']) as fheader:
  header = fheader.read()

conn = psycopg2.connect(host=os.environ['PG_HOST'], port=os.environ["PG_PORT"], database=os.environ['PG_DB'], user=os.environ['PG_USER'], password=os.environ['PG_PASS'])
result = pd.read_sql(sql=query, con=conn)
if len(result) > 0:
  client = slack.WebClient(token=os.environ['SLACK_TOKEN'])
  response = client.chat_postMessage(
    channel=os.environ['SLACK_CHANNEL'],
    username=os.environ['SLACK_USER'], icon_emoji=os.environ['SLACK_ICON'],
    text=header + result.to_string())

PostgreSQLへの接続情報やslackの情報は下図のように環境変数で渡します。
docker run -e PG_HOST='dbhost' \
  -e PG_PORT='5432' \
  -e PG_DB='dbname' \
  -e PG_USER='postgres' \
  -e PG_PASS='pass' \
  -e SLACK_TOKEN='<slack token>' \
  -e SLACK_CHANNEL='#general' \
  -e SLACK_USER='mybot' \
  -e SLACK_ICON=':cat:' \
  -e QUERY='/tmp/query.txt'
  -e HEADER='/tmp/header.txt'
  -v `pwd`:/tmp  -it slack-pandas-pg:1.0 /usr/local/bin/python3 /tmp/queryresult.py

2019年6月14日金曜日

Dockerでpython3.7とparamikoをインストールしたコンテナ(Alpine3.9ベース)を作成する

paramikoでpythonからSSHクライアントとしてアクセスする事ができます。

以下のコマンドとDockerfileを使用してpython3.7とparamikoがインストールされたイメージを作成する事ができます。
docker build -t myparamiko:1.0 .

Dockerfile
FROM python:3.7-alpine3.9
RUN apk --no-cache add libstdc++ \
  && apk --no-cache --virtual pydeps add gcc \
    g++ \
    python3-dev \
    musl-dev \
    cython \
    libffi-dev \
    openssl-dev \
    make \
  && pip install paramiko \
  && apk del --purge pydeps
CMD ["/bin/sh"]

以下のコマンドでサンプルコードを実行して、SSH接続してホスト名を表示できます。
docker run -v `pwd`:/tmp --rm -it myparamiko:1.0 /usr/local/bin/python3 /tmp/test.py

test.py
import paramiko

sshc = paramiko.SSHClient()
sshc.set_missing_host_key_policy(paramiko.AutoAddPolicy())
sshc.connect("<ホスト名>", username="<ユーザ名>", password="<パスワード>", port=22)
sess = sshc.get_transport().open_session()
if sess.active:
  sess.exec_command("hostname")
  print(sess.recv(1024))

2019年6月13日木曜日

Dockerでpython3.7とcsvkitをインストールしたコンテナ(Alpine3.9ベース)を作成する

csvkitでCSVの統計情報を表示したり、CSVに対しSQL文を実行したり、Create Table文を生成する事ができます。

以下のコマンドとDockerfileを使用してpython3.7とcsvkitがインストールされたイメージを作成する事ができます。
docker build -t mycsvkit:1.0 .

Dockerfile
FROM python:3.7-alpine3.9
RUN pip install csvkit
CMD ["/bin/sh"]

以下のコマンドでサンプルコードを実行して、CSVファイルのヘッダーを表示できます。
wget http://ourairports.com/data/airports.csv

docker run -v `pwd`:/tmp --rm -it mycsvkit:1.0 /usr/local/bin/csvcut -n /tmp/airports.csv

2019年6月10日月曜日

Dockerでpython3.7とslackclientをインストールしたコンテナ(Alpine3.9ベース)を作成する

slackclientはSlack Web API/Real Time Messagingインターフェイスライブラリです。

以下のコマンドとDockerfileを使用してpython3.7とslackclientがインストールされたイメージを作成する事ができます。
docker build -t myslackclient:1.0 .

Dockerfile
FROM python:3.7-alpine3.9
RUN apk --no-cache add libstdc++ \
  && apk --no-cache --virtual pydeps add gcc \
    g++ \
    python3-dev \
    musl-dev \
    cython \
    libffi-dev \
  && pip install slackclient \
  && apk del --purge pydeps
CMD ["/bin/sh"]

以下のコマンドでサンプルコードを実行して、メッセージを投稿します。
docker run -v `pwd`:/tmp --rm -it myslackclient:1.0 /usr/local/bin/python3 /tmp/test.py

test.py
import slack

client = slack.WebClient(token='<SLACK_API_TOKEN>')

response = client.chat_postMessage(
  channel='#general',
  text="テストですよ!")

2019年6月9日日曜日

Dockerでpython3.7とslackwebをインストールしたコンテナ(Alpine3.9ベース)を作成する

slackwebはシンプルなslackクライアントです。pythonからメッセージの投稿などが行うことができます。

以下のコマンドとDockerfileを使用してpython3.7とslackwebがインストールされたイメージを作成する事ができます。
docker build -t pyslackweb:1.0 .

Dockerfile
FROM python:3.7-alpine3.9
RUN pip install slackweb
CMD ["/bin/sh"]

以下のコマンドでサンプルコードを実行して、メッセージを投稿します。
docker run -v `pwd`:/tmp --rm -it pyslackweb:1.0 /usr/local/bin/python3 /tmp/test.py

test.py
import slackweb
slack = slackweb.Slack(url="<incoming webhookのURL>")
slack.notify(text="テストです")

2019年5月30日木曜日

Dockerでpython3.7とnewspaper3kをインストールしたコンテナ(Alpine3.9ベース)を作成する

newspaper3kでウェブページを読み込んで解析する事ができます。

以下のコマンドとDockerfileを使用してpython3.7とnewspaper3kがインストールされたイメージを作成する事ができます。
docker build -t newspaper3k:1.0 .

Dockerfile
FROM python:3.7-alpine3.9
RUN apk --no-cache add libstdc++ \
    libxml2 \
    libxslt \
    libjpeg-turbo \
  && apk --no-cache --virtual pydeps add gcc \
    g++ \
    python3-dev \
    musl-dev \
    cython \
    libxml2-dev \
    libxslt-dev \
    jpeg-dev \
    zlib-dev \
    libpng-dev \
  && pip install newspaper3k \
  && apk del --purge pydeps
CMD ["/bin/sh"]

以下のコマンドでサンプルコードを実行して、ウェブページから題名、本文を表示します。
docker run -v `pwd`:/tmp --rm -it newspaper3k:1.0 /usr/local/bin/python3 /tmp/test.py

test.py
from newspaper import Article
a = Article('http://serverarekore.blogspot.com/2019/05/dockerpython37janomealpine39.html', language='ja')
a.download()
a.parse()
# print title/text of the page.
print(a.title)
print(a.text)

2019年5月29日水曜日

Dockerでpython3.7とJanomeをインストールしたコンテナ(Alpine3.9ベース)を作成する

Janomeで日本語の文書を形態素解析する事ができます。

以下のコマンドとDockerfileを使用してpython3.7とJanomeがインストールされたイメージを作成する事ができます。
docker build -t pyjanome:1.0 .

Dockerfile
FROM python:3.7-alpine3.9
RUN pip install janome
CMD ["/bin/sh"]

以下のコマンドでサンプルコードを実行して、日本語文章を形態素解析を実行した結果を表示します。
docker run -v `pwd`:/tmp --rm -it pyjanome:1.0 /usr/local/bin/python3 /tmp/test.py

test.py
from janome.tokenizer import Tokenizer
sample="Janomeで形態素解析を行うことができます。"
for token in Tokenizer().tokenize(sample):
  print(token)

2019年5月28日火曜日

Dockerでpython3.7とPyYAMLをインストールしたコンテナ(Alpine3.9ベース)を作成する

PyYAMLでyamlファイルを読み込んで解析する事ができます。

以下のコマンドとDockerfileを使用してpython3.7とPyYAMLがインストールされたイメージを作成する事ができます。
docker build -t pyyaml:1.0 .

Dockerfile
FROM python:3.7-alpine3.9
RUN pip install PyYAML 
CMD ["/bin/sh"]

以下のコマンドでサンプルコードを実行して、テンプレートを使用してHello World!を表示します。
docker run -v `pwd`:/tmp --rm -it pyyaml:1.0 /usr/local/bin/python3 /tmp/test.py

test.py
import yaml

yamltext = """version: "2"
services:
  adminer:
    image: adminer:4.7
    container_name: "adminer"
    ports:
      - "8080:8080"
"""
print(yaml.load(yamltext))

2019年5月27日月曜日

Dockerでpython3.7とJinja2をインストールしたコンテナ(Alpine3.9ベース)を作成する

Jinja2はPytonで代表的なテンプレートエンジンの一つです。

以下のコマンドとDockerfileを使用してpython3.7とJinja2がインストールされたイメージを作成する事ができます。
docker build -t jinja2:1.0 .

Dockerfile
FROM python:3.7-alpine3.9
RUN pip install jinja2
CMD ["/bin/sh"]

以下のコマンドでサンプルコードを実行して、テンプレートを使用してHello World!を表示します。
docker run -v `pwd`:/tmp --rm -it jinja2:1.0 /usr/local/bin/python3 /tmp/test.py

test.py
from jinja2 import Template
template = Template('Hello {{ name }}!')
print(template.render(name='World'))

2019年5月26日日曜日

Dockerでpython3.7とpysmbをインストールしたコンテナ(Alpine3.9ベース)を作成する

pysmbを使用して、CIFS/SMBプロトコルを使用できるプログラムを作成する事ができます。

以下のコマンドとDockerfileを使用してpython3.7とpysmbがインストールされたイメージを作成する事ができます。
docker build -t pysmb:1.0 .

Dockerfile
FROM python:3.7-alpine3.9
RUN apk --no-cache add libstdc++ \
  && apk --no-cache --virtual pydeps add gcc \
    g++ \
    python3-dev \
    musl-dev \
    cython \
  && pip install pysmb \
  && apk del --purge pydeps
CMD ["/bin/sh"]

以下のコマンドでサンプルコードを実行してIPアドレスからNetBIOSを使用してホスト名を取得します。
docker run -v `pwd`:/tmp --rm -it pysmb:1.0 /usr/local/bin/python3 /tmp/test.py

test.py
from nmb.NetBIOS import NetBIOS
import sys

remote_ip = "192.168.1.50"
srv_name=""
timeout=10 # 10 sec
bios = NetBIOS()
srv_name = bios.queryIPForName(remote_ip, timeout=timeout)
bios.close()
if srv_name is None:
  print(remote_ip + " is not found.")
else:
  print(srv_name[0] + " is found.")

2019年5月25日土曜日

Dockerでpython3.7とpython-pptxをインストールしたコンテナ(Alpine3.9ベース)を作成する

python-pptxを使用して、パワーポイントファイルの読み取りや生成・編集などを行うことができます。

以下のコマンドとDockerfileを使用してpython3.7とpython-pptxがインストールされたイメージを作成する事ができます。
docker build -t pythonpptx:1.0 .

Dockerfile
FROM python:3.7-alpine3.9
RUN apk --no-cache add libstdc++ \
    libxml2 \
    libxslt \
    libjpeg-turbo \
  && apk --no-cache --virtual pydeps add gcc \
    g++ \
    python3-dev \
    musl-dev \
    cython \
    libxml2-dev \
    libxslt-dev \
    jpeg-dev \
    zlib-dev \
  && pip install pillow \
  && pip install python-pptx \
  && apk del --purge pydeps
CMD ["/bin/sh"]

適当なエクセルファイルtest1.pptxを準備して、以下のコマンドでサンプルコードを実行してパワーポイントファイルの内容にアクセスできます。
docker run -v `pwd`:/tmp --rm -it pythonpptx:1.0 /usr/local/bin/python3 /tmp/test.py

test.py
import pptx

prs = pptx.Presentation("/tmp/test1.pptx")
text = []
for slide in prs.slides:
  for shape in slide.shapes:
    text.append(shape.text)
print('\n'.join(text))

Dockerでpython3.7とPillowをインストールしたコンテナ(Alpine3.9ベース)を作成する

Pillowを使用して、画像の生成や変換などを行うことができます。

以下のコマンドとDockerfileを使用してpython3.7とPillowがインストールされたイメージを作成する事ができます。
docker build -t pythonpillow:1.0 .

Dockerfile
FROM python:3.7-alpine3.9
RUN apk --no-cache add \
    libjpeg-turbo \
  && apk --no-cache --virtual pydeps add gcc \
    g++ \
    python3-dev \
    musl-dev \
    cython \
    jpeg-dev \
    zlib-dev \
  && pip install pillow \
  && apk del --purge pydeps

以下のコマンドでサンプルコードを実行して、読み込んだ画像をセピア調に変換します。
docker run -v `pwd`:/tmp --rm -it pythonpillow:1.0 /usr/local/bin/python3 /tmp/test.py

test.py
# coding=UTF-8
from PIL import Image
from PIL import ImageOps

# 画像をセピア調に変換する
img1 = Image.open("/tmp/sf2.jpg")
for ly in range(img1.size[1]):
        for lx in range(img1.size[0]):
                pv = img1.getpixel((lx, ly))
                pv2 = (pv[0]+pv[1]+pv[2])/3
                pr = int(pv2 *0xd0/0xff)
                pg = int(pv2 *0xa0/0xff)
                pb = int(pv2 *0x50/0xff)
                img1.putpixel((lx,ly), (pr,pg,pb))
img1.save("/tmp/pythonpillow.png")

入力画像(sf2.jpg)


出力画像(pythonpillow.png)