Dockerでubuntu18.04を動かす
今回は、Dockerでubuntu18.04の環境を作るためにDockerイメージを取得します。
Dockerイメージはdocker hubにいろいろあるので必要なイメージを探します。
現在、Official Imagesとして150以上のDockerイメージがあります。
イメージを取得する
Docker Hubレジストリからイメージをpull(取得)します。
使い方は
$ docker pull [OPTIONS] NAME[:TAG|@DIGEST]
です。
今回はubuntu 18.04を下記のコマンドで取得します。
NAMEがubuntuでTAGは18.04を指定しています。TAGは未指定時:latestの扱いで最新版を取得します。
$ sudo docker pull ubuntu:18.04
18.04: Pulling from library/ubuntu
08a6abff8943: Pull complete
Digest: sha256:982d72c16416b09ffd2f71aa381f761422085eda1379dc66b668653607969e38
Status: Downloaded newer image for ubuntu:18.04
docker.io/library/ubuntu:18.04
取得したイメージの確認
取得したイメージを確認します。
イメージを一覧表示するには、imagesコマンドを使用します。
使い方は
$ docker images [OPTIONS] [REPOSITORY[:TAG]]
です。
REPOSITORYは未指定の場合、ローカルとなります。
また、[REPOSITORY[:TAG]]は完全一致の必要があります。
$ sudo docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu 18.04 f5cbed4244ba 2 weeks ago 63.2MB
hello-world latest feb5d9fea6a5 6 months ago 13.3kB
前回取得した、hello-worldの他に、ubuntuがあることが確認できます。
イメージを実行する
取得したイメージを実行してみたいと思います。
実行はrunコマンドを使用します。
使い方は
$ docker run [オプション] イメージ[:タグ|@ダイジェスト値] [コマンド] [引数...]
です。
さまざまなオプションがありますが、今回使用したオプションのみ説明します。
オプション | 機能 |
-d | バックグランドで動作するようにします |
-it | (シェルのように)インタラクティブなプロセスでは、コンテナのプロセスに対して tty を割り当てるために、 -i -t を一緒に使う必要があります |
–name | コンテナの名前を割り当てます。未指定時はランダムな文字列から名前を生成します |
それでは起動します。
$ sudo docker run -d -it --name ubuntu-18.04 ubuntu:18.04
6fe33f37b7cde67a503d8ccd89fcbfcfb98aa7118c68d20d08562019f4f846d7
無事に起動できたのか、コンテナを一覧表示してみます。
コンテナを一覧表示するには、psコマンドを使用します。
使い方は
$ docker ps [OPTIONS]
です。
さまざまなオプションがありますが、今回使用するオプションのみ説明します。
オプション | 機能 |
–all -a | 全てのコンテナを表示(未指定時は実行中のコンテナだけ表示) |
psコマンドを実行します。
$ sudo docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
6fe33f37b7cd ubuntu:18.04 "bash" 20 seconds ago Up 18 seconds ubuntu-18.04
無事にコンテナが起動していることができました。
実行中のコンテナ内でコマンドを実行する
前回のhello-worldではフォアグランドで実行し、メッセージを出力してすぐに終了しました。
今回はバッググランドで実行し、実行中にubuntuのコンテナに対してログインします。
実行中のコンテナ内でコマンドを実行するにはexecコマンドを使用します。
使い方は
$ docker exec [OPTIONS] CONTAINER COMMAND [ARG...]
です。
さまざまなオプションがありますが、今回使用したオプションのみ説明します。
さきほどのpsコマンドでbashが使用できることが確認できましたので、bashを実行します。
$ sudo docker exec -it ubuntu-18.04 bash
root@6fe33f37b7cd:/#
ubuntu18.04のrootでログインしたので、バージョンの確認をしてみます。
root@6fe33f37b7cd:/# lsb-release
bash: lsb-release: command not found
あっコマンドがないみたいですね
root@6fe33f37b7cd:/# cat /etc/os-release
NAME="Ubuntu"
VERSION="18.04.6 LTS (Bionic Beaver)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 18.04.6 LTS"
VERSION_ID="18.04"
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
VERSION_CODENAME=bionic
UBUNTU_CODENAME=bionic
無事にubuntu18.04.06であることが確認できました。
exit コマンドでbashを終了します。
root@6fe33f37b7cd:/# exit
exit
コンテナを停止する
実行中のコンテナを停止するにはstopコマンドを使用します。
使い方は
$ docker stop [OPTIONS] CONTAINER [CONTAINER...]
です。
先ほどコンテナを起動した際の名前を使用してコンテナを停止します。
$ sudo docker stop ubuntu-18.04
ubuntu-18.04
コンテナを一覧表示して確認してみます。
$ sudo docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
たしかに停止中かも -a オプションを付加してみます。
$ sudo docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
6fe33f37b7cd ubuntu:18.04 "bash" 4 minutes ago Exited (0) 19 seconds ago ubuntu-18.04
35dbecfd6814 hello-world "/hello" 9 hours ago Exited (0) 9 hours ago trusting_jepsen
はい、無事に停止しているようです。
後片付け
不要なコンテナを削除するにはrmコマンドを使用します。
使い方は
$ docker rm [OPTIONS] CONTAINER [CONTAINER...]
です。
先ほどpsコマンドで確認したコンテナIDを使用してコンテナを削除します。
$ sudo docker rm 35dbecfd6814
コンテナが削除されたことを確認します。
$ sudo docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
6fe33f37b7cd ubuntu:18.04 "bash" 4 minutes ago Exited (0) 19 seconds ago ubuntu-18.04
次に不要となったイメージを削除するためにrmiコマンドを使用します。
使い方は
$ docker rmi [OPTIONS] IMAGE [IMAGE...]
です。
先ほどimagesコマンドで確認したイメージIDを使用してイメージを削除します。
$ sudo docker rmi feb5d9fea6a5
Error response from daemon: conflict: unable to delete feb5d9fea6a5 (must be forced) - image is being used by stopped container 35dbecfd6814
なぜか怒られたので強制削除
$ sudo docker rmi -f feb5d9fea6a5
Untagged: hello-world:latest
Untagged: hello-world@sha256:10d7d58d5ebd2a652f4d93fdd86da8f265f5318c6a73cc5b6a9798ff6d2b2e67
Deleted: sha256:feb5d9fea6a5e9606aa995e879d862b825965ba48de054caab5ef356dc6b3412
削除されたことを確認をします。
$ sudo docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu 18.04 f5cbed4244ba 2 weeks ago 63.2MB
無事に後片付けが終わりました。