Dockerの使い方について、「Docker Desktop」のインストールから「イメージ」「コンテナ」の作成、動作確認、コンソールでのコマンド操作方法まで、初心者でも基本的な使い方がわかるように順を追って実践しながら、詳しく紹介していきます。
実際の例としてpythonの実行環境を作る方法で紹介していきます。
Dockerで環境構築すると、ホストマシンの実行環境を荒らすことなく、新しい実行環境が作れて色々なバージョンの環境を試したり、簡単に削除して作り直したりできて便利なので、あまり難しく考えずにチャレンジしてみましょう♪
1.Dckerとは
2.Docker Desktopのインストール
・インストール方法
・起動時エラーの対処方法
3.Dockerデスクトップの使い方
・公式チュートリアルで動作確認
・image(イメージ)画面の機能紹介
・container(コンテナ)画面の機能紹介
4.コマンド入力(CUI)で操作
・CUI環境の起動
・Dockerの基本コマンド集
・Linuxの基本コマンド集
5.Dockerコマンドでの基本的な使い方(例:pythonの実行環境作成)
・イメージの検索(search)
・イメージの取得(pull)
・コンテナ作成(run)
・コンテナ内のコンソールに接続(exec)
・コンテナの起動/停止/削除(start/stop/rm)
・ローカルフォルダとの同期
・ローカルフォルダのサンプルプログラム実行
6.オリジナルのイメージ作成
・Dockerfileの作成
・Dockerfileからイメージ作成(build)
7.Docker Hubの使い方
・Docker Hubでできること
・アカウント登録と最初のリポジトリの作成
・イメージのアップロード(push)
・オリジナルイメージの公開
・コンテナからイメージを作成(commit)
8.まとめ
1.Dckerとは
Dockerとは、Docker社が開発している、「コンテナ型」の「仮想環境」を作成、配布、実行するためのプラットフォームです。
「仮想環境」とは、1つの物理マシン上に複数の独立したコンピューターの実行環境を仮想的に構築したものです。
Dockerの主な使用方法は以下の3つになります。
- アプリケーションのコンテナ化
「コンテナ」は、「Dockerfile」と呼ばれるテキストファイルにアプリケーションの実行に必要なソフトウェアや設定ファイル、操作内容を記述して実行することで「イメージ」を作成します。
この「イメージ」を使用して実行条件や使用ポート番号、ホストマシンとの同期フォルダ等を指定して「コンテナ」と呼ばれる仮想環境を作成します。 - コンテナの実行
作成した「コンテナ」は、「Docker Desktop」アプリやコンソールで「dockerコマンド」を使用して起動します。
「コンテナ」を起動すると独立した「コンテナ」環境の中で、ホストOSのカーネルを共有してアプリやミドルウェアなどを動作することができます。 - コンテナの配布
「Docker Hub」と呼ばれる「イメージ」の共有サービスを使用して「イメージ」を公開して配布することができます。
「イメージ」を公開することで、他のユーザーが簡単に「イメージ」を取得して同じ環境を利用できたり、自分の別のパソコンでも同じ環境をすぐに構築できるようになります。
Dockerはアプリケーションの開発・運用を効率化するための有力な技術で、以下のようなメリットがあります。
- 開発環境の構築と共有が容易になる。
- アプリケーションの配布とデプロイが容易になる。
- クラウド環境でのアプリケーションの運用が容易になる。
- ホストマシンの実行環境を荒らすことなく、新しい実行環境の構築や削除ができる。
Dockerは、オープンソースソフトウェアであるため、無料(条件あり)で利用することができます。
Dockerのインストール方法や使用方法は、英文ですが以下の公式ドキュメントでも確認できます。
2.Docker Desktopのインストール
Dockerを使用するには「Docker Desktop」をインストールして起動しておく必要があります。
まずは「Docker Desktop」のインストール方法について詳しく紹介します。
・インストール方法
以下のリンクをクリックしてインストールページへアクセスしてください。
以下のページが表示されたら、ご自身のパソコン環境に合ったものをクリックしてください。
ここでは「Windows」環境を例に紹介していきます。
以下のようなページが表示されたら[Docker Desktop for Windows]をクリックしてください。
下画像のようにダウンロードが始まるので終わるまで待ちます。(画像はEdgeブラウザの場合です。)
ダウンロードが終了したら[ファイルを開く]をクリックします。
下画像のように表示されない場合、ファイルはダウンロードフォルダに保存されているので、そちらからクリックして実行してください。
ファイルを実行すると、下画像のようなウインドウが表示されるので[はい]をクリックします。
以下のようにインストール画面が表示されるので順番にインスールしていきます。
インストールが始まるのでしばらく待ちます。
上画像の画面では2箇所のチェックマークが入っていることを確認して[OK]をクリックしてください。
上画像のように表示されたらインストールは完了です。[Close and restart]をクリックすると「Docker Desktop」が起動します。
上記のような「セキュリティソフト」の警告が出た場合は内容を確認して問題なければ許可してください。
ブロックするとインストールはできません。
以上でインストールは完了です。
初回起動時には以下のようなサブスクリプションに関する同意画面が表示されます。
現時点では以下の条件に当てはまる場合は無料で利用できます。→詳細はこちらを参照
・個人利用
・スモールビジネス(従業員数250名未満かつ年間売上高1000万ドル未満)
・教育機関
・非商用のオープンソースプロジェクト
条件を確認して問題なければ[Accept]ボタンをクリックします。
次に以下のようなアカウント作成ページが表示されますが、後でも作成できます。
アカウントは作成しなくても使用できるので、今は閉じて終了しましょう。
・起動時エラーの対処方法
初回起動時にはエラーが出て起動できない可能性があるので、それぞれの対処方法について紹介しておきます。
エラーが発生した場合は下画像のような画面のまま「Docker Desktop」は起動されないため、一旦閉じておきましょう。
エラー1:ハードウェアの仮想化機能が無効になっている
以下のエラーはパソコンハードウェアの仮想化機能が無効になっている場合に発生します。
対処法は「BIOS設定」で仮想化機能を有効にする必要があります。
パソコン起動時にWindowsが立ち上がる前に「F2キー(Deleteキー等パソコンによって異なります)」を何度か押すと「BIOS設定」画面が表示されます。
その中でCPU に関連する項目を見つけます。
パソコンによって異なりますが、例えば 「 Processor 」「 Chipset 」または 「 Northbridge 」という見出しの下にあります。
さらに、その中にある仮想化を有効にします。
この設定は「 VT-x」「AMD-V」「 SVM」または「Vanderpool」となっている場合があります。
オプションが利用可能な場合は「Intel VT-d」または「AMD IOMMU」を有効にします。
以下は、私のパソコンの中で唯一仮想化が無効になっていた古いパソコンのBIOS画像です。
「Intel(R) Virtualization Technology」が「Disabled」で「無効」になっていたため「有効」にして、再起動するとエラーは発生しなくなりました。
詳細は、以下の公式のトラブルシューティングでご確認ください。
エラー2:WSL(Windows Subsystem for Linux)のバージョンが古い
以下のエラーはWSL(Windows Subsystem for Linux)のバージョンが古い場合に発生します。
Docker Desktopでは「WSL2」が使用されます。Windowsのアップデートを日頃行っていれば「WSL2」が既にインストールされていると思いますが、インストールされていない場合は「PowerShell」を起動してインストールする必要があります。
「PowerShell」はWindowsの画面下ツールバーにある検索ウインドウに「power」と入力すると、下画像のように「Windows PowerShell」が表示されるのでクリックして起動します。
「PowerShell」が起動されると下画像のようなアプリが起動するので、ここにコマンドを入力して操作していきます。
まずはインストールされている「WSL」のバージョンを確認するために、以下のコマンドを入力してENTERを押します。
wsl --status
「既定のバージョン: 2」と表示されれば「WSL2」がインストールされているので、引き続き以下のコマンドを入力後ENTERキーを押すとアップデートが開始されます。
wsl --update
アップデートが開始すると以下のようなウインドウが表示されるので[ はい ]をクリックします。
下画像のようにアップデートが実行されるのでしばらく待ちます。
下画像のような画面が表示されたらアップデートは完了です。
デスクトップにある以下のアイコンをクリックすることで、今度はエラーが発生せずに「Docker Desktop」が起動されるはずです。
もし「WSL」がインストールされていない場合は、以下のコマンドを実行することでインストールできます。
wsl --install
「WSL」のインストール方法は以下のページで詳しく紹介されています。
3.Dockerデスクトップの使い方
「Docker Desktop」の基本的な使い方を公式チュートリアルを実行することで紹介していきます。
「Docker Desktop」を起動すると下画像のように読み込みが開始されるのでしばらく待ちます。
しばらくすると下画像のような画面が表示されます。
この画面で「Docker」を操作することができます。
・公式チュートリアルで動作確認
公式のチュートリアルを使って、まずは「コンテナ」を作成して動作確認してみましょう。
下画像の[What is a container?]をクリックします。
チュートリアルが開始されると下画像のように「コンテナ」が作成されます。
画面右のウインドウにはチュートリアルの内容が表示されていますが英語なので不要であれば閉じておきましょう。
コンテナの中の「Port(s)」に「8088:80」というリンクがあるのでこれをクリックします。
すると、以下のようにブラウザが起動され「Congratulations!!!」という画面が表示されます。
あまり実感は湧かないと思いますが(私もそうでした・・・)、これで「イメージ」から「通信ポート」をローカル環境と接続した「コンテナ」が作成され、その中の仮想環境でサーバーを起動させてWebページが表示できるようになりました。
上画像ブラウザの検索バーには「Locallhost:8088」とありますが、「Localhost」の部分をこのパソコンの「IPアドレス」に変更して、自宅で同じLANに接続しているパソコンやスマホのブラウザの検索バーに入力してアクセスすると同じ画面が表示されます。
これはコンテナを起動しているパソコンがサーバーとして機能して、コンテナ内のWebページを返してくれるためです。
試しにスマホから接続してみましょう。
パソコンのIPアドレスの確認方法は「PowerShell」で以下のコマンドを入力します。
ipconfig
「Power Shell」で「ipconfig」を入力してENTERを押すと、下画像のようにIPアドレス(下画像では192.168.0.27)が確認できます。
スマホのブラウザのアドレスバーに確認したIPアドレス(今回は192.168.0.27 ですが環境によって異なります)の後にポート番号「:8088」をつけて「192.168.0.27:8088」のように入力してアクセスすると、下画像のように先ほどと同じ画面が表示されます。
チュートリアルでは簡単なWebページだけですが、コンテナ内のフォルダに自分で作成したWebページのファイルを置くことで、そのページを表示することができます。
コンテナを終了するには下画像の「Actions」にある[Stop]ボタンをクリックします。
その横の「ゴミ箱」アイコンをクリックすると削除することができます。
以上が「Docker Desktop」を使用した「Docker」の基本的な使用方法の流れです。
チュートリアルではいきなり「コンテナ」が作成されたように見えますが、実際は「イメージ」を準備して、その「イメージ」を使用して「コンテナ」を作成、起動して動作確認を行っています。
次からはそれぞれの画面について詳しく紹介します。
・image(イメージ)画面の機能紹介
左メニューの[Images]をクリックすると、下画像のような画面で現在使用できる「イメージ」の確認と操作(「RUN」ボタンから「コンテナ」作成)ができます。
確認できる内容は以下になります。
- Name:「イメージ名」です。「イメージ名」は「ホスト名/任意のイメージ名(リポジトリ名)」とすることが一般的で、管理もしやすくなります。
「イメージ名」の下にある「イメージID」は「イメージ名」の代わりに指定することができます。 - Tag:バージョン情報です。「latest」は最新バージョンを表す場合に使用します。
- Status:イメージの使用状況です。コンテナで使用されているものは「in use」、使用されていないものは「Unused」となります。「in use」のイメージは「コンテナ」で使用されているため、削除することができません。(タグ付けというコピーされたものは削除できます。)
- Created:どれくらい前に作成されたかを確認できます。
- Size:イメージのデータサイズです。
- Actions:[RUN]ボタンを押すことでそのイメージを使用して新たな「コンテナ」の作成ができます。[ゴミ箱]アイコンをクリックすると削除(Unusedの場合)できます。
RUNボタンからのコンテナ作成方法
「Actions」の[RUN]ボタンを押すと以下のようなウインドウが表示されます。
ウインドウ内の[RUN]ボタンを押すことで「ランダムな名前」で「コンテナ」が作成されます。
名前を指定したい場合やホスト側とコンテナ側のポートの接続やフォルダの同期が必要な場合は「Optional settings」の[下矢印]をクリックすると、下画像のような表示になり、詳細設定を行うことができます。
ここで設定できる内容は以下になります。
- Container name:コンテナの名前を指定します。空白にするとランダムな名前が設定されます。
- Ports:[Host port]に「コンテナ」側ポートと接続したいホストパソコン側のポート番号を指定します。「0」を設定するとランダムなポートが設定されます。
(公式チュートリアルではここが「8088」でした。) - Volumes:ホストパソコン側(Host Path)とコンテナ側(Container Path)のフォルダを同期させたい場合に、それぞれのフォルダの場所を示す「パス(Path)」を指定します。
- Environment variables:コンテナ側で使用したい「環境変数」を指定できます。[Variable]に変数名、[Value]に値を指定します。
設定完了後に[RUN]ボタンを押すことで、新たな「コンテナ」が作成できます。
・container(コンテナ)画面の機能紹介
左メニューの[Containers]をクリックすると、下画像のような画面で作成した「コンテナ」の稼働状況の確認と操作(「Start」ボタンの部分でコンテナの起動、停止)ができます。
確認できる内容は以下になります。
- Name:「コンテナ名」でコンテナ作成時に指定した名前です。コンテナ作成時に指定しなかった場合はランダムな名前で表示されます。
- Image:使用されている「イメージ名」です。
- Status:コンテナの稼働状況です。コンテナが稼働している時は「Running」、停止している時は「Exited」となります。
- CPU(%):CPUの使用率です。
- Port(s):「パソコン側ポート」と接続している「コンテナ側のポート」が確認できます。
「:」を挟んで左が「パソコン側ポート」、右が「コンテナ側のポート」です。
コンテナ稼働中にクリックすると「パソコン側ポート」を通して「コンテナ側ポート」に接続されて通信することができます。 - Last Started:コンテナが稼働してからどれくらい時間が経ったかを確認できます。
- Actions:[RUN]ボタン部分を押すことでコンテナの稼働、停止を行うことができます。
停止中に[ゴミ箱]アイコンをクリックすることでコンテナを削除できます。
・container(コンテナ)詳細画面の機能紹介
コンテナ画面で各コンテナをクリックすると、詳細情報の確認やコンテナ内のコンソール操作、フォルダやファイルの確認、編集等ができます。
下画像のようにチュートリアルで作成した「コンテナ」をクリックしてください。
まずは下画像のような「ログ」の確認画面が表示されます。
画面右上には起動、停止、更新、削除ボタンがあります。
[Inspect]をクリックすると、コンテナの詳細情報がJSON形式で確認できます。
[Bind mounts]をクリックするとパソコン側とコンテナ側で同期されているフォルダの内容が表示されます。
今回のチュートリアルでは同期したフォルダは無いため何も表示されません。
[Exec]をクリックするとコンテナ内のコンソール画面が表示され、Linuxコマンドを入力して操作できます。
下画像では「ls」コマンドでルートフォルダ内のフォルダとファイルを表示しています。
次に「find」コマンドでWebページを表示させている「index.html」ファイルの場所を検索しています。「usr/share/nginx/html」フォルダ内に「index.html」ファイルがあることが確認できました。
[Files]をクリックするとコンテナ内のフォルダ構成が確認できます。
下画像では、先ほど検索した「index.html」ファイルを選択しています。
画面右上の[Hide file editor]を押すと、画面下にファイルの内容が表示されます。
フォルダ名で右クリックすると「編集、削除、保存、インポート」等の操作メニューが表示されます。
[Stats]をクリックするとコンテナの各稼働状況が確認できます。
ここまで「Docker Desktop」を使用した、視覚的に操作できる「GUI:Graphical User Interface」環境での操作方法を紹介してきました。
一度作成した「コンテナ」の稼働、停止や、複数の「コンテナ」の稼働状況の確認には「GUI」環境は視覚的に確認できて便利ですが、「イメージ」の作成にはコマンド入力で操作する「CUI:Character User Interface」環境での操作が必要になります。
コマンド入力による操作は慣れるまでは大変ですが「Docker」を使いこなすには必要不可欠なため、次からは「CUI」を使用した「Docker」の使用方法を紹介していきます。
4.コマンド入力(CUI)で操作
ここからは「Docker」を使用する上で不可欠な「CUI:Character User Interface」環境(コンソール)での使用方法を詳しく紹介していきます。
「Docker Desktop」でもほとんどの操作は可能ですが、作成した「コンテナ」側の操作はコンソールで「Linuxコマンド」での操作が必要になります。
ここでは「Dockerコマンド」と合わせて、基本的な「Linuxコマンド」についてもまとめましたので先に確認しておきましょう。
・CUI環境の起動
「CUI」を使用する環境は、使用するOSやツールによって異なります。
ここでは基本的なものについて紹介します。
WindowsのCUI環境
WindowsのCUI環境は「Docker Desktop」インストール時にも使用した「Windows PowerShell」です。
起動方法はWindows画面下の「検索窓」または「虫めがね」アイコンから「power」と入力すると「PowerShell」が表示されるので、クリックして起動します。
MacのCUI環境
MacのCUI環境は「ターミナル」を使用します。
「LaunchPad」または「Spotlight検索」に「ターミナル」と入力すると「ターミナル」アイコンが表示されるのでクリックして起動します。
VSCodeの拡張機能を使用したCUI環境
高機能エディタ「VSCode(Visual Studio Code)」の拡張機能の「Docker」を使用すると「VSCode」内の「ターミナル」でコマンド入力して操作するだけでなく「Docker Desktop」のような「GUI」環境に似た「コンテナ」の管理ができます。
さらに、その後のプログラム作成から動作確認まで1画面で完結できるため、最終的には「VSCode」を使用して開発することをおすすめします。
VSCodeのインストールや初期設定については以下のリンクで詳しく紹介しています。
VSCodeを起動したら、下画像のように、左ツールバーの[拡張機能]アイコンをクリックして、検索窓に「docker」と入力します。
クジラのアイコンが表示されたらクリックしてインストールするだけで使用できます。
インストールが完了したらVSCodeを再起動すると、下画像のように左ツールバーにクジラのアイコンができているのでクリックします。
画面内の各機能の配置は環境によって異なると思いますが、上画像のように拡張機能「Docker」によって「コンテナ」や「イメージ」の状態確認や操作、コンソールでのコマンド操作、ファイルの作成、編集が1画面でできます。
「コンテナ」名を右クリックすると基本的な操作メニューが表示され、ログの確認やコンソール操作、ブラウザ表示等をすぐに実行できます。
上画像では公式チュートリアルの「index.html」ファイルを開いて編集できる状態です。
・Dockerの基本コマンド集
「Docker」の基本コマンドについて、主なものを以下にまとめました。
# 基本コマンド
docker —-help # ヘルプ
docker <コマンド名> —-help # 指定したコマンドのヘルプ
docker images # イメージのリスト表示
docker ps # 起動しているコンテナの表示
docker ps -a # 起動していないコンテナも表示
docker stop コンテナ名 # コンテナの停止
docker start コンテナ名 # コンテナの起動
docker rm コンテナ名 # コンテナの完全削除
docker rmi イメージ名(タグ) # イメージの完全削除(コンテナで使用されているものは削除不可)
docker system prune # 使っていないコンテナ、イメージ、ネットワークを全て削除
docker container prune # 停止コンテナを全て削除
docker image prune # 未使用のイメージを全て削除
docker volume prune # コンテナから参照されていないVolumeを全て削除
# イメージ、コンテナの作成、操作 ※イメージ名は ホスト名/リポジトリ名:タグ(バージョン)
docker search イメージ名 # 取得できるイメージの検索
docker pull イメージ名 # イメージの取得
docker build -t イメージ名 作業フォルダパス # オリジナルのイメージを作成(Dockerfile使用)
docker run --name 任意の名前 -it -d イメージ名 # イメージからコンテナを作成して起動
docker exec -it コンテナ名 bash # コンテナのコンソールに接続
# -it コンテナを起動させたままにするオプション (インタラクティブ:相互作用)
# -d バックグラウンドで実行するオプション(デタッチ:切り離す)
# Docker Hubへ イメージをアップロード
docker login # dockerhubにログイン
docker tag 既存のイメージ名 新しいイメージ名 # イメージ名(タグ)を付け直す(コピーされる)
dockder push イメージ名 # dockerhubにイメージをアップロード
docker commit コンテナ名 イメージ名 # コンテナからイメージを作成
・Linuxの基本コマンド集
「Linux」の基本コマンドについて、主なものを以下にまとめました。
ls # 現在のフォルダのリストを表示
pwd # 現在のフォルダパスを表示
cd フォルダ名 # ディレクトリの移動
cd .. # 1つ上の階層のディレクトリへ移動
cd ~ # ユーザーのホームディレクトリへ移動
cd / # ルートディレクトリへ移動
mkdir フォルダ名 # フォルダの作成
touch ファイル名 # 空のファイルを作成
echo ‘Hello’ > ファイル名 # 指定ファイルに「Hello」を書き込む
cat ファイル名 # ファイルの内容を表示
less ファイル名 # ファイルの内容をページで表示
mv ファイル名 新規ファイル名 # ファイル名の変更
rm ファイル名 # ファイルの削除
find / -name “検索文字” # 検索
find / -type f -name “検索文字” # ファイル、ディレクトリを指定して検索(f:ファイル、d:ディレクトリ)
キーワード —help # ヘルプの表示
キーワード —version # バージョン確認(インストールされているか確認)
5.Dockerコマンドでの基本的な使い方
dockerコマンドを使用して「Docker Hub」から「イメージ」を取得して「コンテナ」を作成する方法を、pythonの実行環境を作成する方法を例に紹介します。
コマンド操作が苦手な方も基本コピペで完結できるので、ぜひチャレンジしてみてください。
・イメージの検索(search)
「イメージ」は自分でも作成できますが「Docker Hub」に既に作成されてものが用途ごとに公開されているので、それを利用することで目的の環境を素早く作成することができます。
まずは目的の「イメージ」を検索してみましょう。今回は「python」で検索してみます。
「イメージ」を検索するには以下のコマンドを実行します。
docker search python
実際に「PowerShell」に入力して実行すると、以下のように検索されます。
一番上に「python」が見つかったので、今回はこれを使用します。
検索された「python」の「OFFICIAL」の項目が「OK」になっています。
これは公式の「イメージ」であることを表しています。公式のものなので安心して使用できます。
公開されている「イメージ」については以下の「Docker Hub」のページで確認できます。
「Docker Hub」のページを開くと、下画像のようにページ上の検索窓から検索ができて、詳細情報が確認できます。
dockerコマンドで公式の「イメージ」を検索する場合は以下のように入力します。
docker search python -f is-official=true
目的の「イメージ」が見つかったら自分のパソコンのDocker環境に取得していきます。
・イメージの取得(pull)
イメージを取得するには以下のコマンドを実行します。
今回は「python」の「イメージ」を取得します。
docker pull python
取得された「イメージ」を確認するには、以下のコマンドを実行します。
docker images
実際に「PowerShell」に入力して実行すると、以下のように表示されます。
公式チュートリアルで使用された「イメージ」と、今取得した「python」が表示されるのが確認できます。
・コンテナの作成(run)
「イメージ」を使用して「コンテナ」を作成するには、以下のようなコマンドを実行します。
(このコマンドを実行すると「python」が実行できるコンテナが起動します。)
docker run --name pytest -it -d python:latest
このコマンドの詳細は以下になります。
– -name コンテナ名を指定するためのオプション
コンテナ名 自分でわかりやすいコンテナ名を指定
-it コンテナを起動させたままにするオプション (インタラクティブ:相互作用の意味)
-d バックグラウンドで実行するオプション(デタッチ:切り離すの意味)
イメージ名: タグ(バージョン) 「イメージ名」は今回はpython、タグ(バージョン)は今回はlatestです。使用するイメージ情報を確認して指定してください。
-it は指定しないと「コンテナ」を実行してすぐに終了します。「イメージ」内で何かを実行するように設定していないと、何も起こらず終了します。
今回は「python」の実行環境があるだけなので、終了しないように指定しています。
-d は指定しないと直接「コンテナ」に接続されます。
今回は指定しないと、いきなり「python」の「REPL」が使える状態になりますが、終了するとコンテナが停止してしまいます。
「python」の実行は後でコンテナ内のLinuxコンソールに接続して使用したいため、-d を指定しています。
・コンテナ内のコンソールに接続(exec)
「python」が実行できる「コンテナ」が起動したので、早速コンテナ内のコンソールに接続して「python」を実行してみましょう。
コンテナ内のコンソールに接続するには以下のコマンドを実行します。
docker exec -it pytest bash
実際に「PowerShell」に入力して実行すると、以下のように表示されます。
これでコンテナ内のコンソールに接続されました。
Linuxコマンドを入力することで操作できます。
試しに以下のコマンドを入力して「python」のバージョン確認をしてみましょう。
python -V
これで「Python 3.11.5」のようにバージョンが表示されて「python」がインストールされていることが確認できます。
続けて以下のコマンドを実行して「python」を1行づつ実行できる「REPL」を操作してみましょう。
python
以下のように表示され「>>>」に続けて「python」プログラムを入力すると1行づつ実行できます。
Python 3.11.5 (main, Sep 20 2023, 10:36:57) [GCC 12.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>>
「Hello」と表示させる以下の簡単な「python」プログラムを実行してみましょう。
print("Hello")
「Hello」と表示されるのが確認できたと思います。
「REPL」を終了するには「Ctrl + D」を押します。
以下のようになり「python」の「REPL」が終了します。
>>> print("Hello")
Hello
>>>
root@e4542acbfb3f:/#
「コンテナ」のコンソールから抜けるには以下のコマンドを実行します。
exit
以上までの操作を実際に「PowerShell」で実行したものは下画像のようになります。
最後に「exit」を入力して、コンテナを抜けています。
以上で「コンテナ」から抜けましたが、バックグラウンドで「コンテナ」は起動したままです。
次ではコンテナの「起動/停止/削除」コマンドについて紹介します。
・コンテナの起動/停止/削除(start/stop/rm)
コンテナの停止(stop)
「コンテナ」を停止するにはコンテナ名(ここではpytest)を指定して、以下のコマンドを実行します。
docker stop pytest
以下のコマンドで現在起動している「コンテナ」を確認できます。
docker ps
以下のコマンドでは起動していない「コンテナ」も表示できます。
docker ps -a
以上の操作を実際に「PowerShell」で実行したものは下画像のようになります。
「コンテナ」停止後「docker ps」を実行すると起動中の「コンテナ」は何も表示されないのが確認できます。
「docker ps -a」で「コンテナ」は存在しているのが確認できます。
コンテナの起動(start)
「コンテナ」を起動するにはコンテナ名(ここではpytest)を指定して、以下のコマンドを実行します。
docker start pytest
コンテナの削除(rm)
「コンテナ」を削除するにはコンテナ名(ここではpytest)を指定して、以下のコマンドを実行します。削除してもすぐにまたすぐに作成できるので一度削除してみましょう。
docker rm pytest
・ローカルフォルダとの同期
ここまでで「python」を実行できる「コンテナ」の作成はできましたが「python」が実行できるのは「コンテナ」の中だけでした。
次は「コンテナ」内のフォルダをパソコン側のフォルダと同期させて、パソコン側のフォルダ内の「python」プログラムを実行してみましょう。
パソコン側のフォルダを同期させたコンテナを作成するには、以下のコマンドを実行します。
docker run --name pytest -v C:/Users/*****/Documents/docker:/python -it -d python:latest
「-v」がフォルダを同期させるオプションです。
続けて同期させたいパソコン側のフォルダのパスを指定「:」で区切って「コンテナ」側のフォルダのパスを指定します。
あとは上で紹介した「コンテナ」の作成方法と同様に「-it -d」オプションを指定して「イメージ名」を指定するだけです。
今回パソコン側の同期フォルダには「Docments」フォルダ内に「docker」というフォルダを作成して指定しています。
パスの確認方法はフォルダを「右クリック」して「プロパティ」で以下のように確認できます。
パスの指定方法
「パス」の指定方法はいくつかあるので以下で紹介しておきます。
今回指定したパスは「フルパス」と呼ばれ最初から最後まで全て指定するものです。
ユーザーのホームディレクトリから指定する場合は「~(チルダ)」を使って以下のように指定します。
~/Users/*****/Documents/docker
現在の作業フォルダ以下のパスを指定する場合は「.」を指定します。
「Documents」フォルダで作業している場合は以下のように指定します。
./docker
ちなみに、コンテナ内のLinux環境でのフォルダ(ディレクトリ)の移動コマンドは以下のようになります。(パスの指定方法と似ているので合わせて覚えましょう)
cd / # ルートディレクトリへ移動
cd ~ # ユーザーのホームディレクトリへ移動
cd . # 現在のディレクトリのまま移動しない
cd .. # 1つ上のディレクトリへ移動
同期フォルダの確認
パソコン側とコンテナ側の同期フォルダについて確認していきます。
まずは、以下のコマンドを実行して「コンテナ」のコンソールに接続しましょう。
docker exec -it pytest bash
以上の操作を実際に「PowerShell」で実行したものは下画像のようになります。
次に、以下のコマンドを実行してコンテナ内のフォルダの一覧を表示します。
ls
表示されたフォルダ一覧の中に「python」フォルダが確認できると思います。
確認できたら、以下のコマンドを実行して「python」フォルダへ移動しましょう。
cd python
「python」フォルダに移動してから再度「ls」コマンドを実行すると何も表示されないのが確認できると思います。
以上の操作を実際に「PowerShell」で実行したものは下画像のようになります。
次からは、実際にパソコン側の同期フォルダに簡単なpythonプログラムを置いて、「コンテナ」側のコンソールから実行していきます。
・ローカルフォルダのサンプルプログラム実行
ここからはパソコン側の同期フォルダのpythonプログラムを「コンテナ」側のコンソールから実行していきます。
まずは、パソコン側の同期フォルダに「Hello!」と表示させるだけの簡単なpythonプログラムを準備します。
お好きなエディタで作成して準備していただければ良いですが、ここでは超入門ということで、念の為テキストファイルから準備する方法で紹介します。
その前に、ファイルの「拡張子」が表示されていない方は以下の手順で、パソコンのファイルエクスプローラーで[表示]→[ファイル名拡張子]にチェックマークを入れて、拡張子を表示できるようにしておいてください。
続けて、コンテナとの同期フォルダ内で、右クリックから[新規作成]→[テキストドキュメント]をクリックしてください。
下画像のように「新しいテキストドキュメント.txt」が作成されるのでダブルクリックして開きます。
テキストファイルが開いたら、以下のように「print(“Hello!”)」と入力して保存して閉じます。
次に、テキストファイルの拡張子を変更してpythonのファイルに変更します。
ファイルを右クリックして[名前の変更]をクリックして、ファイル名を以下のように「hello.py」に変更します。
以下のような警告ウインドウが表示されますが[はい(Y)]をクリックします。
下画像のように、pythonファイルが作成されたら完了です。
コンテナ側の同期フォルダでこのファイルが表示されるか確認してみましょう。
コンテナ側に接続するには以下のコマンドです。
docker exec -it pytest bash
コンテナ側のコンソールで「ls」を入力すると、以下のようにパソコン側の同期フォルダの内容がコンテナ側で表示され「hello.py」があるのが確認できます。
このまま以下のコマンドを入力して、コンテナ側で「hello.py」を実行してみましょう。
python hello.py
以下のように「Hello!」が表示されるのが確認できると思います。
以上が、コンテナ内のフォルダをパソコン側のフォルダと同期させて、コンテナ側からパソコン側のフォルダの「python」プログラムを実行する方法です。
これで「パソコン側」のpython実行ファイルを編集しながら、「コンテナ側」のpython実行環境で実行できるようになりました。
パソコン側の環境には影響が無いため設定がおかしくなったり、間違えたりしても、コンテナを消去して再度作り直せば良いだけです。パソコン側の環境が荒れることもありません。
いろいろなバージョンのコンテナを準備しておけば、バージョンごとの動作確認も簡単に行えます。
次は公開されている「イメージ」を使って「コンテナ」を作成するのではなく、自分オリジナルの「イメージ」を作成するための方法を紹介します。
6.オリジナルのイメージ作成
ここでは「Doker hub」で公開されている「イメージ」をそのまま使うのではなく、自分で必要な環境を準備した「イメージ」を作るための方法を紹介します。
自分オリジナルの「イメージ」を作るためには「Dockerfile」というものを使用します。
例として「Ubuntu」環境で「Python」のバージョンを指定した「python」の実行環境の「イメージ」を作成する方法を紹介します。(今回はpythonのバージョン3.10の実行環境を準備します。)
・Dockerfileの作成
「Dockerfile」とは「イメージ」を作成する時に使用される「テキストファイル」で、コンテナ内で実行されるコマンドや設定、環境変数などが記述されています。
「Dockerfile」と言ってもただのテキストファイルです。
「VSCode」等の高機能エディタを使用した方が効率よく作成できますが、今回は簡単なものなので引き続き「メモ帳」を使用して作成していきます。
・Dockerfileからイメージ作成(build)
ここからは、オリジナルのイメージを作成するための設計図とも言える「Dockerfile」を使ってイメージを作成(build)していきます。
「Dockerfile」を作成する場所はどこでもいいですが「Dockerfile」を実行するときに「パス」を指定する必要があるため、作業フォルダを決めてそこに作成すると後々わかりやすいです。
今回はpython環境のコンテナを作るときに作成した「docker」フォルダ内に作成します。
「docker」フォルダ内で右クリックして[新規作成]→[テキストドキュメント]をクリックします。
以下のようにテキストファイルが作成されるので「メモ帳」で開きます。
テキストファイルを開いたら以下をコピペで貼り付けて保存します。
以下が「Dockerfile」の内容になり、イメージ作成時に実行するコマンドが記述されています。
# Ubuntu 22.04イメージを使用
FROM ubuntu:22.04
# パッケージリストを更新しPython 3.10のインストール
RUN apt update
RUN apt install -y python3.10
# /pythonディレクトリを作成し、作業ディレクトリに設定
RUN mkdir /python
WORKDIR /python
# python3.10をpythonで実行できるようにシンボリックリンクを作成
RUN ln -sfn /usr/bin/python3.10 /usr/bin/python
メモ帳に貼り付けたものは以下のようになります。
今回の「Dockerfile」で使用したコマンドについて紹介します。
(ここで使用したものはほんの一部で他にもたくさんあります。)
コマンド | 機能 |
---|---|
FROM | 「Docker Hub」から指定したイメージを取得。 |
RUN | あらかじめ実行しておきたいLinuxコマンドを指定。 |
WORKDIR | コンテナのワーキングディレクトリを指定。 コンテナのコンソールに入った時に ここで指定したフォルダに入った状態ではじまる。 |
ファイルを保存したら閉じて、以下のようにファイル名を「Dockerfile(拡張子なし)」に変更します。
拡張子についての警告ウインドウが出ますが[はい]をクリックします。
以上で「Dockerfile」の作成は完了です。
早速「Dockerfile」からイメージを作成(build)していきましょう。
まずは「PowerShell」を起動して「Dockerfile」を作成したフォルダに移動します。
ここでは「ドキュメント」フォルダ内の「docker」フォルダに作ったため、以下のコマンドで移動しす。
cd ~/Documents/docker
移動した「docker」フォルダ内に「Dockerfile」があるかどうか確認したい場合は「ls」コマンドを実行すると確認できます。
「Dockerfile」が確認できたら以下の「docker build」コマンドを実行してイメージを作成しましょう。
docker build -t python3.10 .
「docker build」コマンドの詳細は以下になります。
-t イメージ名を指定するオプション
イメージ名 自分でわかりやすいイメージ名を指定します。
Dockerfileのパス Dockerfileのパスを指定します。(「 . 」は現在の作業フォルダを表します)
これで「Dockerfile」に指定した内容で「イメージ」が作成されましたので、この「イメージ」を使用した「コンテナ」を作成することができます。
上で紹介した「ローカルフィルダとの同期→こちら」の時と同様に、パソコン側との同期フォルダを指定して「docker run」コマンドを実行します。コンテナ名は「python3.10」としました。
docker run --name python3.10 -v C:/Users/*****/Documents/docker:/python -it python3.10:latest
「コンテナ」が作成されたら、上で紹介した「ローカルフォルダのサンプルプログラム実行→こちら」と同様にpythonファイルを実行してみましょう。
以上で「Dockerfile」を使用して、オリジナルの「イメージ」を作ることができました。
次は「DockerHub」を使用したイメージの配布方法を紹介します。
7.Docker Hubの使い方
「Docker Hub」とは、Dockerの「イメージ」の共有、保存、管理を行うためのオンラインプラットフォームです。ここでは、この「Docker Hub」の使用方法を紹介します。
・Docker Hubでできること
「Docker Hub」でできる主な機能は以下になります。
- イメージの検索とダウンロード :Docker Hubでは、公開されている「イメージ」を検索し、取得することができるため、自分でイメージを作成(ビルド)する手間を省くことができます。
- イメージのアップロードと共有 :Docker Hubを使用すると、作成した「イメージ」をアップロードして、他の人と共有することができます。
これにより、チームで協力して開発することが容易になります。 - タグ付けとバージョン管理 :Docker Hubでは「イメージ」にタグを付けてバージョン管理することができます。
この機能を使うと、異なるバージョンの「イメージ」を簡単に切り替えたり、特定のバージョンを使用したりすることができます。
・アカウント登録と最初のリポジトリの作成
「Docker Hub」を使用するためにはアカウント登録が必要です。
アカウントを登録するには、以下リンクの「Docker Hub」のページへアクセスします。
以下のように「Docker Hub」のページが表示されます。
ページ右側の「Create your account」に[Email][Username][Password]を以下のように入力して[Sign up]ボタンをクリックします。
[Sign up]ボタンをクリックすると、以下のような「Sign in」画面が表示されるので、それぞれ情報を入力して[Continue]ボタンをクリックしていきます。
「Sign in」すると、以下のようにプランを選択するページが表示されます。
無料で使用する場合は「Personal」の欄の[Choose Personal]ボタンをクリックします。
プランを選択すると以下のようなページが表示されます。
メールを確認するように促されるのでメールを確認しましょう。
メールの中に[Verify Email Address]というリンクがあるのでクリックします。
以下のようなページが表示されたら登録完了です。
[Create a Repository]をクリックしましょう。
以下のように「イメージ」をアップロードするリポジトリの登録画面が表示されます。
早速最初のリポジトリを作成してみましょう。
以下のように[Repository Name]に「test」と入力し、[Visiblity]は[Private]を選択して[Create]ボタンをクリックします。
以下のようなページが作成され、最初のリポジトリが作成できました。
次からは、リポジトリをアップロードする方法について紹介していきます。
・イメージのアップロード(push)
最初の「リポジトリ」が作成できたので、自分のオリジナルの「イメージ」をアップロードしてみましょう。
その前に、「イメージ」と「リポジトリ」の違いについて混乱しそうなので、先に整理しておきます。
「リポジトリ」とは「イメージ」を区別するための名前で、「アカウント名」「タグ(バージョン情報」と組み合わせて、以下のような構成で「イメージ名」として使用されます。
それでは、作成したリポジトリに「イメージ」をアップロードしていきましょう。
まずは「PowerShell」を使用して以下のコマンドを入力し「Docker Hub」にログインします。
docker login
すでに「Docker Hub」に「Sign in」していれば、そのままログインは完了しますが、「Sign in」していない場合は以下のように「Username(メールアドレスまたはユーザー名)」と「Password」を聞かれるので入力すると「ログイン」が完了します。
「ログイン」が完了したら、アップロードしたいイメージに「タグ付け」を行います。
この作業は、アップロードしたい「イメージ」をコピーし「イメージ名」を「Docker Hub」で作成した「リポジトリ名」に合わせて変更するために行います。
以下のコマンドを実行して「タグ付け」を行います。
docker tag python3.10:latest アカウント名/test:latest
今回は以前作成した「python3.10」のイメージを「Docker Hub」で作成したリポジトリ「test」に変更しています。
このコマンドの詳細は以下になります。
実際にこのコマンドを実行した後に「docker images」コマンドを実行して「イメージ」のリストを表示すると、以下のようにイメージ「python3.10」がコピーされて、新しいイメージ「アカウント名/test」が作成されているのが確認できます。
新しいイメージ「アカウント名/test」を「Docker Hub」へアップロードするには、以下のコマンドを実行します。
docker push アカウント名/test:latest
これで「Docker Hub」に「イメージ」をアップロードすることができました。
「Docker Hub」に「Sign in」して確認してみましょう。
アカウント登録後に「Docker Hub」に「Sign in」した時は以下のような画面が表示されます。
アップロードした「イメージ」が表示されているので「アカウント名/test」をクリックします。
「アカウント名/test」をクリックすると以下のように「リポジトリ」の詳細が表示されます。
[Tags]の部分で[latest(最新バージョン)]として「6分前」にアップロードされたことが確認できます。
以上でイメージのアップロードが完了しました。
あとは、必要な時に以前紹介した「イメージの取得(pull)→こちら」のように「docker pull」コマンドで取得するだけで、この環境がどこでも使用できます。
次は、誰でもアクセスして共有できる「Public」な「リポジトリ」を作成する方法を確認していきます。
・オリジナルイメージの公開
オリジナルのイメージを誰でも共有できるように一般公開する「リポジトリ」の作成方法も確認しておきましょう。
「Docker Hub」のページを開いて、以下のように表示されたら、ページ右上の[Create repository]ボタンをクリックします。
以下の「リポジトリ」作成ページが表示されたら「リポジトリ名」を入力(ここでは「test2」)します。
一般公開する場合はどういう用途で作成したものなのかを[Short description]の欄に記入しておきましょう。
[Visibility]を[Public]の方にチェックマークを入れて[Create]ボタンをクリックします。
以下のようなページが表示されたら一般公開する「リポジトリ」の作成は完了です。
あとは「イメージのアップロード(push)→こちら」と同様に、イメージをアップロード(push)するだけです。
[Docker commands]の欄にはアップロードするためのコマンドが生成されています。
(「tagname」にはバージョン情報を記入しましょう。)
作成した「リポジトリ」で「イメージ」が公開されているかを確認してみましょう。
以下のコマンドで自分の「Docker Hubのアカウント名」を指定すると確認できます。
docker searck アカウント名
実際に「PowerShell」で確認すると以下のようになります。
「アカウント名/test2」が表示されれば「イメージ」は公開されています。
これでチームで共有する場合等に「イメージ名」を伝えるだけで同じ環境で作業を行うことができるようになりました。
リポジトリの削除方法
「リポジトリ」を削除する方法も紹介しておきます。
「Docker Hub」の「リポジトリ」の情報確認ページで以下のように[Settings]をクリックして表示されるページの一番下にある[Delete repository]ボタンをクリックします。
以下のようなウインドウが表示されたら「リポジトリ名」を入力して[Delete]ボタンをクリックすると削除できます。
・コンテナからイメージを作成(commit)
コンテナからイメージを作成することもできるため、この方法について紹介します。
コンテナから「イメージ」を作成するには、以下のコマンドを実行します。
docker commit コンテナ名 イメージ名:タグ(バージョン)
8.まとめ
「Docker」のインストール方法から使い方を実践形式で詳しく紹介しました。
「Docker」は従来の「バーチャルマシン」とは違い「ゲストOS」をインストールする必要がなく、ソフトウェアや設定ファイルをパッケージ化した「コンテナ」という隔離環境の中で「ホストOS」を共有して動作させることができるため、軽量で高速、安全な仮想環境を実現できます。
使用するには「Docker Desktop」をインストールするだけで、仮想環境の「コンテナ」管理も視覚的に簡単にできます。
「コンテナ」の作成は公開されている「イメージ」を使用することで「Ubuntu」「python」「Nginx」「BusyBox」等の開発環境を簡単に構築することができます。
作成された「コンテナ」は起動、停止や削除が簡単にでき、ローカルマシンの環境に影響を与えないため、ローカルマシンの環境が荒れることもありません。
「コンテナ」を作成するための「イメージ」は、環境設定を記述した「Dockerfile」というテキストファイルから作成(build)したり、編集した「コンテナ」から作成(commit)でき「Doker Hub」を使用することで公開し共有することができます。
「Docker」はアプリケーションの開発・運用を効率化するための有力な技術で、現在では欠かせないものとなってきています。
今回は「超入門」ということで基本的な使い方の紹介のため、まわりくどい表現も多々あったかもしれません・・・
自分の理解の範囲内で、最初におさえておいた方が良いと思う内容をまとめた結果、ちょっと長くなり過ぎた気もしますが(汗)一つづつ順番に実践していただければ、基本はマスターできるように書いたつもりですので、これから「Docker」に挑戦する人の参考になれば嬉しいです。
今回の記事は、当ブログの趣旨とはちょっと異なるような気がしましたが、当ブログで扱う「IoT」対応デバイスを扱う上で必要な技術と思い、自分の技術習得も兼ねて書くことにしました。
私も今回 0から始めたので、理解するのに時間がかかりましたが、使えるようになると「IoTデバイス」を使った遠隔操作やデータ監視を行うためのサーバー管理に便利に使えそうです。(さよならMAMP!)
「Docker」の「コンテナ」で構築したサーバー環境で「IoT」デバイスを使用した遠隔操作、データ監視をする方法も今後紹介していければと思います。
コメント