LAB 1:
- Dockerfile
請注意,這邊用的是 ENV PHPVERSION 5
FROM alpine:latest
LABEL description="This example Dockerfile installs Apache & PHP."
ENV PHPVERSION 5
RUN apk add --update apache2 php${PHPVERSION}-apache2 php${PHPVERSION} && \
rm -rf /var/cache/apk/* && \
mkdir /run/apache2/ && \
rm -rf /var/www/localhost/htdocs/index.html && \
echo "" > /var/www/localhost/htdocs/index.php && \
chmod 755 /var/www/localhost/htdocs/index.php
EXPOSE 80/tcp
ENTRYPOINT ["httpd"]
CMD ["-D", "FOREGROUND"]
接著我們把它給 build 成 docker image
# docker build --tag local/apache-php:5 .
再來我們來做個實驗,在 docker run 時,使用 --env "PHPVERSION=7" 會不會跑成
PHP7
# docker container run --env "PHPVERSION=7" -p 8080:80 --name apache-php7 local/apache-php:5
請先確認 docker container 的狀態為
Up
即可# docker container list
請打開 Browser 輸入
http://IP-ADDRESS:8080
,確認 PHP INFO
接著我們在進入到 docker container 裡面去確認 PHPVERSION 這個變數有沒有改變,請另開一個 terminal 來執行
# docker exec -it apache-php7 env
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
HOSTNAME=8ab899f69969
TERM=xterm
PHPVERSION=7
HOME=/root
唔!很明顯有 PHPVERSION=7 ,但為什麼網頁上的 PHP VERSION 卻還是 5 哩!
這是因為在 docker build 的時候,已經先指定好版本了,並且已經製作出 docker image 了,所以沒辦法去變更
PHPVERSION=5
。
LAB 2:
- Dockerfile
請注意,這邊預設用的是 ARG buildtime_PHPVERSION=5
FROM alpine:latest
LABEL description="This example Dockerfile installs Apache & PHP."
ARG buildtime_PHPVERSION=5
ENV env_var_name=$buildtime_PHPVERSION
RUN apk add --update apache2 php${buildtime_PHPVERSION}-apache2 php${buildtime_PHPVERSION} && \
rm -rf /var/cache/apk/* && \
mkdir /run/apache2/ && \
rm -rf /var/www/localhost/htdocs/index.html && \
echo "" > /var/www/localhost/htdocs/index.php && \
chmod 755 /var/www/localhost/htdocs/index.php
EXPOSE 80/tcp
ENTRYPOINT ["httpd"]
CMD ["-D", "FOREGROUND"]
接著我們把它給 build 成 docker image,並命名為
local/apache-php:5
# docker build --tag local/apache-php:5 .
使用
--build-arg
這個參數,再 build 一個 docker image,並命名為 local/apache-php:7
# docker build --build-arg buildtime_PHPVERSION=7 --tag local/apache-php:7 .
請觀察 docker images
# docker images
請同時啟動
local/apache-php:5
& local/apache-php:7
,並觀察兩個 docker container 的 PHP VERSION
# docker container run -d -p 9090:80 --name apache-php5 local/apache-php:5
# docker container run -d -p 8080:80 --name apache-php7 local/apache-php:7
請確認 docker container 狀態為
UP
# docker container list
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
278b3a6d165b local/apache-php:5 "httpd -D FOREGROUND" 11 minutes ago Up 11 minutes 0.0.0.0:9090->80/tcp apache-php5
4f57218453c9 local/apache-php:7 "httpd -D FOREGROUND" 12 minutes ago Up 12 minutes 0.0.0.0:8080->80/tcp apache-php7
請打開 Browser 分別輸入
http://IP-ADDRESS:8080
& http://IP-ADDRESS:9090
明顯可以看出,有不同的
PHP VERSION
接著分別確認一下,這二個 docker container 的 ENV 是什麼
# docker exec -it apache-php7 env
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
HOSTNAME=4f57218453c9
TERM=xterm
env_var_name=7
HOME=/root
# docker exec -it apache-php5 env
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
HOSTNAME=278b3a6d165b
TERM=xterm
env_var_name=5
HOME=/root
沒有留言:
張貼留言