概要
- Docker使いたいけどよく分からない
- だいぶ前に本買って読んでなかった
- 読みながらメモ
プログラマのためのDocker教科書 インフラの基礎知識&コードによる環境構築の自動化
- 作者: 阿佐志保,山田祥寛
- 出版社/メーカー: 翔泳社
- 発売日: 2015/11/20
- メディア: 大型本
- この商品を含むブログ (3件) を見る
Dockerの基本機能
- Dockerイメージを作る機能
- Dockerコンテナを動かす機能
- Dockerイメージを公開・共有する機能
Dockerイメージ
- アプリケーションの実行に必要なプログラムやライブラリ、ミドルウェア、OS設定などをまとめたもの。
- 実際に動くコンテナのひな形になる
- 正体はファイルが格納されたただのディレクトリ
- 積み重ねることができる
- OS用イメージの上にWebアプリケーション用イメージを重ねて新しいイメージを作る。とか。
Dockerイメージの作り方
- Dockerコマンドで作る
- Dockerfileという設定ファイルを作って、それを元に作る
この記事ではまだDockerfileは扱わず、dockerコマンドでの基本操作を扱う。
HelloWorld
とりあえずやってみる
下記記事の通りインストールされた前提で試す blog.naichilab.com
- Kitematic起動
- 左下にある
docker CLI
から powershell 起動 docker run centos:latest /bin/echo 'Hello World!!'
を実行
なんか知らんが動いたーーーー
> docker run centos:latest /bin/echo 'Hello World!!' Hello World!!
どーなってんだこれ。
Kitematic
起動させた状態で実行するとコンテナが増えて動いて止まるみたい。
なるほど。 centos:latest
ってイメージを使ってコンテナを作り、 echo 'Hello World!!'
を実行して終わったからコンテナが停止したってことか。
tender_thompson
みたいなのはコンテナのインスタンス(?)名なのね。
一瞬で動くんだけどなんだこれ・・・すごいな。
イメージ一覧
- 一度使ったイメージはローカルにキャッシュされるらしい
docker images
で一覧可能Kitematic
使ってる場合はMy Images
開くだけ
基本コマンドっぽいの
コンテナ生成 docker create
- イメージからコンテナを生成する
- 起動まではしない
--name
で名前を決められる。指定しないとランダムな名前。
コンテナ生成&起動 docker run
docker run [options] image[:tag] [args]
docker run --name centos centos:latest
centos:latest
イメージを利用centos
という名のコンテナを生成して起動
バックグラウンドで実行(デタッチモード)
docker run -d hogehoge
- いつ使うんやろ?
ネットワーク設定
docker run -d -p 8080:80 httpd
-d
デタッチモード-p
ポートのマッピング(この場合ホストの8080をコンテナの80に)
- 他にもいろいろ
--add-host
hostsファイルに追記--dns
DNSサーバを指定--mac-address
MACアドレスを指定- とか
リソースの指定
- CPUやメモリなどコンテナが利用できるリソースを制限するオプションもある
コンテナ起動・停止・再起動・削除 docker start / stop / restart / rm
- この辺は Kitematic 使ってれば覚える必要もなさそう
実行中のコンテナ docker ps
- Kitematic 開けば常に出てる
コンテナに接続 docker attach
docker attach centos
- 起動しているcentosという名前のコンテナに接続する
- centosイメージだとデフォルトでbashが起動していてそこに繋がる?
- 起動しているcentosという名前のコンテナに接続する
ctrl+p -> ctrl+q
で抜ける
コンテナ上でプロセス実行 docker exec
docker exec -it centos /bin/bash
-i
コンテナの標準出力を開く-t
ttyを使う
-it
をつけないと 起動したbash の出力を受け取れない
コンテナ名変更 docker rename
docker rename old new
ファイルコピー docker cp
docker cp test:/etc/passwd /tmp/etc
test
コンテナの/etc/passwd
をホストの/tmp/etc
にコピー
docker cp ./local.txt test:/tmp/test.txt
- ホストからコンテナへのコピー
イメージとの差分確認 docker diff
docker diff container
> docker exec centos touch hogehoge > docker diff centos A /hogehoge
これ恐ろしく便利なのでは・・・
イメージ作成 docker commit
基本イメージからコンテナを作り、設定して、それをイメージにすることができる。
docker commit -a "naichilab" centos naichilab/webserver:1.0
-a
作成者の名前
> docker commit -a "naichilab" centos naichilab/webserver:1.0 sha256:4072fcba876fb7a893cf8390bdd4cc5ea9c3a4ae8f7bc98d59a6d9df37826b76
イメージ情報を表示 docker inspect
docker inspect imagename
> docker inspect naichilab/webserver:1.0 [ { "Id": "sha256:4072fcba876fb7a893cf8390bdd4cc5ea9c3a4ae8f7bc98d59a6d9df37826b76", "RepoTags": [ "naichilab/webserver:1.0" ], ~~~続く
コンテナをtarに書き出す docker export
docker export centos > latest.tar
tarからイメージを生成 docker import
docker import file_or_url - imagename:tagname
ログを見る docker logs
docker logs container_name
まとめ&感想
- Kitematic使えば基本コマンドはほとんど覚えなくてよさそう。
docker diff
すごくない??- コンテナの起動速すぎてびびる
Dockerfile
ってもの使うともっと便利になるっぽいので次回で。
こりゃ便利そうだわ・・・
プログラマのためのDocker教科書 インフラの基礎知識&コードによる環境構築の自動化
- 作者: 阿佐志保,山田祥寛
- 出版社/メーカー: 翔泳社
- 発売日: 2015/11/20
- メディア: 大型本
- この商品を含むブログ (3件) を見る