114
161

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Dockerを0から勉強する

Last updated at Posted at 2017-03-01

やること

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イメージの操作

$ 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図.png

Docker hubからpullしたイメージからコンテナを作り、コンテナ内に何らかの編集を加え、再びイメージを作る。
その後、イメージをDocker hubにpushする。
これが本記事で説明した一連の流れです。

114
161
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
114
161

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?