RubyããDockerã³ã³ãããä½ã£ã¦sshã§æä½ã§ããããã«ãã
Dockerã¯æä½ãããããã®APIãç¨æããã¦ãã¦ã便å©ãããªã®ã§Rubyããã³ã³ãããèªåèµ·åããããã®æ¹æ³ãã¡ã¢ãã¦ããã¾ãã
sshã使ããã³ã³ãããä½ã
ubuntuã®ã¤ã¡ã¼ã¸ã使ç¨ãã¾ãã
æ¨æºã®ã¤ã¡ã¼ã¸ã ã¨sshã¯ä½¿ããªãã®ã§ãã£ããã·ã§ã«ãã°ã¤ã³ããã¤ã³ã¹ãã¼ã«ãã¾ãã
ãã¨ã§ãã°ã¤ã³ããããã«rootã®ãã¹ã¯ã¼ããè¨å®ãã¦ããã¾ãã
$ docker run -i -t ubuntu:latest /bin/bash root@853f85828aa9:/# apt-get update root@853f85828aa9:/# apt-get install openssh-server root@853f85828aa9:/# mkdir /var/run/sshd root@853f85828aa9:/# passwd root@853f85828aa9:/# exit
ä»ä½æããã³ã³ãããã¤ã¡ã¼ã¸ã¨ãã¦ä¿åãã¾ãã
docker commitããéã«CONTAINER IDãå¿
è¦ãªã®ã§ãdocker ps -aããã¦IDã調ã¹ããããæå®ãcommitãã¾ãã
$ docker ps -a | head -n 2 CONTAINER ID IMAGE COMMAND 853f85828aa9 ubuntu:latest /bin/bash $ docker commit 853f85828aa9 kurochan/ubuntu-sshd
試ãã«èµ·åãã
ã¨ãããããä»ä½æããã¤ã¡ã¼ã¸ã§ãã¡ãã¨åä½ããã試ãã¾ãã
$ docker run -d -p 22 kurochan/ubuntu-sshd /usr/sbin/sshd -D $ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS d1cb149af9f5 kurochan/ubuntu-sshd:latest /usr/sbin/sshd -D 4 seconds ago Up 2 seconds 0.0.0.0:49155->22/tcp
sshdãèµ·åããéã«-Dãªãã·ã§ã³ãã¤ãã¦ãã¾ããããããä»å ãããã¨ã§ãã©ã¢ã°ã©ã¦ã³ãã§åä½ããã¦ãã¾ããDockerã¯ãã©ã¢ã°ã©ã¦ã³ãã§åãã¦ãããã®ããªãã¨ã³ã³ãããçµäºãã¦ãã¾ãã®ã§ã
docker psããã¨ãPORTSã®é¨å(å³å´ã§ã)ã«ã"0.0.0.0:49155->22/tcp"ã®ãããªè¨è¿°ãããã¨æãã¾ãã
ã³ã³ããã®22çªãã¼ãããã¹ãã®49155çªã«ãã¤ã³ãããã¦ããã¨ããæå³ã§ãã
ãã°ã¤ã³ããæã¯ããã»ã©æå®ãããã¹ã¯ã¼ããå
¥åãã¾ãã
$ ssh root@[dockerã®ipã¢ãã¬ã¹] -p 49155 root@d1cb149af9f5:~# exit
ãã°ã¤ã³ã§ãã¦ããã°æåã§ããã³ã³ãããåæ¢ããã¾ãã
$ docker stop d1cb149af9f5
ã³ã³ããèµ·åã®æä½ãRubyããè¡ã
docker-apiã¨ããGemã使ãã¾ãã®ã§ãã¤ã³ã¹ãã¼ã«ãã¦ããã¾ãã
$ gem install docker-api
åç½®ããé·ããªã£ã¦ãã¾ãã¾ãããã以ä¸ãã³ã³ãããèµ·åããã¹ã¯ãªããã§ãã
ã³ã³ãããèµ·åããreturnãã¼ãæ¼ãããããã®ã³ã³ãããåæ¢ãããããã«ãã¾ããã
# sample.rb require 'docker' container = Docker::Container.create('Cmd' => ['/usr/sbin/sshd', '-D'], 'Image' => 'kurochan/ubuntu-sshd', 'PortSpecs' => '22', 'ExposedPorts' => ['22/tcp']) container.start('PortBindings' => {'22/tcp' => [{'HostIp' => '0.0.0.0', 'HostPort' => '49156'}]}) puts 'Press return to stop...' gets container.stop puts 'Container stopped.'
ã³ã³ãããçæããå¾ã«ãstartããã®ã§ããããã®æã«ãã¹ãã«ãã¤ã³ããããã¼ã(ããã§ã¯49156)ãæå®ããã¨ãå¤é¨ããã¢ã¯ã»ã¹ãã§ããããã«ãªãã¾ãã
ã³ã³ãããç«ã¡ä¸ãã£ã¦ããç¶æ ã§ã
$ ssh root@[dockerã®ipã¢ãã¬ã¹] -p 49156
ã¨ããã°ããã»ã©ã¨åãããã«sshãã°ã¤ã³ãã§ãã¾ãã