Kuzunoha-NEのブログ

プログラミングなどの勉強をしてます

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ファイルを使うことで、その共有もできるようになります。

kuzunoha-ne.hateblo.jp

kuzunoha-ne.hateblo.jp

そして、今回は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.pyc:¥Users¥*****¥www フォルダに入れておきましょう。


さて、Dockerを起動させます。そして、作業しているディレクトリをdocker-compose.ymlの置いてある場所に移動します。

そしたら、以下のコマンドをたたいてみましょう。

docker-compose up

 

を叩けばカリカリ動いて…test.pyが動くはず!!

Hello World!!

って出てれば成功です。やったぜ!!!!

DockerfileでホストOSのディレクトリをマウントしようとしてできなかったお話

DockerfileでホストOSのディレクトリをマウントしようとしてできなかったお話

Docker勉強中の葛の葉でス。

前回、Dockerfileを使ったほうがかしこいって話を少ししたかなと思っています。

kuzunoha-ne.hateblo.jp

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あたりの関連かな?

とりいそぎ

Dockerってのを使ってみようぜwwwww

Dockerってのを使ってみようぜwwwww

www.docker.com

昔、フリーのライターやってたときDockerの記事書こうとして「Dockerなんてどうっすかーwwww」ってふざけたタイトルでやろうとして速攻で落とされてなかったことになった葛の葉です。いまは技術者としてDockerに触れる側になったのですが、当時、ライターの時は触ったことすらないのに、記事書こうとしてたからまぁどうしかしてったーんですね。

しかし、触ったところでわかる程度の頭のよさってわけでもなく…結局のところ、いまだにわからないところが多いのです。

とりあえずわかったこと

まぁわからんなりにやってたからそれなりにまぁわからんこともなくなったから備忘録的に書いてみることにした。

仮想環境を構築するらしい。

前提のお話として、Dockerとはcontainerと呼ばれるアプリケーションを管理する仮想的な領域を持っているみたい。 必要なソフトウェアだけ入っている領域を作れるということで、便利にいいわけということみたいです。 あとはDockerの場合、あくまで領域を作るだけなので、OSを組み込むわけではないので動作が軽いんです。 (OSっていうかkernel?)

それと仮想的な領域なので、コピーをペーして使いまわせるっていうことと、 GoogleのサービスでKubernetesっていうのを使えば、作ったcontainerを クラウド上でそのまま本番運用に使えるってことです。

クラウドと組み合わせればだれでもサービス作れるっていうことなんだねぇ。スゴイネ。

kubernetes.io

Dockerfileを使ったほうがかしこいらしい。

docker  run -it [images]

このコマンド使ってimage内に侵入して、コマンドたたいてpackageをインストールしてたんですけど、これよくないらしい。Dockerfileというbatファイルみたいなものがありまして、新規のcontainerを作るときに「こういう順番でソフトウェアをインストールする」という手順を記載したDockerfileを通してあげると、その通りのインストールしたcontainerが出来上がるらしい。

色んなサービスを作る企業人には大助かりだし、Linux全く触ったことない人でも、2,3コマンドを覚えてもらえれば、同じクオリティの環境が作れる。便利だねぇ。

ちなみに下をコピーしてもらえれば、最新のubuntuとPython3.6.5が入ったcontainerが作れる。(はず)


vimでDockerfileを作る(ちなみに”D”は大文字じゃないとだめ!)

vim Dockerfile

Dockerfileの中身は以下の感じ

FROM ubuntu:18.04

RUN apt install update
RUN apt install upgrade
RUN apt install python3

あとは、Docker buildコマンドでbuildする

docker build -t [好きなimage名] {Dockerfileのあるディレクトリのパス}

あとはカリカリ動いてくれるはず。


わからんこと

全然わからん!ところ

環境を作ってからどうすんの

環境環境っていっても、こっから先どう触ったもんか見当もつかんです。作ったPythonのコードをコンテナ内に入れるの?それともホストOSに入れる?どっちなんだろう。話を聞いた限りだと後者っぽいんだけど…

まだまだDockerについて勉強していくから、この辺り更新していきます!!!!

以上です!!!!!

インターネットにつなげると時間が自動で正確になるのです

インターネットにつなげると時間が正確になるのです

※追加:スマートフォンについて、時刻修正は基本的にNTPを使用していないのではないのでは?というご指摘をいただきましたので、後ほど記事を修正を行います。パソコンについての記載と読み替えていただければと思います。ごめんなさい。


 

ずいぶんご無沙汰しております。葛の葉です。

 

いつのまにか5月に突入しており、びっくりしております。時計をちゃんと見ていないと、日付ってわからなくなりますよね。ところで(?)、スマートフォンやパソコンをインターネットにつなげると、すぐに正確な時刻に修正されることをご存知でしょうか。

 

これって、実はすごいことだと思いませんか?ほんの10数年前までは、「117」の時報に電話をして、それに併せておかしくなった時計を手動で直していたのです。ですが、現在はインターネットに接続すれば、時間を確認することも、直すのも自動なのです

 

今回はスマートフォンやパソコンの時刻を正確に直す仕組みについて、書いていこうと思います。

 

  

「正確な時刻」を知っているNTPサーバーさんに聞いているわけです

 

すごーく簡単な話をしますと、ネットワークを介して、正確な時刻を知っているNTPサーバーさんと呼ばれるコンピューターに定期的に現在の時刻を確認しているからなんです。

 

ほんとそれだけ。

 

正確な時刻を知っているNTPサーバーさんに対してスマートフォンやパソコンが「いま日本の時間は何時なのん?」って聞いていまして、

NTPサーバーさんは「あー…日本だと…2018年のぉ…5月3日の水曜日でぇ…10時14

分23秒だねぇ」って言ってるだけなんです。

 

f:id:Kuzunoha-NE:20180522212556p:plain

 

それを聞いたスマートフォンやパソコンは「OK~じゃあ、その時間にするわ~」っていって、時刻の修正を行います。

 

こうやって、正確な時刻になっているわけなんですね。

 

 

ちょっとまてよ、どうしてNTPサーバーさんは正確な時刻を知っているのだろう?

 

 

NTPサーバーさんもまた聞きなわけです

 

NTPサーバーさんはどうして正確な時刻を知っているのだろう?そもそもNTPサーバーさんが知っている時刻って正確なのだろうか?適当な時間を言ってないだろうか?

 

実は、NTPサーバーさんが正確な時刻を知っているのは、NTPサーバーさんも別のNTPサーバーさんに時刻を聞いているのです。つまり、また聞きをしているのです。

 

NTPサーバーさんはインターネットに沢山いまして、階層構造になっております。上長だったり、ボスがいるみたいに思ってください。

 

NTPサーバーさんはボスのNTPサーバーさんに「親分、今の時間は何時ですかい?」と聞いて、ボスのNTPサーバーさんは「おう、今は何月何日の何時何分何秒だぜぃ」と教えています。そして、そのボスのNTPサーバーさんも、自分よりも上のボスのNTPサーバーさんから時刻を教えてもらっています。

 

なんてこった。また聞きのまた聞きを繰り返していくわけですね。

 

しかしそうなると、最後のボスのNTPサーバーさんは誰から「正確な時刻」を聞いているのだろう?

 

Stratum0と呼ばれるNTPサーバーさんのボス、つまりはトップ

 

先程、NTPサーバーさんは沢山いて、段階構造になっていると書いたと思います。その階層構造のことをStratum(ストラタム、ストレイタムとも)と呼びます。

 

トップのNTPサーバーさんのことをStratum1と呼び、その下流にいくにつれStratum2、3、4…と数字が増えていきます。先程のボスの例えで言えば、Stratum3のNTPサーバーさんのボスはStratum2に当たります。

 

f:id:Kuzunoha-NE:20180522212616p:plain

 

 

 Stratum1のNTPサーバーさんはStratum0に時刻を聞きます…このStratum0さんは何者かと言うと原子時計であったりGPS時計であったりするのです。

 

専門的なことはよくわからないですけど、原子時計GPS時計もかなり正確な時刻を刻むものらしいので、その時計から時間を聞いているのでStratum1のNTPサーバーさんは正確な時刻を知ることが出来ているわけなんですねぇ。

 

きちんとした情報源からまた聞きを繰り返してきて、最終的にスマートフォンやパソコンは正確な時刻を把握しているわけなんです。

 

鳥瞰的に考えてみよう

 

じゃあ最初からまた聞きなんかしないで、Stratum0にみんなが時間を聞けばいいじゃん!って思うかもしれませんが、そういうわけにもいかんのです。

 

世界中のパソコンやスマートフォンがStratum0にアクセスしてみたとしましょうか。

 

Stratum0さんはてんやわんやになります。所謂、ワンオペになっちゃいます。

 

だから、同じ役割をもつNTPサーバーさんを束に揃えて、それぞれに問い合わせをするようにしたわけなんですね。それがStratumという階層構造になるのです。

 

 

WinパソコンがどのNTPサーバーさんに時刻を聞いてるか確認しよう

 

今、自分のパソコンがどのStratumのNTPサーバーさんに時刻を聞いているか確認してみましょう。

 

コマンドプロンプトを立ち上げて

w32tm /query /peers

と入力し、エンターを押してみてください。

 

コマンドプロンプトの立ち上げ方はちょっと調べてみてください。)

 

f:id:Kuzunoha-NE:20180522212633j:plain

 

ピアが、現在、お使いのパソコンで時刻を聞いているNTPサーバーさんのアドレスです。このアドレスにあるコンピューターに時刻を確認しているわけですね。

 

階層が、Stratumになります。このtime.windows.comはStratum4に当たるようです。

 

時間が自動で修正されるってすごいことだ

 

NTPサーバーさんについて、簡単に説明しましたけど、何となくわかってもらえたでしょうか?本当はもう少し複雑なので、残りは君自身の眼で確かめてみてくれ!

 

インターネットに繋ぐことで自動化が出来ていることは他にもあるので、次回も同じような感じの記事を作りたいと思います。

Python3の仮想の実行環境をVirtualenvで作ってしまう

こんにちは葛の葉です。

python3でflaskを使ったWebアプリケーションの勉強を行おうと思っています。

ただ、私は「Django」という別のWebフレームワークをインストールしているため、新しく「flask」を導入するのは怖いと思っています。

そこで、Pythonの新しい実行環境を作るべく、仮想環境を立ち上げることにしました。その方法が「virtualenv」です。仮想環境を立ち上げれば、それぞれの仮想環境上でライブラリをインストールできますので、ライブラリ同士のいたずらが発生しなくなります。

  • もくじ
  • 実行環境

windows 10

python 3.6.3

Anaconda 1.6.5

  • virtualenvのインストール方法

pipインストールでいけます。

コマンドプロンプトを立ち上げて以下のコマンドを入力すればOKです。

pip install virtualenv
  • virtualenvを使って仮想環境を構築する

virtualenvで環境を構築しましょう。以下のコマンドを叩けば好きな名前の仮想環境が構築されます。

virtualenv fsk

※fskは好きな環境名を入れましょう

しばらくすると英文で完了したメッセージが出ますので、そうしたら完了になります。

  • virtualenvで構築した仮想環境を実行する。

virtualenvで構築した仮想環境はその直下に、先に入力した[fsk]ディレクトリが生成されています。 ※fskは先に入力した好きな環境名です。

[fsk]ディレクトリが作られて f:id:Kuzunoha-NE:20180522205530j:plain

[fsk]直下に[Scripts]があります f:id:Kuzunoha-NE:20180522205550j:plain

更にその直下に[Scripts]というディレクトリが作成されていますので、そこまで]コマンドプロンプト上で移動してください。

f:id:Kuzunoha-NE:20180522205705j:plain

cd fsk/Scripts

※fskは先に入力した好きな環境名です。

その状態でactivateコマンドを実行します。

activate

操作しているディレクトリの頭に(fsk)という文字が出ていれば成功です。 f:id:Kuzunoha-NE:20180522205719j:plain

  • 仮想環境から抜けるには

vituralenvで作成した仮想環境から抜ける場合はdeactivateを実行します。

deactivate

f:id:Kuzunoha-NE:20180522205730j:plain

  • おわりに

これを使ってpip installを使えばfsk環境で好きにライブラリを入れ放題になるはずです!!!!ちょっと遊んでみよう。

正直、そこらの参考書買うよりいいんじゃないかなっていうくらいオトクなUdemy

こんにちは

 

最近、Python3の勉強をしている葛の葉ともうします。

 

Python3にかぎらず、独学で何かを勉強するのはなんでも骨が折れると思います。私がいま、具体的にどんな方法で勉強しているかというとUdemyという動画配信サービスによるオンライン講習を使用しています。

 

 今回はそのUdemyについて書いていこうと思います。

 

 

Udemyの素晴らしいと思うところ

Udemyはオンラインで動画を見ることが出来る動画講座サイトです。基本的には英語圏の方が利用されているようでして、日本語のものはまだまだ少ないというのが現状です。(2018/2/18現在)

 

ですが、日本語の講師も沢山いますし、英語で人気の講座が日本語に翻訳されて配信されていたりします。もし勉強したいと思っている学問があるのであれば、とりあえず検索してみてはいかがでしょうか。

 

www.udemy.com

 

とにかく安い

Udemyは通常価格ですとお値段が結構するのですが、だいたいいつも割引セールを行っています。15,000円の動画が1,400円だったりするから驚愕です。しかも買い取り式なので、月額料金とかも掛からないんです。

 

Python3だと、本屋さんで参考書を買おうとすると同じ値段かそれ以上に掛かってしまいますが、Udemyならお釣りが来るくらいですね。いつもチェックしておいて、欲しい講座が安いときに買う、これがベストな方法な気がします。 

 

質問すると講師が教えてくれる

Udemyは講師の人に質問することが出来ます。同じ講座を受けている人がした質問なんかも覗くことが出来ます。なにか困ったこと、わからないことがあったら「Q&A」を覗いてみてください。もしかしたら、同じところで躓いている人がいるかもしれません。

 

講師の人がそれに答えてくれている場合もありますし、質問者が自分で解決しているケースもあります。質問者の人もどのように解決したか、ちゃんと記録として残してくれていますのでとてもありがたいです。自分がQ&Aに書くときは同じようにしましょう。

 

動画ならではの受講スタイル

Udemyは動画講座ですので、シークバーをいじれば重要なところをもう一度聞くことが出来ます。例えば、動画の通りにプログラミングを書いてみる、説明を聞く、一時停止して、自分のプログラミングコードを見直す、といったことが可能です。

 

また、再生速度も0.75倍に遅くしたり、逆に1.25倍に早めたりすることが出来ます。私がいつも見ている講座では、0.75倍にしています。講師の人の話の速度についていけないわけではないのですが、ゆっくりなほうが私に性に合っているようです。

 

講座に動画が編集、追加されているケースも

Udemyでは受講者がQ&Aを使って講師とやりとりすることが出来ます。その中で、講師が取り入れたいと思った内容のものや既にアップロードされている動画で編集したいと思った箇所については、追加や変更がなされていることもあります。

 

ですので、既に購入済みで見終わった動画も、もしかしたら追加されているものがあるかもしれませんし、内容で行き詰ったところも編集されてわかりやすくなっているかもしれません。動画の内容が常に最新になるように編成されているようです。

 

 

困ったところもやっぱりある

Udemyはとても勉強に向いていると思うのですが、反面、よくないなと思うところもあります。

 

音質にバラつきがある

Udemyは講座によって、音響面での質の差が、講師によってはっきりと出てきます。マイクの音質が悪かったりしますし、音量が低くて聞き取りにくい講師の人や、ツバを飲み込む音が聞こえる講師の人など様々です。収録環境が講師によって異なるところが原因と考えます。

 

講師の教え方にバラつきがある

様々な講師がいるUdemyですので、教え方も千差万別といったところでしょうか。人によっては随分と雑な教え方をする講師もいます。前述した編集機能を使ってちょくちょく変更がかかっていたりする人もいます。画面が切り替わったと思ったら直前の動作と違うコードが書かれていたりと困惑するところもあります。

 

そういったところを見極めるには、購入前に幾つかプレビュー動画を無料で見ることが出来ますので、事前によく見てから判断しましょう。本屋さんで立ち見するのと同じ感覚でしょうかね。

 

 

 動画だからわかるUdemy

Udemyについて、いいところとわるいところ、少し書いてみましたがいかがだったでしょうか。自分の学びたいと思っている講座があれば、Udemyを利用してみるというのも手ではないでしょうか。