èšäºãšã¯
ãã®èšäºã¯ãDocker for Windowsã®ãŠãŒã¶ãŒåãã®ã·ã³ãã«ã§æ確ãªæ瀺ãšãã³ãã®ã»ããã§ãã ãã®èšäºã¯ãPHPéçºè ãããââãžã§ã¯ããè¿ éã«éžæããã®ã«åœ¹ç«ã¡ãŸãã åé¡ãšãã®è§£æ±ºçã«ã€ããŠèª¬æããŸãã ãã®èšäºã¯ãWindowsã§ã®Dockerã®åé¡ãæ·±ãæãäžããããã®ç¡éã®æéçãªãœãŒã¹ããªã人ã«åœ¹ç«ã¡ãŸãã èè ã以åã«åæ§ã®èšäºã«åºããããå Žåãèè ã¯ç¡éã«æè¬ããèè ã¯å€ãã®æéãšåŽåãç¯çŽã§ããã ããã ããã¹ãã«ã¯ãšã©ãŒãäžæ£ç¢ºããå«ãŸããŠããå ŽåããããŸãã
èšäºã§ã¯ãªããã®
ãã®èšäºã¯ãDocker for Windowsã®å®å šã§å æ¬çãªã¬ã€ãã§ã¯ãããŸããã ãã®èšäºã§ã¯ãæ°ããããšã以åã¯ç¥ãããŠããªãäºå®ãé瀺ãããŠããªãããšã«ã€ããŠã¯èª¬æããŠããŸããããããã¯ãã¹ãŠãããŸããŸãªãœãŒã¹ã§ç¢ºèªã§ããŸãã èšäºã¯ãŸã質åã«çããŸãã-é¶ã¯éè·¯ã暪æããŸãããïŒ
æåã®ã¹ãããã¯ãã·ã¹ãã ã«æ°ãã管çè ãè¿œå ããããšã§ã
ããã¯éèŠãªã¹ãããã§ããã¹ããããããåŸããªãå Žåããããã次ã®æ瀺ã¯ãŸã£ããæå³ããªããªãã§ãããã Windows + Rãå®è¡ãããšãlusrmgr.mscããããŒã«ã«ãŠãŒã¶ãŒãšã°ã«ãŒãããéããŸãã ãããªããŠãŒã¶ãŒãã³ã³ããã¹ãã¡ãã¥ãŒããã®äžã®ãæ°èŠãŠãŒã¶ãŒ...ãã å¿ èŠãªãã¹ã¯ãŒãã§æ°ãããŠãŒã¶ãŒïŒdockerhostãªã©ïŒãè¿œå ããŸãã ãã¹ã¯ãŒããå¿ èŠã§ãïŒ ç®¡çè ã°ã«ãŒãã«ã¡ã³ããŒã·ãããè¿œå ããŸãã ä»ã®ã°ã«ãŒããè¿œå ããªãã§ãã ããã
次ã«ãDockerèšå®ã®[å ±æãã©ã€ããŒ]ã§ãå¿ èŠãªãã©ã€ããéžæããæ°ãããŠãŒã¶ãŒã®ããŒã¿ïŒãŠãŒã¶ãŒåãšãã¹ã¯ãŒãïŒãå ¥åããŸãã èšå®ãä¿åããŸãã 以åã«äœæ¥äžã®ãŠãŒã¶ãŒã®ãŠãŒã¶ãŒåãšãã¹ã¯ãŒããå ¥åããå Žåã¯ãæ°ãããŠãŒã¶ãŒã®ããŒã¿ãå ¥åããŸãã äºæããªãå Žæã§åé¡ãä¿®æ£ããå Žåã¯ãä»äºçšã¢ã«ãŠã³ãã䜿çšããèšäºããã以äžèªã¿ãŸããã
ã©ã®æ§æããå§ããŸããïŒ
ã€ã³ã¿ãŒãããäžã«ã¯ãPHP WebãµãŒããŒçšã®ããããçš®é¡ã®æ§ædocker-compose.ymlããããŸãã ãããã®ããã€ãã¯ãWindowsã§èµ·åããŸããã docker-compose.ymlãžã§ãã¬ãŒã¿ãŒãèŠãããšããå§ãããŸãã ãžã§ãã¬ãŒã¿ãŒããæ§æãããã«ååŸããã®ã§ãåŸã§æ§æãç·šéããŸããã æçµçµæã¯githubã«ã¢ããããŒããããŸããã ãžã§ãã¬ãŒã¿ãŒãªãã·ã§ã³ã¯ãããã€ãã®ç¹ã§äžé©åã§ãã åé¡ã®èª¬æãšãã®è§£æ±ºçã以äžã«ç€ºããŸãã
æ°žç¶çãªããŒã¿ããŒã¹ã¹ãã¬ãŒãžã®ã»ããã¢ãã
åé¡ïŒããŒã¿ããŒã¹ãã¡ã€ã«ãããŒã«ã«ãã£ã¹ã¯ã«ä¿åããããšã¯ã§ããŸããã ããã¯ãWindowsã§ã®å ¬çãšããŠãšãããããŒã¿ãã³ã³ããã®å€éšã«ä¿åãããããã«ã蚱容å¯èœãªè§£æ±ºçãèŠã€ããããšããŸãã Windowsã®å Žåãããã¯ããªã¥ãŒã ãšããååã§ãã ã»ãã®æ°è¡ã§ãã®åé¡ã解決ã§ããŸãã
postgres: volumes: - db:/var/lib/postgresql/data volumes: db:
ååä»ãããªã¥ãŒã ã¯ãMobiLinuxVMããã«ãŒä»®æ³ãã·ã³ã®/ var / lib / docker / volumes /ãã©ã«ããŒã«ãããŸãã ãããã®ãã¡ã€ã«ãžã®çŽæ¥ã¢ã¯ã»ã¹ã¯ãªããäžéã³ã³ãããŒãä»ããŠã®ã¿ã¢ã¯ã»ã¹ã§ããŸãã ãã®ãã©ã«ããŒãWindowsã§äœ¿çšå¯èœã«ããæ¹æ³ã決å®ããã®ãããããŸããã ååä»ãããªã¥ãŒã ã管çããã«ã¯ãdocker volumeã³ãã³ãã䜿çšããŸãã ããšãã°ãæªäœ¿çšã®dockerããªã¥ãŒã ãåé€ããŠããªã¥ãŒã ãæŽçããŸãã
ååä»ãããªã¥ãŒã å ã®ãã¡ã€ã«ã®æš©å©ãšãŠãŒã¶ãŒãå¢ããå¿ èŠã¯ãããŸãããDockerããã¹ãŠãåŠçããŠãããŸãã äžéšã®ããã¥ã¢ã«ã§ã¯ãDockerã«æ°žç¶çãªããŒã¿ããŒã¹ã¹ãã¬ãŒãžãèšå®ãããšãæš©å©ã®å²ãåœãŠã«åãããŠèžããŸãã Windowsã§ã¯ãååä»ãããªã¥ãŒã ããªããšæåããŸããã ãŸããæåã«èµ·åãããããããŸããããåèµ·åãããšæ²ãããŸãã ååä»ãããªã¥ãŒã ãåããæ°žç¶ã¹ãã¬ãŒãžãæ©èœãå§ãããšãã®ããšãæ³åããããšããã§ããŸããã
SSHããŒã®è¿œå
ãŸããååä»ãããªã¥ãŒã ãä»ããŠSShããŒãè¿œå ããŸãã ãã®çç±ã¯ãç§å¯éµã«ã¯ç¹å¥ãªæš©å©ãå¿ èŠã§ãããéåžžã®Windowsããªã¥ãŒã ã§ã¯ãã®å€é床ãäžããããªãããã§ããå¿ èŠãªéšåãdocker-compose.ymlããåŒçšããŸã
services: php: volumes: - ssh:/root/.ssh volumes: ssh:
ãããæ©èœããã«ã¯ãæå®ãããããªã¥ãŒã ã®ããŒãã³ããŒããç§å¯ããŒãžã®æš©éãå€æŽããæ¥ç¶ããã¹ãããå¿ èŠããããŸãã ããããã¹ãŠã®ã¢ã¯ã·ã§ã³ã¯ãåäžã®batãã¡ã€ã«ãšããŠçºè¡ã§ããŸãã
docker run -v first_ssh:/root/.ssh --name helper busybox true docker cp ./.ssh/. helper:/root/.ssh/ docker rm helper docker-compose exec php ls /root/.ssh docker-compose exec php chmod 600 /root/.ssh/id_rsa docker-compose exec php ssh git@github.com
ãã¡ãããã¹ã¯ãªããã§ã¯ãfirst_sshã®ä»£ããã«ããªã¥ãŒã åã眮ãæããŸãã ããªã¥ãŒã ãšããååã¯ãããã«ãŒã«ãã£ãŠCOMPOSE_PROJECT NAME + + sshãšããŠåœ¢æãããããšãæãåºãããŠãã ããã ./.sshã®ä»£ããã«ãããŒãžã®ãã¹ãå ¥åããŸãïŒãŸãã¯ããã®ã¹ã¯ãªãããå®è¡ããå Žæã«ããŒãå«ããã©ã«ããŒãäžæçã«ã³ããŒããŸãïŒã ããŒãgithubã«è¿œå ããå ŽåãæåŸã«githubãæšæ¶ããŸãã ã¹ã¯ãªããã¯1åéãã§ãããã³ã³ããã®æåã®èµ·åãæåããçŽåŸã«å®è¡ããå¿ èŠããããŸãïŒdocker-compose up -dïŒã ååä»ãããªã¥ãŒã ãåé€ããå Žåãé€ããç¹°ãè¿ãèµ·åããŠãæå³ããããŸããã
ã³ã³ããéã®ãããã¯ãŒã¯
1ã€ã®docker-compose.ymlãã¡ã€ã«ã§èª¬æãããŠããã³ã³ããéãæ¥ç¶ããã«ã¯ãäœãå¿ èŠãããŸããã ãã¹ãåãšããŠãµãŒãã¹åãŸãã¯ã³ã³ããåãæå®ããã ãã§ååã§ãã ããŒãçªå·ãå€æŽããå¿ èŠã¯ãããŸãã-ããã©ã«ãã®ããŒããæ©èœããŸãã ããã¯ãå¥ã®docker-compose.ymlããã³ã³ãããŒã«ãªã¯ãšã¹ããéåä¿¡ããå¿ èŠããªãå Žåã«å®äºã§ããŸãã ããã«ãåé¡ã¯ãããŸããããããã¯ãŒã¯ã®ååãšãããã¯ãŒã¯äžã®ã³ã³ãããæå®ããã ãã§ãã ç®çã®ã»ã¯ã·ã§ã³docker-compose.ymlãåŒçšããŸã
services: php: networks: # this network - default # external network - second_default external_links: - ${EXTERNAL_NGINX} networks: default: driver: bridge second_default: external: true
ã°ããŒãã«ãããã¯ãŒã¯ã»ã¯ã·ã§ã³ã§ã¯ååãšããŠå€æ°ã®äœ¿çšãèš±å¯ãããŠããªãããããããã¯ãŒã¯åsecond_defaultã¯ç°å¢å€æ°ã«é 眮ãããªãããšã«æ³šæããŠãã ããã å¯èœãªå Žåãphpã»ã¯ã·ã§ã³ã§å€æ°ã䜿çšããããšã¯æå³ããããŸããã ããšãã°ãããã«å€éšãããã¯ãŒã¯ããã³ã³ããåãå ¥ããŸãã .envãã¡ã€ã«ã§EXTERNAL_NGINX = second_nginxãèšå®ããå ŽåãPHPã³ãŒãã§ã¯ããã¹ãåsecond_nginxã䜿çšããŠhttpãªã¯ãšã¹ããäœæããã ãã§ååã§ãã ããŒãã¯ãŸã 80ã§ãããç¹å¥ã«ç»é²ããå¿ èŠã¯ãããŸããã githubãªããžããªã«ãç°ãªãdocker-compose.ymlã®ã³ã³ãããŒéã®æ¥ç¶ã確èªããããã®ã¹ã¯ãªãããè¿œå ããŸããã docker-compose exec php php get.phpãå®è¡ããŠãæ©èœããŠããããšã確èªããã ãã§ååã§ãã
ã³ã³ãããåããŠèµ·åãããšãDockerãèªãå ŽåããããŸãã ãšã©ãŒïŒãããã¯ãŒã¯second_networkãå€éšãšããŠå®£èšãããŸããããèŠã€ãããŸããã§ããã docker network create second_default
ã䜿çšããŠãããã¯ãŒã¯ãæåã§äœæããåè©Šè¡ããŠãã ããã å®éãããã§ããdockerããã³ããã䜿çšããŠãæåã§ãããã¯ãŒã¯ãäœæããŸãã
ãã°èšå®
ãã¹ãŠã®ãµãŒãã¹ããã®ãã°ããããŒã«ã«ã§ã¢ã¯ã»ã¹å¯èœãª1ã€ã®ãã©ã«ããŒã«å ¥ãããã§ãã ããã¯ãéåžžã®ããªã¥ãŒã ã®å©ããåããŠè¡ãããŸãã äž»ãªããšã¯ããµãŒãã¹èªäœã®ãã®ã³ã°ãæå¹ã«ããããšã§ãã phpã®å Žåããããã¯php.iniãã¡ã€ã«ãnginxããã®èšå®ãpostgresã®ãªãã·ã§ã³ã§ãã phpãšnginxã䜿çšãããšããã¹ãŠãç°¡åã«ãªããŸã-èšå®ã«å¯Ÿå¿ãããã¡ã€ã«ããããŸãã postgresã®å Žåãã³ãã³ãã©ã€ã³ãªãã·ã§ã³ã䜿çšããå¿ èŠããããŸãïŒpostgresql.confãã¡ã€ã«ã«ã¯ãŸã ãã¹ããããŸãããããå°ãè€éã«ãªããŸãïŒ
services: postgres: command: postgres -c logging_collector=on -c log_destination=stderr -c log_directory=/logs -c client_min_messages=notice -c log_min_messages=warning -c log_min_error_statement=warning -c log_min_duration_statement=0 -c log_statement=all -c log_error_verbosity=default volumes: - ${LOGS_DIR}:/logs
ã«ããšèšäºã®æåŸã«ããdocker-compose.ymlã®å šæã ç§ã¯ãŸã ãã°ã®èšå®ã«æºè¶³ããŠããªããšèšããªããã°ãªããŸããã ãã®ãŸãŸæºè¶³ããªããã ãã®ã³ã°ã埮調æŽããå Žåã¯ã察å¿ãããµãŒãã¹ã®ããã¥ã¡ã³ãã䜿çšã§ããŸãã
.envã®å€æ°
docker-compose.ymlãã»ãŒæ®éçãªæ§æã«ããããã®åªãããªãã·ã§ã³ã¯ã.envãã¡ã€ã«ã§ãã ç°å¢å€æ°ãæå®ããããšãäžå¯èœãªã°ããŒãã«ãããã¯ãŒã¯ã»ã¯ã·ã§ã³ã®ãããå®å šãªæ±çšæ§ã¯æ©èœããŸããã ç§ã®ãã¡ã€ã«ã®æ©èœã®ãã¡ãpostgressã®å€æ°ã¯ãdocker-compose.ymlèªäœã«èšè¿°ããå¿ èŠã¯ãããŸããã PHPã§ã¯ãããŒã¿ããŒã¹æ¥ç¶ã䜿çšã§ããŸã
'dsn' => sprintf('pgsql:host=%s;dbname=%s', getenv('POSTGRES_HOST'), getenv('POSTGRES_DB')),
ã³ã³ããç»å
æ°ã¥ããããphpãšnginxã«èªåã®ç»åã䜿çšããŸããã ããã«ããããã¹ãäžã®æéãç¯çŽã§ããŸããã ä»ã®ã³ã³ããã€ã¡ãŒãžã®äœ¿çšã劚ãããã®ã¯äœããããŸãããç§ã®æ§æã¯åãªããã¢ã§ãã ç¬èªã®ã€ã¡ãŒãžãç°¡åã«äœæã§ããŸããã«ãã®äœ¿çšæžã¿ã€ã¡ãŒãžãäœæããããã«ããã©ã«ããŒã確èªããŸãã
ãããã«
誰ããããŸãã«ãé¢åã§æ åœè ã«ãªããªãå Žåãdocker-compose.ymlã®æçµããŒãžã§ã³ãããã§æäŸããŸãã
version: "3.5" services: php: image: litepubl/php70:latest container_name: ${FPM_CONTAINER_NAME} env_file: .env working_dir: /var/www/html volumes: - ..:/var/www/html - ./php/php-ini-overrides.ini:/etc/php/7.2/fpm/conf.d/99-overrides.ini - ${LOGS_DIR}:/logs - ssh:/root/.ssh depends_on: - postgres - mongo networks: # this network - default # external network - second_default external_links: - ${EXTERNAL_NGINX} postgres: image: postgres:9.5 container_name: ${POSTGRES_CONTAINER_NAME} env_file: .env ports: - ${POSTGRES_EXT_PORT}:5432 working_dir: /var/www/html command: postgres -c logging_collector=on -c log_destination=stderr -c log_directory=/logs -c client_min_messages=notice -c log_min_messages=warning -c log_min_error_statement=warning -c log_min_duration_statement=0 -c log_statement=all -c log_error_verbosity=default volumes: - ..:/var/www/html - db:/var/lib/postgresql/data - ${LOGS_DIR}:/logs mongo: image: mongo:latest container_name: ${MONGO_CONTAINER_NAME} ports: - ${MONGO_EXTERNAL_PORT}:27017 volumes: - mongo:/data/db webserver: image: litepubl/nginx container_name: ${NGINX_CONTAINER_NAME} working_dir: /var/www/html volumes: - ..:/var/www/html - ${LOGS_DIR}:/var/log/nginx/ - ./nginx/nginx.conf:/etc/nginx/conf.d/default.conf ports: - ${NGINX_EXT_PORT}:80 depends_on: - php volumes: ssh: db: mongo: networks: default: driver: bridge second_default: external: true
ã芧ã®ãšãããè€éãªãã®ã¯ãªãããã¹ãŠãæ©èœããŸãã ãŸããbatãã¡ã€ã«ã®åœ¢åŒã§èšèšããããã€ãã®äŸ¿å©ãªã³ãã³ããæäŸããŸãã codeceptionãã¹ãã®å®è¡
del tests\_output\*.* /f /q del tests\_output\debug\*.* /f /q del logs\debug.log cd docker @cls docker-compose exec php bash test.sh cd ..
ããã³test.shèªäœ
vendor/bin/codecept run unit --steps --html --debug>testlog.txt
ãã®èšäºã®åŸãããã«ãŒãŸãã¯ãã®ä»ã®äœ¿çšæžã¿ã³ã³ããŒãã³ãã«é¢ããå ¬åŒããã¥ã¡ã³ãã§ãçºçããåé¡ã解決ã§ããŸãã ããããã¹ãŠãéçºã®å¹žéã§ãã