イメージの操作の超基本 †イメージを探す †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 ... # 検索にヒットするにはすこし時間がかかるってことでしょうね。 関連リンク †
この記事は 現在のアクセス:2384 |