[英]Convert simple Dockerfile to docker-compose
我有一個用於php:7.2-fpm
的簡單Dockerfile
,我docker-compose.yml
配置正在引用docker-compose.yml
。 我想擺脫的Dockerfile
它位於php/Dockerfile
和命令集成到我的docker-compose-yml
文件。
這是我的php/Dockerfile
:
FROM php:7.2-fpm
RUN docker-php-ext-install mysqli
這是我docker-compose.yml
,它會啟動 php-fpm、nginx、letencrypt certbot、mysql 和 phpmyadmin:
version: '3'
services:
php:
container_name: dev_php
build:
context: ./php
ports:
- 9000:9000
volumes:
- ./website:/website
- ./php/www.conf:/usr/local/etc/php-fpm.d/www.conf
environment:
MYSQL_USER: ${MYSQL_USER}
MYSQL_PASSWORD: ${MYSQL_PASSWORD}
nginx:
container_name: dev_nginx
image: nginx:1.13.8
ports:
- 80:80
- 443:443
volumes:
- ./website:/website
- ./nginx/default.conf:/etc/nginx/conf.d/default.conf
- ./certbot/conf:/etc/letsencrypt
- ./certbot/www:/var/www/certbot
depends_on:
- php
- mysql
command: "/bin/sh -c 'while :; do sleep 6h & wait $${!}; nginx -s reload; done & nginx -g \"daemon off;\"'"
certbot:
container_name: dev_certbot
image: certbot/certbot
volumes:
- ./certbot/conf:/etc/letsencrypt
- ./certbot/www:/var/www/certbot
entrypoint: "/bin/sh -c 'trap exit TERM; while :; do certbot renew; sleep 12h & wait $${!}; done;'"
mysql:
container_name: dev_mysql
image: mysql:5.7
ports:
- 3306:3306
environment:
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
MYSQL_DATABASE: ${MYSQL_DATABASE}
MYSQL_USER: ${MYSQL_USER}
MYSQL_PASSWORD: ${MYSQL_PASSWORD}
volumes:
- ./mysql:/docker-entrypoint-initdb.d
phpmyadmin:
container_name: dev_pma
image: phpmyadmin/phpmyadmin
links:
- mysql
depends_on:
- mysql
environment:
PMA_HOST: mysql
PMA_PORT: 3306
PMA_ARBITRARY: 1
restart: always
ports:
- 8183:80
由於我的php/Dockerfile
相對簡單,我想我可以這樣做:
php:
container_name: dev_php
image: php:7.2-fpm
ports:
- 9000:9000
volumes:
- ./website:/website
- ./php/www.conf:/usr/local/etc/php-fpm.d/www.conf
environment:
MYSQL_USER: ${MYSQL_USER}
MYSQL_PASSWORD: ${MYSQL_PASSWORD}
command: bash -c "docker-php-ext-install mysqli"
但這不起作用。 當我使用dev_php
docker-compose up
我的項目時docker-compose up
我可以看到dev_php
(PHP 容器的名稱)執行了一堆我通常看不到的任務,然后它繼續安裝mysqli
但隨后立即退出, exit code 0
.
想法?
您的原始 Dockerfile 不僅僅是安裝mysqli
擴展。
它具有入口點,如圖中的源代碼在這里
它也有命令如圖所示這里
這些入口點和命令將啟動容器並使其保持運行
現在回到你的修改:
我可以看到 dev_php(PHP 容器的名稱)執行了一堆我通常看不到的任務
這是docker-php-ext-install mysqli
的輸出。 你之前沒有看到是因為它是在構建 docker 鏡像時完成的。
退出代碼 0 后立即退出
這是意料之中的,因為該命令已完成處理並且沒有其他事情可做。
為了保持容器運行,您必須手動添加原始入口點和命令。 像這樣的東西:
php:
container_name: dev_php
image: php:7.2-fpm
ports:
- 9000:9000
volumes:
- ./website:/website
- ./php/www.conf:/usr/local/etc/php-fpm.d/www.conf
environment:
MYSQL_USER: ${MYSQL_USER}
MYSQL_PASSWORD: ${MYSQL_PASSWORD}
entrypoint:
- bash
- -c
command:
- |
docker-php-ext-install mysqli; \
docker-php-entrypoint php-fpm
我還沒有測試來確認語法是 100% 正確的,但你應該明白了。 重要的一點是docker-php-entrypoint php-fpm
我的建議是在這種情況下堅持使用 Dockerfile。
mysqli
的安裝過程。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.