摘要:構建鏡像時,首先要有一個基礎鏡像,然后有中間件鏡像,最后生成一個應用鏡像。現在作為基礎鏡像,下面來構建兩個中間件鏡像鏡像具有和能力的鏡像。同時,用文件覆蓋默認的配置文件。構建鏡像查看鏡像以上鏡像已經做好了。
以上已經構建好了一個基礎的docker鏡像centos7。
構建docker鏡像時,首先 要有一個基礎鏡像,然后有中間件鏡像,最后生成一個應用鏡像。
現在centos7作為基礎鏡像,下面來構建兩個中間件鏡像:DB鏡像、具有PHP和Nginx能力的鏡像。
php-fpm文件目錄如下
[root@Optimus docker-training]# ls centos7 mysql php-fpm README.md wordpress [root@Optimus docker-training]# cd php-fpm/ [root@Optimus php-fpm]# ls Dockerfile nginx_default.conf nginx_nginx.conf php_www.conf supervisor_nginx.conf supervisor_php-fpm.conf
[supervisor_php-fpm.conf] 用于啟動php-fpm.
[supervisor_nginx.conf] 用于啟動Nginx服務。
Dockerfile
[root@Optimus php-fpm]# vim Dockerfile # # MAINTAINER Carson,C.J.Zeong# DOCKER-VERSION 1.6.2 # # Dockerizing php-fpm: Dockerfile for building php-fpm images # FROM csphere/centos:7.1 MAINTAINER Carson,C.J.Zeong # Set environment variable ENV APP_DIR /app RUN yum -y swap -- remove fakesystemd -- install systemd systemd-libs && yum -y install nginx php-cli php-mysql php-pear php-ldap php-mbstring php-soap php-dom php-gd php-xmlrpc php-fpm php-mcrypt && yum clean all ADD nginx_nginx.conf /etc/nginx/nginx.conf ADD nginx_default.conf /etc/nginx/conf.d/default.conf ADD php_www.conf /etc/php-fpm.d/www.conf RUN sed -i "s/;cgi.fix_pathinfo=1/cgi.fix_pathinfo=0/" /etc/php.ini RUN mkdir -p /app && echo "" > ${APP_DIR}/info.php EXPOSE 80 443 ADD supervisor_nginx.conf /etc/supervisor.conf.d/nginx.conf ADD supervisor_php-fpm.conf /etc/supervisor.conf.d/php-fpm.conf ONBUILD ADD . /app ONBUILD RUN chown -R nginx:nginx /app
[FROM csphere/centos:7.1] 基于cento:7.1作為基礎鏡像(父鏡像)。
[MAINTAINER] 說明dockerfile由誰來維護
[ENV APP_DIR /app]設置了一個APP_DIR變量,文件目錄為/app.(因為后面對Nginx做了一些修改。修改了Nginx的網站根目錄,改為了/app。同時,用nginx_default.conf文件覆蓋默認的配置文件/etc/nginx/conf.d/default.conf)。
[RUN yum -y install nginx php-cli php-mysql php-pear php-ldap php-mbstring php-soap php-dom php-gd php-xmlrpc php-fpm php-mcrypt] 主要安裝了Nginx、php-mysql、php-fpm以及其他php的拓展包。
[ADD php_www.conf /etc/php-fpm.d/www.conf] 在之前安裝php和Apache的時候,里面的用戶是Apache,今天用的是Nginx,所以需要把Apache的用戶替換成Nginx.
[RUN mkdir -p /app && echo "" > ${APP_DIR}/info.php] 創建/app目錄。phpinfo用來來測試Nginx和php-fpm之間有沒有創建成功,因此創建了info.php文件放到了/app目錄下。
[EXPOSE 80 443] Nginx默認端口號是80,https是443.該指令可以不寫,但是推薦寫上,讓人一眼就知道要暴露端口80和443.
[ADD supervisor_nginx.conf /etc/supervisor.conf.d/nginx.conf] 添加啟動Nginx和啟動php-pfm的配置文件
[ADD supervisor_php-fpm.conf /etc/supervisor.conf.d/php-fpm.conf] 添加啟動Nginx和啟動php-pfm的配置文件
[ONBUILD ADD . /app] onbuild是dockerfile中非常重要的一條命令。onbuild在構建這一個鏡像的時候不生效。他在什么時候生效呢?比如說現在生成了一個php-pfm的鏡像,他會在下一個鏡像里面生效。用好onbuild發布產品非常的快,開發人員要做的工作也非常少。
[ONBUILD RUN chown -R nginx:nginx /app]
構建php-fpm鏡像
docker build -t csphere/php-fpm:5.4 .
查看鏡像
docker images
以上鏡像已經做好了。下面測試它能不能提供一個php和Nginx的功能。
測試PHP和Nginx功能
創建docker容器
[root@Optimus php-fpm]# docker run -d -p 8080:80 --name website csphere/php-fpm:5.4 e274049db704780a4742103afbf206a9a924eb2f9982dbc18432b94008f8a032 創建docker容器,用8080映射Nginx的80端口,docker容器名為website,使用docker鏡像為csphere/php-fpm:5.4.
查看docker container狀態
docker ps -a [root@Optimus php-fpm]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES e274049db704 csphere/php-fpm:5.4 "/usr/bin/supervisor 58 seconds ago Up 55 seconds 22/tcp, 443/tcp, 0.0.0.0:8080->80/tcp website 2d36dbfc72a0 csphere/centos:7.1 "/usr/bin/supervisor 23 hours ago Up 23 hours 0.0.0.0:2222->22/tcp base 0d1f6225836b centos "/bin/bash" 2 days ago Exited (127) 2 days ago naughty_engelbart [root@Optimus php-fpm]#
查看公網IP
ifconfig eth1 eth1 這塊網卡是公網IP。公網IP地址為 inet addr:10.10.4.182
訪問瀏覽器
http://inet addr:8080/info.php 比如: http://10.10.4.182:8080/info.php 映射的是宿主機的8080端口。Nginx默認加載的是index.html或者index.php,剛才在創建的時候沒有加這些文件。這里訪問的是info.php。
看到下面的界面說明Nginx已經啟動成功,并能夠和php-fpm進行結合來解析PHP代碼
進入container中查看Nginx和PHP是否啟動
docker exec -it website /bin/bash 進入交互式模式,進入website這個container的/bin/bash界面 [root@Optimus /]# docker exec -it website /bin/bash [root@e274049db704 /]#
查看有多個服務的的container
supervisorctl 由于是基于centos基礎鏡像構建的php-fpm這個docker鏡像,因此已經具備了基礎鏡像的所有功能。 [root@e274049db704 /]# supervisorctl nginx RUNNING pid 7, uptime 0:34:43 php-fpm RUNNING pid 8, uptime 0:34:43 supervisor> 可以看到php-fpm和Nginx已經完全啟動在了docker容器中。 exit 退出 supervisor> exit [root@e274049db704 /]# exit exit
退出后查看container狀態(仍然還是UP狀態)
docker ps -a
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/26021.html
摘要:構建鏡像時,首先要有一個基礎鏡像,然后有中間件鏡像,最后生成一個應用鏡像。現在作為基礎鏡像,下面來構建兩個中間件鏡像鏡像具有和能力的鏡像。同時,用文件覆蓋默認的配置文件。構建鏡像查看鏡像以上鏡像已經做好了。 以上已經構建好了一個基礎的docker鏡像centos7。 構建docker鏡像時,首先 要有一個基礎鏡像,然后有中間件鏡像,最后生成一個應用鏡像。 現在centos7作為基礎鏡...
摘要:如果有服務器需要維護重啟時,也會重啟,此時端口會發生變化,仍然會隨機拿一個沒有使用的端口號來和號端口做端口映射。除非該刪掉后,端口號會被分配給其他使用。 Dockerfile Docker是軟件工業上的集裝箱技術。 通過以下文件制作Docker鏡像 [root@Optimus docker-training]# cd centos7/ [root@Optimus centos7]# l...
摘要:用法在當中只有最后一條生效,其他都不生效第一種寫法類似數組形式,推薦使用。第二章方法執行命令啟動的進程,該進程的為執行完這個的。命令覆蓋掉了中的命令,直接進入到了中。刪除鏡像前,先停止。 ENTRYPOINT用法showImg(https://segmentfault.com/img/bVXNu5?w=702&h=322); entrypoint在dockerfile當中只有最后一條生...
閱讀 529·2023-04-25 14:26
閱讀 1285·2021-11-25 09:43
閱讀 3476·2021-09-22 15:25
閱讀 1447·2019-08-30 15:54
閱讀 520·2019-08-30 12:57
閱讀 765·2019-08-29 17:24
閱讀 3166·2019-08-28 18:13
閱讀 2672·2019-08-28 17:52