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
$ 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) 参考:コンテナに入りたい?それ docker exec でできるよ - Qiita
$ 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 - Build, Ship, and Run Any App, Anywhere の画面右上[Sign Up]をクリックし登録
docker hubにログイン
$ docker login Username: xxxx Password: Email: xxxx@xxxx
- Dockerイメージの登録 以下コマンドを実行するだけ
$ docker push <イメージ名>
Dockerfileのコマンド備忘録
- Copy (ホストOSからのコンテナへのファイルコピー)
- ".dockerignore"ファイルに記載したファイル/ディレクトリはCOPY対象外となる
- Dockerfile配置ディレクトリより、上位ディレクトリは参照できないので注意
COPY src dest
- WORKDIR(カレントディレクトリの指定)