Dockerイメージを取得してコンテナを作成し動作させる方法について解説します。例としてpython環境を作成する方法を用いて解説します。
Contents
Dockerのインストール
Dockerを使用する際にはDocker Desktopのインストールが必要です。インストールされていない方は、以降の説明の手順を実行する前にDocker Desktopのインストールをしてください。
Windows用のインストール方法を以下で紹介しているので参考にしていただければと思います。
Dockerイメージの取得と削除
Dockerでは、Docker Hubで様々なイメージが公開されています。今回は、python環境(3.8.13-slim)というイメージを取得してコンテナを作成する例を使いながら説明していこうと思います。他のソフトウェアなどのイメージを使う場合でも同じような形になるので参考になるかと思います。
Dockerイメージの取得方法
Docker Hubへアクセスすると以下のような部分があります。(画面構成などは変更されている可能性があります)。「See all Docker Offical Images」のリンクをクリックすると他にも色々とみることができます。
上記の「Python」の部分をクリックしてみてください。Pythonのページへ遷移します。遷移した先のTagsというタブをクリックするとTag付けされたイメージを確認することができます。
Tagsのところには、以下のように色々なTagが用意されています。色々種類がありますが、今回はこの中で「3.8.13-slim」というイメージをコマンドから取得してみます。
コマンドプロンプトまたはPower Shellを起動して以下のコマンドを入力してください。Docker Hubの一覧では右側にpullのコマンドをクリップボードへコピーするためのボタンがあるので、そちらでコピーすると簡単です。
docker pull python:3.8.13-slim
Dockerイメージを取得してくることを「pull」と言います。また、:の前の「python」の部分をリポジトリ、「3.8.13-slim」の部分をタグと言います。
>docker pull python:3.8.13-slim 3.8.13-slim: Pulling from library/python 42c077c10790: Pull complete f63e77b7563a: Pull complete 5215613c2da8: Pull complete 9ca2d4523a14: Pull complete e97cee5830c4: Pull complete Digest: sha256:844251263c4fbfe1c0a7fbfbf8e59521d51a1ec166aa1257e60210ba6e652880 Status: Downloaded newer image for python:3.8.13-slim docker.io/library/python:3.8.13-slim
取得が完了すると上記のようになります。Dockerで取得済みのイメージの一覧を取得する場合には、以下のコマンドを実行してください。
docker images
以下のように取得されているイメージの一覧が表示されます。
>docker images REPOSITORY TAG IMAGE ID CREATED SIZE python 3.8.13-slim 61c56c60bb49 4 weeks ago 124MB
上記の手順でDockerのイメージが取得完了です。このイメージからコンテナというものを作ることで、イメージの環境を作成して使うことができるようになります。コンテナの作成し、動作させる方法は以降で紹介します。
Dockerイメージの削除方法
Dockerイメージを削除する方法についても紹介します。Dockerイメージを削除するには、以下のコマンドを実行してください。
docker image rm リポジトリ名:タグ名
リポジトリ名とタグ名の部分は、該当するイメージに該当するもので置き換えてください。例えば、今回作成した「python:3.8.13-slim」を削除する場合には、以下のコマンドを実行してください。
docker image rm python:3.8.13-slim
Dockerイメージからコンテナを作成し動作させる方法
コンテナを作成して動作させる
取得してきたpythonのDockerイメージからコンテナを作成し動作させる方法について紹介します。以下のコマンドを実行してください。
docker run --rm -it python:3.8.13-slim
Dockerのコンテナを作成し起動するには「run」を使います。オプションとして指定しているものについては以下のような意味です。
- –rm:終了時にコンテナを削除する。
- -it:標準入力でターミナルを有効化する
–rmの指定をしない場合は実行が終わった後でもコンテナが残り続ける形となります。また、-itの方はホストとコンテナの入出力をつなぐようなイメージを持ってもらえればよいかと思います。
>docker run --rm -it python:3.8.13-slim Python 3.8.13 (default, May 28 2022, 14:30:17) [GCC 10.2.1 20210110] on linux Type "help", "copyright", "credits" or "license" for more information. >>>
実行すると上記のようにPythonのターミナルが起動します。コマンドにたとえば「print(‘Hello Python!’)」とか入力してみると、実行できるので試してみてください。
また、実行しているターミナルとは別ターミナルを起動して以下のコマンドを実行すると、現在実行中のコンテナを確認することができます。
docker ps
実行すると以下のような形で実行中のコンテナの一覧を表示できます。
>docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES d65a590a7538 python:3.8.13-slim "python3" 2 minutes ago Up 2 minutes youthful_hofstadter
コンテナを終了させるためには、コマンド上で「exit()」と入力するか、別ターミナルから以下のコマンドを実行すれば停止ができます。
docker stop コンテナID
上記のコンテナIDの部分には「docker ps」で確認したコンテナIDで指定するようにしてください。
Dockerコンテナを起動したまま終了する方法と再接続方法
Dockerコンテナは起動したままで終了させることもできます。その場合は、実行しているターミナル上で「Ctrl + p + q」を実行してください。Ctrlを押しながらp、qと順に押していくような形です。こうすることでコンテナが起動した状態のままになります。
また、起動しているコンテナに再度接続したい場合は、以下のコマンドで接続できます。
docker attach コンテナID
上記のコンテナIDの部分には「docker ps」で確認したコンテナIDを指定するようにしてください。
Dockerコンテナとローカルフォルダをマウントする方法
Dockerのコンテナは削除してしまうと作業していた内容が失われてしまうことになります。そのため、Dockerコンテナと実行しているホストマシンのフォルダをマウントしてDockerコンテナ上で作成されたファイルをローカルフォルダへ保存する方法を紹介します。
フォルダをマウントすることにより、コンテナを削除してもデータはローカルフォルダに残ります。これにより、複数コンテナ間で同じファイルを操作するといったことも可能になります。
マウントの説明をする前に、コンテナ起動時にシェルを起動する方法について説明します。起動時に「/bin/sh」を指定して以下のように実行してみてください。
docker run -it python:3.8.13-slim /bin/sh
上記のように実行すると、シェルが起動されて「#」のような形で出力されます。例えば、「ls」を実行してみると、以下のようにディレクトリ一覧が表示できます。Linux環境に慣れている人には良くわかるかと思います。上記で紹介してきたpythonのコンテナ起動では、このシェル上で「python」コマンドを実行してインタプリタが起動された状態になっていたわけです。
# ls bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
上記のようにディレクトリの階層を持っているため、ディレクトリ階層の指定した位置とローカルフォルダをマウントするという操作をすることでDocker環境とローカル環境を紐づけることができます。
Dockerコンテナとローカルフォルダをマウントするには、「docker run」を起動する際に「-v」オプションを指定して以下のように記載します。
docker run --rm -it -v D:\docker\test:/work python:3.8.13-slim /bin/sh
上記のようにローカルでマウントしたいローカルフォルダとdocker上のディレクトリを「:」で接続して記載します。今回の例では「D:\docker\test」と「/work」をマウントするという意味になります。ローカルのパス部分は利用環境に応じて変更してください。
上記のようにしてコンテナを起動し、以下のようにlsでディレクトリを確認してみると「work」というディレクトリが確認できます。
>docker run --rm -it -v D:\docker\test:/work python:3.8.13-slim /bin/sh # ls bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var work
このworkディレクトリ内で任意のファイルやフォルダを作成してみてください。作成したファイル等は、ローカルの「D:\docker\test」配下に格納されます。
まとめ
Dockerイメージを取得してコンテナを作成・動作させる方法について、python環境を作成する例を用いて紹介しました。
また、コンテナとローカルフォルダをマウントして、コンテナ上で作成したデータをローカルフォルダにも格納し、コンテナ削除後にも残った状態にする方法について説明しました。マウントをうまく用いると複数コンテナで領域を共有することができて便利です。
Dockerは使わなくなったらコンテナを削除すればよいので、自分のPCの環境を汚さなくて済むことがメリットの一つです。Dockerイメージには今回紹介したpython以外にも様々なイメージがあるためDocker Hubで色々と調べてみて環境を作ってみると楽しいか思います。