Docker

Dockerイメージを取得してコンテナを作成・動作させる方法

Dockerイメージを取得してコンテナを作成・動作させる方法

Dockerイメージを取得してコンテナを作成し動作させる方法について解説します。例としてpython環境を作成する方法を用いて解説します。

Dockerのインストール

Dockerを使用する際にはDocker Desktopのインストールが必要です。インストールされていない方は、以降の説明の手順を実行する前にDocker Desktopのインストールをしてください。

Windows用のインストール方法を以下で紹介しているので参考にしていただければと思います。

Dockerイメージの取得と削除

Dockerでは、Docker Hubで様々なイメージが公開されています。今回は、python環境(3.8.13-slim)というイメージを取得してコンテナを作成する例を使いながら説明していこうと思います。他のソフトウェアなどのイメージを使う場合でも同じような形になるので参考になるかと思います。

Dockerイメージの取得方法

Docker Hubへアクセスすると以下のような部分があります。(画面構成などは変更されている可能性があります)。「See all Docker Offical Images」のリンクをクリックすると他にも色々とみることができます。

Docker Hub

上記の「Python」の部分をクリックしてみてください。Pythonのページへ遷移します。遷移した先のTagsというタブをクリックするとTag付けされたイメージを確認することができます。

Docker Hub Python

Tagsのところには、以下のように色々なTagが用意されています。色々種類がありますが、今回はこの中で「3.8.13-slim」というイメージをコマンドから取得してみます。

Docker Hub Python

コマンドプロンプトまたは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で色々と調べてみて環境を作ってみると楽しいか思います。