Top / Docker / 基本コマンド

イメージの操作の超基本

イメージを探す

root@photon-machine [ ~ ]# docker search centos | more
NAME                                   DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
centos                                 The official build of CentOS.                   3050      [OK]

イメージをおとしてくる

root@photon-machine [ ~ ]# docker images
REPOSITORY             TAG                 IMAGE ID            CREATED             SIZE
root@photon-machine [ ~ ]#

いまはイメージがなにもない状態です。

root@photon-machine [ ~ ]# docker pull centos
Using default tag: latest
latest: Pulling from library/centos
Digest: sha256:c577af3197aacedf79c5a204cd7f493c8e07ffbce7f88f7600bf19c688c38799
Status: Downloaded newer image for centos:latest
root@photon-machine [ ~ ]# docker images
REPOSITORY             TAG                 IMAGE ID            CREATED             SIZE
centos                 latest              67591570dd29        6 weeks ago         191.8 MB
root@photon-machine [ ~ ]#

落ちてきているのが確認出来ました。

イメージを消す

root@photon-machine [ ~ ]# docker rmi centos:latest
Untagged: centos:latest
Untagged: centos@sha256:c577af3197aacedf79c5a204cd7f493c8e07ffbce7f88f7600bf19c688c38799
root@photon-machine [ ~ ]# docker images
REPOSITORY             TAG                 IMAGE ID            CREATED             SIZE
root@photon-machine [ ~ ]#

消えました。

コンテナの操作の超基本

CentOSを起動して、Hello Worldする

root@photon-machine [ ~ ]# docker pull centos
root@photon-machine [ ~ ]# docker images
REPOSITORY             TAG                 IMAGE ID            CREATED             SIZE
centos                 latest              67591570dd29        6 weeks ago         191.8 MB
root@photon-machine [ ~ ]# docker run centos echo "hello world"
hello world
root@photon-machine [ ~ ]#

イメージからコンテナが作成され、実行されました。そして終了しました。

コンテナの情報表示

root@photon-machine [ ~ ]# docker ps -a -n=1    ←-a: 終了したモノも表示、 -n=xx 直近 xxコを表示
CONTAINER ID        IMAGE                         COMMAND                  CREATED              STATUS                          PORTS               NAMES
60d7c5d76f05        centos                        "echo 'hello world'"     About a minute ago   Exited (0) About a minute ago                       berserk_wright
root@photon-machine [ ~ ]#

コンテナが作成されたのが分かります。 docker rm 60d7c5d76f05 で削除可能です。

バックグラウンド実行

root@photon-machine [ ~ ]# docker run -d centos free -s 3
94f07d1b91371236b66fdd4ac53143592cf4bc0f64a0dc6c666cfa4cbe57ba1a
root@photon-machine [ ~ ]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
94f07d1b9137        centos              "free -s 3"         10 seconds ago      Up 9 seconds                            jolly_fermi
root@photon-machine [ ~ ]#

 -d でバックグラウンド実行されます。

バックグラウンド実行したモノをフォアグラウンドにもってくる。

フォアグラウンドにもってくる*1には。。

root@photon-machine [ ~ ]# docker attach --sig-proxy=false 94f

              total        used        free      shared  buff/cache   available
Mem:        2053100       75364      342388      275160     1635348     1518696
Swap:             0           0           0

sig-proxy オプションを指定することで Ctrl-C で抜けることができるようになります。

バックグラウンド実行したモノを止める

root@photon-machine [ ~ ]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
94f07d1b9137        centos              "free -s 3"         4 minutes ago       Up 4 minutes                            jolly_fermi
root@photon-machine [ ~ ]# docker stop 94f
94f
root@photon-machine [ ~ ]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
root@photon-machine [ ~ ]#

停止しました。さらに docker start 94f で再度スタートさせることができます。

ついでにいうと docker run は、 docker create(イメージからコンテナ作成) と docker start(開始)をあわせて実施するコマンドのようです。

まとめるとこんな感じみたい。

docker create xx → 作成
docker start [コンテナID] → 開始 (create/start 一緒にやる場合は run )
docker stop [コンテナID]  → 停止
docker ps で確認

docker run -d xx でバックグラウンド実行、指定しないとフォアグラウンド
docker attach --sig-proxy=false [コンテナID]で接続 Ctr-C で切断

バックグラウンドのログを見る

root@photon-machine [ ~ ]# docker logs 94f
              total        used        free      shared  buff/cache   available
Mem:        2053100       69716      348616      275160     1634768     1524396
Swap:             0           0           0

              total        used        free      shared  buff/cache   available
Mem:        2053100       69740      348372      275160     1634988     1524420
Swap:             0           0           0
...
root@photon-machine [ ~ ]#

バックグラウンド実行されているモノのログを見ることができます。

ターミナルで接続

起動中のコンテナにattachするのでなく、execすることで、ターミナルで bash などでつなぐことができます。

root@photon-machine [ ~ ]# docker exec  -it  94f /bin/bash
bot@94f07d1b9137:~$

中に入れました。exit でコンテナを終了させることなく抜けることができます。

コンテナからイメージを作成する基本

コンテナから新たなイメージを保存してみます。そのために、コンテナの中に入って自由にコマンドが打てないといけないので、

root@photon-machine [ ~ ]# docker run -i -t  centos  /bin/bash
[root@003321389bfe /]#

って -d でも無指定でもない指定で /bin/bashを実行します。 -i はインタラクティブ、-t はターミナルでつなぐって意味ぽいです。

コンソールが返ってきました。中に入ったところですね。

コンテナを修正する

中に入ったので、なんかファイルを作成します。コンテナの中身を変更する作業をやって、んでそのコンテナからイメージを作成します。

[root@003321389bfe /]# touch hogehoge.txt
[root@003321389bfe /]# ls -lrt
total 64
...
-rw-r--r--  1 root root     0 Jan 29 12:18 hogehoge.txt
[root@003321389bfe /]# exit
exit

root@photon-machine [ ~ ]# docker ps -a -n=1
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                      PORTS               NAMES
003321389bfe        centos              "/bin/bash"         2 minutes ago       Exited (0) 13 seconds ago                       hungry_brown
root@photon-machine [ ~ ]#

イメージからコンテナを作ったオリジナル状態から、ファイルを一個作ったコンテナができあがりました。

修正したコンテナからイメージを作成する。

下記のコマンドでこのコンテナから新たなイメージを作成します。

root@photon-machine [ ~ ]# docker commit 003 masatomix/hoge    ←元のコンテナIDと新たなイメージの名前を指定。
sha256:c2109b07b71b759dd4184a6f3d147581fa68e834d99401c1a30aa680162726ce
root@photon-machine [ ~ ]# docker images
REPOSITORY             TAG                 IMAGE ID            CREATED             SIZE
masatomix/hoge         latest              c2109b07b71b        4 seconds ago       191.8 MB

作成されました!

中身の確認です。hoge.txtが存在するはずです。

root@photon-machine [ ~ ]# docker run -i -t masatomix/hoge /bin/bash
[root@1f35948112f6 /]# ls -lrt hogehoge.txt
-rw-r--r-- 1 root root 0 Jan 29 12:18 hogehoge.txt
[root@1f35948112f6 /]#

これで「元のイメージからコンテナを作成して、修正してから、イメージを保存する」事ができました。 ようするに誰かのイメージをおとしてきて、それに修正を加えて、新たなイメージとして保存する、という事できるってことですね。

コンテナを止めないで抜ける

ちなみに

root@photon-machine [ ~ ]# docker run -i -t  centos  /bin/bash

これで作成したコンテナに対して exit ってやるとコンテナを終了した結果抜けますが、Ctrl + p + q で、コンテナを停止せずに抜けます。

コンテナを公開する

公開するコンテナを作成

準備作業として先とほぼ同じ作業をおこない、ファイルを一個作ってコミットしておきましょう。

# docker run -it centos /bin/bash
# touch hogehoge.txt
# exit
# docker ps -a -n=1
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                      PORTS               NAMES
bb1d7d66fae9        centos              "/bin/bash"         43 seconds ago      Exited (0) 22 seconds ago                       sharp_ramanujan
# docker commit bb1d7 my_centos
sha256:ee8012f3b23d7058afd396c0c518029d416b7c51c7ba2f133ca91fd832fc8a66
# docker images
REPOSITORY                TAG                 IMAGE ID            CREATED             SIZE
my_centos                 latest              ee8012f3b23d        7 seconds ago       191.8 MB

準備は以上。centosのイメージに対して、ファイルを一個作っただけの my_centos というイメージができました。実はこのファイルはpushに失敗するんですが、準備は以上です。失敗の理由など詳細は後述します。

Docker Hubへログイン

Docker Hub というオープンなリポジトリにイメージを公開します。じつは初めに取得している「centos」などもココから取得しています。

下記でログイン作業を行っていますが、アカウントはあらかじめ作成しておいてください。

# docker login
Login with your Docker ID to push and pull images from Docker Hub. If you don't have a Docker ID, head over to https://hub.docker.com to create one.
Username: masatomix
Password:
Login Succeeded
# docker push my_centos
The push refers to a repository [docker.io/library/my_centos]
d3bccdb5bdb2: Preparing
34e7b85d83e4: Preparing
unauthorized: authentication required

失敗したようです。どうもイメージ名とアカウントには関連があるっぽく、イメージ名を [アカウント名]/xxx としなくてはいけないっぽい。なので元のイメージにdockerのタグコマンドで別名を設定します。

# docker tag my_centos masatomix/my_centos
# docker images
REPOSITORY                TAG                 IMAGE ID            CREATED             SIZE
masatomix/my_centos       latest              ee8012f3b23d        2 minutes ago       191.8 MB
my_centos                 latest              ee8012f3b23d        2 minutes ago       191.8 MB

アカウント名をprefixとした名前のイメージができました。

# docker push masatomix/my_centos
The push refers to a repository [docker.io/masatomix/my_centos]
d3bccdb5bdb2: Pushed
34e7b85d83e4: Pushed
latest: digest: sha256:112e0a942c9c3c6642ddf481ce488ec30a613daf8392e800a5953bdbfe57877c size: 736

pushが成功したようです。 https://hub.docker.com/r/masatomix/my_centos/ にも表示されていることが分かります。

# docker search masatomix

ホントはコレで出てくるハズなんですが、でてこず。ただし

# docker pull masatomix/my_centos

でローカルにイメージをおとしてくることは可能です。searchにヒットするのは時間がかかるのかな??

2017/04/16追記:今やったら出てきました。

# docker search masatomix
NAME                      DESCRIPTION   STARS     OFFICIAL   AUTOMATED
masatomix/my_centos                     0                    
masatomix/jenkins                       0
...
#

検索にヒットするにはすこし時間がかかるってことでしょうね。

関連リンク


この記事は

選択肢 投票
おもしろかった 0  
そうでもない 0  

Top / Docker / 基本コマンド

現在のアクセス:195


*1 というかバックグラウンド実行したモノに、につなげる

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2017-04-28 (金) 19:41:42 (88d)