Dockerのチュートリアルをやってみた
開発環境
- Mac OS X mavericks
- Vagrant 1.7.2
- ubuntu 14.04
この記事の目的
- DockerのTutorialでやっていることをMac内で実際にやってみることがゴール
- チュートリアルの一部は省略しています。
- そもそもDockerとは?って人は見ても何やってるかわからないかもしれないです。
この記事でやっていること
- Mac内に仮想サーバのUbuntuを立てる
- UbuntuでDockerをインストールする
- コンテナのimage持ってくる
- image内でHello worldをする
- imageにpingをインストールする
- imageをcommitする
- 新しくできたimageからgoogleにpingを打つ
- 新しくできたimageをpushする
Mac内に仮想サーバを立ち上げる
チュートリアルには含まれていません
- Vagrantのbox追加に関しては省略。
vagrant box add
とかやってなんとかubuntu/trusty64を取得してください
Vagrantfile
# -*- mode: ruby -*-
VAGRANTFILE_API_VERSION = "2"
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
config.vm.box = "ubuntu/trusty64"
config.vm.network "private_network", ip: "192.168.81.9"
end
UbuntuでDockerをインストールする
$ vagrant up
$ vagrant ssh
$ sudo apt-get update
$ sudo apt-get install docker.io
参考
コンテナのimage持ってくる
ここからがチュートリアルの開始状態
- imageを探す
$ sudo docker search tutorial
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
learn/tutorial 6
- imageを持ってくる
$ sudo docker pull learn/tutorial
Pulling repository learn/tutorial
8dbd9e392a96: Download complete
image内でHello worldをする
最初の引数以外は別に気にしなくていいっぽい
$ sudo docker run learn/tutorial echo Hello world
Hello world
imageにpingをインストールする
-y
をつけて実行確認を出さない
$ sudo docker run learn/tutorial apt-get install -y ping
imageをcommitする
- pingをインストールしたプロセスを探す
$ sudo docker ps -l
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
be1c53191c1f learn/tutorial:latest apt-get install -y p 6 minutes ago Exited (0) 6 minutes ago clever_pare
- commitする
$ sudo docker commit be1c learn/ping
ffdd612f3aae57c58dc9269896caa73ff90558c75643a4d62a29bdba9f501802
commitする際はプロセスの最初の4文字程度で良い
新しくできたイメージからgoogleにpingを打つ
$ sudo docker run learn/ping ping www.google.com
www.google.com (173.194.117.240) 56(84) bytes of data.
--- www.google.com ping statistics ---
6 packets transmitted, 0 received, 100% packet loss, time 5025ms
- 何も表示されない…?
- この辺りは多分ネットワーク周りの話になってくるので、また後の話
- 今回はpingを打てたことが重要
- pingがインストールされていない場合(最初のイメージ)はpingないよってエラーが出る
$ sudo docker run learn/tutorial ping www.google.com
2015/02/05 06:50:42 exec: "ping": executable file not found in $PATH
新しくできたimageをpushする
- ここからはチュートリアルと少し違うところになる
- Dockerのイメージは
Docker Hub
にアップロードするのでアカウントが必要 - 先にアカウントを作成してきてください > https://registry.hub.docker.com/
$ sudo docker push learn/ping
The push refers to a repository [learn/ping] (len: 1)
Sending image list
Please login prior to push:
Username: ------
Password:
Email: ------@gmail.com
Login Succeeded
The push refers to a repository [learn/ping] (len: 1)
Sending image list
2015/02/05 06:58:09 Error: Status 403 trying to push repository learn/ping: "Access denied, you don't have access to this repo"
- エラーが出た。
- 理由は権限がないから。
- ここでDocker Hubのお作法的なお話
- Docker Hubはイメージ名を
アカウント名/hogehoge
とするので、自分はlearnさんではないのでエラーが出た。
- imageの作り直しをして再度挑戦
$ sudo docker commit be1c [イメージ名]
$ sudo docker push [イメージ名]
The push refers to a repository [イメージ名] (len: 1)
Sending image list
Pushing repository [イメージ名] (1 tags)
************: Image already pushed, skipping
************: Image successfully pushed
Pushing tag for rev [************] on {https://cdn-registry-1.docker.io/v1/repositories/[イメージ名]/tags/latest}
Docker Hubにもリポジトリができていると思うのでそちらを確認する
最後に
今回はチュートリアルをそのまま実践することだけしかやっていません。
運用であったり環境構築はまた別の話になってくるので、その辺りはまた今度