[Docker]五.Docker中Dockerfile详解

Dockerfile 就是用来构建 docker 镜像的构建文件

一.Dockerfile 构建一个自己的 centos 镜像

1.新建Dockerfile,并添加创建镜像的内容

新建一个名为 Dockerfile 文件,并在文件内添加以下内容:
       

#基于centos构建镜像
FROM centos
#安装net-tools软件: RUN表示安装软件
RUN yum install -y net-tools
#通过镜像启动容器时,直接进入wwwroot目录,如果没有这个目录,则会新建: WORKDIR相当于cd
WORKDIR /home/wwwroot
#启动容器时,执行/bin/bash指令:CMD相等与执行命令
CMD /bin/bash

要构建并实现上面的镜像,以前的办法: 下载一个centos镜像,通过镜像启动容器,进入容器,然后下载net-tools软件,然后cd 到wwwroot目录,执行/bin/bash,然后退出容器,把这个容器打包成一个新的镜像.

现在可以通过Dockerfile来实现上面的操作,构建一个centos镜像,操作如下:

2.通过docker build生成centos镜像 

#1.创建Dockerfile,并写入需要创建的相关命令
[root@localhost docker]# cat Dockerfile 
#基于centos构建镜像
FROM centos
#安装net-tools软件: RUN表示安装软件
RUN yum install -y net-tools
#通过镜像启动容器时,直接进入wwwroot目录: WORKDIR相当于cd
WORKDIR /home/wwwroot
#执行/bin/bash指令:CMD相等与执行命令
CMD /bin/bash

#2.通过docker build -t 命令创建docker镜像
#说明:
#    docker build -t docker.io/mycentos:v1 .  docker.io/mycentos:v1 镜像名:版本号, "."一定不要忘了
[root@localhost docker]# docker build -t docker.io/mycentos:v1 .
Sending build context to Docker daemon  2.048kB
Step 1/4 : FROM centos
 ---> 5d0da3dc9764
Step 2/4 : RUN yum install -y net-tools
 ---> Running in 8d99c62edb01
CentOS Linux 8 - AppStream                       68  B/s |  38  B     00:00    
Error: Failed to download metadata for repo 'appstream': Cannot prepare internal mirrorlist: No URLs in mirrorlist
The command '/bin/sh -c yum install -y net-tools' returned a non-zero code: 1

这里报错了:

CentOS Linux 8 - AppStream                       68  B/s |  38  B     00:00    
Error: Failed to download metadata for repo 'appstream': Cannot prepare internal mirrorlist: No URLs in mirrorlist

因为最新版在2021年12月31日就停止了centos的源服务,根据网上的解决办法以dockerhub改为较低版本,代码修改如下,把FROM centos修改为FROM centos:centos7即可

[root@localhost docker]# vi Dockerfile 

[root@localhost docker]# docker build -t docker.io/mycentos:v1 .
Sending build context to Docker daemon  2.048kB

#第一步:从centos7拉取镜像
Step 1/4 : FROM centos:centos7

centos7: Pulling from library/centos
Digest: sha256:be65f488b7764ad3638f236b7b515b3678369a5124c47b8d32916d6487418ea4
Status: Downloaded newer image for centos:centos7
 ---> eeb6ee3f44bd

#第二步:安装所需要的软件
Step 2/4 : RUN yum install -y net-tools
 ---> Running in 70e86cda1969
Loaded plugins: fastestmirror, ovl
Determining fastest mirrors
 * base: mirrors.aliyun.com
 * extras: mirrors.huaweicloud.com
 * updates: mirrors.aliyun.com
Resolving Dependencies
--> Running transaction check
---> Package net-tools.x86_64 0:2.0-0.25.20131004git.el7 will be installed
--> Finished Dependency Resolution

Dependencies Resolved

================================================================================
 Package         Arch         Version                          Repository  Size
================================================================================
Installing:
 net-tools       x86_64       2.0-0.25.20131004git.el7         base       306 k

Transaction Summary
================================================================================
Install  1 Package

Total download size: 306 k
Installed size: 917 k
Downloading packages:
warning: /var/cache/yum/x86_64/7/base/packages/net-tools-2.0-0.25.20131004git.el7.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID f4a80eb5: NOKEY
Public key for net-tools-2.0-0.25.20131004git.el7.x86_64.rpm is not installed
Retrieving key from file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
Importing GPG key 0xF4A80EB5:
 Userid     : "CentOS-7 Key (CentOS 7 Official Signing Key) <[email protected]>"
 Fingerprint: 6341 ab27 53d7 8a78 a7c2 7bb1 24c6 a8a7 f4a8 0eb5
 Package    : centos-release-7-9.2009.0.el7.centos.x86_64 (@CentOS)
 From       : /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  Installing : net-tools-2.0-0.25.20131004git.el7.x86_64                    1/1 
  Verifying  : net-tools-2.0-0.25.20131004git.el7.x86_64                    1/1 

Installed:
  net-tools.x86_64 0:2.0-0.25.20131004git.el7                                   

Complete!
Removing intermediate container 70e86cda1969
 ---> ea950f27d3c9

#第三步:进入wwwroot工作目录
Step 3/4 : WORKDIR /home/wwwroot
 ---> Running in 153c542f3a0a
Removing intermediate container 153c542f3a0a
 ---> 8ea126fe7368

#第四步:配置启动命令
Step 4/4 : CMD /bin/bash
 ---> Running in 01be49142282
Removing intermediate container 01be49142282
 ---> d757f6342cfa
Successfully built d757f6342cfa
Successfully tagged mycentos:v1

#创建镜像成功,通过docker images可查看
[root@localhost docker]# 
[root@localhost docker]# docker images
REPOSITORY                       TAG                 IMAGE ID       CREATED              SIZE
mycentos                         v1                  d757f6342cfa   About a minute ago   434MB

通过Dockerfile创建一个镜像语法:

        docker build -t 镜像名称[:版本号] . 

镜像创建成功,那么下面通过该镜像启动一个容器:

3.通过生成的centos镜像启动容器 

#通过mycentos镜像启动一个centos容器
[root@localhost docker]# docker run -it d757f6342cfa

#这里启动了容器,并且直接进入了wwwroot,说明CMD /bin/bash命令执行了,WORDDIR /home/wwwroot命令执行了

#ifconfig命令可用,说明下载了net-tools软件
[root@bde29f34fd72 wwwroot]# ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 172.17.0.2  netmask 255.255.0.0  broadcast 172.17.255.255
        ether 02:42:ac:11:00:02  txqueuelen 0  (Ethernet)
        RX packets 18  bytes 2306 (2.2 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

好了,制作一个简单的centos镜像就ok了

二.Dockerfile 构建一个 nginx 镜像

1.生成Dockerfile文件,并写入相关代码逻辑

Dockerfile 构建一个 nginx 镜像 , 构建好的镜像内会默认有一个 /usr/share/nginx/html/index.html 文件,新建一个名为 Dockerfile 文件,并在文件内添加以下内容:
#从nginx拉取镜像
FROM nginx

#运行命令, 把 "你好docker"写入/usr/share/nginx/html/index.html
RUN echo '你好 docker' > /usr/share/nginx/html/index.html

#进入文件夹/usr/share/nginx/html
WORKDIR /usr/share/nginx/html

2.通过Dockerfile使用命令docker build创建镜像 

 具体操作如下:

vi Dockerfile_nginx

#从nginx拉取镜像
FROM nginx

#运行命令, 把 "你好docker"写入/usr/share/nginx/html/index.html
RUN echo '你好 docker' > /usr/share/nginx/html/index.html

#进入文件夹/usr/share/nginx/html
WORKDIR /usr/share/nginx/html

#生成nignx镜像
[root@localhost docker]# docker build -f Dockerfile_nginx -t docker.io/mynginx:v1 .
Sending build context to Docker daemon  3.072kB
Step 1/3 : FROM nginx
 ---> 593aee2afb64
Step 2/3 : RUN echo '你好 docker' > /usr/share/nginx/html/index.html
 ---> Running in b274412e722e
Removing intermediate container b274412e722e
 ---> 9871f424626b
Step 3/3 : WORKDIR /usr/share/nginx/html
 ---> Running in 9b4844c304e6
Removing intermediate container 9b4844c304e6
 ---> 63200c4b4d0e
Successfully built 63200c4b4d0e
Successfully tagged mynginx:v1

#生成nginx镜像成功,通过docker images 查看
[root@localhost docker]# docker images
REPOSITORY                       TAG                 IMAGE ID       CREATED          SIZE
mynginx                          v1                  63200c4b4d0e   6 seconds ago    187MB

docker build -f Dockerfile_nginx -t docker.io/mynginx:v1 . 参数说明:

        -f 获取Dockerfile名称

3.通过镜像启动容器,并验证nginx容器是否成功

#通过nginx镜像id启动一个nignx容器,并指定端口映射和后台运行
[root@localhost docker]# docker run -it -d -p 80:80 63200c4b4d0e
#启动成功
6f2727cc1cd6f476661835bc8fac708ff8120ecf8326cd74e52f9e4b788a25bf
#查看容器
[root@localhost docker]# docker ps
CONTAINER ID   IMAGE          COMMAND                  CREATED          STATUS          PORTS                               NAMES
6f2727cc1cd6   63200c4b4d0e   "/docker-entrypoint.…"   54 seconds ago   Up 52 seconds   0.0.0.0:80->80/tcp, :::80->80/tcp   busy_swanson
[root@localhost docker]# 

#访问nginx内容,发送没问题
[root@localhost docker]# curl 127.0.0.1
你好 docker

#进入容器,发现是cd 到/usr/share/nginx/html文件中的,Dockerfile中的语法没问题
[root@localhost docker]# docker exec -it 6f2727cc1cd6 /bin/bash
root@6f2727cc1cd6:/usr/share/nginx/html# pwd
/usr/share/nginx/html
root@6f2727cc1cd6:/usr/share/nginx/html# 

三.Dockerfile语法详解

注意:

        (1).Dockerfile 文件的文件名建议使用Dockerfile ,如果是其他文件构建的时候需要指定文件名

        (2). Dockerfile 构建镜像的执行顺序是从上往下
        (3). # 表示注释
        (4). 每一个指令都会创建一个新的镜像

Dockerfile中一些常用的语法命令 

FROM  # 基础境像 , 一切从这里开始构建
MAINTAINER   # 镜像是谁写的 , 姓名 + 邮箱
LABEL   # LABEL 指令用来给镜像添加一些元数据,可以通过docker inspect 查看相关信息
RUN  # 编译镜像时运行的脚本,这个非常重要:可以通过run安装一些软件,执行命令,以及安装依赖等
COPY  # 编译镜像时复制文件到镜像中,不会减压,和linux中的copy命令类似
ADD # 编译镜像时复制文件到镜像中 ,tar.gz 文件会自动减压
WORKDIR   # 镜像的工作目录, 相当于liunx中的cd命令, 如果目录不存在,会自动创建
CMD  # 设置容器启动的命令,它会被启动容器时添加的启动命令覆盖
ENTRYPOINT   # 设置容器启动的命令,不会被启动容器时添加的启动命令覆盖
EXPOSE   # 设置镜像暴露的端口,这样就可以不用在启动容器时映射端口了
VOLUME   # 设置容器挂载的卷
ENV  # 设置容器的环境变量

 下面具体举例讲解

1.FROM

指定哪种镜像作为新镜像的基础镜像,如:
FROM ubuntu:14.04

2.MAINTAINER

指明该镜像的作者和其电子邮件,如:
MAINTAINER "[email protected]"
3.LABEL
给镜像添加信息,使用 docker inspect 可查看镜像的相关信息   
LABEL maintainer="[email protected]" 
LABEL version="1.0"
LABEL description="This is description"

4.RUN

在新镜像内部执行的命令,比如安装一些软件、配置一些基础环境,可使用 \ 来换行,如:
RUN echo 'hello docker!' \
    > /usr/local/file.txt
RUN yum install net-tools -y
也可以使用 exec 格式 RUN ["executable", "param1", "param2"] 的命令,如:

5.COPY

将主机的文件复制到镜像内,如果目的位置不存在, Docker 会自动创建所有需要的目录结 构,但是它只是单纯的复制,并不会去做文件提取和解压工作。如:
COPY application.yml /etc/springboot/hello-service/src/resources

6.ADD

将主机的文件复制到镜像中,跟 COPY 一样,限制条件和使用方式都一样,如:
ADD application.yml /etc/springboot/hello-service/src/resources

但是 ADD 会对压缩文件(tar, gzip, bzip2, etc)做提取和解压操作

7.WORKDIR

在构建镜像时,指定镜像的工作目录,之后的命令都是基于此工作目录,如果不存在,则会 创建目录,如下:最终会在/usr/local/webservice/ 目录下生成 text.txt 文件
WORKDIR /usr/local
WORKDIR webservice
RUN echo 'hello docker' > text.txt
用户切换目录 类似 cd 命令

8.CMD

容器启动时需要执行的命令,如:
CMD /bin/bash
同样可以使用 exec 语法,如:
CMD ["/bin/bash"]

9.ENTRYPOINT

CMD ENTRYPOINT 同样作为容器启动时执行的命令,区别有以下几点:
  • CMD 的命令会被 docker run 的命令覆盖而 ENTRYPOINT 不会         
    • 如使用 CMD ["/bin/bash"]或 ENTRYPOINT ["/bin/bash"]后,再使用 docker run -it image 启动容器,它会自动进入容器内部的交互终端,如同使用docker run -it image /bin/bash
    • 但是如果启动镜像的命令为 docker run -ti image /bin/ps,使用 CMD 后面的命令就会被覆盖,转而执行 bin/ps 命令,而 ENTRYPOINT 的则不会,而是会把 docker run 后面的命令当做 ENTRYPOINT 执行命令的参数
ENTRYPOINT ["/user/sbin/nginx"]

10.EXPOSE 暴露端口

仅仅只是声明端口,作用:
  • 帮助镜像使用者理解这个镜像服务的守护端口,以方便配置映射
  • 在运行时使用随机端口映射时,也就是 docker run -P 时,会自动随机映射 EXPOSE 的端口
EXPOSE 8080
EXPOSE 8081

 11.VOLUME

通过 dockerfile VOLUME 指令可以在镜像中创建挂载点,这样只要通过该镜像创建的容器都有了挂载点
注意
        通过 VOLUME 指令创建的挂载点,无法指定主机上对应的目录,是自动生成的
格式:
        VOLUME ["<路径 1>", "< 路径 2>"...]
        VOLUME <路径 >
通过 docker inspect 查看通过该 dockerfile 创建的镜像生成的容器

12.ENV

设置环境变量,定义了环境变量,那么在后续的指令中,就可以使用这个环境,
格式:
        ENV <key> <value>
        ENV <key1>=<value1> <key2>=<value2>...
以下示例设置 NODE VERSION = 7.2.0 , 在后续的指令中可以通过 $NODE VERSION 引用:
ENV NODE_VERSION 7.2.0
RUN curl -SLO "https://nodejs.org/dist/v$NODE_VERSION/node-v$NODE_VERSION-linux-x64.ta
r.xz" \
&& curl -SLO "https://nodejs.org/dist/v$NODE_VERSION/SHASUMS256.txt.asc

13.ONBUILD

用于延迟构建命令的执行,简单的说,就是 Dockerfile 里用 ONBUILD 指定的命令,在本次
构建镜像的过程中不会执行(假设镜像为 test-build ),当有新的 Dockerfile 使用了之前构
建的镜像 FROM test-build ,这时执行新镜像的 Dockerfile 构建时候,会执行 test-build
Dockerfile 里的 ONBUILD 指定的命令
ONBUILD <其它指令>

 四.Dockerfile 构建镜像 并安装软件案例

1安装centos

vi Dockerfile_Centos

#从centos7拉取镜像
FROM centos:centos7

#指明该镜像的作者和其电子邮件
MAINTAINER test.com
#设置常量
ENV MyLocal /usr/local
#进入目录
WORKDIR $MyLocal
#暴露端口
EXPOSE 80
#挂载卷
VOLUME ["volume1","volume2"]
#安装软件,当在ubuntu中时,使用的是apt
RUN yum install -y net-tools
RUN yum install -y vim
#赋值当前文件夹下的文件到/root并解压
ADD test.tar.gz /root
#赋值当前文件夹下文件到/usr/local,不会解压
COPY test.tar.gz /usr/local
#容器启动命令
CMD /bin/bash

2.安装nginx 

[root@localhost docker]# cat /home/git/docker_lnmp/nginx/Dockerfile 
#从centos:7.4.1708拉取镜像
FROM centos:7.4.1708
#创建者名称,游戏
MAINTAINER [email protected]
#运行命令:创建软连接
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
#安装YUM源
RUN rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
RUN rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm
#安装nginx
RUN yum -y install gcc gcc-c++ \
openssl openssl-devel \
zlib zlib-devel \
nginx supervisor
#暴露端口
EXPOSE 80
#执行命令,删除操作
RUN rm -rf /var/lib/yum/history/*.sqlite &&\
rm -rf /var/cache/yum
RUN rm -f /etc/supervisord.conf
#复制文件
COPY supervisord.conf /etc/
#COPY www.conf /etc/nginx/conf.d/
COPY nginx.conf /etc/nginx/
RUN mkdir -p /var/www/log/nginx
#CMD ["/usr/sbin/nginx","-g","daemon off;"]
#执行容器启动命令
CMD ["/usr/bin/supervisord","-c","/etc/supervisord.conf"]

3.安装php-fpm

[root@localhost php-fpm]# cat Dockerfile 
FROM centos:7.4.1708
MAINTAINER [email protected]
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
#安装YUM源
RUN rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
RUN rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm
#安装php-fpm
RUN yum -y install gcc gcc-c++ \
openssl openssl-devel \
zlib zlib-devel \
zip unzip \
git cmake doxygen \
php72w-xml \
php72w-gd \
php72w-cli \
php72w-fpm \
php72w-pear \
php72w-mysqlnd \
php72w-devel \
php72w-mcrypt \
php72w-mbstring \
php72w-common \
php72w-process \
php72w-pdo \
php72w-opcache \
php72w-intl \
php72w-bcmath \
#php71w-pecl-imagick \
php72w-pecl-redis \
php72w-pecl-memcached \
php72w-pecl-mongodb

#暴露端口
EXPOSE 9000
RUN sed -i 's@daemonize = yes@daemonize = no@g' /etc/php-fpm.conf
RUN sed -i -e 's@listen = 127.0.0.1:9000@listen = 0.0.0.0:9000@g' /etc/php-fpm.d/www.conf
RUN sed -i -e '[email protected]_clients = 127.0.0.1@;listen.allowed_clients = 127.0.0.1@g' /etc/php-fpm.d/www.conf
#RUN sed -i -e 's@extension=imagick.so@;extension=imagick.so@g' /etc/php.d/imagick.ini
RUN rm -f /etc/php.ini

#复制php.ini配置文件到容器/etc下
COPY php.ini /etc/
RUN rm -f /etc/php-fpm.conf
COPY php-fpm.conf /etc/
RUN rm -f /etc/php-fpm.d/www.conf
COPY www.conf /etc/php-fpm.d/
RUN mkdir -p /var/www/log/php-fpm

#session问题
RUN mkdir /var/lib/php/session && chown -R apache:apache /var/lib/php
#phantomjs字体
COPY lyx /usr/share/fonts

#复制sphinx包到/usr/local/src并解压
ADD sphinx-2.2.11-release.tar.gz /usr/local/src
#进入sphinx文件夹,
WORKDIR /usr/local/src/sphinx-2.2.11-release/api/libsphinxclient
#运行sphinx2配置
RUN ./configure --prefix=/usr/local/sphinx2/libsphinxclient && make && make install

ADD sphinx-339e123.tar.gz /usr/local/src
WORKDIR /usr/local/src/sphinx-339e123
RUN phpize
RUN ./configure --with-sphinx=/usr/local/sphinx2/libsphinxclient && make && make install

# 开启bcmath模块
#安装openCC
#WORKDIR /usr/local/src/
#RUN git clone git://github.com/BYVoid/OpenCC.git --depth 1
#WORKDIR /usr/local/src/OpenCC
#RUN make && make install

#ADD master.zip /usr/local/src
#WORKDIR /usr/local/src
#RUN unzip master.zip
#WORKDIR /usr/local/src/opencc4php-master
#RUN ln -s /usr/lib/libopencc.so.2 /usr/lib64/libopencc.so.2
#RUN phpize
#RUN ./configure && make && make install

#安装swoole扩展,因为该镜像需要先安装swoole依赖的libstdc++
RUN cd ~ \
RUN yum -y install libstdc++ \
    wget \
    docker-php-ext-install

ADD swoole-src-4.4.2.tar.gz /usr/local/src
WORKDIR /usr/local/src/swoole-src-4.4.2
RUN phpize
RUN ./configure && make && make install


#&& yum -y install libstdc++ wget docker-php-ext-install\
#    && cd ~ \
#    && wget https://github.com/swoole/swoole-src/archive/v4.4.2.tar.gz \
 #   && tar -zxvf v4.4.2.tar.gz \
  #  && mkdir -p /usr/src/php/ext \
   # && mv swoole-src-4.4.2 /usr/src/php/ext/swoole \
   # && swoole \
    #&& phpize \
    #&& ./configure && make && make install
#

ADD grpc.tar.gz /usr/local/src
WORKDIR /usr/local/src/grpc-1.28.0

#运行phpize
RUN phpize
RUN ./configure && make && make install

RUN pecl install protobuf

RUN yum -y install cronie
RUN yum -y install crontabs
RUN sed -i '/session    required   pam_loginuid.so/c\#session    required   pam_loginuid.so' /etc/pam.d/crond
RUN yum -y install rsyslog
RUN touch /var/log/cron

RUN rm -f /etc/crontab
COPY crontab /etc/

#phantomjs字体
RUN yum -y install bitmap-fonts bitmap-fonts-cjk

#安装supervisor
RUN yum -y install supervisor
RUN rm -rf /var/lib/yum/history/*.sqlite &&\
rm -rf /var/cache/yum
RUN rm -f /etc/supervisord.conf
ADD supervisord.conf /etc/
#CMD ["/usr/sbin/init"]
#CMD ["/usr/sbin/php-fpm"]
CMD ["/usr/bin/supervisord","-c","/etc/supervisord.conf"]

#ADD dockerd  /etc/rc.d/init.d/
#RUN chmod 777  /etc/rc.d/init.d/dockerd
#CMD /etc/rc.d/init.d/dockerd

#安装rabbitmq-c依赖包
#RUN yum -y install wget \
#    && cd ~ \
#    && wget https://github.com/alanxz/rabbitmq-c/archive/v0.9.0.tar.gz \
#    && tar -zxvf v0.9.0.tar.gz \
#    && cd rabbitmq-c-0.9.0 \
#    && autoreconf -i \
#    && ./configure --prefix=/usr/local/rabbitmq-c \
#    && make && make install
## 版本下载:https://github.com/alanxz/rabbitmq-c/releases/tag/v0.7.1
#wget https://github.com/alanxz/rabbitmq-c/releases/download/v0.7.1/rabbitmq-c-0.7.1.tar.gz
#tar -zxvf rabbitmq-c-0.5.0.tar.gz
#
#cd rabbitmq-c-0.5.0/
#
#autoreconf -i
#
#./configure --prefix=/usr/local/rabbitmq-c
#
#make
#
#make install
#安装rabbitmq-c依赖包
RUN cd ~ \
RUN yum -y install automake libtool libtoolize libsysfs

ADD rabbitmq-c-0.7.1.tar.gz /usr/local/src
WORKDIR /usr/local/src/rabbitmq-c-0.7.1
#RUN autoreconf -i
RUN ./configure --prefix=/usr/local/rabbitmq-c \
&& make && make install

#安装PHP扩展 amqp
#RUN yum -y install wget \
#    cd ~ \
#    && wget http://pecl.php.net/get/amqp-1.9.4.tgz \
#    && tar zxvf amqp-1.9.4.tgz \
#    && cd amqp-1.9.4 \
#    && phpize \
#    && ./configure  --with-amqp --with-librabbitmq-dir=/usr/local/rabbitmq-c \
#    && make && make install
#安装PHP扩展 amqp
ADD amqp-1.10.2.tgz /usr/local/src
WORKDIR /usr/local/src/amqp-1.10.2
RUN phpize
RUN ./configure --with-php-config=/usr/bin/php-config --with-amqp --with-librabbitmq-dir=/usr/local/rabbitmq-c/ \
&& make && make install

[上一节][Docker]四.Docker部署nodejs项目,部署Mysql,部署Redis,部署Mongodb

[下一节][Docker]六.Docker自动部署nodejs以及golang项目

猜你喜欢

转载自blog.csdn.net/zhoupenghui168/article/details/134172042