boot2docker使用メモ

環境

mac環境でも最新バージョン(Ver:1.3.0)のboot2dockerであれば、 簡単に使えるようになったようなのでdockerの練習をかねてお試し

$ uname -a    
Darwin mac-3.local 14.0.0 Darwin Kernel Version 14.0.0: Fri Sep 19 00:26:44 PDT 2014; root:xnu-2782.1.97~2/RELEASE_X86_64 x86_64
  • ソフトウェア
    • VirtualBox(Ver:4.3.18)
    • boot2docker(Ver:1.3.0)

手順(dockerの操作)

boot2docker起動

以下を実行するだけ(なお、停止は"boot2docker down")

$ boot2docker up


- 起動に失敗する時

$ docker images
2014/11/23 07:39:41 Get http:///var/run/docker.sock/v1.15/images/json: dial unix /var/run/docker.sock: no such file or directory

stackoverflowboot2docker - docker error: /var/run/docker.sock: no such file or directory - Stack Overflowに従い、下記を実行すると解決(ようは環境変数セットすればOK)

$ $(boot2docker shellinit)

boot2docker その他の機能

  • ssh(boot2docker)

VirtualBox内の仮想マシンにログインします。(vagrant ssh的なもの)

$ boot2docker ssh
  • ssh(ホストOSからdockerユーザでもログイン)
$ boot2docker ssh
docker@boot2docker:~$ ifconfig -a | grep inet
  〜中略
          inet addr:192.168.59.103  Bcast:192.168.59.255  Mask:255.255.255.0
   # 複数のIFが見えるが「192.168.59.XXX」のアドレスを確認
docker@boot2docker:~$ exit
$ ssh docker@192.168.59.103
docker@192.168.59.103's password:     # "tcuser"を入力
  • 共有フォルダ

MacOSの"/Users"フォルダが仮想マシンにマウントされています。

docker@boot2docker:~$ df /Users/
Filesystem                Size      Used Available Use% Mounted on
none                    232.1G    160.4G     71.7G  69% /Users

dockerイメージの取得と起動

参考URL Docker入門 (全11回) - プログラミングならドットインストール

  • docker indexからcentosのimageを検索
$ docker search centos
  • dockerイメージ取得(CentOS7.0) CentOS6.Xの指定したい場合は、centos6にすればOK
$ docker pull centos
  • ローカル環境にインストールされたdockerイメージを確認
$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
centos              latest              87e5b6b3ccc1        4 weeks ago         224 MB
  • 詳細表示(inspectオプション)
$ docker inspect centos:latest  (*1)
[{
    "Architecture": "amd64",
    "Author": "The CentOS Project \u003ccloud-ops@centos.org\u003e - ami_creator",
    "Comment": "",
    "Config": {
        "AttachStd
        
    〜略〜

*1) From : tagは省略すると、latestがセットされる(ほかのコマンドも同じ動き)

  • コンテナ起動(インタラクティブ) dockerコマンドのオプションに"-it"を指定の上、引数にbashを指定するとコンテナのシェルにログインできる。
$ docker run -it centos /bin/bash
bash-4.2# uname -n
cb07f99673ce
bash-4.2# exit
exit
  • コンテナ起動(バックグランウンド) "docker run"に"-d"オプションをつけるとバックグランド実行する。
$ docker run -d centos free -s 3
f7c2645119fc73af2e10ff8458fa5138a37043d53d7b43c13da3cb2ca59a83e9
$ docker ps 
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
f7c2645119fc        centos:latest       "free -s 3"         35 minutes ago      Up 8 seconds                            jolly_yonath 
  • コンテナ内の実行ログを確認(docker logs) "docker logs"で、標準出力に出力されているログを確認できる。
$ docker logs f7c
             total       used       free     shared    buffers     cached
Mem:       2056884     556544    1500340     209500      17012     255112
-/+ buffers/cache:     284420    1772464
Swap:      1441856          0    1441856
$ docker exec -it <CONTAINER ID> bash

Note: "Ctrl + C"でターミナルに戻る

  • コンテナ停止 "docker stop(停止)"、または"docker kill(強制停止)"でコンテナを停止できる。
$ docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
f7c2645119fc        centos:latest       "free -s 3"         38 minutes ago      Up 3 minutes                            jolly_yonath        

$ docker stop f7c
f7c
[edo@mac-3:~]
$ docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
  • コンテナ再開
$ docker start f7c
f7c
$ docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
f7c2645119fc        centos:latest       "free -s 3"         39 minutes ago      Up 3 seconds                            jolly_yonath 
  • コンテナ削除
$ docker ps -a   *CONTAINER ID確認
$ docker rm <CONTAINER ID>
  • コンテナ削除(一括)
docker rm `docker ps -a -q`

Dockerイメージを作成

サンプル)ssh client/serverをインストールしたcentos6イメージを作成

  • コンテナ内でssh serverをインストール
$ docker run -it centos:centos6 /bin/bash
bash-4.2# yum -y install openssh-clients openssh-server
bash-4.2# bash-4.2# exit
exit
  • コンテナ確認(CONTAINER IDを控える)
$ docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                      PORTS               NAMES
d409dc7644c0        centos:centos6      "/bin/bash"         14 minutes ago      Exited (0) 4 seconds ago                        drunk_bardeen
  • Docker image作成 CONTAINER IDを指定してcommitする。名前は適当に
$ docker commit d409dc7644c0 muraoka_edo/centos6-ssh
7f6fdb9ae9b5dd62ad463ef5000f03b536784b04229588183de4f53231d1d844
$ docker images
REPOSITORY                     TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
hogeo/install-sshserver   latest              7f6fdb9ae9b5        7 minutes ago       297.7 MB
centos                         latest              87e5b6b3ccc1        7 weeks ago         224 MB
  • Docker imageにログイン
$ docker run -it acad45caf578 /bin/bash
  • イメージを削除
$ docker images   *IMAGE ID確認
$ docker rmi <IMAGE ID>

Dockerイメージを作成(Dockerfile編)

  • ユーザ情報を記載
$ vi Dockerfile
From centos
MAINTAINTER XXXXXXX <XXXXX@gmail.com>
  • 設定情報を追記

SSHサーバーをインストールするDockerfileを作成。こんな意見( 【翻訳】Dockerコンテナ内でSSHDを実行してはいけない理由 | POSTD )もあるが、サンプルなので気にしない。

$ vi Dockerfile
FROM centos:centos6

# ---------------------------------------
#  System Env
# ---------------------------------------
ENV HOSTNAME docker_test01
# Bash
RUN echo "export PS1='[\u@\h \W]$ ' " >> /etc/profile
RUN echo "set -o vi"                  >> /etc/profile
# TimeZone
RUN echo 'ZONE="Asia/Tokyo"' > /etc/sysconfig/clock
RUN rm -f /etc/localtime
RUN ln -fs /usr/share/zoneinfo/Asia/Tokyo /etc/localtime
# Locale
RUN localedef -f UTF-8 -i ja_JP ja_JP.utf8
RUN sed -ri 's/en_US/ja_JP/' /etc/sysconfig/i18n

# ---------------------------------------
#  Packages
# ---------------------------------------
RUN yum -y install      \
        openssh-clients \
        openssh-server  \
        sudo  \
        ntp   \
        git   \
        vim-enhanced \
        which \
        wget

# ---------------------------------------
#  User/Group Add
# ---------------------------------------
RUN groupadd -g 1000 dev
# Sudo
RUN echo '%dev  ALL=(ALL)   NOPASSWD: ALL' > /etc/sudoers.d/group-dev
# Useradd
RUN useradd -u 500 -g dev -G wheel hoge

# ---------------------------------------
#  Authentication
# ---------------------------------------
# Password
RUN echo 'root:password' | chpasswd 
RUN echo 'hoge:hoge' | chpasswd hoge
# SSH
RUN sed -ri 's/^#PermitRootLogin yes/PermitRootLogin yes/' /etc/ssh/sshd_config
RUN sed -ri 's/^UsePAM yes/UsePAM no/' /etc/ssh/sshd_config

# ---------------------------------------
#  Port
# ---------------------------------------
# sshポート
EXPOSE 22
CMD ["/usr/sbin/sshd", "-D"]
CMD /sbin/init
  • Docker build / run Note: "--no-cache"をつけると2回目以降もキャッシュを利用せずにBuild実行(touchコマンドでもOK?)
$ docker build -t muraoka_edo/centos6-ssh .   *末尾の"."をわすれないよう
$ docker run -p 2222:22 -d muraoka_edo/centos6-ssh
$ docker ps
CONTAINER ID        IMAGE                            COMMAND                CREATED             STATUS              PORTS                  NAMES
b852bdd0e78f        muraoka_edo/centos6-ssh:latest   "/bin/sh -c /sbin/in   6 seconds ago       Up 3 seconds        0.0.0.0:2222->22/tcp   agitated_hoover
  • コンテナへの接続確認
$ docker port b852bdd0e78f  22   *22ポートに紐づくIPアドレス/Portを表示
0.0.0.0:2222
$ boot2docker ssh
# --- vm内でsshを実行
$ ssh -p 2222 root@0.0.0.0   *2222ポートに対してssh接続

Docker Hubへの登録

1アカウントにつき、1台しかDockerイメージを登録できなのが残念

$ docker login
Username: xxxx
Password: 
Email: xxxx@xxxx
  • Dockerイメージの登録 以下コマンドを実行するだけ
$ docker push <イメージ名>

Dockerfileのコマンド備忘録

  • Copy (ホストOSからのコンテナへのファイルコピー)
    • ".dockerignore"ファイルに記載したファイル/ディレクトリはCOPY対象外となる
    • Dockerfile配置ディレクトリより、上位ディレクトリは参照できないので注意
COPY src dest


- WORKDIR(カレントディレクトリの指定)

参考URL