naichi's lab

3日後の自分(他人)への書き置き

Docker for Windows、Dockerの基本的な使い方やコマンドとか。

f:id:naichilab:20180114003948p:plain

概要

  • Docker使いたいけどよく分からない
  • だいぶ前に本買って読んでなかった
  • 読みながらメモ

プログラマのためのDocker教科書 インフラの基礎知識&コードによる環境構築の自動化

プログラマのためのDocker教科書 インフラの基礎知識&コードによる環境構築の自動化

Dockerの基本機能

  • Dockerイメージを作る機能
  • Dockerコンテナを動かす機能
  • Dockerイメージを公開・共有する機能

Dockerイメージ

  • アプリケーションの実行に必要なプログラムやライブラリ、ミドルウェア、OS設定などをまとめたもの。
  • 実際に動くコンテナのひな形になる
  • 正体はファイルが格納されたただのディレクトリ
  • 積み重ねることができる
    • OS用イメージの上にWebアプリケーション用イメージを重ねて新しいイメージを作る。とか。

Dockerイメージの作り方

  • Dockerコマンドで作る
  • Dockerfileという設定ファイルを作って、それを元に作る

この記事ではまだDockerfileは扱わず、dockerコマンドでの基本操作を扱う。

HelloWorld

とりあえずやってみる

下記記事の通りインストールされた前提で試す blog.naichilab.com

  • Kitematic起動
  • 左下にある docker CLI から powershell 起動
    • f:id:naichilab:20180115222143p:plain:w320
  • docker run centos:latest /bin/echo 'Hello World!!' を実行

なんか知らんが動いたーーーー

> docker run centos:latest /bin/echo 'Hello World!!'
Hello World!!

どーなってんだこれ。

Kitematic 起動させた状態で実行するとコンテナが増えて動いて止まるみたい。

f:id:naichilab:20180115211324p:plain:w320

なるほど。 centos:latest ってイメージを使ってコンテナを作り、 echo 'Hello World!!' を実行して終わったからコンテナが停止したってことか。

tender_thompson みたいなのはコンテナのインスタンス(?)名なのね。

一瞬で動くんだけどなんだこれ・・・すごいな。

イメージ一覧

  • 一度使ったイメージはローカルにキャッシュされるらしい
  • docker images で一覧可能
  • Kitematic 使ってる場合は My Images 開くだけ
    • f:id:naichilab:20180115212225p:plain:w320

基本コマンドっぽいの

コンテナ生成 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が起動していてそこに繋がる?
  • 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教科書 インフラの基礎知識&コードによる環境構築の自動化

プログラマのためのDocker教科書 インフラの基礎知識&コードによる環境構築の自動化