概要
- 会社で必要に迫られて今更初めてdockerを触った
- 同じような境遇で、勉強しなきゃなーと思ってる人の役に立つかもと思いメモを置いておきます。(自分の備忘録としても...
dockerが使える環境を作る
前提
- 前提:なんらかの方法でubuntu16.04を用意する
- 私はvagrantでvm用意してやった
dockerのインストール
- https://soralab.space-ichikawa.com/2017/04/docker-ce-install/
- ↑を参考にdockerをインストール
- dockerには有償(EnterpriseEdition)と無償(ConsumerEdition)がある
- それぞれEE、CEと略す
- ここで入れるのはCEの安定版(stable)
sudo apt-get update
sudo apt-get install \
apt-transport-https \
ca-certificates \
curl \
software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository \
"deb [arch=amd64] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) \
stable"
sudo apt-get update
sudo apt-get install docker-ce
-
sudo docker version
してバージョンが出れば入ってる -
この後、docker~ってコマンドを使うが、sudoが毎回必要になってうざいので不要になる設定をする
-
dockerグループに属したユーザならsudo不要になるので使うユーザをdockerグループに入れる
-
sudo groupadd docker
(たぶんもうあるけどdockerグループを作る -
sudo usermod -aG docker $USER
(今使ってるアカウント名$USERをdockerグループに追加する -
一度、EXITしてログインしなおして反映させる
-
docker run --rm hello-world
を実行する。 -
dockerのhello-worldイメージを取ってきて、コンテナとして実行(run)させる
-
--rmは実行が終わったらコンテナを削除するオプション
$ docker run --rm 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/
- こんなんでればOK
dockerの用語
-
イメージ:dockerで実行するコンテナの元になるもの(例えるならOSインストールするディスクとか)
-
コンテナ:イメージから生成されるもの。動いてる。
-
docker images
で今持っているイメージ一覧が表示される -
上でhello-worldをしたので、こんな風に見えるはず
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
`hello-world latest 48b5124b2768 4 months ago 1.84 kB`
- 消すときは
docker rmi <image名>
- つまり
docker rmi hello-world
すると消える。またイメージ取ればいいので試しに打ってみる。
docker hubからイメージを持ってきてみる
- dockerのイメージが集まるサイトがある
- 例えば、docker hubなど
- こういうところからイメージを引っ張ってくるといろいろできる
- 試しにubuntu16.04のイメージをもらい、コンテナとして起動してみる
- docker hubでubuntuで検索すると、ubuntuのページがある。
- このとき、dockerでイメージを取るには
- ページ名(ubuntu)に:で下のバージョン(16.04とかxenialとか)を付けたものを使う
-
ubuntu:16.04
とか - さっきはいきなりdocker runしてイメージも起動時に取ってきたが、イメージを取ってくるコマンドは
docker pull <image名>
である - こんな感じ
$ docker pull ubuntu:16.04
16.04: Pulling from library/ubuntu
bd97b43c27e3: Pull complete
6960dc1aba18: Pull complete
2b61829b0db5: Pull complete
1f88dc826b14: Pull complete
73b3859b1e43: Pull complete
Digest: sha256:ea1d854d38be82f54d39efe2c67000bed1b03348bcc2f3dc094f260855dff368
Status: Downloaded newer image for ubuntu:16.04
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu 16.04 7b9b13f7b9c0 22 hours ago 118 MB
- じゃあ、実行してみよう
- docker runして、ubuntuのbash(シェル)を触れるようにする
- コンテナに入って操作する予定のある場合には
-it
をつける(コンテナに入るttyをつけたりするオプション)
ubuntu@smith-vm01:~$ docker run -i -t ubuntu:16.04 /bin/bash
root@280986dc0204:/#
- 入れた
- exitするとコンテナ起動時に呼んだbashが終了するので、コンテナも終了する
- 今動いているコンテナ一覧は
docker ps
で見ることができる - 停止したコンテナも見るときは
docker ps -a
で見る
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ubuntu@smith-vm01:~$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
280986dc0204 ubuntu:16.04 "/bin/bash" 32 seconds ago Exited (0) 23 seconds ago pensive_joliot
- もう一回、ubuntuコンテナを作ってEXITしてみる
$ docker run -i -t ubuntu:16.04 /bin/bash
root@6b33f4d5f825:/#exit
$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
6b33f4d5f825 ubuntu:16.04 "/bin/bash" 5 seconds ago Exited (0) 1 second ago stoic_wescoff
280986dc0204 ubuntu:16.04 "/bin/bash" About a minute ago Exited (0) 53 seconds ago pensive_joliot
- 同じイメージから2つ目のコンテナができてることが見える。
- このままだと停止コンテナがかさばってしまうので、消してみる
- 停止コンテナを消すコマンドは
docker rm <コンテナID>
である
$ docker rm 280986dc0204
280986dc0204
$ docker rm 6b33f4d5f825
6b33f4d5f825
$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
- きれいになった
- コンテナをバックグラウンド実行するには、
-d
をつけて実行する - この場合は自動でコンテナに入らないので、attachコマンドでコンテナに入る
$ docker run -i -t -d ubuntu:16.04 /bin/bash
1d2bf4c63d636b0493ffe9d5c6477d41c763ceaae8a3fb45ccb8a0ef10229f12
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1d2bf4c63d63 ubuntu:16.04 "/bin/bash" 54 seconds ago Up 53 seconds determined_payne
$ docker attach 1d2bf4c63d63
root@1d2bf4c63d63:/# exit
exit
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
- この場合もexitするとbashが終了するのでコンテナも停止する(run時に指定したコマンドが終わるとコンテナは停止)
- 停止させずに抜け出す(dettach)するにはコンテナ内で
CTRL+P → CTRL+Q
する
$ docker run -i -t -d ubuntu:16.04 /bin/bash
04f1dc8f7d0bac691c9111e8d1b3c334c7c007141815cf4843de34a1ef076056
$ docker attach 04f1dc8f7d0bac691c9111e8d1b3c334c7c007141815cf4843de34a1ef076056
root@04f1dc8f7d0b:/# <元のubuntuのプロンプト>$
$
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
04f1dc8f7d0b ubuntu:16.04 "/bin/bash" 24 seconds ago Up 23 seconds vigilant_babbage
- 抜け出すこともできるようになった。
- コンテナ外からコンテナを停止させるには
docker stop <コンテナID>
- これでコンテナを作って止めて消すことができるようになった。
- まずはここまで。次、勉強したらまた書く。