Docker hands-onin ToretaYuichiro MASUI [email protected]
View Slide
Dockerͱ• ԾԽٕज़ͷΈ߹Θͤ• ܰྔ• ΠϝʔδͷΈ͕͍ͬͯΔ• ͍ࣺͯͷΠϯελϯεͱͷ૬ੑ͕ྑ͍
ϑΝΠϧͱϓϩηεHost OSϓϩηεϓϩηεϓϩηεFSϓϩηεFS ϑΝΠϧγεςϜDockerdaemonContainer ContainerNetwork Network
Docker Container• ϓϩηεͷִ• Dockerϓϩηε͔Βଞͷϓϩηεݟ͑ͳ͍• ϑΝΠϧγεςϜͷִ• ϓϩηεຖʹݟ͑ΔϑΝΠϧҧ͏
ϑΝΠϧͱϓϩηε
Docker MachineHost OSϓϩηεϓϩηεϑΝΠϧγεςϜDockerdaemonVirtualBoxOSX / WindowsDocker MachineϓϩηεFSϓϩηεFSNetwork Network
DockerͰγΣϧىಈ• “Docker Quickstart Terminal”Λ3ຕىಈ• docker run -it ubuntu:14.04 /bin/bash• ps aux• touch /abc123• docker run -it ubuntu:14.04 /bin/bash• ls /• docker ps
ͳʹ͕ى͍ͬͯ͜Δ͔• docker run -it ubuntu:14.04 /bin/bash• “ubuntu:14.04” ࣮ߦ͢ΔϑΝΠϧΠϝʔδ• ϩʔΧϧʹͳ͍߹μϯϩʔυ• ΠϝʔδΛల։͠DockerͰىಈ• “-it” ίϯιʔϧΛܨ͛Δ
ͳʹ͕ى͍ͬͯ͜Δ͔• ىಈ͢ΔͨΊʹ৽͍͠ϑΝΠϧγεςϜΛ࡞Δ• docker ps -a• docker rm CONTAINER_ID
Πϝʔδ• ΠϝʔδϑΝΠϧDocker HubͰ• ͢ΔΈΛDocker RegistryͱݺͿ• ֤छΠϝʔδ͕ެࣜʹ͞Ε͍ͯΔ• https://hub.docker.com/_/ubuntu/
Πϝʔδ• OSҎ֎ʹΞϓϦͷΠϝʔδఏڙ͞Ε͍ͯΔ• docker run -it --rm ruby:2.3.0 /bin/bash• ruby -v• “--rm" ίϯςφΛऴྃ࣌ʹϑΝΠϧΛফ͢
ࣗͷΠϝʔδΛ࡞Δ• ΠϝʔδʹมߋΛՃ͑Δ• DockerfileFROM ubuntu:14.04RUN apt-get updateRUN apt-get install -y apache2CMD ["/usr/sbin/apache2ctl","-D","FOREGROUND"]
DockfileΛىಈ• docker build -t myapache ./• “-t myapache” Πϝʔδ໊• “./“ DockerfileͷσΟϨΫτϦ• docker run -p 8080:80 myapache• http://192.168.99.100:8080• docker-machine ip
docker-machine• docker-machine restart• $(docker-machine env)
ڧ੍ఀࢭ• docker ps• docker stop CONTAINER_ID
ϗετͷϑΝΠϧΛϚϯτ• docker run -v `pwd`:/var/www/html -p 8080:80myapache
Containerؒ௨৴• Containerಠཱ͍ͯ͠ΔͷͰlocalhostͰΞΫηεͰ͖ͳ͍• ͦͷลΛ؆୯ʹ͢Δͷ͕Docker Compose
docker-compose.ymlrails: build: . command: [“./bin/rails","server","-b","0.0.0.0"] mem_limit: 512m ports: - "3000:3000" volumes: - ".:/usr/src/app" links: - "mysql"mysql: image: mysql:5.6 environment: MYSQL_ROOT_PASSWORD: "passwd"
ΊΜͲ͍ͷͰϫϯϥΠφʔ• DockerͰRails։ൃڥΛ࡞ΔϫϯϥΠφʔ• http://qiita.com/masuidrive/items/7478fb9101652f2bbae1
docker-compose ࣮ߦ• docker-compose build• docker-compose up• docker-compose rm
database.yml• default: &default adapter: mysql2 username: root password: "passwd" host: mysql• production: <<: *default host: <%= ENV[‘MYSQL_HOST'] %> ↑͜ͷߦΛՃ
scaffold• docker-compose up -d• docker-compose run rails /bin/bash• rails g scaffold item key:string value:text• rake db:create db:migrate• http://192.168.99.100:3000/items• docker-compose stop
Amazon ECS & ECR• Amazon EC2 Container System• Dockerͱecs-agentೖΓઐ༻ͷAMI• DockerΛૢ࡞͢Δίϯιʔϧ & API• Amazon EC2 Container Registry• Docker Registry
ECRʹRepositoryΛ࡞• ը໘ӈ্ͷRegionN.Virginia• Sample appͷνΣοΫΛ֎ͯ͠• “sample1”ͷϦϙδτϦΛ࡞Δ
ECRʹimageΛpush• $(aws ecr get-login --region us-east-1)• docker build -t sample1 .• docker tag sample1:latest 123456.dkr.ecr.us-east-1.amazonaws.com/sample1:latest• docker push 123456.dkr.ecr.us-east-1.amazonaws.com/sample1:latest
RDS࡞Ζ͏• ύεϫʔυ͖ͳϞϊΛ• Publicly access”NO”Ͱ
ECS Cluster
ECS instance• cluster࡞ͬͯ• ecs AMIͰΠϯελϯε࡞ΔɻIAM roleΕͣʹ• http://docs.aws.amazon.com/AmazonECS/latest/developerguide/instance_IAM_role.html
Task defnition• docker-composeʹ૬• ίϯςφͷͨΊͷڥΛઃఆ
ಉ͡Α͏ʹmigrate Task• appͱ΄΅ಉ͡• Portઃఆ͠ͳ͍• Commandɺ./bin/rake,db:migrate
Service
Service ͱ Task• Service͕TaskΛ্ཱͪ͛Δ• Task1ͭҎ্ͷContainerΛ༗͢Δ• Task͕མͪΔͱService͕ࣗಈతʹTaskΛىಈ• Service͔Βىಈ͞Εͳ͍λεΫ୯ൃىಈ• rake db:migrateͱ͔
production.logΛݟΔ• sshͯ͠• docker ps• docker exec -it CONTAINER_ID /bin/bash