DockerComposeでContainerのIPアドレスの固定化をするかー
こんばんは、葛の葉です。
久しぶりにDockerのことを書こうと思いました。
今回はDocker-ComposeでcontainerのIPアドレスを固定化を行いました。
networks: aplication_net: ipv4_address: 172.19.x.x
DockerComposeで各コンテナの設定部分に上記の部分を記載すればよいです。
aplication_net
はDockerNetworkの名称になります。
ipv4_address: 172.19.x.x
は使用するIPアドレスです。
また、コンテナ間にDockerNetworkを構成する記述を行います。
networks: aplication_net: driver: bridge ipam: driver: default config: - subnet: 172.19.0.0/24
aplication_net:
部分はDockerNetwork名を記載します。
subnet: 172.19.0.0/24
は使用したいネットワークアドレスとそのサブネットマスクをプレフィックス長で記載します。
なお、cofig:
下ではgateway:
というプロパティ、デフォルトゲートウェイの設定もあるそうなのですか、v3
では出来ないようです。
デフォルトゲートウェイがどういうIPアドレスであるかが不明なため、今回は172.19.0.1
を想定しています。
docker-compose.yml
は以下の通りになります。
services: mysql: image: ./mysql ~~~~~~~~~~~中略~~~~~~~~~~~~~~~~~~ networks: aplication_net: ipv4_address: 172.19.0.2 app: build: ./app ~~~~~~~~~~~中略~~~~~~~~~~~~~~~~~~ networks: aplication_net: ipv4_address: 172.19.0.3 nginx: image: nginx ~~~~~~~~~~~中略~~~~~~~~~~~~~~~~~~ networks: aplication_net: ipv4_address: 172.19.0.4 networks: aplication_net: driver: bridge ipam: driver: default config: - subnet: 172.19.0.0/24
docker-compose up
でコンテナを起動しましょう。
docker exec -it コンテナ名 /bin/bash
でコンテナ内に入り、hostname -i
でIPアドレスを確認してみましょう。
root@xxxxxxxxxxxx:/# hostname -i 172.19.0.3
IPアドレスが表示されました!
GSSとGASとDiscordで遊んじゃおう
GSSとGASとDiscordで遊んじゃおう
こんにちは、葛の葉です。
GoogleSpreadSheet
ってあるじゃあないですか。
このGoogleSpreadSheetにscriptを実装できるようになっていて
それがGoogleAppsScript
っていうやつになります。
さらに、そのGoogleAppsScriptを使ってDiscord
と連携できるようになります。
今回はGoogleSpreadSheetのセルの中身をGASで取得してDiscordに発信するbotを
作りたいと思います。
必要な材料
- Googleアカウント
- Discordアカウント
- Discordのノリにそれなりについていける心
好きなシートを作るんだ
好きなシートを作りましょう。
A1
セルに好きな言葉も入れておきましょう。
ちなみに私葛の葉
って名前だけど、これ元は雌の狐の名前なので
よーく考えたら男なのに女性の名前使ってましたね。
まぁ…いいか…
スクリプトエディタ起動
右上に[ツール]タブ
があって、そのメニューにスクリプトエディタ
っていうのがありますので
クリックすると別画面が開いて、それがスクリプトエディタが表示されます。
こんな画面がスクリプトエディタです。
DiscordのWebhookを起動
botとして出力させたいDiscordのチャンネルで歯車のボタンを押します。
そこから画面左側の[Webhooks]
→[Webhooks作成]
をクリックします。
出てきた画面には好きなbotの名前やアイコンを設定して保存しましょう。
そうしたら画面右側に作ったbotが表示されていると思うので[編集]
を押します。
さっきbotを作った画面に似たようなものが出てきますが、その下にスクロールすると
URL[画面の赤い四角部分]が表示されていますので、これをコピーします。
コピーしたURLをブラウザーで開くと何やらいろいろ書かれたものが出てきますが、
"token: "
の右側の色んな文字数字をコピーしておいてください。
スクリプトエディタでコードを書く
function submit(){ discord(get_value()) }; function get_value() { var sheet = get_sheet('自分の作ったシートのURL',0); var range = sheet.getRange(1,1); //ここの(1,1)は座標です。第一引数が行、第二引数が列です。 var value = range.getValue(); return value; }; function get_sheet(gss_url,sheet_num) { var ss = SpreadsheetApp.openByUrl(gss_url); var sheet = ss.getSheets()[sheet_num]; return sheet; }; function discord(message) { const url = 'さっきコピーしたwebhooksのURL'; const token = 'さっきのURLの中のtokenの文字列'; const channel = '#general'; const text = message; const username = 'bot'; const parse = 'full'; const method = 'post'; const payload = { 'token' : token, 'channel' : channel, "content" : text, 'username' : username, 'parse' : parse, }; const params = { 'method' : method, 'payload' : payload, 'muteHttpExceptions': true }; response = UrlFetchApp.fetch(url, params); }
関数の実行
関数を選択
を押すとプルダウンがでてきますのでsubmit
を押してください。
実行ボタンを押すとスクリプトエディタの上部になんかメッセージが出てきます。
権限がどうのって聞いてきますが、ポチポチ押せばOKです。
そしたら、葛の葉
ってメッセージが#general
に表示されるはず!
A1
の値を変えてもいいですし、sheet.getRange(1,1)
の(1,1)
の値を変えてみるのも面白いですよ!
Pythonで1から6の数字出すDiscordbot作ったよの巻
PythonでDiscordbot作ったよの巻
こんばんは、葛の葉です。
なんかDiscordっていうチャットアプリがあるんですよ、知ってますか?
ゲームで使う用のボイスチャットアプリなんですけど、普通にチャットするだけでもずいぶん使えるんですよね。
そのDiscordにbotを追加することができるんです。
pipでモジュールを追加
pipでdiscordのbot用のモジュールを追加します。
pip install discord.py
discord用のモジュールの追加はこんな感じ。
他にも
pip install asyncio
とかも必要かもしれない。(僕は使ったことないのに入ってたけどね)
公式サイトからトークンを取得
Web版のdiscordにログインした状態でここで色々とあれこれやるとbotトークンが手に入ります。
pythonで書いてみよう
pythonコードは以下の感じ。
import asyncio #なんか必要らしい import discord #さっきpipで取り入れたやつだぞ! import random #ランダムな数字を作るモジュールだぞ! client = discord.Client() @client.event #コマンドラインに出力されるぞ。printのところが出ないなら何かが間違ってるぞ async def on_ready(): print('Logged in as') print(client.user.name) print(client.user.id) print('------') @client.event async def on_message(message): if message.content.startswith("!dice"): #ここの!diceは好きなのにしていいぞ if client.user != message.author: num_random = random.randrange(1,6) m = str(num_random) await client.send_message(message.channel, m) client.run("[手に入れたトークンを記入しよう]")
!dice
って書き込むと1-6
の値を返してくれるぞ!!!!
色々と改造して遊ぼうかな。
DockerCompose で コンテナの名前を作るのだ
葛の葉です。
Dockerの話が続いていきますよ~
DockerComposeではコンテナに名前を付けることが出来ます。
docker-composer.yml
は以下の感じ!
version: "3" services: ubuntu1: image: ubuntu:18.04 container_name: lion stdin_open: true tty: true ubuntu2: image: ubuntu:18.04 container_name: albatross stdin_open: true tty: true
container_name: *****
の ところがcontainerネームになりますですね。
76ad******fdc ubuntu:18.04 "/bin/bash" 2 minutes ago Up 2 minutes lion 7991******f1b ubuntu:18.04 "/bin/bash" 2 minutes ago Up 2 minutes albatross
こんな感じになります。
docker exec -it [containerネーム] /bin/bash
でcontainerの中を覗けますよ!docker-compose.yml内で一緒に立ち上げたcontainerなら名前解決もしているのでping
も通ります!
ping
が打てるようにするためのパッケージをinstallする。
apt update apt install iputils-ping
ping -c 5 [containerネーム]
で5
回ping
を打つ。
ping -c 5 lion ping -c 5 albatross
どっちのcontainerに入っていても、ping
が通るはずです!
DockerのubuntuイメージにMySQL-Client8.0.11をインストール。
DockerのubuntuイメージにMySQL-Client8.0.11をインストール。
こんにちは葛の葉です。
DockerのubuntuのコンテナにMySQL-Client8.0.11をインストールする機会があったのですが、
apt install mysql-client
と打ってもMySQL 5.7.22
のインストールが始まってしまうんですね。
それを頑張ってMySQL 8.0.11でインストールできるようにしてみました。
公式からapt更新用のファイルを持ってくればよい
wget https://dev.mysql.com/get/mysql-apt-config_0.8.10-1_all.deb
これでダウンロードしてきたものをdpkg -i
でインストールする。
dpkg -i mysql-apt-config_0.8.10-1_all.deb
これを実行すると…対話型にてaptのリポジトリの設定変更が発生する。
しかし、対話型はDockerfileで自動化するには向いていない。
コマンドが載ってるテキストをリダイレクトして対話型を終わらせる
設定画面では標準入力で1を押して2を押して4を押せばいいので、
text.txt
1 2 4
のテキストファイルをリダイレクトで渡せばよいです。
dpkg -i mysql-apt-config_0.8.10-1_all.deb < text.txt
また、これからapt update
を行い、その後apt install mysql-client
を実施します。
要するにDockerfileはこうである
Hostマシン
echo "1 2 4" > text.txt mv text.txt [dockerfileのあるディレクトリ]/cmdfile/text.txt
Dockerfile
# ディストリビューションの指定 FROM ubuntu:18.04 # wgetやdpkgを使うためのpackageのインストール RUN apt -y update RUN apt install -y wget lsb-release gnupg # 公式サイトから設定ファイルのダウンロードをwgetで実施 RUN wget https://dev.mysql.com/get/mysql-apt-config_0.8.10-1_all.deb # Hostマシンからコンテナへ、リダイレクト用の[text.txt]を渡す COPY ./cmdfile/text.txt /tmp/text.txt # 設定ファイルの実行 RUN dpkg -i mysql-apt-config_0.8.10-1_all.deb < /tmp/text.txt # 設定ファイルが実行され、aptの内容が更新されたため、改めてupdateの実施 RUN apt -y update # mysql-clientのインストールの実行 RUN apt install -y mysql-client
あとはDockerfileでbuildしよう!
2018/6/30 10:05追記
Docker Composeでupするんや
Docker Composeでupするんや
こんばんは、葛の葉です。
前回、前々回と続きDockerの話になります。前回は、ホストOSと共有が出来なかったという問題があったかなと思いますが、
docker-compose.yml
ファイルを使うことで、その共有もできるようになります。
そして、今回はDockerfileを使って作ったimageを元にcontainerを立ち上げてみましょう。
環境
Windows10 home
Docker Toolbox
まず、docker- compose.yml
というファイルをメモ帳とかvscodeとかvimで作ります。
そして、以下のように記載しましょう。
version: '3' services: myapp: image: atarashiiimage:latest volumes: - c:¥Users¥*****¥www:/project/www command:python /project/www/test.py
ついでに、試験用にpythonプログラムも作りましょうか。
test.py
のコードはいつものhelloworld。
print("Hello World!!")
このtest.py
をc:¥Users¥*****¥www
フォルダに入れておきましょう。
さて、Dockerを起動させます。そして、作業しているディレクトリをdocker-compose.yml
の置いてある場所に移動します。
そしたら、以下のコマンドをたたいてみましょう。
docker-compose up
を叩けばカリカリ動いて…test.py
が動くはず!!
Hello World!!
って出てれば成功です。やったぜ!!!!
DockerfileでホストOSのディレクトリをマウントしようとしてできなかったお話
DockerfileでホストOSのディレクトリをマウントしようとしてできなかったお話
Docker勉強中の葛の葉でス。
前回、Dockerfileを使ったほうがかしこいって話を少ししたかなと思っています。
Dockerでimageを生成するときはDockerfileを使ったほうがコマンドが作れるし、みんなで共有できていいねってことでカリカリ書いていました。しかし、ホストOSのディレクトリをマウントしようとしてやってもやってもうまくいかない!っていうことがありましたので共有をばと。
やったこと
環境
Windows10 home
Docker Toolbox
Dockerfileを打ち込み候
FROM ubuntu:18.04 RUN apt install update RUN apt install upgrade ; apt install python3 VOLUME ["/c/Users/*******/www","/pytest"] CMD python /pytest/helloworld.py
ビルドしてみる
docker build -t atarashiiimage . ~~~~~~~~~ ビルド画面は中略 ~~~~~~~~~ docker run atarashiiimage
Pythonがエラー吐く
python //helloworld.py うんちゃらかんちゃら…
なんかホストOSのディレクトリ がうまく読み込めてないみたい
期待した値は
python /pytest/helloworld.py
だったんだけど
コンテナ内に入ってみる
docker run -it atarashiiimage /bin/bash
lsコマンドで中身をみる
root@1234567890^ $ls /pytest
しーん…
えええええええええええええええ
なんにも入ってないの!?
原因1 DockerfileではホストOSのディレクトリをマウントできんらしい
詳しくはこちら コンテナでデータを管理 — Docker-docs-ja 17.06.Beta ドキュメント
Dockerfileはあくまでimageを作ることが目的っぽいねんな…
containerとして稼働させるときはDocker Composeを使いましょう…
Compose ファイル・リファレンス — Docker-docs-ja 17.06.Beta ドキュメント
原因2 Docker Toolboxでは/ディレクトリ直下にマウントできんらしい
docker runでcontainerを作るときに-v
を使えばマウントできます。
docker run -v /c/Users/*****/www:/pytest -it atarashiiimage
でも/pytest
のところがよくないみたい
docker run -v /c/Users/*****/www:/pytest/www -it atarashiiimage
こんな感じで/pytest/www
みたいに/直下じゃなくて一個ディレクトリを挟むといいらしい
原因X 共有場所の問題
その他にもルールはあるみたいで、Docker Toolboxでは/c/Users
以下じゃないとだめみたい。
Virtualboxあたりの関連かな?
とりいそぎ