[Docker]五.Docker中Dockerfile详解

这篇具有很好参考价值的文章主要介绍了[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) <security@centos.org>"
 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 "xxxxxxx@qq.com"
3.LABEL
给镜像添加信息,使用 docker inspect 可查看镜像的相关信息   
LABEL maintainer="xxx@qq.com" 
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 1028538262@qq.com
#运行命令:创建软连接
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 1028538262@qq.com
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 's@listen.allowed_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项目文章来源地址https://www.toymoban.com/news/detail-741100.html

到了这里,关于[Docker]五.Docker中Dockerfile详解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • 【Docker】Docker容器数据卷、容器卷之间的继承和DockerFIle的详细讲解

    【Docker】Docker容器数据卷、容器卷之间的继承和DockerFIle的详细讲解

    🚀欢迎来到本文🚀 🍉个人简介:陈童学哦,目前学习C/C++、算法、Python、Java等方向,一个正在慢慢前行的普通人。 🏀系列专栏:陈童学的日记 💡其他专栏:C++STL,感兴趣的小伙伴可以看看。 🎁希望各位→点赞👍 + 收藏⭐️ + 留言📝 ​ ⛱️万物从心起,心动则万物动🏄

    2024年02月14日
    浏览(11)
  • Docker容器与虚拟化技术:Docker镜像创建、Dockerfile实例

    Docker容器与虚拟化技术:Docker镜像创建、Dockerfile实例

    目录 一、理论 1.Docker镜像的创建方法 2.Docker镜像结构的分层 3.Dockerfile 案例 4.构建Systemctl镜像(基于SSH镜像) 5.构建Tomcat 镜像 6.构建Mysql镜像 二、实验 1.Docker镜像的创建 2. Dockerfile 案例 3.构建Systemctl镜像(基于SSH镜像) 三、问题 1.nginx网页打不开  2.Apache容器启动一直为Ex

    2024年02月12日
    浏览(37)
  • Docker容器:docker数据管理、镜像的创建及dockerfile案例

    Docker容器:docker数据管理、镜像的创建及dockerfile案例

    因为数据写入后如果停止了容器,再开启数据就会消失,使用数据管理的数据卷挂载,实现了数据的持久化,重启数据还会存在;还有一种方式,容器之间共享文件即相当于有个备份,也会解决停止容器后数据消失的问题。 管理 Docker 容器中数据主要有两种方式:数据卷(

    2024年02月12日
    浏览(12)
  • Docker容器化技术(使用Dockerfile制作镜像)

    Docker容器化技术(使用Dockerfile制作镜像)

    Docker 支持通过扩展现有镜像,创建新的镜像。实际上,Docker Hub 中 99% 的镜像都是通过在 base 镜像中安装和配置需要的软件构建出来的。 1、Docker 镜像为什么分层 镜像分层最大的一个好处就是共享资源。 比如说有多个镜像都从相同的 base 镜像构建而来,那么 Docker Host 只需在

    2024年03月19日
    浏览(349)
  • docker容器:docker镜像的三种创建方法及dockerfile案例

    docker容器:docker镜像的三种创建方法及dockerfile案例

    目录 一、基于现有镜像创建 1、创建启动镜像 2、生成新镜像 二、基于本地模板创建  1、OPENVZ 下载模板 2、导入容器生成镜像 三、基于dockerfile创建  1、dockerfile结构及分层 2、联合文件系统 3、docker镜像加载原理 4、dockerfile操作常用的指令 (1)FROM指令 (2)MAINTAINER 指令 (3)RUN指令

    2023年04月20日
    浏览(9)
  • (三)docker:Dockerfile构建容器运行jar包

    (三)docker:Dockerfile构建容器运行jar包

    目录结构以及准备的文件 2.Dockerfile内容 3.构建镜像 4.查看生成镜像 5.创建并运行容器 6.查看创建的容器 7.启动画面确认

    2024年02月06日
    浏览(11)
  • 【Docker】如何编写Dockerfile,深入理解 Dockerfile:构建精简且高效的容器镜像

    【Docker】如何编写Dockerfile,深入理解 Dockerfile:构建精简且高效的容器镜像

    Docker 是一种轻量级的容器化技术,使得应用程序和它们的依赖可以被打包到一个容器中,方便在不同环境中运行。Dockerfile 是用于定义 Docker 镜像的文本文件,其中包含了一系列的指令,这些指令描述了镜像中应该包含哪些内容和如何配置。 在开始编写 Dockerfile 之前,确保你

    2024年01月24日
    浏览(13)
  • Docker进阶:容器数据卷与Dockerfile构建镜像(发布)

    Docker进阶:容器数据卷与Dockerfile构建镜像(发布)

    💖The Begin💖点点关注,收藏不迷路💖 1、完成数据持久化和共享数据,docker容器中的数据,同步到本地。 2、重要数据back_up 特点: 实时生效、数据卷可在容器之间共享和重用数据、数据卷中的更改不会包含在镜像更新中、数据卷的生命周期会一直延续到没有容器使用它为止

    2024年02月09日
    浏览(11)
  • docker使用Dockerfile制做容器(以hyperf为列,开机启动)

    1、Dockerfile文件 1-1、执行命令生成hyperf:latest容器(文件名是Dockerfile可以省略,如果是其它文件名需要写上docker build –f dockerfile文件路径 –t 镜像名称:版本) 2、start.sh脚本 3、启动,重新启动也会执行脚本,后面加上/data/start.sh(启动执行脚本,重新启动也会执行脚本)

    2024年01月21日
    浏览(10)
  • Docker容器与虚拟化技术:Dockerfile部署LNMP

    Docker容器与虚拟化技术:Dockerfile部署LNMP

    目录 一、理论 1.LNMP架构 2.背景 3.Dockerfile部署LNMP 3.构建Nginx镜像 4.构建MySQL容器 5.构建PHP镜像 6.启动 wordpress 服务  二、实验  1.环境准备 2.构建Nginx镜像 3.构建MySQL容器 4.构建PHP镜像 5.启动 wordpress 服务  三、问题 1.构建nginx镜像报错 2.构建php镜像报错 2.生成PHP镜像一直为Exit

    2024年02月04日
    浏览(10)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包