![](https://habrastorage.org/files/56d/453/ae2/56d453ae225c427ea1bd48e9a152d5fd.png)
éå»5幎éã§ãéçºãšãã¹ãçšã®åé¢ãããç°å¢ããã°ããäœæã§ããèšå€§ãªæ°ã®ãã¯ãããžãŒãç§ãã¡ã®ç掻ã«ããããããŸããã ããããããã«ããããããããã¹ãçšã®å®å®ããç°å¢ãç·šæããã®ã¯ç°¡åãªäœæ¥ã§ã¯ãããŸããã ãŸããã³ã³ããŒãã³ãã®ãããã¯ãŒã¯çžäºäœçšããã¹ãããã³ã³ããŒãã³ãã®æ倧ã¬ãã«ã®è² è·ãåæããå¿ èŠãããå Žåãã¿ã¹ã¯ã¯ããã«é£ãããªããŸãã ç°å¢ãè¿ éã«å±éããåã ã®ã³ã³ããŒãã³ããæè»ã«æ§æããæ©èœãè¿œå ããããšã«ãããå°ããªèå³æ·±ããããžã§ã¯ããäœæã§ããŸãã
ãã®èšäºã§ã¯ãã¯ã©ã€ã¢ã³ããµãŒããŒã¢ããªã±ãŒã·ã§ã³ããã¹ãããããã®Dockerã³ã³ãããŒã«åºã¥ãç°å¢ã®äœæã«ã€ããŠè©³ãã説æããŸãã ããã«ãã°ããŒãã«ã«èŠããšããã®èšäºã¯Dockerã®äœ¿çšãšãã®æãè¿ããšã³ã·ã¹ãã ã®è¯ãäŸã«ãªããŸãã
åé¡ã®å£°æ
ç§ãã¡ã®ã¢ããªã±ãŒã·ã§ã³ã¯ãããããçš®é¡ã®ãã°ãã¡ã€ã«ãåéãåæãä¿åããŸãã ç°å¢ã®äž»ãªã¿ã¹ã¯ã¯ãè² è·ã®ããã£ããµãŒãã¹ã®åæãã¹ããå®æœããããšã§ãã
ã ããç§ãã¡ãæã£ãŠãããã®ïŒ
- Goã§èšè¿°ããããµãŒãã¹ã¯ãã¯ã©ã€ã¢ã³ããµãŒããŒã¢ãŒããã¯ãã£ãåããŠããŸãã
- ãµãŒãã¹ã¯ãããŸããŸãªã¿ã€ãã®ã¹ãã¬ãŒãžã«äžŠè¡ããŠããŒã¿ãæžã蟌ãããšãã§ããŸãã ãã®ç¹ã¯ããã¹ãç°å¢ãæ§ç¯ãããšãã«éåžžã«éèŠã§ãã
- éçºè ã¯ããã¹ãç°å¢ã§èŠã€ãã£ã誀åäœãè¿ éãã€ç°¡åã«åçŸããèœåãå¿ èŠãšããŠããŸãã
- è€æ°ã®ãããã¯ãŒã¯ããŒãäžã®åæ£ç°å¢ã§ã³ã³ããŒãã³ãã®ãããã¯ãŒã¯ããã¹ãããå¿ èŠããããŸãã ãããè¡ãã«ã¯ãã¯ã©ã€ã¢ã³ããšãµãŒããŒéã®ãã©ãã£ãã¯ã®æµããåæããå¿ èŠããããŸãã
- ãªãœãŒã¹ã®æ¶è²»ãå¶åŸ¡ããããŒã¢ã³ãé«è² è·ã§å®å®ããŠããããšã確èªããå¿ èŠããããŸãã
- ããã§ããã¡ãããå¯èœãªãã¹ãŠã®ã¡ããªãã¯ããªã¢ã«ã¿ã€ã ã§ããã¹ãçµæã«åºã¥ããŠèª¿ã¹ãããšæããŸãã
ãã®çµæãDockerããã³é¢é£ãã¯ãããžãŒã«åºã¥ããŠãã¹ãç°å¢ãæ§ç¯ããããšã«ããŸããã ããã«ãããåã ã®ã³ã³ããŒãã³ãããšã«åå¥ã®ãµãŒããŒãè³Œå ¥ããããšãªãããã¹ãŠã®ãªã¯ãšã¹ããå®çŸããå©çšå¯èœãªããŒããŠã§ã¢ãªãœãŒã¹ãå¹æçã«äœ¿çšããããšãã§ããŸããã åæã«ãããŒããŠã§ã¢ãªãœãŒã¹ã¯ãåå¥ã®ãµãŒããŒããµãŒããŒã®ã»ããããŸãã¯éçºè ã®ã©ãããããã§ããå ŽåããããŸãã
ãã¹ãç°å¢ã®ã¢ãŒããã¯ãã£
æåã«ãã¢ãŒããã¯ãã£ã®äž»èŠã³ã³ããŒãã³ããæ€èšããŸãã
- ã¢ããªã±ãŒã·ã§ã³ã®ä»»æã®æ°ã®ãµãŒããŒã€ã³ã¹ã¿ã³ã¹ã
- ãšãŒãžã§ã³ãã®ä»»æã®æ°ã
- ElasticSearchãMySQLãPostgreSQLãªã©ã®ããŒã¿ãŠã§ã¢ããŠã¹ãåããåå¥ã®ç°å¢ã
- è² è·ãžã§ãã¬ãŒã¿ãŒïŒåçŽãªã¹ãã¬ã¹ãžã§ãã¬ãŒã¿ãŒãå®è£ ããŸããããYandex.TankãApache Benchmarkãªã©ãä»ã®ãžã§ãã¬ãŒã¿ãŒã䜿çšã§ããŸãïŒã
ãã¹ãç°å¢ã¯ãç°¡åã«æã¡äžããŠä¿å®ã§ããå¿ èŠããããŸãã
Dockerã³ã³ãããŒãšå€éšãµãŒãã¹ãåé¢ããDockerã³ã³ãããŒãšããã¹ãçšã«åé¢ãããã¹ããŒã¹ãæŽçã§ããdocker-machineã䜿çšããŠãåæ£ãããã¯ãŒã¯ç°å¢ãæ§ç¯ããŸããã ãã®çµæããã¹ãç°å¢ã®ã¢ãŒããã¯ãã£ã¯æ¬¡ã®ããã«ãªããŸãã
![](https://habrastorage.org/files/7b2/5bc/353/7b25bc35386d4bfeb866e67eaf1acf93.png)
Weave Scopeã䜿çšããŠç°å¢ãèŠèŠåããŸããããã¯ãDockerã³ã³ãããŒãç£èŠããããã®éåžžã«äŸ¿å©ã§çŽæçãªãµãŒãã¹ã§ããããã§ãã
![](https://habrastorage.org/files/76c/afc/409/76cafc409504412b98a1036aaa936ac3.jpg)
ãã®ã¢ãããŒãã䜿çšãããšãSOAã³ã³ããŒãã³ãïŒããšãã°ãç§ãã¡ã®ãããªå°ããªã¯ã©ã€ã¢ã³ããµãŒããŒã¢ããªã±ãŒã·ã§ã³ïŒã®çžäºäœçšããã¹ãããã®ã«äŸ¿å©ã§ãã
åºæ¬ç°å¢ã®å®è£
次ã«ãdocker-composeããã³docker-machineã䜿çšããŠDockerã³ã³ããã«åºã¥ããŠãã¹ãç°å¢ãäœæããåã¹ãããã詳ããèŠãŠãããŸãã
ãŸãã¯docker-machineããå§ããŸããããããã«ããããã¹ãä»®æ³ç°å¢ãç°¡åã«åŒ·èª¿ã§ããŸãã åæã«ããã¹ãã·ã¹ãã ãããã®ç°å¢ãçŽæ¥æäœããããšã¯éåžžã«äŸ¿å©ã§ãã
ãããã£ãŠããã¹ããã·ã³ãäœæããŸãã
$ docker-machine create -d virtualbox testenv Creating VirtualBox VM... Creating SSH key... Starting VirtualBox VM... Starting VM... To see how to connect Docker to this machine, run: docker-machine env testenv
ãã®ã³ãã³ãã¯ãCoreOSãšDockerãå éšã«ã€ã³ã¹ããŒã«ãããVirtualBox VMãäœæããŸãïŒWindowsãŸãã¯MacOSã䜿çšããŠããå Žåã¯ãDocker Toolboxãã€ã³ã¹ããŒã«ããããšããå§ãããŸãã ãdocker-composeãVirtualBoxã®ã¿ïŒã docker-machineã®ãã¹ãŠã®æ©èœã«æ £ããããšããå§ãããŸããããã¯ãç°å¢ã管çããããã®ããªã匷åãªããŒã«ã§ãã
ãã®ã³ãã³ãã®åºåãããããããã«ãdocker-machineã¯ãä»®æ³ãã·ã³ã§ã®äœæ¥ã«å¿ èŠãªãã¹ãŠãäœæããŸãã äœæããããšãä»®æ³ãã·ã³ã皌åããŸãã 確èªããŸãããïŒ
$ docker-machine ls NAME ACTIVE DRIVER STATE URL SWARM testenv virtualbox Running tcp://192.168.99.101:2376
çŽ æŽããããä»®æ³ãã·ã³ã¯å®è¡äžã§ãã çŸåšã®ã»ãã·ã§ã³ã§ã¢ã¯ã»ã¹ãæå¹ã«ããå¿ èŠããããŸãã åã®ã¹ãããã«æ»ã£ãŠãæåŸã®è¡ã泚ææ·±ãèŠãŠã¿ãŸãããã
To see how to connect Docker to this machine, run: docker-machine env testenv
ããã¯ãã»ãã·ã§ã³ã®èªåã»ããã¢ããã§ãã ãã®ã³ãã³ããå®è¡ãããšã次ã®ããã«è¡šç€ºãããŸãã
$ docker-machine env testenv export DOCKER_TLS_VERIFY="1" export DOCKER_HOST="tcp://192.168.99.101:2376" export DOCKER_CERT_PATH="/Users/logpacker/.docker/machine/machines/testenv" export DOCKER_MACHINE_NAME="testenv" # Run this command to configure your shell: # eval "$(docker-machine env testenv)"
ããã¯ããµãŒããŒãæ¢ãå ŽæãããŒã«ã«ã®dockerã¯ã©ã€ã¢ã³ãã«äŒããç°å¢å€æ°ã®ã»ããã§ãã æåŸã®è¡ã¯ãã³ãã§ãã ãã®ã³ãã³ããå®è¡ããŠã
ls
åºåã確èªããŸãã
$ eval "$(docker-machine env testenv)" $ docker-machine ls NAME ACTIVE DRIVER STATE URL SWARM testenv * virtualbox Running tcp://192.168.99.101:2376
ACTIVE
åã§ã¯ãã¢ã¯ãã£ããªãã·ã³ã«ã¢ã¹ã¿ãªã¹ã¯ãä»ããŠããŸãã ãã·ã³ã¯çŸåšã®ã»ãã·ã§ã³å ã§ã®ã¿ã¢ã¯ãã£ãã§ããããšã«æ³šæããŠãã ããã å¥ã®ã¿ãŒããã«ãŠã£ã³ããŠãéããããã§å¥ã®ãã·ã³ãã¢ã¯ãã£ãã«ããããšãã§ããŸãã ããã¯ãSwarmã䜿çšãããªãŒã±ã¹ãã¬ãŒã·ã§ã³ãªã©ã®ãã¹ãã«äŸ¿å©ã§ãã ããããããã¯å¥ã®èšäºã®ãããã¯ã§ã:)ã
次ã«ãDockerãµãŒããŒããã§ãã¯ã¢ãŠãããŸãã
$ docker info docker version Client: Version: 1.8.0 API version: 1.20 Go version: go1.4.2 Git commit: 0d03096 Built: Tue Aug 11 17:17:40 UTC 2015 OS/Arch: darwin/amd64 Server: Version: 1.9.1 API version: 1.21 Go version: go1.4.3 Git commit: a34a1d5 Built: Fri Nov 20 17:56:04 UTC 2015 OS/Arch: linux/amd64
DockerãµãŒããŒã¯VMã§å®è¡ãããã®ã§ãå¿ããªãã§ãã ãããOS/ Archã«çŠç¹ãåœãŠãŠããŸããåžžã«linux / amd64ããããŸãã å°ãè±ç·ããŠãVMã®å éšãèŠãŠã¿ãŸãããã
$ docker-machine ssh testenv ## . ## ## ## == ## ## ## ## ## === /"""""""""""""""""\___/ === ~~~ {~~ ~~~~ ~~~ ~~~~ ~~~ ~ / ===- ~~~ \______ o __/ \ \ __/ \____\_______/ _ _ ____ _ _ | |__ ___ ___ | |_|___ \ __| | ___ ___| | _____ _ __ | '_ \ / _ \ / _ \| __| __) / _` |/ _ \ / __| |/ / _ \ '__| | |_) | (_) | (_) | |_ / __/ (_| | (_) | (__| < __/ | |_.__/ \___/ \___/ \__|_____\__,_|\___/ \___|_|\_\___|_| Boot2Docker version 1.9.1, build master : cef800b - Fri Nov 20 19:33:59 UTC 2015 Docker version 1.9.1, build a34a1d5 docker@testenv:~$
ã¯ããããã¯boot2dockerã§ãããããã¯é¢çœããªãã§ãã ããŠã³ããããã»ã¯ã·ã§ã³ãèŠãŠã¿ãŸãããã
docker@testenv:~$ mount tmpfs on / type tmpfs (rw,relatime,size=918088k) proc on /proc type proc (rw,relatime) sysfs on /sys type sysfs (rw,relatime) devpts on /dev/pts type devpts (rw,relatime,mode=600,ptmxmode=000) tmpfs on /dev/shm type tmpfs (rw,relatime) fusectl on /sys/fs/fuse/connections type fusectl (rw,relatime) /dev/sda1 on /mnt/sda1 type ext4 (rw,relatime,data=ordered) [... cgroup skipped ...] none on /Users type vboxsf (rw,nodev,relatime) /dev/sda1 on /mnt/sda1/var/lib/docker/aufs type ext4 (rw,relatime,data=ordered) docker@testenv:~$ ls /Users/ Shared/ logpacker/ docker@testenv:~$
ãã®å ŽåãMacOSã䜿çšããããã«å¿ããŠ/ Usersãã£ã¬ã¯ããªããã·ã³å ã«ããŠã³ããããŸãïŒLinuxã®/ homeã«é¡äŒŒïŒã ããã«ãããããã«ãŒã®äžéšãšããŠãã¹ãã·ã¹ãã äžã®ãã¡ã€ã«ãééçã«æäœã§ããŸããã€ãŸããVMã®åœ¢åŒã®ã¬ã€ã€ãŒãå¿é ããããšãªããããªã¥ãŒã ãéãã«æ¥ç¶ããã³åæã§ããŸãã ãšãŠã䟿å©ã§ãã çè«çã«ã¯ããã®VMã«ã€ããŠã¯å¿ããããšãã§ããŸããDockerãããã€ãã£ããç°å¢ã§åäœããããã«ã®ã¿å¿ èŠã§ãã ãã®å Žåãdocker-clientã®äœ¿çšã¯å®å šã«ééçã«ãªããŸãã
ãããã£ãŠãåºæ¬çãªç°å¢ãæ§ç¯ãããããDockerã³ã³ãããŒãèµ·åããŸãã
ã³ã³ããã®æ§æãšèµ·å
ãã®ã¢ããªã±ãŒã·ã§ã³ã¯ãã¯ã©ã¹ã¿ãŒã®ååã«åºã¥ããŠåäœããããšãã§ããŸããã€ãŸããããŒãæ°ãå€åããå Žåã«ã·ã¹ãã å šäœã®ãã©ãŒã«ããã¬ã©ã³ã¹ãæäŸããŸãã å éšã€ã³ã¿ãŒãµãŒãã¹APIã®ãããã§ãã¯ã©ã¹ã¿ãŒã«æ°ããããŒããè¿œå ãŸãã¯åé€ããã®ã¯ç°¡åã§ãä»ã®ããŒãããªãŒããŒããŒãããå¿ èŠããããŸããããŸããç°å¢ãæ§ç¯ããéã«ã¢ããªã±ãŒã·ã§ã³ã®ãã®ç¹åŸŽãèæ ®ããå¿ èŠããããŸãã
ååãšããŠããã¹ãŠãDockerã®ã€ããªãã®ãŒã1ã€ã®ããã»ã¹-1ã€ã®ã³ã³ãããŒãã«ããé©åããŠããŸãã ãããã£ãŠãæã ã¯èŠç¯ããé¢ãããåãããšãããŸãã éå§æã«ã次ã®æ§æãå®è¡ããŸãã
- ã¢ããªã±ãŒã·ã§ã³ã®ãµãŒããŒåŽã®3ã€ã®ã³ã³ãããŒã
- ã¢ããªã±ãŒã·ã§ã³ã®ã¯ã©ã€ã¢ã³ãéšåãæã€3ã€ã®ã³ã³ããã
- åãšãŒãžã§ã³ãã®è² è·ãžã§ãã¬ãŒã¿ãŒã ããšãã°ãNgnixã¯ãã°ãçæããYandex.TankãŸãã¯Apache Benchmarkã䜿çšããŠãããåºæ¿ããŸãã
- ãããŠãå¥ã®ã³ã³ããã§ãã€ããªãã®ãŒããé¢ããŸãã ç§ãã¡ã®ãµãŒãã¹ã¯ãããããããã¥ã¢ã«ã¢ãŒãããã€ãŸã ã¯ã©ã€ã¢ã³ããšãµãŒããŒã¯åããã¹ãäžã«ãããããã«ãããã¯ã¢ããªã±ãŒã·ã§ã³ã®1ã€ã®ã€ã³ã¹ã¿ã³ã¹ã«ããããã¯ã©ã€ã¢ã³ããšãµãŒããŒã®äž¡æ¹ãšããŠããã«åäœããŸãã ã¹ãŒããŒãã€ã¶ãŒã®ç®¡çäžã«ããã³ã³ããã§èµ·åããã¡ã€ã³ããã»ã¹ãšåãã³ã³ããã§ç¬èªã®å°ããªè² è·ãžã§ãã¬ãŒã¿ãèµ·åããŸãã
ãããã£ãŠãã¢ããªã±ãŒã·ã§ã³ã®ã¢ã»ã³ãã«ããããã€ããªããããŸã-ããã¯Golangã®ãããã§1ã€ã®ãã¡ã€ã«ã§ã:)ããã¹ãç°å¢ã®äžéšãšããŠããµãŒãã¹ãèµ·åããããã®ãŠãããŒãµã«ã³ã³ãããåéããŸãã éãã¯ãéä¿¡ãããããŒïŒãµãŒããŒãŸãã¯ãšãŒãžã§ã³ããèµ·åããïŒã«ãããã³ã³ããã®èµ·åæã«ãããã管çããŸãã ããã¥ã¢ã«ã¢ãŒããã§ãµãŒãã¹ãéå§ããå ŽåãæåŸã®æ®µèœã«ã¯ããããªãã¥ã¢ã³ã¹ããããŸãããããã«ã€ããŠã¯åŸã§è©³ãã説æããŸãã
ãã®ããã
docker-compose.yml
æºåããŠããŸãã ããã¯ãdocker-composeã®ãã£ã¬ã¯ãã£ããå«ããã¡ã€ã«ã§ããããã«ããã1ã€ã®ã³ãã³ãã§ãã¹ãç°å¢ãäžããããšãã§ããŸãã
docker-compose.yml
# external services elastic: image: elasticsearch ngx_1: image: nginx volumes: - /var/log/nginx ngx_2: image: nginx volumes: - /var/log/nginx ngx_3: image: nginx volumes: - /var/log/nginx # lp servers lp_server_1: image: logpacker_service command: bash -c "cd /opt/logpacker && ./logpacker -s -v -devmode -p=0.0.0.0:9995" links: - elastic expose: - "9995" - "9998" - "9999" lp_server_2: image: logpacker_service command: bash -c "cd /opt/logpacker && ./logpacker -s -v -devmode -p=0.0.0.0:9995" links: - elastic - lp_server_1 expose: - "9995" - "9998" - "9999" lp_server_3: image: logpacker_service command: bash -c "cd /opt/logpacker && ./logpacker -s -v -devmode -p=0.0.0.0:9995" links: - elastic - lp_server_1 - lp_server_2 expose: - "9995" - "9998" - "9999" # lp agents lp_agent_1: image: logpacker_service command: bash -c "cd /opt/logpacker && ./logpacker -a -v -devmode -p=0.0.0.0:9995" volumes_from: - ngx_1 links: - lp_server_1 lp_agent_2: image: logpacker_service command: bash -c "cd /opt/logpacker && ./logpacker -a -v -devmode -p=0.0.0.0:9995" volumes_from: - ngx_2 links: - lp_server_1 lp_agent_3: image: logpacker_service command: bash -c "cd /opt/logpacker && ./logpacker -a -v -devmode -p=0.0.0.0:9995" volumes_from: - ngx_3 links: - lp_server_1
ãã®ãã¡ã€ã«ã§ã¯ãã¹ãŠãæšæºã§ãã æåã«äž»ãªããžããªãšããŠelasticsearchãå®è¡ãã次ã«nginxã§3ã€ã®ã€ã³ã¹ã¿ã³ã¹ãå®è¡ããŸããããã¯ããŒããããã€ããŒãšããŠæ©èœããŸãã 次ã«ããµãŒããŒã¢ããªã±ãŒã·ã§ã³ãèµ·åããŸãã åŸç¶ã®ãã¹ãŠã®ã³ã³ããã¯åã®ã³ã³ãããšãªã³ã¯ãããŠããããšã«æ³šæããŠãã ããã Dockerãããã¯ãŒã¯ã®äžéšãšããŠãããã«ããååã«ããã³ã³ãããŒãžã®ã¢ã¯ã»ã¹ãèš±å¯ãããŸãã ããå°ãäœãã«ãããã¥ã¢ã«ã¢ãŒããã§ã®ãµãŒãã¹ã®èµ·åãåæãããšãããã®ãã€ã³ãã«æ»ã£ãŠè©³çŽ°ã«æ€èšããŸãã ãŸãããšãŒãžã§ã³ãã¯ããµãŒããŒã¢ããªã±ãŒã·ã§ã³ã€ã³ã¹ã¿ã³ã¹ãé 眮ãããŠããæåã®ã³ã³ããã«ãªã³ã¯ãããŸãã ããã¯ã3ã€ãã¹ãŠã®ãšãŒãžã§ã³ãããã®ãµãŒããŒã«ãã°ã転éããããšãæå³ããŸãã
ãã®ã¢ããªã±ãŒã·ã§ã³ã¯ãæ°ããããŒããã¯ã©ã¹ã¿ãŒã«è¿œå ããããã«èšèšãããŠããããšãŒãžã§ã³ããŸãã¯ãµãŒããŒã¯ã1ã€ã®æ¢åã®ã¯ã©ã¹ã¿ãŒããŒãã«ã€ããŠå ±åããã ãã§ãã·ã¹ãã å šäœã«é¢ããå®å šãªæ å ±ãåãåããŸãã åãµãŒããŒã€ã³ã¹ã¿ã³ã¹ã®æ§æãã¡ã€ã«ã§ã¯ãæåã®ããŒãã瀺ãããšãŒãžã§ã³ãã¯ã·ã¹ãã ã®çŸåšã®ç¶æ ã«é¢ãããã¹ãŠã®æ å ±ãèªåçã«åãåããŸãã ã·ã¹ãã ã®ãã¹ãŠã®ããŒããèµ·åããŠãã°ããããŠããããã®ã€ã³ã¹ã¿ã³ã¹ããªãã«ããŸãã ç§ãã¡ã®å Žåãã¯ã©ã¹ã¿ãŒã¯ãããç°¡åã«è»¢éããã·ã¹ãã ã«é¢ãããã¹ãŠã®æ å ±ã¯ãã§ã«ãã¹ãŠã®åå è ã«é åžãããŠããŸãã
ãããŠãã1ã€ãããªã¥ãŒã ã®ããŠã³ãã®ããžãã¯ã«æ³šæããŠãã ããã nginxãå«ãŸããã³ã³ããã§ã¯ãDockerãããã¯ãŒã¯ã§å©çšå¯èœãªååä»ãããªã¥ãŒã ãæå®ãããšãŒãžã§ã³ããå«ãŸããã³ã³ããã§ã¯ããµãŒãã¹ã®ååãæå®ããã ãã§æ¥ç¶ããŸãã ãããã£ãŠãã³ã³ã·ã¥ãŒããšããŒããããã€ãã®éã§å ±æããªã¥ãŒã ãååŸããŸãã
ãã®ãããç°å¢ãéå§ããŸãã
$ docker-compose up -d
ãã¹ãŠãæ£åžžã«éå§ããããšã確èªããŸã
$ docker-compose ps Name Command State Ports -------------------------------------------------------------------------------------------- assets_lp_agent_1_1 bash -c cd /opt/logpacker ... Up assets_lp_agent_2_1 bash -c cd /opt/logpacker ... Up assets_lp_agent_3_1 bash -c cd /opt/logpacker ... Up assets_lp_server_1_1 bash -c cd /opt/logpacker ... Up 9995/tcp, 9998/tcp, 9999/tcp assets_lp_server_2_1 bash -c cd /opt/logpacker ... Up 9995/tcp, 9998/tcp, 9999/tcp assets_lp_server_3_1 bash -c cd /opt/logpacker ... Up 9995/tcp, 9998/tcp, 9999/tcp assets_ngx_1_1 nginx -g daemon off; Up 443/tcp, 80/tcp assets_ngx_2_1 nginx -g daemon off; Up 443/tcp, 80/tcp assets_ngx_3_1 nginx -g daemon off; Up 443/tcp, 80/tcp elastic /docker-entrypoint.sh elas ... Up 9200/tcp, 9300/tcp
ããŠãç°å¢ã¯äžæããæ©èœãããã¹ãŠã®ããŒãã転éãããŸããã çè«çã«ã¯ããã¹ããéå§ã§ããŸãããããã€ãã®ãã€ã³ããå®äºããå¿ èŠããããŸãã
ã³ã³ããã®åœå
ããã¥ã¢ã«ã¢ãŒããã§ã¢ããªã±ãŒã·ã§ã³ãå®è¡ãããã³ã³ããã«æ»ããŸãããã ãã®ã³ã³ããã®ã¡ã€ã³ããã»ã¹ã¯ãããŒããžã§ãã¬ãŒã¿ãŒïŒæãåçŽãªã·ã§ã«ã¹ã¯ãªããïŒã§ãã ããã¹ãæååãçæããããããããã¹ãããã°ããã¡ã€ã«ã«å ¥ããŸããããã¯ãã¢ããªã±ãŒã·ã§ã³ã®è² è·ã«ãªããŸãã æåã«ã
supervisord
äžã§å®è¡ããã¢ããªã±ãŒã·ã§ã³ã䜿çšããŠã³ã³ãããæ§ç¯ããå¿ èŠããããŸãã ç°å¢å€æ°ãæ§æãã¡ã€ã«ã«è»¢éããæ©èœãå¿ èŠãªããã
supervisord
ã®ææ°ããŒãžã§ã³ã䜿çšããŠãã ããã
supervisord
ããŒãžã§ã³3.2.0ãé©ããŠããŸãããããŒã¹ã€ã¡ãŒãžãšããŠæ¡çšããUbuntu 14.04 LTSã§ã¯ã
supervisord
ããŒãžã§ã³ã¯ããªãå€ãïŒ3.0b2ïŒã§ãã
supervisord
ã®ææ°ããŒãžã§ã³ã
pip
çµç±ã§ã€ã³ã¹ããŒã«ããŸãã çµæã®Dockerfileã¯æ¬¡ã®ãšããã§ãã
Dockerfile
FROM ubuntu:14.04 # Setup locale environment variables RUN locale-gen en_US.UTF-8 ENV LANG en_US.UTF-8 ENV LANGUAGE en_US:en ENV LC_ALL en_US.UTF-8 # Ignore interactive ENV DEBIAN_FRONTEND=noninteractive RUN apt-get update && \ apt-get install -y wget unzip curl python-pip # Install supervisor via pip for latest version RUN pip install supervisor RUN mkdir -p /opt/logpacker ADD final/logpacker /opt/logpacker/logpacker ADD supervisord-logpacker-server.ini /etc/supervisor/conf.d/logpacker.conf ADD supervisor.conf /etc/supervisor/supervisor.conf # Load generator ADD random.sh /opt/random.sh # Start script ADD lp_service_start.sh /opt/lp_service_start.sh
ããŒããžã§ãã¬ãŒã¿ãŒã¯éåžžã«ã·ã³ãã«ã§ãã
#!/bin/bash # generate random lines OUTPUT_FILE="test.log" while true do _RND_LENGTH=`awk -v min=1 -v max=100 'BEGIN{srand(); print int(min+rand()*(max-min+1))}'` _RND=$(( ( RANDOM % 100 ) + 1 )) _A="[$RANDOM-$_RND] $(dd if=/dev/urandom bs=$_RND_LENGTH count=1 2>/dev/null | base64 | tr = d)"; echo $_A; echo $_A >> /tmp/logpacker/lptest.$_RND.$OUTPUT_FILE; done
èµ·åã¹ã¯ãªãããè€éã§ã¯ãããŸããã
#!/bin/bash # run daemon supervisord -c /etc/supervisor/supervisor.conf # launch randomizer /opt/random.sh
ãã¹ãŠã®ããªãã¯ã¯ã
supervisord
æ§æãã¡ã€ã«ã«ãããDockerã³ã³ãããŒãèµ·åããŸãã
æ§æãã¡ã€ã«ãæ€èšããŠãã ããã
[program:logpacker_daemon] command=/opt/logpacker/logpacker %(ENV_LOGPACKER_OPTS)s directory=/opt/logpacker/ autostart=true autorestart=true startretries=10 stderr_logfile=/var/log/logpacker.stderr.log stdout_logfile=/var/log/logpacker.stdout.log
%(ENV_LOGPACKER_OPTS)s
泚æããŠãã ããã Supervisordã¯ãç°å¢å€æ°ããæ§æãã¡ã€ã«ãžã®é åãå®è¡ã§ããŸãã å€æ°ã¯
%(ENV_VAR_NAME)s
ãšããŠæžã蟌ãŸãããã®å€ã¯ããŒã¢ã³ã®èµ·åæã«æ§æãã¡ã€ã«ã«ä»£å ¥ãããŸãã
次ã®ã³ãã³ããå®è¡ããŠã³ã³ãããèµ·åããŸãã
$ docker run -it -d --name=dualmode --link=elastic -e 'LOGPACKER_OPTS=-s -a -v -devmode' logpacker_dualmode /opt/random.sh
-e
ã¹ã€ããã䜿çšãããšãå¿ èŠãªç°å¢å€æ°ãèšå®ã§ããã³ã³ããå ã§ã°ããŒãã«ã«èšå®ãããŸãã ãããŠã
supervisord
èšå®ãã¡ã€ã«ã§ããã眮ãæããŸãã ãããã£ãŠãããŒã¢ã³ã®ã¹ã¿ãŒãã¢ããããŒã管çããå¿ èŠãªã¢ãŒãã§å®è¡ã§ããŸãã
ã€ããªãã®ãŒãšã¯å°ãççŸããŠããŸãããç§ãã¡ã¯æ®éçãªã€ã¡ãŒãžãåŸãŸããã äžãèŠãŠã¿ãŸãããïŒ
ç°å¢
$ docker exec -it dualmode bash $ env HOSTNAME=6b2a2ae3ed83 ELASTIC_NAME=/suspicious_dubinsky/elastic TERM=xterm ELASTIC_ENV_CA_CERTIFICATES_JAVA_VERSION=20140324 LOGPACKER_OPTS=-s -a -v -devmode ELASTIC_ENV_JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64/jre ELASTIC_ENV_JAVA_VERSION=8u66 ELASTIC_ENV_ELASTICSEARCH_REPO_BASE=http://packages.elasticsearch.org/elasticsearch/1.7/debian ELASTIC_PORT_9200_TCP=tcp://172.17.0.2:9200 ELASTIC_ENV_ELASTICSEARCH_VERSION=1.7.4 PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin ELASTIC_PORT_9300_TCP_ADDR=172.17.0.2 ELASTIC_ENV_ELASTICSEARCH_MAJOR=1.7 ELASTIC_PORT_9300_TCP=tcp://172.17.0.2:9300 PWD=/ ELASTIC_PORT_9200_TCP_ADDR=172.17.0.2 ELASTIC_PORT_9200_TCP_PROTO=tcp ELASTIC_PORT_9300_TCP_PORT=9300 SHLVL=1 HOME=/root ELASTIC_ENV_JAVA_DEBIAN_VERSION=8u66-b17-1~bpo8+1 ELASTIC_PORT_9300_TCP_PROTO=tcp ELASTIC_PORT=tcp://172.17.0.2:9200 LESSOPEN=| /usr/bin/lesspipe %s ELASTIC_ENV_LANG=C.UTF-8 LESSCLOSE=/usr/bin/lesspipe %s %s ELASTIC_PORT_9200_TCP_PORT=9200 _=/usr/bin/env
ã³ã³ããã®èµ·åæã«æ瀺çã«æå®ããå€æ°ã«å ããŠããªã³ã¯ãããã³ã³ããã«é¢é£ãããã¹ãŠã®å€æ°ãã€ãŸããIPã¢ãã¬ã¹ããã¹ãŠã®éããŠããããŒããENVãã£ã¬ã¯ãã£ãã䜿çšããŠelasticsearchã€ã¡ãŒãžãæ§ç¯ãããšãã«æ瀺çã«èšå®ããããã¹ãŠã®å€æ°ã衚瀺ãããŸãã ãã¹ãŠã®å€æ°ã«ã¯ããšã¯ã¹ããŒãããã³ã³ããã®ååãšãã®æ¬è³ªã瀺ãååã®æ¥é èŸããããŸãã ããšãã°ã
ELASTIC_PORT_9300_TCP_ADDR
ã¯ãããŒã9300ãéããŠãã
ELASTIC_PORT_9300_TCP_ADDR
ãšããååãšãã®IPã¢ãã¬ã¹ãæã€ã³ã³ãããŒãæãå€æ°ã«å€ãæ ŒçŽãããããšãæå³ããŸãããªã³ã¯ãããã³ã³ããã®ããŒã¿ã åæã«ãDockerã³ã³ããã§å®è¡ãããŠããã¢ããªã±ãŒã·ã§ã³ã§ãããã䜿çšããããšãå¯èœã§ãã
ã³ã³ãã管çããã³ç£èŠã·ã¹ãã
ãã®ããããã¹ãŠã®åæèŠä»¶ãæºãããã¹ãç°å¢ãæ§ç¯ããŸããã ããã€ãã®ãã¥ã¢ã³ã¹ããããŸããã ãŸããWeave Scopeãã€ã³ã¹ããŒã«ããŸãïŒã¹ã¯ãªãŒã³ã·ã§ããã¯èšäºã®åé ã«ãããŸããïŒã Weave Scopeã䜿çšãããšãäœæ¥ç°å¢ãèŠèŠåã§ããŸãã ã³ã³ããã«é¢ãããªã³ã¯ãšæ å ±ã®è¡šç€ºã«å ããŠãä»»æã®ã³ã³ããã«
attach
ãããããã©ãŠã¶ã§çŽæ¥
sh
ã䜿çšããŠæ¬æ Œçãªã¿ãŒããã«ãèµ·åãããã§ããŸãã ãããã¯ããããã°ãšãã¹ãã«äžå¯æ¬ ãªæ©èœã§ãã ãã®ããããã¹ããã·ã³ãããã¢ã¯ãã£ãã»ãã·ã§ã³ã®äžéšãšããŠæ¬¡ã®ã¢ã¯ã·ã§ã³ãå®è¡ããŸãã
$ wget -O scope https://github.com/weaveworks/scope/releases/download/latest_release/scope $ chmod +x scope $ scope launch
ãããã®ã³ãã³ããå®è¡ããåŸãã¢ãã¬ã¹VM_IP ïŒ4040ã«ç§»åãããšã次ã®å³ã«ç€ºãã³ã³ãããŒç®¡çã€ã³ã¿ãŒãã§ã€ã¹ã«å°éããŸãã
![](https://habrastorage.org/files/818/7c8/3e9/8187c83e90a84e1bbac6443aeb4cefc1.jpg)
ãŸããã»ãšãã©ãã¹ãŠã®æºåãã§ããŠããŸãã å®å šãªå¹žçŠã®ããã«ãç£èŠã·ã¹ãã ãäžè¶³ããŠããŸãã Googleã®cAdvisorã掻çšããŠãã ããã
$ docker run --volume=/:/rootfs:ro --volume=/var/run:/var/run:rw --volume=/sys:/sys:ro --volume=/var/lib/docker/:/var/lib/docker:ro --publish=8080:8080 --detach=true --name=cadvisor google/cadvisor:latest
VM_IP ïŒ8080ã«ã¯ããªã¢ã«ã¿ã€ã ã®ãªãœãŒã¹ç£èŠã·ã¹ãã ããããŸãã 次ã®ãããªç°å¢ã®åºæ¬çãªã¡ããªãã¯ã远跡ããã³åæã§ããŸãã
- ã·ã¹ãã ãªãœãŒã¹ã®äœ¿çšã
- ãããã¯ãŒã¯è² è·ã
- ããã»ã¹ã®ãªã¹ãã
- ãã®ä»ã®æçšãªæ å ±ã
以äžã®ã¹ã¯ãªãŒã³ã·ã§ããã¯ãcAdvisorã€ã³ã¿ãŒãã§ãŒã¹ã瀺ããŠããŸãã
![](https://habrastorage.org/files/988/e9a/6e9/988e9a6e9aa84e1cbd155c51762cffd7.jpg)
ãããã«
Dockerã³ã³ããã䜿çšããŠããã¹ãŠã®ããŒãã®èªåå±éãšãããã¯ãŒã¯çžäºäœçšã®æ©èœãåããæ¬æ Œçãªãã¹ãç°å¢ãæ§ç¯ããŸãããæãéèŠãªããšã¯ãåã³ã³ããŒãã³ããšã·ã¹ãã å šäœã®æè»ãªæ§æã§ãã ãã¹ãŠã®åºæ¬èŠä»¶ãå®è£ ãããŠããŸããã€ãŸãã
- ãããã¯ãŒã¯æ¥ç¶ããã¹ãããããã®å®å šãªãããã¯ãŒã¯ãšãã¥ã¬ãŒã·ã§ã³ã
- ã¢ããªã±ãŒã·ã§ã³ã§ã®ããŒãã®è¿œå ãšåé€ã¯ãdocker-compose.ymlã®å€æŽã«ããå®è¡ãããåäžã®ã³ãã³ãã§é©çšãããŸãã
- ãã¹ãŠã®ããŒãã¯ããããã¯ãŒã¯ç°å¢ã«é¢ããæ å ±ãå®å šã«åä¿¡ã§ããŸãã
- ããŒã¿ãŠã§ã¢ããŠã¹ã®è¿œå ãšåé€ã¯ã1ã€ã®ã³ãã³ãã§å®è¡ãããŸãã
- ã·ã¹ãã ã®ç®¡çãšç£èŠã¯ããã©ãŠã¶ããå©çšã§ããŸãã ããã¯ãã¢ããªã±ãŒã·ã§ã³ã®é£ã®ã³ã³ããã§åå¥ã«å®è¡ãããããŒã«ã䜿çšããŠå®è£ ãããŸããããã«ããããã¹ãã·ã¹ãã ããããããåé¢ã§ããŸãã