如何用Dockerfile制作镜像

一、实战任务

1.分别制作nginx镜像、php镜像、tomcat镜像

2.分别创建nginx:v1、php:v1、tomcatv1容器

3.测试部署环境是否成功

二、软件资源

ngnx-1.12.tar.gz   php-5.6.31.tar.gz  apache-tomcat-8.0.46.tar.gz  jdk-8u45-linux-x64.tar.gz

1.构建nginx镜像操作步骤如下:

[root@docker build]# mkdir nginx php tomcat

[root@docker build]# cd nginx/

[root@docker nginx]#wget http://nginx.org/download/nginx-1.12.2.tar.gz

[root@docker nginx]# ls

Dockerfile  nginx-1.12.2.tar.gz  nginx.conf

[root@docker nginx]# vim  Dockerfile 

FROM centos:7

Maintainer  QQ:553752017

RUN yum install -y gcc gcc-c++ make openssl-devel pcre-devel

ADD nginx-1.12.2.tar.gz /tmp

RUN cd /tmp/nginx-1.12.2 && \

./configure --prefix=/usr/local/nginx && \

make -j 2 && \

make install

RUN rm -rf /tmp/nginx-1.12.2* && yum clean all

COPY nginx.conf /usr/local/nginx/conf

WORKDIR /usr/local/nginx

EXPOSE 80

CMD ["./sbin/nginx", "-g", "daemon off;"]

#执行构建命令

[root@docker nginx]# docker build -t nginx:v1 -f Dockerfile .

.................................

Sending build context to Docker daemon  988.2kB

Step 1/10 : FROM centos:7

 ---> 5e35e350aded

Step 2/10 : Maintainer QQ:553752017

 ---> Using cache

 ---> 11a2e96e1f13

Step 3/10 : RUN yum install -y gcc gcc-c++ make openssl-devel pcre-devel

 ---> Using cache

 ---> 3da4882c306d

Step 4/10 : ADD nginx-1.12.2.tar.gz /tmp/

 ---> Using cache

 ---> 550f7b534b83

Step 5/10 : RUN cd /tmp/nginx-1.12.2  && ./configure --prefix=/usr/local/nginx && make -j 2 && make install

 ---> Using cache

 ---> 462971d932a0

Step 6/10 : RUN rm -rf /tmp/nginx-1.12.2* && yum clean all

 ---> Using cache

 ---> 158a763d2d22

Step 7/10 : COPY nginx.conf /usr/local/nginx/conf

 ---> f7d45342af34

Step 8/10 : WORKDIR /usr/local/nginx

 ---> Running in 56e57de7114a

Removing intermediate container 56e57de7114a

 ---> 1d9beff20301

Step 9/10 : EXPOSE 80

 ---> Running in 43607b680843

Removing intermediate container 43607b680843

 ---> e8e54c361899

Step 10/10 : CMD ["./sbin/nginx", "-g", "daemon off;"]

 ---> Running in cf5701630c49

Removing intermediate container cf5701630c49

 ---> e57249cd60a8

Successfully built e57249cd60a8

Successfully tagged nginx:v1

2.构建php:v1镜像操作步骤如下:

[root@docker build]# cd php

[root@docker php]# wget http://mirrors.sohu.com/php/php-5.6.31.tar.gz

[root@docker php]# vim Dockerfile 

FROM centos:7

Maintainer QQ:553752017

RUN yum install -y gcc gcc-c++ make gd-devel libxml2-devel libcurl-devel libjpeg-

devel libpng-devel openssl-devel

ADD php-5.6.31.tar.gz /tmp/

RUN cd /tmp/php-5.6.31 && \

./configure --prefix=/usr/local/php \

--with-config-file-path=/usr/local/php/etc \

--with-mysql --with-mysqli \

--with-openssl --with-zlib --with-curl --with-gd \

--with-jpeg-dir --with-png-dir --with-iconv \

--enable-fpm --enable-zip --enable-mbstring && \

make -j 4 && \

make install && \

cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf && \

sed -i "s/127.0.0.1/0.0.0.0/" /usr/local/php/etc/php-fpm.conf && \

sed -i "21a \daemonize = no" /usr/local/php/etc/php-fpm.conf

COPY php.ini /usr/local/php/etc

RUN rm -rf /tmp/php-5.6.31* && yum clean all

WORKDIR /usr/local/php

EXPOSE 9000

CMD ["./sbin/php-fpm", "-c", "/usr/local/php/etc/php-fpm.conf"]

#执行构建命令

[root@docker php]# docker build -t php:v1 -f Dockerfile .

Sending build context to Docker daemon  19.37MB

Step 1/10 : FROM centos:7

 ---> 5e35e350aded

Step 2/10 : Maintainer [email protected]

 ---> Using cache

 ---> 11a2e96e1f13

Step 3/10 : RUN yum install -y gcc gcc-c++ make gd-devel libxml2-devel libcurl-devel libjpeg-devel libpng-devel openssl-devel

 ---> Using cache

 ---> e3c74f07abb9

Step 4/10 : ADD php-5.6.31.tar.gz /tmp/

 ---> Using cache

 ---> d197db984de6

Step 5/10 : RUN cd /tmp/php-5.6.31 && ./configure --prefix=/usr/local/php --with-config-file-path=/usr/local/php/etc --with-mysql --

with-mysqli --with-openssl --with-zlib --with-curl --with-gd --with-jpeg-dir --with-png-dir --with-iconv --enable-fpm --enable-zip --

enable-mbstring && make -j 4 && make install && cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf && sed -i 

"s/127.0.0.1/0.0.0.0/" /usr/local/php/etc/php-fpm.conf && sed -i "21a \daemonize = no" /usr/local/php/etc/php-fpm.conf

 ---> Using cache

 ---> f33889dc4ee4

Step 6/10 : COPY php.ini /usr/local/php/etc

 ---> 6b6912d90a05

Step 7/10 : RUN rm -rf /tmp/php-5.6.31* && yum clean all

 ---> Running in 8efdbfd6afc8

Loaded plugins: fastestmirror, ovl

Cleaning repos: base extras updates

Cleaning up list of fastest mirrors

Removing intermediate container 8efdbfd6afc8

 ---> c9e7b713a6d9

Step 8/10 : WORKDIR /usr/local/php

 ---> Running in 98cf881b3ff3

Removing intermediate container 98cf881b3ff3

 ---> 9c4d8c4eab4e

Step 9/10 : EXPOSE 9000

 ---> Running in 5546cc9dc8c2

Removing intermediate container 5546cc9dc8c2

 ---> 25ea626a1ef5

Step 10/10 : CMD ["./sbin/php-fpm", "-c", "/usr/local/php/etc/php-fpm.conf"]

 ---> Running in 882b11d2c83b

Removing intermediate container 882b11d2c83b

 ---> e23d0f45939c

Successfully built e23d0f45939c

Successfully tagged php:v1

3.构建tomcat:v1镜像操作步骤如下:

[root@docker tomcat]# wget http://archive.apache.org/dist/tomcat/tomcat-8/v8.0.46/bin/apache-tomcat-8.0.46.tar.gz

[root@docker tomcat]# ls

apache-tomcat-8.0.46.tar.gz  Dockerfile  jdk-8u45-linux-x64.tar.gz  server.xml

[root@docker tomcat]# vim  Dockerfile 

FROM centos:7

Maintainer 557352017

ADD jdk-8u45-linux-x64.tar.gz /usr/local

ENV JAVA_HOME /usr/local/jdk1.8.0_45

ADD apache-tomcat-8.0.46.tar.gz /usr/local

COPY server.xml /usr/local/apache-tomcat-8.0.46/conf

RUN rm -f /usr/local/*.tar.gz

WORKDIR /usr/local/apache-tomcat-8.0.46

EXPOSE 8080

ENTRYPOINT ["./bin/catalina.sh", "run"]

#执行构建命令

[root@docker tomcat]# docker build -t tomcat:v1 -f Dockerfile .

Sending build context to Docker daemon  182.6MB

Step 1/10 : FROM centos:7

 ---> 5e35e350aded

Step 2/10 : Maintainer 553752017

 ---> Running in 2681f6530548

Removing intermediate container 2681f6530548

 ---> 61029a905ecb

Step 3/10 : ADD jdk-8u45-linux-x64.tar.gz /usr/local

 ---> f3346896f9e8

Step 4/10 : ENV JAVA_HOME /usr/local/jdk1.8.0_45

 ---> Running in 013a7c5c596c

Removing intermediate container 013a7c5c596c

 ---> 3ee13626a6e9

Step 5/10 : ADD apache-tomcat-8.0.46.tar.gz /usr/local

 ---> a99d11025029

Step 6/10 : COPY server.xml /usr/local/apache-tomcat-8.0.46/conf

 ---> 2db699333a31

Step 7/10 : RUN rm -f /usr/local/*.tar.gz

 ---> Running in 61706caa370b

Removing intermediate container 61706caa370b

 ---> 5f6d51ceba3c

Step 8/10 : WORKDIR /usr/local/apache-tomcat-8.0.46

 ---> Running in 57f4fb62ef0f

Removing intermediate container 57f4fb62ef0f

 ---> 3fd66d921fc9

Step 9/10 : EXPOSE 8080

 ---> Running in e91be31aff9c

Removing intermediate container e91be31aff9c

 ---> 9cb258b9769a

Step 10/10 : ENTRYPOINT ["./bin/catalina.sh", "run"]

 ---> Running in d616186361dc

Removing intermediate container d616186361dc

 ---> b6935107d45e

Successfully built b6935107d45e

Successfully tagged tomcat:v1

5.查看镜像列表:说明成功构建镜像

image.png

6.根据构建好的nginx:v1、php:v1、tomcatv1镜像创建容器

1)创建 lnmp_php容器

[root@docker /]# docker network  create lnmp

Error response from daemon: network with name lnmp already exists

[root@docker /]# docker run -itd --name lnmp_php --net lnmp --mount type=bind,src=/html/wwwroot/,dst=/usr/local/nginx/html php:v1

133d4b1a309d72032f48370e7721ef6f34667cf08194874c39aff50fe9497d8e

2)创建lnmp_nginx容器

[root@docker /]# docker run -itd --name lnmp_nginx  -p 8081:80  --net lnmp --mount type=bind,src=/html/wwwroot/,dst=/usr/local/nginx/html nginx:v1

7cbeb3042ea2ba772c3e36acd0f9919e770a8e060654c4a5fca523505b66f0c1

3)创建lnmp_mysql数据库容器

[root@docker /]# docker run -itd --name lnmp_mysql --net lnmp -p 3306:3306 --mount src=mysql-vol,dst=/var/lib/mysql -e MYSQL_ROOT_PASSWORD=sky9890

 mysql --character-set-server=utf8

5cf0a95045e5ad155462b58724dd38c2e5e87dfd21bb8f145adb17980dcbdb2e

4)创建tomcat容器

[root@docker tomcat]# mkdir /html/webapps/ROOT

[root@docker tomcat]# docker run -itd --name=tomcat -p 8080:8080 --mount type=bind,src=/html/webapps/ROOT 

dst=/usr/local/apache-tomcat-8.0.46/webapps tomcat:v1 

e3ac4cf268b085e31f1a1f9051a8b2471027b5ceea33c379bd73b05ac9ae1f52

7.查看容器运行情况image.png

8.进入nginx:v1、php:v1容器进行相关配置及测试

1)nginx:v1容器

[root@docker wwwroot]# docker exec -it 133d4b1a309d  sh

sh-4.2# ls

client_body_temp  conf  fastcgi_temp  html  logs  proxy_temp  sbin  scgi_temp  uwsgi_temp

sh-4.2# lsof -i:80

COMMAND PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME

nginx     1 root    6u  IPv4 191056      0t0  TCP *:http (LISTEN)

sh-4.2# netstat -tlnup

sh: netstat: command not found

sh-4.2# yum install net-tools

sh-4.2# netstat -tlnup

Active Internet connections (only servers)

Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    

tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      1/nginx: master pro 

tcp        0      0 127.0.0.11:34201        0.0.0.0:*               LISTEN      -                   

udp        0      0 127.0.0.11:45038        0.0.0.0:*                           -    

sh-4.2# ps -ef|grep nginx

root         1     0  0 04:40 pts/0    00:00:00 nginx: master process ./sbin/nginx -g daemon off;

nobody     143     1  0 06:15 pts/0    00:00:00 nginx: worker process

root       160   131  0 06:21 pts/2    00:00:00 grep nginx

2)php:v1容器

sh-4.2# lsof -i:9000

COMMAND PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME

php-fpm   1 root    6u  IPv4 184800      0t0  TCP *:cslistener (LISTEN)

sh-4.2# netstat -tlnu

Active Internet connections (only servers)

Proto Recv-Q Send-Q Local Address           Foreign Address         State      

tcp        0      0 127.0.0.11:41149        0.0.0.0:*               LISTEN     

tcp        0      0 0.0.0.0:9000            0.0.0.0:*               LISTEN     

udp        0      0 127.0.0.11:39382        0.0.0.0:*              

sh-4.2# ps -ef|grep php-fpm

root         1     0  0 04:25 pts/0    00:00:00 php-fpm: master process (/usr/local/php/etc/php-fpm.conf)

nobody       6     1  0 04:25 pts/0    00:00:00 php-fpm: pool www

nobody       7     1  0 04:25 pts/0    00:00:00 php-fpm: pool www

root       115    85  0 06:23 pts/1    00:00:00 grep php-fpm

9.常见问题

1)ADD failed: stat /var/lib/docker/tmp/docker-builder062538323/nginx-1.12.1.tar.gz: no such file or directory

#上述原因是由于nginx-1.12.1版本写错了,所以找到原文件,实际版本是nginx-1.12.2.tar.gz

2)COPY failed: stat /var/lib/docker/tmp/docker-builder935959170/nginx.conf: no such file or directory

#上述原因是执行COPY nginx.conf /usr/local/nginx/conf时,当前目录下没找到nginx.conf文件

3)容器中的配置文件很重要,此次实验是失败的,无法解析PHP。

10.相关测试结果

tomcat.jpg

image.png

image.png


猜你喜欢

转载自blog.51cto.com/sky9896/2477647