I have a php docker container, that runs my app, and I need to start using Composer to install a php package. What is the best way to approach it? Source files can be found here: in folder recipe-05 https://github.com/ikknd/docker-study 1. Not the best approach, but the most straightforward one: not to use "php:7.2-fpm" image, but to build a custom image with both php and composer. Technically this works, I get composer installed in my php image, and whenever I need to update or install dependencies I simply execute calls in my custom php container. Problems: need to use composer in several different containers - results in custom images for each container, where composer is needed if I run docker in swarm mode and scale container to more than 1 copy - results in each container executing "composer install" 2. A much better approach: use a dedicated composer docker image, map my project inside, and execute composer commands. I will use ideas from , and . recipe 02 - simple php page recipe 04 - redis setup Create docker-compose.yml file in "docker" folder: Here I do several things: /var/www/docker-study.loc/recipe-05/php:/app - composer image by default executes commands from /app folder, that's why I map project like this I map /var/www/docker-study.loc/recipe-05/php to both, php container and composer container, this way composer container can execute "composer install", and php container will have the updated code "depends_on" - prevents container to start before other container, on which it depends 3. Create composer.json in "php" folder: 4. Create index.php in "php" folder: The goal here is to use composer library - "predis/predis" (just as an example). This library needs to get installed once "composer" container gets started. I can go to /var/www/docker-study.loc/recipe-05/docker/ and execute: docker-compose up -d Now go to myapp.loc/ and see "works!" 5. Final Thoughts. When composer container started, it executed "composer install" command and then exited. I can confirm this by running: - this will show that container "docker_composer_1" has exited. "docker container ls -a" If I do - - I can see information on what happened when container started, and how "composer install" process went. "docker logs docker_composer_1" What if I change composer.json file, and need to install additional library? docker-compose restart composer This will start this container again, execute install and exit. What if I need to run instead of ? "composer update" "composer install" I can change "install" -> "update" in docker-compose.yml, and run "docker-compose restart composer"