摘要:構(gòu)建鏡像時(shí),首先要有一個(gè)基礎(chǔ)鏡像,然后有中間件鏡像,最后生成一個(gè)應(yīng)用鏡像。現(xiàn)在作為基礎(chǔ)鏡像,下面來構(gòu)建兩個(gè)中間件鏡像鏡像具有和能力的鏡像。同時(shí),用文件覆蓋默認(rèn)的配置文件。構(gòu)建鏡像查看鏡像以上鏡像已經(jīng)做好了。
以上已經(jīng)構(gòu)建好了一個(gè)基礎(chǔ)的docker鏡像centos7。
構(gòu)建docker鏡像時(shí),首先 要有一個(gè)基礎(chǔ)鏡像,然后有中間件鏡像,最后生成一個(gè)應(yīng)用鏡像。
現(xiàn)在centos7作為基礎(chǔ)鏡像,下面來構(gòu)建兩個(gè)中間件鏡像: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] 用于啟動(dòng)php-fpm.
[supervisor_nginx.conf] 用于啟動(dòng)Nginx服務(wù)。
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作為基礎(chǔ)鏡像(父鏡像)。
[MAINTAINER] 說明dockerfile由誰來維護(hù)
[ENV APP_DIR /app]設(shè)置了一個(gè)APP_DIR變量,文件目錄為/app.(因?yàn)楹竺鎸?duì)Nginx做了一些修改。修改了Nginx的網(wǎng)站根目錄,改為了/app。同時(shí),用nginx_default.conf文件覆蓋默認(rèn)的配置文件/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的時(shí)候,里面的用戶是Apache,今天用的是Nginx,所以需要把Apache的用戶替換成Nginx.
[RUN mkdir -p /app && echo "" > ${APP_DIR}/info.php] 創(chuàng)建/app目錄。phpinfo用來來測(cè)試Nginx和php-fpm之間有沒有創(chuàng)建成功,因此創(chuàng)建了info.php文件放到了/app目錄下。
[EXPOSE 80 443] Nginx默認(rèn)端口號(hào)是80,https是443.該指令可以不寫,但是推薦寫上,讓人一眼就知道要暴露端口80和443.
[ADD supervisor_nginx.conf /etc/supervisor.conf.d/nginx.conf] 添加啟動(dòng)Nginx和啟動(dòng)php-pfm的配置文件
[ADD supervisor_php-fpm.conf /etc/supervisor.conf.d/php-fpm.conf] 添加啟動(dòng)Nginx和啟動(dòng)php-pfm的配置文件
[ONBUILD ADD . /app] onbuild是dockerfile中非常重要的一條命令。onbuild在構(gòu)建這一個(gè)鏡像的時(shí)候不生效。他在什么時(shí)候生效呢?比如說現(xiàn)在生成了一個(gè)php-pfm的鏡像,他會(huì)在下一個(gè)鏡像里面生效。用好onbuild發(fā)布產(chǎn)品非常的快,開發(fā)人員要做的工作也非常少。
[ONBUILD RUN chown -R nginx:nginx /app]
構(gòu)建php-fpm鏡像
docker build -t csphere/php-fpm:5.4 .
查看鏡像
docker images
以上鏡像已經(jīng)做好了。下面測(cè)試它能不能提供一個(gè)php和Nginx的功能。
測(cè)試PHP和Nginx功能
創(chuàng)建docker容器
[root@Optimus php-fpm]# docker run -d -p 8080:80 --name website csphere/php-fpm:5.4 e274049db704780a4742103afbf206a9a924eb2f9982dbc18432b94008f8a032 創(chuàng)建docker容器,用8080映射Nginx的80端口,docker容器名為website,使用docker鏡像為csphere/php-fpm:5.4.
查看docker container狀態(tài)
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]#
查看公網(wǎng)IP
ifconfig eth1 eth1 這塊網(wǎng)卡是公網(wǎng)IP。公網(wǎng)IP地址為 inet addr:10.10.4.182
訪問瀏覽器
http://inet addr:8080/info.php 比如: http://10.10.4.182:8080/info.php 映射的是宿主機(jī)的8080端口。Nginx默認(rèn)加載的是index.html或者index.php,剛才在創(chuàng)建的時(shí)候沒有加這些文件。這里訪問的是info.php。
看到下面的界面說明Nginx已經(jīng)啟動(dòng)成功,并能夠和php-fpm進(jìn)行結(jié)合來解析PHP代碼
進(jìn)入container中查看Nginx和PHP是否啟動(dòng)
docker exec -it website /bin/bash 進(jìn)入交互式模式,進(jìn)入website這個(gè)container的/bin/bash界面 [root@Optimus /]# docker exec -it website /bin/bash [root@e274049db704 /]#
查看有多個(gè)服務(wù)的的container
supervisorctl 由于是基于centos基礎(chǔ)鏡像構(gòu)建的php-fpm這個(gè)docker鏡像,因此已經(jīng)具備了基礎(chǔ)鏡像的所有功能。 [root@e274049db704 /]# supervisorctl nginx RUNNING pid 7, uptime 0:34:43 php-fpm RUNNING pid 8, uptime 0:34:43 supervisor> 可以看到php-fpm和Nginx已經(jīng)完全啟動(dòng)在了docker容器中。 exit 退出 supervisor> exit [root@e274049db704 /]# exit exit
退出后查看container狀態(tài)(仍然還是UP狀態(tài))
docker ps -a
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/27109.html
摘要:構(gòu)建鏡像時(shí),首先要有一個(gè)基礎(chǔ)鏡像,然后有中間件鏡像,最后生成一個(gè)應(yīng)用鏡像?,F(xiàn)在作為基礎(chǔ)鏡像,下面來構(gòu)建兩個(gè)中間件鏡像鏡像具有和能力的鏡像。同時(shí),用文件覆蓋默認(rèn)的配置文件。構(gòu)建鏡像查看鏡像以上鏡像已經(jīng)做好了。 以上已經(jīng)構(gòu)建好了一個(gè)基礎(chǔ)的docker鏡像centos7。 構(gòu)建docker鏡像時(shí),首先 要有一個(gè)基礎(chǔ)鏡像,然后有中間件鏡像,最后生成一個(gè)應(yīng)用鏡像。 現(xiàn)在centos7作為基礎(chǔ)鏡...
摘要:如果有服務(wù)器需要維護(hù)重啟時(shí),也會(huì)重啟,此時(shí)端口會(huì)發(fā)生變化,仍然會(huì)隨機(jī)拿一個(gè)沒有使用的端口號(hào)來和號(hào)端口做端口映射。除非該刪掉后,端口號(hào)會(huì)被分配給其他使用。 Dockerfile Docker是軟件工業(yè)上的集裝箱技術(shù)。 通過以下文件制作Docker鏡像 [root@Optimus docker-training]# cd centos7/ [root@Optimus centos7]# l...
摘要:用法在當(dāng)中只有最后一條生效,其他都不生效第一種寫法類似數(shù)組形式,推薦使用。第二章方法執(zhí)行命令啟動(dòng)的進(jìn)程,該進(jìn)程的為執(zhí)行完這個(gè)的。命令覆蓋掉了中的命令,直接進(jìn)入到了中。刪除鏡像前,先停止。 ENTRYPOINT用法showImg(https://segmentfault.com/img/bVXNu5?w=702&h=322); entrypoint在dockerfile當(dāng)中只有最后一條生...
閱讀 1983·2021-11-25 09:43
閱讀 3760·2021-11-24 10:32
閱讀 1260·2021-10-13 09:39
閱讀 2444·2021-09-10 11:24
閱讀 3421·2021-07-25 21:37
閱讀 3543·2019-08-30 15:56
閱讀 927·2019-08-30 15:44
閱讀 1515·2019-08-30 13:18