Docker勉強しよう
今まで曖昧なままでいたdockerを初めの一歩から理解する試み
docker image
- コンテナ実行に必要なファイルをまとめたファイルシステム
- AUFSなどの特殊などの特殊なファイルシステムが使用されている
- 階層構造でデータが管理されている
イメージ上のデータはレイヤで構成され読み取り専用
コンテナを起動した際にコンテナレイヤーという読み書き可能なレイヤーが作成される
- docker imageに無駄なファイルが保存されないようにimageを作成する必要がある
- imageが大きくなるとダウンロードやdocker hub へのアップロードが遅くなる
- 軽量で素早く環境構築ができるということを主眼において作成する
dockerやってみる
docker whalesay
- docker社が提供するチュートリアル的なdockerイメージ
- docker pull {image名}
- docker hub からイメージをダウンロードする
$ docker pull docker/whalesay Using default tag: latest latest: Pulling from docker/whalesay Image docker.io/docker/whalesay:latest uses outdated schema1 manifest format. Please upgrade to a schema2 image for better future compatibility. More information at https://docs.docker.com/registry/spec/deprecated-schema-v1/ e190868d63f8: Pull complete 909cd34c6fd7: Pull complete 0b9bfabab7c1: Pull complete a3ed95caeb02: Pull complete 00bf65475aba: Pull complete c57b6bcc83e3: Pull complete 8978f6879e2f: Pull complete 8eed3712d2cf: Pull complete Digest: sha256:178598e51a26abbc958b8a2e48825c90bc22e641de3d31e18aaf55f3258ba93b Status: Downloaded newer image for docker/whalesay:latest docker.io/docker/whalesay:latest
$ docker images REPOSITORY TAG IMAGE ID CREATED SIZE docker/whalesay latest 6b362a9f73eb 4 years ago 247MB
$ docker run docker/whalesay cowsay HelloWorld! _____________ < HelloWorld! > ------------- \ \ \ ## . ## ## ## == ## ## ## ## === /""""""""""""""""___/ === ~~~ {~~ ~~~~ ~~~ ~~~~ ~~ ~ / ===- ~~~ \______ o __/ \ \ __/ \____\______/
- so cute!
Dockerfile
- 自分でdockerimageを作成する場合に必要となる
- Dockerfileからimageを構築することを「イメージビルド」という
- docker build -t {tag} .
- -t :タグ名の指定
- . : ビルドコンテキスト、イメージ作成アクセスできるディレクトリや範囲を示すもの「.」 はカレントディレクトリ
Dockerfileの作成
# 元のimageになるものを指定 FROM ubuntu:latest RUN apt-get -y update RUN apt-get -y install fortune # 実行 CMD /usr/games/fortune
さっそくbuildしてみる
$ docker build -t docker_practice . Sending build context to Docker daemon 2.048kB Step 1/4 : FROM ubuntu:latest ---> cf0f3ca922e0 Step 2/4 : RUN apt-get -y update ---> Using cache ---> 329ec94d01bf Step 3/4 : RUN apt-get -y install fortune ---> Running in 6ae5cc8535e1 Reading package lists... Building dependency tree... Reading state information... The following additional packages will be installed: fortunes-min librecode0 Suggested packages: fortunes x11-utils bsdmainutils The following NEW packages will be installed: fortune-mod fortunes-min librecode0 0 upgraded, 3 newly installed, 0 to remove and 1 not upgraded. Need to get 621 kB of archives. After this operation, 2131 kB of additional disk space will be used. Get:1 http://archive.ubuntu.com/ubuntu bionic/main amd64 librecode0 amd64 3.6-23 [528 kB] Get:2 http://archive.ubuntu.com/ubuntu bionic/universe amd64 fortune-mod amd64 1:1.99.1-7build1 [37.3 kB] Get:3 http://archive.ubuntu.com/ubuntu bionic/universe amd64 fortunes-min all 1:1.99.1-7build1 [55.1 kB] debconf: delaying package configuration, since apt-utils is not installed Fetched 621 kB in 4s (139 kB/s) Selecting previously unselected package librecode0:amd64. (Reading database ... 4046 files and directories currently installed.) Preparing to unpack .../librecode0_3.6-23_amd64.deb ... Unpacking librecode0:amd64 (3.6-23) ... Selecting previously unselected package fortune-mod. Preparing to unpack .../fortune-mod_1%3a1.99.1-7build1_amd64.deb ... Unpacking fortune-mod (1:1.99.1-7build1) ... Selecting previously unselected package fortunes-min. Preparing to unpack .../fortunes-min_1%3a1.99.1-7build1_all.deb ... Unpacking fortunes-min (1:1.99.1-7build1) ... Setting up fortunes-min (1:1.99.1-7build1) ... Setting up librecode0:amd64 (3.6-23) ... Setting up fortune-mod (1:1.99.1-7build1) ... Processing triggers for libc-bin (2.27-3ubuntu1) ... Removing intermediate container 6ae5cc8535e1 ---> 256cbe9624f1 Step 4/4 : CMD /usr/games/fortune ---> Running in 1cf42b753720 Removing intermediate container 1cf42b753720 ---> 4f594fcd4c72 Successfully built 4f594fcd4c72 Successfully tagged docker_practice:latest
さっそく起動してみる
$ docker run docker_practice FORTUNE PROVIDES QUESTIONS FOR THE GREAT ANSWERS: #15 A: The Royal Canadian Mounted Police. Q: What was the greatest achievement in taxidermy?
起動したコンテナの削除
- docker ps -a としてプロセスを確認すると以下のようになっている
- 今回の場合は docker run docker_practiceを3回実行したもの
$ docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 222a7a32d5f3 docker_practice "/bin/sh -c /usr/gam…" About a minute ago Exited (0) About a minute ago youthful_lumiere 65430ede8e2f docker_practice "/bin/sh -c /usr/gam…" 27 minutes ago Exited (0) 27 minutes ago sleepy_wiles 124a057a8619 docker_practice "/bin/sh -c /usr/gam…" 27 minutes ago Exited (0) 27 minutes ago naughty_bartik
- STATUSが Exited の場合すでに停止はしているが、プロセスが生きている状態
- プロセスを止める場合には docker rm {CONTAINER ID/image名} を実行
$ docker rm 222a7a32d5f3 222a7a32d5f3 $ docker rm 65430ede8e2f 65430ede8e2f $ docker rm 124a057a8619 124a057a8619
コンテナの削除
- docker imageを削除する方法
- docker rmi {image名/IMAGE_ID}:{tag} (tagをつけている場合はtag名まで必要になる)
$ docker rmi docker_practice Untagged: docker_practice:latest Deleted: sha256:4f594fcd4c72cdb18838c3b825196bc84bca0b93ed08bb33bf3e2d1584ce5615 Deleted: sha256:256cbe9624f1a8fd31f089fbc9a11a4bdd921db0aa505b653182665368b395f7 Deleted: sha256:d5ef1db03cb447ea0d047fcc3b65311141c80233c7c7745e9edab8afea6be0b3