神戸学院大学 経営学部 林坂ゼミ

Docker 入門トップページ

« 戻る 次へ »

Docker 入門

Docker はじめの一歩

Ubuntu を実行して nginx をインストール

次の例として,Docker で Ubuntu を実行し,メジャーな Web サーバの一つである nginx(エンジンエックス)をインストールしてみます.nginx の特徴についてはこちらを参照してください.まず,まだイメージがローカル環境に存在しないことを確認しておきます.

% docker image ls ⏎
REPOSITORY   TAG       IMAGE ID   CREATED   SIZE

続いて Docker リポジトリから最新 (latest) の ubuntu イメージをダウンロードします.

% docker pull ubuntu ⏎
Using default tag: latest
latest: Pulling from library/ubuntu
cc43ec4c1381: Pull complete
Digest: sha256:9cbed754112939e914291337b5e554b07ad7c392491dba6daf25eef1332a22e8
Status: Downloaded newer image for ubuntu:latest
docker.io/library/ubuntu:latest

What's next:
    View a summary of image vulnerabilities and recommendations → docker scout quickview ubuntu

イメージがダウンロードできたことを確認します.

% docker image ls ⏎
REPOSITORY   TAG       IMAGE ID       CREATED       SIZE
ubuntu       latest    b60cb74dfa1b   2 weeks ago   101MB

イメージ ubuntu からコンテナ名 nginx を指定して起動し,bash にログインします.

% docker run -it --name=nginx ubuntu /bin/bash ⏎
root@cead9bcb5598:/#

Ubuntu を最新の状態にアップデートします.

root@cead9bcb5598:/# apt-get update ⏎
Get:1 http://ports.ubuntu.com/ubuntu-ports noble InRelease [256 kB]
Get:2 http://ports.ubuntu.com/ubuntu-ports noble-updates InRelease [126 kB]
Get:3 http://ports.ubuntu.com/ubuntu-ports noble-backports InRelease [126 kB]
Get:4 http://ports.ubuntu.com/ubuntu-ports noble-security InRelease [126 kB]
Get:5 http://ports.ubuntu.com/ubuntu-ports noble/multiverse arm64 Packages [274 kB]
Get:6 http://ports.ubuntu.com/ubuntu-ports noble/main arm64 Packages [1776 kB]
Get:7 http://ports.ubuntu.com/ubuntu-ports noble/restricted arm64 Packages [113 kB]
Get:8 http://ports.ubuntu.com/ubuntu-ports noble/universe arm64 Packages [19.0 MB]
Get:9 http://ports.ubuntu.com/ubuntu-ports noble-updates/universe arm64 Packages [1832 kB]
Get:10 http://ports.ubuntu.com/ubuntu-ports noble-updates/main arm64 Packages [1818 kB]
Get:11 http://ports.ubuntu.com/ubuntu-ports noble-updates/restricted arm64 Packages [3011 kB]
Get:12 http://ports.ubuntu.com/ubuntu-ports noble-updates/multiverse arm64 Packages [39.2 kB]
Get:13 http://ports.ubuntu.com/ubuntu-ports noble-backports/main arm64 Packages [48.8 kB]
Get:14 http://ports.ubuntu.com/ubuntu-ports noble-backports/universe arm64 Packages [35.6 kB]
Get:15 http://ports.ubuntu.com/ubuntu-ports noble-security/universe arm64 Packages [1110 kB]
Get:16 http://ports.ubuntu.com/ubuntu-ports noble-security/multiverse arm64 Packages [20.2 kB]
Get:17 http://ports.ubuntu.com/ubuntu-ports noble-security/main arm64 Packages [1477 kB]
Get:18 http://ports.ubuntu.com/ubuntu-ports noble-security/restricted arm64 Packages [2882 kB]
Fetched 34.1 MB in 12s (2815 kB/s)
Reading package lists... Done
root@cead9bcb5598:/#

Ubuntu に Web サーバである nginx と,Web サーバへリクエストを送信するためのツールである curl をインストールします.

root@cead9bcb5598:/# apt-get install nginx curl -y ⏎

Curl を使ってコンテナ自身にアクセスしますが,nginx がまだ起動していないので接続できませんでした.

root@cead9bcb5598:/# curl localhost ⏎
curl: (7) Failed to connect to localhost port 80 after 0 ms: Couldn't connect to server
root@cead9bcb5598:/#

nginx を起動します.

root@cead9bcb5598:/# nginx ⏎
root@cead9bcb5598:/#

もう一度 curl で接続するとトップページの HTML 文書が得られたようです.

root@cead9bcb5598:/# curl localhost ⏎
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
html { color-scheme: light dark; }
body { width: 35em; margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif; }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>

<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>

<p><em>Thank you for using nginx.</em></p>
</body>
</html>
root@cead9bcb5598:/#

しかしながら,現時点ではローカル環境の Web ブラウザから http://localhost/ に接続することはできません.

docker-01

一旦,コンテナからログアウトします.

root@cead9bcb5598:/# exit ⏎
exit
%

イメージを一覧で表示し,起動中のコンテナがないこと,終了したコンテナ名が nginx であることを確認します.

% docker image ls ⏎
REPOSITORY   TAG       IMAGE ID       CREATED       SIZE
ubuntu       latest    b60cb74dfa1b   2 weeks ago   101MB
% docker container ls ⏎
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
% docker container ls -a ⏎
CONTAINER ID   IMAGE     COMMAND       CREATED         STATUS                          PORTS     NAMES
cead9bcb5598   ubuntu    "/bin/bash"   5 minutes ago   Exited (0) About a minute ago             nginx
%

nginx をインストールした nginx コンテナをイメージ nginx_image として保存します.

% docker commit nginx nginx_image ⏎
sha256:574fd29fc45944fead36291b0a494af72ba0b9ed4601c5c373934f55a9cab0e7

イメージ nginx_image が作成されたことが分かります.

% docker image ls ⏎
REPOSITORY    TAG       IMAGE ID       CREATED          SIZE
nginx_image   latest    574fd29fc459   11 seconds ago   172MB
ubuntu        latest    b60cb74dfa1b   2 weeks ago      101MB

上で作成したイメージ nginx_image からコンテナ名 web1 を指定して起動します.このとき,-d オプションを指定することでコンテナがデーモン(バックグラウンドで動作してタスクを実行するプログラムのこと)として起動します.また,-p 8080:80 によってホスト側の 8080 番ポートをコンテナの 80 番ポートに接続します.また,docker で nginx を動かすには -g "daemon off;" というおまじない(現時点ではその理解で十分です)も必要です.

% docker run -d -p 8080:80 --name=web1 nginx_image nginx -g "daemon off;" ⏎
d0d9b8e5e5f1fa203ffa87bf03e079991cd29af0fb6eeafea85fc80133c5f8b5
% docker container ls ⏎
CONTAINER ID   IMAGE         COMMAND                   CREATED         STATUS         PORTS                                     NAMES
d0d9b8e5e5f1   nginx_image   "nginx -g 'daemon of…"    6 seconds ago   Up 5 seconds   0.0.0.0:8080->80/tcp, [::]:8080->80/tcp   web1

上のコマンドによってローカル環境の 8080 番ポートからコンテナに接続できるようになったはずなので,Web ブラウザから http://localhost:8080/ にアクセスします.すると次のように nginx のトップページが表示されました.

docker-02

コンテナを終了させ,実際に終了していることを確認します.

% docker container stop web1 ⏎
web1
% docker container ls ⏎
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
% docker container ls -a ⏎
CONTAINER ID   IMAGE         COMMAND                   CREATED          STATUS                     PORTS     NAMES
d0d9b8e5e5f1   nginx_image   "nginx -g 'daemon of…"    59 seconds ago   Exited (0) 7 seconds ago             web1
cead9bcb5598   ubuntu        "/bin/bash"               7 minutes ago    Exited (0) 3 minutes ago             nginx

すると想像通り接続ができなくなりました.

docker-03

コンテナを再び起動したり終了したりしてみます.まず,コンテナが一切起動していないことを確認します.

% docker container ls ⏎
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES

終了しているコンテナの名前が web1 であることを確認します.

% docker container ls -a ⏎
CONTAINER ID   IMAGE         COMMAND                   CREATED              STATUS                      PORTS     NAMES
d0d9b8e5e5f1   nginx_image   "nginx -g 'daemon of…"    About a minute ago   Exited (0) 33 seconds ago             web1
cead9bcb5598   ubuntu        "/bin/bash"               8 minutes ago        Exited (0) 4 minutes ago              nginx

コンテナ名 web1 を指定してコンテナを起動します.

% docker container start web1 ⏎
web1

コンテナが実行中であることを確認します.実行中は Web ブラウザから接続できることも確認すると良いでしょう.

% docker container ls ⏎
CONTAINER ID   IMAGE         COMMAND                   CREATED              STATUS         PORTS                                     NAMES
d0d9b8e5e5f1   nginx_image   "nginx -g 'daemon of…"    About a minute ago   Up 3 seconds   0.0.0.0:8080->80/tcp, [::]:8080->80/tcp   web1

コンテナの実行を停止します.

% docker container stop web1 ⏎
web1