Help us understand the problem. What is going on with this article?

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

More than 5 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      -

参考情報

  • 説明途中に参照すべき情報はのせましたが、多くのかたの情報でささえられました。
  • アウトプット万歳
ume3_
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away