Docker とは
OS レベルの仮想化 ( コンテナ型仮想化技術 ) により、アプリケーションをその実行環境ごとに軽快に稼働する環境を提供する。
Docker は Linux カーネルの複数の機能を活用してコンテナ型仮想化を実現している。
Docker で利用されている Linux カーネルの機能
- Namespace: 各コンテナの資源をホスト環境から分離して、相互参照できないようにする
- Cgroups: コンテナ内で実行するプロセス郡をそれ以外で実行するプロセス郡と区別する
- chroot: ファイルシステム使用領域を区分
- Netfilter: 通信データを適切に配分するため
Docker のインストール
以下の Amazon Linux AMI を用いて Docker 環境を構築する。
$ cat /etc/os-release
NAME="Amazon Linux AMI"
VERSION="2017.09"
ID="amzn"
ID_LIKE="rhel fedora"
VERSION_ID="2017.09"
PRETTY_NAME="Amazon Linux AMI 2017.09"
ANSI_COLOR="0;33"
CPE_NAME="cpe:/o:amazon:linux:2017.09:ga"
HOME_URL="http://aws.amazon.com/amazon-linux-ami/"
実際にインストールし、サービスの起動。
$ sudo yum install -y docker
$ sudo chkconfig docker on
$ chkconfig --list | grep docker
docker 0:off 1:off 2:on 3:on 4:on 5:on 6:off
$ sudo service docker start
Starting docker: . [ OK ]
$ sudo docker -v
Docker version 17.03.2-ce, build 7392c3b/17.03.2-ce
Welcome メッセージを表示するコンテナを稼働させる
コンテナの実行とコンテナ情報の表示
$ sudo docker run hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
5b0f327be733: Pull complete
Digest: sha256:07d5f7800dfe37b8c2196c7b1c524c33808ce2e0f74e7aa00e603295ca9a0972
Status: Downloaded newer image for hello-world:latest
Hello from Docker!
This message shows that your installation appears to be working correctly.
To generate this message, Docker took the following steps:
1. The Docker client contacted the Docker daemon.
2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
3. The Docker daemon created a new container from that image which runs the
executable that produces the output you are currently reading.
4. The Docker daemon streamed that output to the Docker client, which sent it
to your terminal.
To try something more ambitious, you can run an Ubuntu container with:
$ docker run -it ubuntu bash
Share images, automate workflows, and more with a free Docker ID:
https://cloud.docker.com/
For more examples and ideas, visit:
https://docs.docker.com/engine/userguide/
$ sudo docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
57a76fdd050f hello-world "/hello" 16 minutes ago Exited (0) 16 minutes ago relaxed_mayer
ローカルには hello-world イメージが存在しないので、Docker Hub からイメージを取得している。
コンテナの削除
新たなコンテナを生成し、先ほど作成したものを削除する。
$ sudo docker run --name="hello container" hello-world
docker: Error response from daemon: Invalid container name (hello container), only [a-zA-Z0-9][a-zA-Z0-9_.-] are allowed.
See 'docker run --help'.
[ec2-user@ip-10-1-11-202 ~]$ sudo docker run --name="hello-container" hello-world
Hello from Docker!
This message shows that your installation appears to be working correctly.
To generate this message, Docker took the following steps:
1. The Docker client contacted the Docker daemon.
2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
3. The Docker daemon created a new container from that image which runs the
executable that produces the output you are currently reading.
4. The Docker daemon streamed that output to the Docker client, which sent it
to your terminal.
To try something more ambitious, you can run an Ubuntu container with:
$ docker run -it ubuntu bash
Share images, automate workflows, and more with a free Docker ID:
https://cloud.docker.com/
For more examples and ideas, visit:
https://docs.docker.com/engine/userguide/
$ sudo docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c2d597e194bf hello-world "/hello" 19 seconds ago Exited (0) 18 seconds ago hello-container
57a76fdd050f hello-world "/hello" 24 minutes ago Exited (0) 24 minutes ago relaxed_mayer
$ sudo docker rm relaxed_mayer
relaxed_mayer
$ sudo docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c2d597e194bf hello-world "/hello" About a minute ago Exited (0) About a minute ago hello-container
取得したイメージの表示
$ sudo docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
hello-world latest 05a3bd381fc2 6 weeks ago 1.84 kB
イメージの削除
$ sudo docker rm $(sudo docker ps -qa)
c2d597e194bf
$ sudo docker rmi hello-world
Untagged: hello-world:latest
Untagged: hello-world@sha256:07d5f7800dfe37b8c2196c7b1c524c33808ce2e0f74e7aa00e603295ca9a0972
Deleted: sha256:05a3bd381fc2470695a35f230afefd7bf978b566253199c4ae5cc96fafa29b37
Deleted: sha256:3a36971a9f14df69f90891bf24dc2b9ed9c2d20959b624eab41bbf126272a023
ちなみに最初にコンテナを削除したのは、コンテナがイメージを使用していると以下のエラーメッセージが出力されるため。
$ sudo docker rmi hello-world
Error response from daemon: conflict: unable to remove repository reference "hello-world" (must force) - container c2d597e194bf is using its referenced image 05a3bd381fc2