K.MIURA@OUC

The special secret of making dreams come true can be summarized in four C’s. They are Curiosity, Confidence, Courage, and Constancy. –Walt Disney

gcloudを入れたコンテナを作る

[基本環境]
  • Debian 12 (amd64)
  • Docker 27.3.1
[やりたいこと]
  • gcloudコマンドがインストール済みのDockerコンテナを作りたい
  • ついでに、日本語入力対応済みのコンテナにする
[注意]
[Dockerコンテナの展開手順]
  1. Dockerイメージを作成する
    ubuntu 22.04を基礎とする
    ※ Dockerイメージ名をubuntu2204:gcloudにしている
 $ docker pull ubuntu:22.04
 $ touch Dockerfile
 $ editor Dockerfile
   Dockerfileの中に、以下の内容を書いて保存する
   FROM ubuntu:22.04
   RUN apt-get update -y && \
       apt-get install -y curl && \
       apt-get install -y apt-transport-https && \
       apt-get install -y ca-certificates && \
       apt-get install -y gnupg
   RUN echo "deb [signed-by=/usr/share/keyrings/cloud.google.gpg] https://packages.cloud.google.com/apt cloud-sdk main" | tee -a /etc/apt/sources.list.d/google-cloud-sdk.list && \
       curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | gpg --dearmor -o /usr/share/keyrings/cloud.google.gpg && \
       apt-get update -y && \
       apt-get install google-cloud-cli -y
   RUN apt-get update -y && \
       apt-get install -y locales && \
       locale-gen ja_JP.UTF-8 && \
       each "export LANG=ja_JP.UTF-8" >> ~/.bashrc
 $ docker build ./ -t ubuntu2204:gcloud
 
  1. Dockerイメージを確認する
 $ docker images
   このコマンドを実行すると
     ubuntu2204  gcloud ..略..
   という行があるはず
  1. Dockerコンテナを展開する
    ※ コンテナ名をgoogle-envにしている
 $ docker run -itd --privileged --name google-env ubuntu2204:gcloud
 $ docker exec -it google-env /bin/bash
   このコマンドを実行して
     root@<コンテナID>:/#
   が表示されていれば、コンテナの展開に成功している
Read more →

Docker上でRedmineを展開する

[基本環境]
  • Ubuntu 18.04
  • Docker 19.03.12
[参考サイト]
[注意]
[Dockerコンテナの展開(ホストOS上で実行)]
  1. docker pull ubuntu:18.04
  2. docker run -itd --privileged -p 80:80/tcp --name redmine ubuntu:18.04
  3. docker exec -it redmine /bin/bash
[コンテナ(redmine)内での手続き]
  1. adduser ubuntu
  2. apt-get update
  3. apt-get upgrade
  4. apt-get install sudo
  5. usermod -G sudo ubuntu
  6. su - ubuntu
  7. sudo apt-get install locales
  8. sudo locale-gen ja_JP.UTF-8
  9. locale -a
    • ja_JP.utf8の存在を確認
  10. sudo apt-get install build-essential zlib1g-dev libssl-dev libreadline-dev
  11. sudo apt-get install libyaml-dev libcurl4-openssl-dev libffi-dev
  12. sudo apt-get install postgresql libpq-dev
  13. sudo apt-get install apache2 apache2-dev
  14. sudo apt-get install imagemagick fonts-takao-pgothic
  15. sudo apt-get install subversion git vim
  16. curl -O https://cache.ruby-lang.org/pub/ruby/2.6/ruby-2.6.5.tar.gz
  17. tar xvf ruby-2.6.5.tar.gz
  18. cd ruby-2.6.5
  19. ./configure --disable-install-doc
  20. make
  21. sudo make install
  22. cd
  23. ruby -v
    • Rubyのバージョンを確認
  24. sudo service postgresql start
  25. sudo -u postgres createuser -P redmine
    • パスワードをredmineと仮定
  26. sudo -u postgres createdb -E UTF-8 -l ja_JP.UTF-8 -O redmine -T template0 redmine
  27. sudo mkdir /var/lib/redmine
  28. sudo chown www-data /var/lib/redmine
  29. sudo -u www-data svn co https://svn.redmine.org/redmine/branches/4.1-stable /var/lib/redmine
  30. cd
  31. vi database-yml.sh
  32. chmod 755 database-yml.sh
  33. sudo ./database-yml.sh
  34. more /var/lib/redmine/config/database.yml
    • ファイルの存在を確認
    • password:にpostgresqlのユーザredmineのパスワードを書く
  35. vi configuration-yml.sh
  36. chmod 755 configuration-yml.sh
  37. sudo ./configuration-yml.sh
  38. more /var/lib/redmine/config/configuration.yml
    • ファイルの存在を確認
  39. cd /var/lib/redmine/config/
  40. sudo chown www-data:www-data database.yml
  41. sudo chown www-data:www-data configuration.yml
  42. cd /var/lib/redmine/
  43. sudo -u www-data bundle install --without development test --path vendor/bundle
  44. sudo -u www-data bin/rake generate_secret_token
  45. sudo -u www-data RAILS_ENV=production bin/rake db:migrate
  46. sudo gem install passenger -N
  47. sudo passenger-install-apache2-module --auto --languages ruby
  48. cd
  49. vi redmine-conf.sh
  50. chmod 755 redmine-conf.sh
  51. sudo ./redmine-conf.sh
  52. more /etc/apache2/conf-available/redmine.conf
    • ファイルの存在を確認
    • 3行目(</Directory>)以降の内容がpassenger-install-apache2-module --snippetの出力結果であることを確認
  53. sudo a2enconf redmine
  54. apache2ctl configtest
  55. sudo service apache2 reload
  56. sudo vi /etc/apache2/sites-enabled/000-default.conf
    • DocumentRootの値を /var/lib/redmine/public に変更
  57. apache2ctl configtest
  58. sudo service apache2 reload
  59. sudo service apache2 start
  60. sudo vi /etc/init.d/redmine-start.sh
  61. sudo chmod 755 /etc/init.d/redmine-start.sh
  62. sudo vi /etc/init.d/redmine-stop.sh
  63. sudo chmod 755 /etc/init.d/redmine-stop.sh
  64. sudo service postgresql stop
  65. sudo service apache2 stop
  66. exit
  67. exit
[Dockerイメージの生成(ホストOS上で実行)]
  1. docker stop redmine
  2. docker commit redmine ubuntu1804:redmine
[DockerイメージからRedmineを展開(ホストOS上で実行)]
  1. docker run -itd --privileged -p 8080:80 --name sample ubuntu1804:redmine
  2. docker exec sample /etc/init.d/redmine-start.sh
[Redmineコンテナの停止]
  1. docker exec sample /etc/init.d/redmine-stop.sh
  2. docker stop sample
[Redmineコンテナの起動]
  1. docker start sample
  2. docker exec sample /etc/init.d/redmine-start.sh
[Redmineの起動を確認]
  1. 手元PCのウェブブラウザで http://RedmineのIPアドレス:8080/ に接続する
Read more →

PythonでDockerを制御する

[基本環境]
  • Python 3.7.3
  • Docker 19.03.8
[注意]
  • Docker SDK for Pythonを基にしたDocker制御ではない
  • Subprocessを基にしたDocker制御である
  • Dockerのオプションを多様したいなら、結局、Subprocessに落ち着く
[Dockerコンテナ一覧の取得]
  • Dockerコマンドなら
    • docker ps -a
  • Pythonコードなら
    1. import subprocess
    2. comp = subprocess.run([‘docker’, ‘ps’, ‘-a’], encoding=‘utf-8’, stdout=subprocess.PIPE)
    3. print(comp)
[Dockerコンテナの起動]
  • Dockerコマンドなら
    • docker run -itd --priviledged -p 80:80/tcp --name websrv debian:stable
  • Pythonコードなら
    1. import subprocess
    2. comp = subprocess.run([‘docker’, ‘run’, ‘-itd’, ‘--priviledged’, ‘-p’, ‘80:80/tcp’, ‘--name’, ‘websrv’, ‘debian:stable’], encoding=‘utf-8’, stdout=subprocess.PIPE)
    3. print(comp)
[まとめ]
  • subprocess.runの第一引数のリストにコマンドとオプションを列挙することで、オプションが増えても気にせず実行できる
Read more →

Docker上でJupyterを展開する

[基本環境]
  • Debian 10.3.0 (amd64)
  • Docker 19.03.8
[参考サイト]
[注意]
  • Docker環境の構築や他のサイトを読んで、Docker環境を構築していること
  • 本記事は、Jupyter NotebookをWEBブラウザで確認するまでの手続きである
[Dockerコンテナの展開]
  1. docker pull debian:stable
  2. docker run -itd --privileged -p 8888:8888/tcp -p 8888:8888/udp --name jupyter debian:stable
  3. docker exec -it jupyter /bin/bash
[コンテナ(jupyter)内での手続き]
  1. apt update
  2. apt upgrade
  3. apt install git
  4. apt install curl
  5. apt install bzip2
  6. apt install vim
  7. git clone https://github.com/pyenv/pyenv.git ~/.pyenv
  8. echo ’export PYENV_ROOT="${HOME}/.pyenv"’ » ~/.bash_profile
  9. echo ’export PATH="${PYENV_ROOT}/bin:$PATH"’ » ~/.bash_profile
  10. echo ’export PATH="${PYENV_ROOT}/shims:$PATH"’ » ~/.bash_profile
  11. echo ’eval “$(pyenv init -)”’ » ~/.bash_profile
  12. source ~/.bash_profile
  13. pyenv install anaconda3-5.3.1
  14. echo ’export PATH="$PYENV_ROOT/versions/anaconda3-5.3.1/bin:$PATH"’ » ~/.bash_profile
  15. source ~/.bash_profile
  16. pyenv versions
    • anacondaのインストールを確認する
  17. pyenv global anaconda3-5.3.1
  18. ipython3
    • In [1]: from IPython.lib import passwd
    • In [2]: passwd()
      • Jupyter Notebookを開くときのパスワードを設定する
    • Out[2]: ‘sha1:xxxxxxxxx’ これをメモしておく
    • In[3]: quit()
  19. jupyter-notebook --generate-config
  20. vi ~/.jupyter/jupyter_notebook_config.py
    • 先頭(本当はどこでも良い)に以下の内容を追加する
      c.IPKernelApp.pylab = ‘inline’
      c.NotebookApp.ip = ‘*’
      c.NotebookApp.open_browser = False
      c.NotebookApp.port = 8888
      c.NotebookApp.password = u’sha1:xxxxxxxxx’ メモしたやつ
[Jupyter Notebookの起動]
  1. mkdir workspace ホームディレクトリで実行する
  2. cd workspace
  3. jupyter-notebook --allow-root
    • WEBブラウザで http://IPアドレス:8888/ にアクセスする
    • パスワードには上の passwd() で設定したものを記述する
    • 停止するときはControl + Zを押す
    • プロセスが生きていたらkillで強制終了する
[おまけ:コンテナ起動時にJupyter Notebookを一緒に起動する]
  • シェルスクリプトを仕込む (コンテナ内で実行する)
    1. vi /etc/rc.local
      • 以下の内容を記述する
        #!/bin/bash
        /etc/init.d/jupyter.sh
    2. chmod 755 /etc/rc.local
    3. vi /etc/init.d/jupyter.sh
      • 以下の内容を記述する
        #!/bin/bash
        . ~/.bash_profile
        cd /workspace
        sleep 3;jupyter-notebook --allow-root
    4. chmod 755 /etc/init.d/jupyter.sh
    5. exit コンテナ(jupyter)から一度出る
  • コンテナ(jupyter)を起動する
    1. docker restart jupyter
    2. docker exec jupyter /etc/rc.local
Read more →

WordCloudを作る

[基本環境]
  • Debian 10.3.0 (amd64)
  • Docker 19.03.8
[注意]
[Dockerコンテナの展開]
  1. mkdir /home/ユーザ名/workspace
    • ホストのディレクトリをコンテナでマウントするための準備
    • ユーザ名は各々の環境に合わせて置き換える
  2. docker run -itd --privileged -v /home/ユーザ名/workspace:/mnt --name wordcloud debian:stable
  3. docker exec -it wordcloud /bin/bash
[コンテナ(wordcloud)内での手続き]
  1. apt update
  2. apt install python-pip python3-pip
  3. pip3 install wordcloud
  4. apt install vim
  5. cd /mnt
  6. vi sample.py
  7. python3 sample.py
    • sample.pngが生成されている
Read more →

Docker環境の構築

[基本環境]
  • Debian 12 (amd64)
[Docker環境の構築手順]
  1. Dockerをインストールする
 $ sudo apt update
 $ sudo apt install apt-transport-https
 $ sudo apt install ca-certificates
 $ sudo apt install curl
 $ sudo apt install gnupg2
 $ sudo apt install software-properties-common
 $ curl -fsSL https://download.docker.com/linux/debian/gpg | sudo apt-key add -
 $ sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/debian $(lsb_release -cs) stable"
 $ sudo apt update
 $ sudo apt install docker-ce
 
  1. Dockerの動作状況を確認する
 $ sudo systemctl status docker
   このコマンドを実行して
     Active: active (running)
   が表示されるなら、Dockerは動作中である
 $ sudo docker ps -a
   このコマンドを実行して
     CONTAINER ID IMAGE ..略..
   が表示されるなら、Dockerコマンドも正しく動作している
  1. 一般ユーザにDockerコマンドの実行権限を与える
 $ sudo usermod -aG docker ${USER}
 $ sudo reboot
[Dockerコンテナの展開]
  1. Dockerイメージをダウンロードする
    ※ 例として、Debianのイメージファイルをダウンロードしている
 $ docker pull debian:stable
  1. 新規コンテナを展開する
    ※ ホストとの間で80(HTTP)ポートを繋いだコンテナを作っている
    ※ コンテナ名をwebservにしている
 $ docker run -itd --privileged -p 80:80/tcp -p 80:80/udp --name webserv debian:stable
 
  1. コンテナの中にログインする
 $ docker exec -it webserv /bin/bash
Read more →