やること
OSS(オープンソースソフトウェア)のDockerを0から勉強する。
コマンドの使い方や仕組みを理解することを目的とする。
Dockerfileを用いる方法は別記事で。。
##開発環境
- OS Ⅹ EL Capitan
- Vitualbox(5.1.0)
- Vagrant(1.9.1)
- Docker(1.13.1)
- Ubuntu(16.04)
- CentOS7
##1.Vagrantを使ってUbuntuを立ち上げる
※入門ということで仮想マシンを立ち上げ、その上でDockerの動作検証を行います。
仮想マシン用のディレクトリの作成
$ cd ~/MyVagrant
$ mkdir docker_study
Vagrantfileの作成
$ vim Vagrantfile
Vagrant.configure("2") do |config|
config.vm.box = "bento/ubuntu-16.04"
#Vitual boxのケーブル接続設定
config.vm.provider "virtualbox" do |vb|
vb.customize ["modifyvm", :id, "--cableconnected1", "on"]
end
config.vm.define "dockerstudy" do |dockerstudy|
#ホスト名の設定
dockerstudy.vm.hostname = "dockerstudy"
#メモリの設定
# test.customize ["modifyvm", :id, "--memory", "1024"]
#ホストOSと通信するIPアドレスの設定
dockerstudy.vm.network "private_network", ip: "192.168.33.17"
end
#ansibleの設定
config.vm.provision "ansible" do |ansible|
ansible.playbook = "provisioning/main.yml"
ansible.inventory_path = "provisioning/hosts"
ansible.limit = 'all'
end
end
Ubuntuの起動
$ vagrant up
ansibleの実行
$ vagrant provision
Ubuntuへの接続
$ vagrant ssh
##2.Dockerインストール
※Ubuntuのバージョンに注意
###①リポジトリを設定する
aptパッケージを更新する
$ sudo apt-get update
HTTPS経由でリポジトリを使用できるようにパッケージをインストールする
$ sudo apt-get -y install apt-transport-https ca-certificates curl software-properties-common
Dockerの公式GPGキーを追加
$ curl -fsSL https://apt.dockerproject.org/gpg | sudo apt-key add -
key IDが58118E89F3A912897C070ADBF76221572C52609Dであることを確認
$ apt-key fingerprint 58118E89F3A912897C070ADBF76221572C52609D
pub 4096R/2C52609D 2015-07-14
Key fingerprint = 5811 8E89 F3A9 1289 7C07 0ADB F762 2157 2C52 609D
uid Docker Release Tool (releasedocker) <docker@docker.com>
非公式リポジトリ(docker用リポジトリ)の追加
$ sudo add-apt-repository \
"deb https://apt.dockerproject.org/repo/ \
ubuntu-$(lsb_release -cs) \
main"
###②Dockerをインストールする
aptパッケージを更新する
$ sudo apt-get update
Dockerの最新バージョンをインストール
$ sudo apt-get -y install docker-engine
正しくインストールされているか確認
$ docker -v
Docker version 1.13.1, build 092cba3
hello-worldイメージをダウンロードして、コンテナ内で実行。
実行後、「Hello from Docker!」が表示されたらOK
$ sudo docker run hello-world
##3.Dockerイメージの操作
-
コンテナのイメージ(centos)を探す
https://hub.docker.com/_/centos/ -
コマンドでも同様のことを行える
$ sudo docker search centos | more
centOS(デフォルトよりcentos7)のイメージをdocker hubからpullする
$ sudo docker pull centos
イメージが取得できてるか確認
$ sudo docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
hello-world latest 48b5124b2768 5 weeks ago 1.84 kB
centos latest 67591570dd29 2 months ago 192 MB
イメージの設定確認
(内容の理解は困難。。。笑)
$ sudo docker inspect [IMAGE ID]
イメージの削除
$ sudo docker rmi [IMAGE ID]
##4.コンテナの操作
###①hello dockerを表示するコンテナの作成
作成したイメージ(centos)上で、"hello docker"を表示するコンテナの作成
$ sudo docker run centos echo "hello docker"
実行中のコンテナの確認
(上コマンドは実行終了しているので、表示はないはず)
$ sudo docker ps
実行したコンテナの確認
$ sudo docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
311c2032139a centos "echo 'hello docker'" 4 minutes ago Exited (0) 4 minutes ago sharp_bohr
実行したコンテナの最新の10個を表示
sudo docker ps -a -n=10
コンテナの削除
sudo docker rm 311c2032139a
###②デーモン化(常駐)したコンテナの作成・操作
作成したイメージ(centos)上で、メモリ状況を3秒おきに表示するコンテナをデーモン化(-d)
※ 実行するとプロセスのIDが表示
$ sudo docker run -d centos free -s 3
50f825594131f17d4d77cb125ef02934b0b1463956160a64c699a05ef53faf5b
コンテナが動いているか確認
$ sudo docker ps
コンテナの実行を確認
$ sudo docker logs 50f
コンテナをフォアグラウンドで実行したい時(ctrl+cで停止)
$ sudo docker attach --sig-proxy=false 50f
実行中のコンテナの停止
$ sudo docker kill 50f
いろいろ確認してみる
$ sudo docker ps
$ sudo docker ps -a
$ sudo docker start 765
$ sudo docker ps
##5. コンテナからイメージを作る
コンテナ内(centos)に入って作業する
-t: ホスト側の入力をコンテナの標準出力をつなげる
-i: キーボードから入力した文字はコンテナ内のプロセスに送られる
$ sudo docker run -i -t centos /bin/bash
hello.txtの作成
$ touch hello.txt
コンテナからイメージを作成
$ sudo docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
4b9328129e13 centos "bin/bash" 4 minutes ago Exited (0) 4 minutes ago goofy_gates
$ sudo docker commit 4b9 admin/hello
$ sudo docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
admin/hello latest 064996b61631 16 seconds ago 192 MB
centos latest 67591570dd29 2 months ago 192 MB
作成されたイメージからコンテナの作成
$ sudo docker run -i -t admin/hello /bin/bash
イメージの作成→コンテナの作成→イメージの作成→コンテナの作成→...
これを繰り返して編集していくのかな!
##5. イメージをpushする
Docker hubにsign upしておく
https://hub.docker.com
イメージ名はusernameと同じじゃないといけない点に注意
username: admin
Images: admin/????
Docker hubにloginする(ユーザ名など聞かれる)
sudo docker login
Docker hubにpushする
sudo docker push admin/httpd
Docker hubにログインして、Repositoriesのところにadmin/helloがあればOK
これをpullしたい時は
$ sudo docker pull admin/hello
をすれば良い
##作業の流れ(まとめ)
※2017/5/4 図の間違えを修正
Docker hubからpullしたイメージからコンテナを作り、コンテナ内に何らかの編集を加え、再びイメージを作る。
その後、イメージをDocker hubにpushする。
これが本記事で説明した一連の流れです。