Docker超入門②〜Dockerの始め方〜【初心者向け】

グローバルでAI開発者・データサイエンティストを目指す人向け
おすすめUdemy講座一覧

TOEIC300→海外就職の英語勉強法まとめ

こんにちは,米国データサイエンティストのかめ(@usdatascientist)です.

Docker超入門第二回です.今回はDockerを実際にインストールして使ってみます
Docker imageやDockerfileなどの用語についても説明をしていきたいと思います!

「Dockerってなに?!」な方は第一回の記事をご覧ください!

Docker超入門①〜Dockerってなに?〜【初心者向け】

自分がDockerの勉強をしたころ,どの記事も驚くほどわかりにくく,苦労しました...

でも,Dockerは基本の操作さえ抑えてしまえば本当に使いやすいし超便利です.今回もステップバイステップに超絶わかりやすく解説しますので,付いてきてください!

なお,本ブログではMacを推奨しております.Windowsを使っているという方,特に理由がなければ早い段階でMacに切り替えることをオススメします.

プログラミングを始めるならWindowsではなく絶対Macをオススメする理由5つ

Docker Hubに登録

では,早速DockerをMacにインストールしましょう.

Dockerの仕組みや概念はわかりにくいです.自分も最初みんなが言っていることがよくわかりませんでしたw

というわけで,まずは入れて使ってみましょう!!

MacでDockerを使う場合はDocker Desktopというアプリをインストールするのですが,そのためにDocker Hubというサービスのアカウントを作成します.

Docker HubはDocker imageを管理するレジストリです.Githubがコードを管理する場所であるように,Docker HubはDocker imageを管理する場所だと思っていただければいいです.

Dockerはコンテナという箱に開発環境や実行環境を簡単に構築できるものという話を前回の記事でしました.この「環境」というのは日々更新されていきますよね?使うパッケージのバージョンを更新したり(Tensorflow1.4から1.5に更新したり)新しいパッケージをインストールしたり.

これらもコード同様に管理が必要です.開発者全員が自分のPC(やサーバ)で「みんなと同じDockerコンテナ」を使って開発を進める必要があります.その役割を担うのがDockerレジストリです.

Docker HubというのはGithub同様,世界中の人がアクセスでき,オープンソースの実行環境などが公開されています.
(Githubについての連載もあります.まだつかったことがないという人はこちら

それでは,こちらからDocker Hubにアクセスしてアカウントを作りましょう!

‘Sign up for Docker Hub’をクリックし,Docker ID, Email, Passwordを入力します.

Docker IDはGithubのUsername同様,自分のリポのURLの一部になりますのでご注意ください.なお,Docer IDの変更はチケットの起票が必要だったりと手間です.

Sign Upするとフルネームや会社名を入れるフォームに遷移します.

記入をするとお決まりのAddress verificationのメールが送られてくるのでVerifyしましょう.

Login後以下のような画面になりますので,画面に従ってDocker Desktopをダウンロードします.

もし上記のような画面でなかった場合はこちらからアクセスしてください.

‘Download Docker Desktop for Mac’をクリックすると.dmgがダウンロードされますので,それをダブルクリックし,Applicationsにドラッグ&ドロップします.

LaunchpadからDockerのアイコンをクリックしてスタートします.右上にDockerのアイコンが表示されたらOKです.

Docker HubからDocker imageをpullしよう

うさぎ
Docker image? pull!?なにそれコワい

大丈夫です.一から説明します!

前回の記事でDockerはコンテナを作ってそこに環境構築をすると言いました.

そのコンテナはどのようにして作られるのでしょうか?

実はコンテナをいきなり作るのではありません.コンテナはDocker imageから作られます.

Docker imageというのは,コンテナを作るためのもととなるもので,携帯できます(配布したりできる).Docker Hubに保存されているものもDocker imageです.使いたいコンテナがあったらまずDocker imageを手に入れてそれを実行することでコンテナを作ることができます.

Docker fileというのは,ただのTextファイルで,Docker imageを作るための設計書です.Docker fileを使わなくても,コンテナ内で新しいパッケージをインストール(コンテナを更新)してDocker imageにすることができます(が,基本はDocker fileを常にメンテしてDockerfile⇨Docker image⇨コンテナというフローにすることをオススメします.)

うさぎ
まじで何言ってるかわからんカエリタイ

大丈夫w 今完全に理解する必要はないですよ.これからハンズオンでやっていくので徐々に慣れていけばOK!!

ぺんぎん
Docker imageがなにかよくわからないけど,Docker Hubから落とす(pull)する「なにか」なんだね

そう.ということで,まずはDocker HubからなにかのDocker imagepullしてみましょう!

まずTerminal上で以下のコマンドでDockerにログインします.ログインには先ほど登録したDocker Hubのものを使いましょう.
(本ブログではTerminalではなくiTerm2の使用をオススメしています.まだiTerm2を使っていない人はこちらの記事を参考にいれてみてください!

iTerm2を使う理由と機能・設定紹介【まだTerminal使ってるの?】

UsernameとPasswordを入力しましょう.すると Login Succeeded と表示されればログイン成功です.

それでは早速Docker imageをpullしてみましょう!ここでは試しに hello-world:latest というDocker imageをpullします.

pullをするコマンドは $docker pull {IMAGE:TAG} です.今回pullするdocker imageはhell-worldというIMAGE名のlatestというTAGのものです.

このTAGというのはDocker imageのバージョンのようなものだと思っていただいてOKです.

それでは以下のコマンドをTerminalで実行しましょう.

すると以下のような結果が返ってくると思います.

どうやらlibrary/hello-worldからimageをpullしているようです.

うさぎ
library…?とは??

このlibrary/というのはDocker Hub Libraryをさし,その中のhello-worldというレジストリからpullしているのです..

先ほどDocker Hubにログインしましたよね?( $docker login )
その状態でpullをすると,まずDockerは指定されたIMAGE名のレジストリをDocker Hub Libraryからpullしてきます.

なお,hello-worldのレジストリはこちらにあります.Dockerの公式imageです.

うさぎ
まだDocker imageがなにかよくわからないけど,pullできたのはわかった.でもそれってどこにあるの??

Terminalで $docker images で今手元にあるDocker imageのリストを確認できます.

Docker imageからコンテナを作成しよう

このDocker imageはコンテナの元となるものです.

それでは,Docker imageからコンテナを作成(run)してみます!
$docker run {IMAGE}runできます.(同じDocker imageがある場合はTAG名をつけます.{IMAGE名:TAG名}という感じで)

すると以下のような文が表示されます.

うさぎ
ナニコレコワイ

これは,hello-worldというコンテナが実行され,その実行の結果(テキスト出力)です.

コンテナはサービスの実行環境となると言いましたね?このhello-worldのDocker imageには上記のテキストを出力するという命令があらかじめ設計書に書かれていて,コンテナを作成した時にその命令が実行され,テキストが出力されたのです

うさぎ
チョットナニイッテルカワカラナイヨ

大丈夫大丈夫w まだわからなくてもこれから何度も同じようなことをしていくので,その都度説明しますね.この連載が終わる頃には完全に理解していますよ!

ぺんぎん
まだコンテナがなんなのかわからないけど,そのコンテナは今どこにあるの?

コンテナの一覧は $ docker ps -a で確認することができます.

補足
$docker psは,activeのコンテナだけ表示されます.
STATUSExitedになっていることにお気づきでしょうか?

実は普通にDocker imageをrun(optionを付けずに)をすると,コンテナ作成(run)⇨コンテナをexitという流れになります.つまり,もうコンテナの中にはいなくて出ちゃってるんですね〜 なので $docker ps (activaのものだけ表示)をしてもなにも表示されないですよね!

コンテナを出ずにコンテナ内に入るには $docker run -it {IMAGE:TAG} bash を実行します.-itというoptionは,コンテナ内でTerminal上にきちんと出力などを表示させたり入力できるようにしたりするいわば「Interactionを可能にする」ものです.

bashというのは,runした後の実行コマンドです.通常runコマンドではコンテナを実行したあとに追加で実行したいコマンドを書きます. $docker run -it {IMAGE:TAG} {コマンド}

つまりコンテナ実行したらそのままbashを起動させるということですね.(bashについてはこちらの記事をご参考ください.) $docker run -it {IMAGE:TAG} bashこの形はよく使うので覚えておくといいです.

それでは $ docker run -it hello-world bash を実行してみましょう.

ぺんぎん
e, errorが・・・

そうなんです,実はhello-worldにはbashというコマンドを受け取るものがないんです.もう一度hello-worldの出力をみてみましょう.

hello-worldのコンテナにはubutuが入っていないので,そもそもbashできないんですね.

UbuntuというのはLinux系のOSの一つです.Linuxについてはこちらの記事で触れています.

プログラミングを始めるならWindowsではなく絶対Macをオススメする理由5つ

今回は長くなったのでここまで!次回の記事ではubuntuコンテナを使って実際にコンテナに入って作業をしてみたいと思います!

まとめ

かなり長くなってしまいましたが,まとめると

  • 最初はDockerというのは本当にわかりにくい
  • けどめちゃくちゃわかりやすく解説するから頑張って付いてきて
  • Docker HubはDocker imageが保管されてる
  • Dockerfile⇨Docker image⇨コンテナの流れで作られる.(今回はDocker imageをそのまま落としてきました.)
  • ログイン: $docker login
  • pull: $docker pull {IMAGE:TAG}
  • image一覧: $docker images
  • imageからコンテナを作る run : $docker run {IMAGE:TAG}
  • imageからコンテナを作って中にはいる run : $docker run -it {IMAGE:TAG} bash
  • コンテナ一覧: $docker ps -a

今回の内容があまりわからなくても,また次回同じような作業をするのでご安心を!

何事も反復練習です♪

Twitter(@usdatascientist)ではデータサイエンスのことや海外勤務のことなど,有益な情報を配信しております.

よろしければフォローお願いいたします

それでは!!

第三回更新しました♪実際にコンテナで作業してみます!

Docker超入門③〜Dockerコンテナを使ってみる〜【初心者向け】