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

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

kim
February 21, 2017

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

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