Upgrade to Pro — share decks privately, control downloads, hide ads and more …

効率的なdocker build用directory構造について

Avatar for kim kim
February 21, 2017

効率的なdocker build用directory構造について

Avatar for kim

kim

February 21, 2017
Tweet

More Decks by kim

Other Decks in Programming

Transcript

  1. Docker Directory構造 rails_root docker nginx unicorn development beta staging productoon

    files Build_docker.sh Run_docker.sh Push_docker.sh deploy create_task_def. sh task_def.templa te update_task_def .sh dynamic_gen_ta sk_def_json.sh shared test memcached redis elasticsearch td-agent mysql base docker- compose.yml
  2. Docker Directory構造 rails_root docker nginx unicorn development beta staging productoon

    files Build_docker.sh Run_docker.sh Push_docker.sh deploy create_task_def. sh task_def.templa te update_task_def .sh dynamic_gen_ta sk_def_json.sh shared test memcached redis elasticsearch td-agent mysql base docker- compose.yml
  3. Docker Directory構造 rails_root docker nginx unicorn development beta staging productoon

    files Build_docker.sh Run_docker.sh Push_docker.sh deploy create_task_def. sh task_def.templa te update_task_def .sh dynamic_gen_ta sk_def_json.sh shared test memcached redis elasticsearch td-agent mysql base docker- compose.yml
  4. Docker Directory構造 rails_root docker nginx unicorn development beta staging productoon

    files Build_docker.sh Run_docker.sh Push_docker.sh deploy create_task_def. sh task_def.templa te update_task_def .sh dynamic_gen_ta sk_def_json.sh shared test memcached redis elasticsearch td-agent mysql base docker- compose.yml
  5. Docker Directory構造 rails_root docker nginx unicorn development beta staging productoon

    files Build_docker.sh Run_docker.sh Push_docker.sh deploy create_task_def. sh task_def.templa te update_task_def .sh dynamic_gen_ta sk_def_json.sh shared test memcached redis elasticsearch td-agent mysql base docker- compose.yml
  6. Docker Directory構造 rails_root docker nginx unicorn development beta staging productoon

    files Build_docker.sh Run_docker.sh Push_docker.sh deploy create_task_def. sh task_def.templa te update_task_def .sh dynamic_gen_ta sk_def_json.sh shared test memcached redis elasticsearch td-agent mysql base docker- compose.yml
  7. • Git push -> circleCI -> git diff -> Docker

    build -> docker run - > docker test -> docker push -> aws ecs create task def -> aws ecs update task def
  8. Git push -> circleCI -> git diff -> Docker build

    -> docker run -> docker test -> docker push -> aws ecs create task def -> aws ecs update task def rails_root docker nginx unicorn development beta staging productoon files Build_docker.s h Run_docker.sh Push_docker.s h deploy create_task_de f.sh task_def.templ ate update_task_d ef.sh dynamic_gen_t ask_def_json.s h shared test memcached redis elasticsearch td-agent mysql base Run_deployme nt.sh docker- compose.yml
  9. circle.yml deployment: develop: branch: develop commands: - sh docker/run_deploymnet.sh: timeout:

    1500 betax: branch: betax commands: - sh docker/run_deploymnet.sh: timeout: 1500 staging: branch: staging commands: - sh docker/run_deploymnet.sh: timeout: 1500 production: branch: production commands: - sh docker/run_deploymnet.sh: timeout: 1500
  10. Git push -> circleCI -> git diff -> Docker build

    -> docker run -> docker test -> docker push -> aws ecs create task def -> aws ecs update task def rails_root docker nginx unicorn development beta staging productoon files Build_docker.s h Run_docker.sh Push_docker.s h deploy create_task_de f.sh task_def.templ ate update_task_d ef.sh dynamic_gen_t ask_def_json.s h shared test memcached redis elasticsearch td-agent mysql base Run_deployme nt.sh docker- compose.yml
  11. git diff使用例 #!/bin/sh changed_files="$(git diff-tree -r --name-only --no-commit-id ORIG_HEAD)“ branch_name="${CIRCLE_BRANCH}"

    updated_nginx_status=false updated_unicorn_status=false updated_td-agent_status=false updated_rails_status=false for var in $changed_files do if [[ $var =~ ^docker/nginx/$branch_name ]]; then updated_nginx_status =true elif [[ $var =~ ^docker/unicorn/$branch_name ]]; then updated_unicorn_status=true elif [[ $var =~ ^docker/td-agent/$branch_name ]]; then updated_td-agent_status =true else updated_rails_status=true fi done
  12. git diff使用例 #!/bin/sh if [ $updated_nginx_status ]; then sh docker/nginx/$branch_name/build_docker.sh

    //docker build sh docker/nginx/$branch_name/run_docker.sh sh docker/nginx/$branch_name/test/run_test.sh sh docker/nginx/$branch_name/push_docker.sh else fi if [ $updated_unicorn_status ]; then sh docker/unicorn/$branch_name/build_docker.sh sh docker/unicorn/$branch_name/run_docker.sh sh docker/unicorn/$branch_name/test/run_test.sh sh docker/unicorn/$branch_name/push_docker.sh else fi
  13. rails_root docker nginx unicorn development beta staging productoon files Build_docker.s

    h Run_docker.sh Push_docker.s h deploy create_task_de f.sh task_def.templ ate update_task_d ef.sh dynamic_gen_t ask_def_json.s h shared test memcached redis elasticsearch td-agent mysql base Run_deployme nt.sh docker- compose.yml Git push -> circleCI -> git diff -> Docker build -> docker run -> docker test -> docker push -> aws ecs create task def -> aws ecs update task def
  14. Git push -> circleCI -> git diff -> Docker build

    -> docker run -> docker test -> docker push -> aws ecs create task def -> aws ecs update task def rails_root docker nginx unicorn development beta staging productoon files Build_docker.s h Run_docker.sh Push_docker.s h deploy create_task_de f.sh task_def.templ ate update_task_d ef.sh dynamic_gen_t ask_def_json.s h shared test memcached redis elasticsearch td-agent mysql base Run_deployme nt.sh docker- compose.yml
  15. Git push -> circleCI -> git diff -> Docker build

    -> docker run -> docker test -> docker push -> aws ecs create task def -> aws ecs update task def rails_root docker nginx unicorn development beta staging productoon files Build_docker.s h Run_docker.sh Push_docker.s h deploy create_task_de f.sh task_def.templ ate update_task_d ef.sh dynamic_gen_t ask_def_json.s h shared test memcached redis elasticsearch td-agent mysql base Run_deployme nt.sh docker- compose.yml
  16. Git push -> circleCI -> git diff -> Docker build

    -> docker run -> docker test -> docker push -> aws ecs create task def -> aws ecs update task def rails_root docker nginx unicorn development beta staging productoon files Build_docker.s h Run_docker.sh Push_docker.s h deploy create_task_de f.sh task_def.templ ate update_task_d ef.sh dynamic_gen_t ask_def_json.s h shared test memcached redis elasticsearch td-agent mysql base Run_deployme nt.sh docker- compose.yml
  17. Git push -> circleCI -> git diff -> Docker build

    -> docker run -> docker test -> docker push -> aws ecs create task def -> aws ecs update task def rails_root docker nginx unicorn development beta staging productoon files Build_docker.s h Run_docker.sh Push_docker.s h deploy create_task_de f.sh task_def.templ ate update_task_d ef.sh dynamic_gen_t ask_def_json.s h shared test memcached redis elasticsearch td-agent mysql base Run_deployme nt.sh docker- compose.yml
  18. Git push -> circleCI -> git diff -> Docker build

    -> docker run -> docker test -> docker push -> aws ecs create task def -> aws ecs update task def rails_root docker nginx unicorn development beta staging productoon files Build_docker.s h Run_docker.sh Push_docker.s h deploy create_task_de f.sh task_def.templ ate update_task_d ef.sh dynamic_gen_t ask_def_json.s h shared test memcached redis elasticsearch td-agent mysql base Run_deployme nt.sh docker- compose.yml
  19. dynamic_gen_task_def_json.sh + task_def.template #!/bin/sh cd docker/unicorn/$BRANCH/deploy/ envsubst '¥$CIRCLE_PR_NUMBER' < task_def.template

    > task_def.json dynamic_gen_task_def_json.sh { "containerDefinitions": [ { "name": "unicorn", "image": “xx.dkr.ecr.ap-northeast-1.amazonaws.com/xx:${CIRCLE_PR_NUMBER}", "essential": true, … task_def.template
  20. update_task_def.sh 以下を参考 https://github.com/silinternational/ecs-deploy TASK_REVISIONS=`aws ecs list-task-definitions --family-prefix [family_name] --status ACTIVE

    --sort ASC` NUM_ACTIVE_REVISIONS=$(echo "$TASK_REVISIONS" | jq ".taskDefinitionArns|length") OUTDATED_REVISION_ARN=$(echo "$TASK_REVISIONS" | jq -r ".taskDefinitionArns[NUM_ACTIVE_REVISIONS-1]") aws ecs update-service --cluster [cluaster_name] --service-name [service_name] --task-definition $OUTDATED_REVISION_ARN update_task_def.sh
  21. Docker Directory構造 rails_root docker nginx unicorn development beta staging productoon

    files Build_docker.sh Run_docker.sh Push_docker.sh deploy create_task_def. sh task_def.templa te update_task_def .sh dynamic_gen_ta sk_def_json.sh shared test memcached redis elasticsearch td-agent mysql base docker- compose.yml
  22. Base Directory rails_root docker nginx unicorn base ruby 2.3.1 build_docker.sh

    2.3.3 build_docker.sh php nginx unicorn-common docker- compose.yml