このチュートリアルでは、Dockerコンテナ(pannakoota/telegram_bot)を作成して、GCP Compute EngineのContainer-Optimized OSで実行する方法を説明します。
前提条件
- 開発環境(Mac)にDockerがインストールされていること
- Google Cloud Platformアカウントがあり、Compute Engineが利用可能であること
- Docker Hubアカウントがあること
手順
Dockerfileの作成
Dockerfileを用意して下記の環境をコンテナ化
※下記は例になります。
cat > Dockerfile <<EOF
FROM rockylinux:8.5
RUN yum update -y
RUN yum install -y \
epel-release \
git \
jq \
langpacks-ja \
cronie \
python3
RUN pip3 install google-api-python-client google-auth gspread oauth2client
RUN dnf -y install langpacks-ja \
&& cp /usr/share/zoneinfo/Asia/Tokyo /etc/localtime
ENV LANG="ja_JP.UTF-8" \
LANGUAGE="ja_JP:ja" \
LC_ALL="ja_JP.UTF-8"
RUN git clone https://github.com/kawamurashingo/telegram_bot
RUN chmod 775 /telegram_bot/telegram.sh
RUN /usr/bin/crontab /telegram_bot/crontab.txt
RUN git clone https://github.com/kawamurashingo/telegram_bot_next
RUN chmod 775 /telegram_bot_next/telegram.sh
RUN /usr/bin/crontab /telegram_bot_next/crontab.txt
RUN ln -sf /proc/1/fd/1 /var/log/cron.log
CMD crond && tail -f /dev/null
EOF
Dockerfileからコンテナを作成
docker login
docker search rockylinux
docker pull rockylinux:8.5
docker build --no-cache -t pannakoota/telegram_bot .
Docker Hubにコンテナをプッシュ
docker push pannakoota/telegram_bot
GCPでContainer-Optimized OSインスタンスを起動し、pannakoota/telegram_botイメージを選択
Compute Engineで無事デプロイされていることの確認
docker ps
docker exec -it <コンテナID> /bin/bash
Docker内で設定を行う(任意)
ps -ef | grep cron
crontab -l
cd telegram_bot
vi credentials.json
vi get_events.py
vi telegram.sh
cd ../telegram_bot_next
vi credentials.json
vi get_events.py
vi telegram.sh
crontab -e
Dockerコンテナの保存とカスタムコンテナの作成(任意)
docker ps
docker commit <コンテナID> telegram_custom
docker image ls
オリジナルコンテナを停止し、カスタムコンテナを起動(任意)
docker kill <コンテナID>
docker run --name telegram_custom -d telegram_custom
docker exec -it telegram_custom /bin/bash
exit
自動起動設定の更新(任意)
docker update --restart=always telegram_custom
docker inspect -f "{{.Name}} {{.HostConfig.RestartPolicy.Name}}" $(docker ps -aq) | grep always
再起動テスト(任意)
sudo reboot
備考
GitHub
DockerHub
Dockerhubに登録
実行中のDockerコンテナを停止および削除
docker ps
docker kill <コンテナID>
または
docker stop <コンテナID>
docker container rm telegram_bot
Dockerコンテナのリビルド
docker build --no-cache -t pannakoota/telegram_bot .
Dockerコンテナの実行
docker run -it --name telegram -d pannakoota/telegram_bot
Dockerコンテナに接続
docker exec -it telegram /bin/bash
exit