Edited at
PepaboDay 7

Ubuntu+Monit+Fluentd起動の自作DockerイメージをDockerHubに配置までをやってみた

More than 3 years have passed since last update.

流行り物に触れてみた。

みなさまのアウトプットに支えられてのまとめのようなもの。

感謝です。


成果物


起動

docker login

docker pull ume3/docker-ubuntu-monit-log
docker images
docker run -dt -p 2812:2812 ume3/docker-ubuntu-monit-log
docker ps


  • DockerHub経由でDLして立ち上げるとMonit経由で以下が閲覧できる


    • ex) http://127.0.0.1:2812



image



つくりかた


  • 必要なもの



  • Dockerを立ち上げる環境


    • 今回は、Mac(homebrew利用)

    • boot2docker

    • VirtulaBox



  • Dockerを立ち上げる環境その2


    • 作ったイメージを別のDocker環境で用意したい場合

    • 適当に:AWSでUbuntuでもたちあげればいいんじゃないでしょうか(雑)




GitHubにDockerfileを管理したいリポジトリを作成する


  • Dokcerfileをおく用意をする


    • git clone git@github.com:ume3/docker-ubuntu-monit-log.git

    • 該当ディレクトリで作業する




boot2docker (Macの場合)

brew update

brew tap homebrew/binary
brew install docker
brew install boot2docker
brew cask install virtualbox


  • boot2dockerは 1.3以上がよいです



    • brew info boot2docker で確認




boot2dockr のセットアップ


  • boot2dockerをセットアップする

boot2docker init

boot2docker start


  • セットアップ時に以下のようにdocker操作する際の環境変数を設定する


    • そのままコピペ(or .zshenv, .bashenvなどに設定する)



---snip

To connect the Docker client to the Docker daemon, please set:
export DOCKER_HOST=tcp://192.168.59.103:2376
export DOCKER_CERT_PATH=/Users/hoge/.boot2docker/certs/boot2docker-vm
export DOCKER_TLS_VERIFY=1


  • Dockerコマンドを使えることを確認

% docker ps

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS

ここまでで準備はOK



Dockerfileを用意してビルドする



  • Dockerfile を書く

  • ex) Ubuntuでdocker:dockerでsshログインする環境

# Latest Ubuntu LTS

FROM ubuntu:14.04
MAINTAINER ume3

ENV USER_NAME docker
ENV USER_PASSWORD docker

## install
RUN apt-get update
RUN apt-get upgrade -y
RUN apt-get install sudo passwd openssh-server -y

## setup
# ssh
RUN sed -ri 's/^#PermitRootLogin yes$/PermitRootLogin no/' /etc/ssh/sshd_config

# useradd
RUN useradd $USER_NAME
RUN echo "$USER_NAME:$USER_PASSWORD" | chpasswd
RUN echo "$USER_NAME ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers.d/$USER_NAME
RUN mkdir /var/run/sshd
RUN mkdir /home/${USER_NAME}

## service
# ssh
EXPOSE 22

ENTRYPOINT [ "/usr/sbin/sshd", "-D" ]


  • Dockerイメージの作成

# build

% docker build -t ubuntu .
# imagesの確認
% docker images


Dockerコンテナの起動


  • 10000番ポートでフォワーディングする設定を記載する(後述)

% docker run -dt -p 10000:22 ubuntu

bac4eb2001b2f6618a6c3b5b5b4b3e712b968ce403418059d15b92df4ca799b6
% docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
bac4eb2001b2 ubuntu:latest "/usr/sbin/sshd -D" 6 days ago Up 12 seconds 0.0.0.0:10000->22/tcp hungry_pasteur


virtualbox経由でsshログインする


  • boot2dockerを立ち上げると、VirtualBoxのイメージが立ち上がっている

  • virutalbox起動より

image


VirtualBoxでポートフォワーディング

ポートフォワーディングをして、以下の関係をつくってあげる。

今回は10000番とする。

[ssh:10000] -> [boot2docker-vm:10000] -> [docker-container:22]


  • GUI操作でもいいがコマンドだと以下


  • before


% VBoxManage showvminfo boot2docker-vm | grep ^NIC

NIC 1: MAC: 080027502227, Attachment: NAT, Cable connected: on, Trace: off (file: none), Type: virtio, Reported speed: 0 Mbps, Boot priority: 0, Promisc Policy: deny, Bandwidth group: none
NIC 1 Settings: MTU: 0, Socket (send: 64, receive: 64), TCP Window (send:64, receive: 64)
NIC 2: MAC: 0800276ADD18, Attachment: Host-only Interface 'vboxnet0', Cable connected: on, Trace: off (file: none), Type: virtio, Reported speed: 0 Mbps, Boot priority: 0, Promisc Policy: deny, Bandwidth group: none
NIC 3: disabled
NIC 4: disabled
NIC 5: disabled
NIC 6: disabled
NIC 7: disabled
NIC 8: disabled


  • after

% VBoxManage controlvm "boot2docker-vm" natpf1 "ssh_container,tcp,127.0.0.1,10000,,10000"

% VBoxManage showvminfo boot2docker-vm | grep Rule
NIC 1 Rule(0): name = ssh_container, protocol = tcp, host ip = 127.0.0.1, host port = 10000, guest ip = , guest port = 10000


VirtualBox(GUI)確認


  • VBoxManageで設定したことで以下。他、応用がきく。
    image


sshログイン確認

% ssh -p 10000 docker@127.0.0.1

docker@127.0.0.1's password:
Welcome to Ubuntu 14.04 LTS (GNU/Linux 3.2.0-54-generic x86_64)
---snip

OK


削除・整理コマンド


  • このあたり

docker stop <CONTAINER>

docker ps
docker ps -q
docker stop `docker ps -q`
docker images
docker rmi <IMAGE>



GitHub+DockerHub


GitHub


  • 動作確認のとれた DockerfileをCommitして、GitHubへpushしておく


DockerHub


  • ログイン後


    • [settings] - [Linked Accounts]

    • GitHubとの認証を先に済ませておく



image


  • 認証後

image


Automated Build

image


  • 画面遷移しつつ、 用意したGitHubのリポジトリ を参照させる


    • とくに迷わない




連携結果

image



GitHubへPushするとDockerHubへBuildが走ることを確認する


  • 今回のポイント


更新してみる

% docker build -t ubuntu:monit .

% docker run -dt -p 10000:22 -p 2812:2812 ubuntu:monit
% VBoxManage controlvm "boot2docker-vm" natpf1 "monit_contaner,tcp,127.0.0.1,2812,,2812"


  • 上記コマンドで http://127.0.0.1;2812 を確認できる

image


DockerHubの更新確認

これで、連携更新が可能となった。


UbuntuでFluetnd


  • おまけのように

  • 公式のとおり:http://docs.fluentd.org/ja/articles/install-by-deb



    • Dockerfile に記載してげればよい



  • moduleいれるときも以下とかで


    • RUN /usr/lib/fluent/ruby/bin/fluent-gem install fluent-plugin-twitter



  • こうなってくるとDockerfile以外のファイル管理をしたくなるのでGithub連携がいきてくる



DockerHubから自作のDockerイメージを使う


  • このイメージを pull すれば、どの Docker環境 でも使える


    • 別の環境で起動してみよう




AWS(Ubuntu) + Docker + DockerHubイメージ


  • AWSで適当に作成(ざっくり省略)

  • 今だとVPCでしか作成できない(クラシックモードじゃないなら)


    • 気にせず、 t2.micro あたりでも使う(VPC限定だが)


    • ec2-user じゃなくて ubuntuなのは注意



image


Ubuntu + docker


Docker起動後、DockerHubへアクセス

ubuntu@ip-172-30-0-10:~$ sudo docker login

Username: ume3
Password: ******
Email: <mail@mail.com>
Login Succeeded


自作イメージをpullする


  • ポイント


    • これがやりたいこと docker pull <自作イメージ>



ubuntu@ip-172-30-0-10:~$ sudo docker pull ume3/docker-ubuntu-monit-log

Pulling repository ume3/docker-ubuntu-monit-log
dab621726aea: Pulling dependent layers
511136ea3c5a: Download complete
01bf15a18638: Download complete
30541f8f3062: Download complete

---snip

194a6d0fae98: Download complete
Status: Downloaded newer image for ume3/docker-ubuntu-monit-log:latest


確認と起動

## イメージ確認

ubuntu@ip-172-30-0-10:~$ sudo docker images | grep docker-ubuntu-monit-log
ume3/docker-ubuntu-monit-log latest dab621726aea 16 minutes ago 257 MB
## 起動
ubuntu@ip-172-30-0-10:~$ sudo docker run -dt ume3/docker-ubuntu-monit-log
ce36f0cf42c7e31b4864da3f862e0937711e27bba697579b144b3146005c7be6

## 起動確認
ubuntu@ip-172-30-0-10:~$ sudo docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ce36f0cf42c7 ume3/docker-ubuntu-monit-log:latest "/bin/sh -c '/usr/bi 27 seconds ago Up 27 seconds 22/tcp, 2812/tcp sick_mccarthy

# コンテナのipを知りたいなら以下

ubuntu@ip-172-30-0-10:~$ sudo sh -c 'docker inspect --format="{{ .NetworkSettings.IPAddress }}" `docker ps -q`'
172.17.0.82

## SSH OK
ubuntu@ip-172-30-0-10:~$ ssh docker@172.17.0.82
The authenticity of host '172.17.0.82 (172.17.0.82)' can't be established.
ECDSA key fingerprint is 6a:aa:ad:15:21:f2:0b:b8:1a:95:0a:5d:6c:71:a6:b4.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '
172.17.0.82' (ECDSA) to the list of known hosts.
docker@172.17.0.82'
s password:
Welcome to Ubuntu 14.04 LTS (GNU/Linux 3.2.0-54-generic x86_64)

* Documentation: https://help.ubuntu.com/
---snip


  • ログイン後、起動確認すれば無事にたちあがっている。あとはよしなに。

$ bash

docker@f255f6f58ca6:~$ sudo netstat -lntp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:24224 0.0.0.0:* LISTEN -
tcp 0 0 127.0.0.1:24230 0.0.0.0:* LISTEN -
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN -
tcp 0 0 0.0.0.0:8888 0.0.0.0:* LISTEN -
tcp 0 0 0.0.0.0:2812 0.0.0.0:* LISTEN -
tcp6 0 0 :::22 :::* LISTEN -



参考情報


  • 説明途中に参照すべき情報はのせましたが、多くのかたの情報でささえられました。

  • アウトプット万歳