Docker入门到放弃

Docker(五) Dockerfile

2020-06-27  本文已影响0人  Starlightskm

Dockerfile

镜像相关的操作

image.png

定义

image.png

构建Dockerfile的注意事项

Dockerfile的格式

指令


[root@centos7-node1 ~]# mkdir /data/build_workshop -p

[root@centos7-node1 ~]# cd /data/build_workshop/

[root@centos7-node1 build_workshop]# echo "<h1>this is a test page</h1>" > index.html

[root@centos7-node1 ~]# cd /data/build_workshop/

[root@centos7-node1 build_workshop]# vim Dockerfile         

FROM busybox:latest

LABEL maintainer="wanghui<wanghui@yeecall.com>"

COPY index.html /data/web/html/

[root@centos7-node1 build_workshop]# docker build . -t myimg:v0.1

[root@centos7-node1 build_workshop]# docker run --name t1 --rm -it myimg:v0.1 /bin/sh

/ # ls /data/web/html/

index.html

[root@centos7-node1 build_workshop]# mkdir /data/build_workshop/pages/

[root@centos7-node1 build_workshop]# mv /data/build_workshop/index.html /data/build_workshop/pages/

[root@centos7-node1 build_workshop]# echo "<h1>test1 page</h1>" >  /data/build_workshop/pages/test1.html

[root@centos7-node1 build_workshop]# echo "<h1>test2 page</h1>" >  /data/build_workshop/pages/test2.html 

[root@centos7-node1 build_workshop]# vim /data/build_workshop/.dockerignore    #忽略拷贝文件

pages/test2.html

[root@centos7-node1 build_workshop]# vim /data/build_workshop/Dockerfile 

FROM busybox:latest

LABEL maintainer="wanghui<wanghui@yeecall.com>"

COPY pages/*.html /data/web/html/

[root@centos7-node1 build_workshop]# docker build . -t myimg:v0.2

[root@centos7-node1 build_workshop]# docker run --name t1 --rm -it myimg:v0.2 /bin/sh   #验证

/ # ls /data/web/html/

index.html  test1.html


[root@centos7-node1 ~]# mkdir /data/build_workshop/add_example

[root@centos7-node1 ~]# cd /data/build_workshop/add_example

[root@centos7-node1 add_example]# wget http://nginx.org/download/nginx-1.16.1.tar.gz

[root@centos7-node1 add_example]# vim Dockerfile

FROM  busybox:latest

LABEL maintainer="wanghui <wanghui@yeecall.com>"

ADD http://nginx.org/download/nginx-1.18.0.tar.gz /data/

ADD nginx-1.16.1.tar.gz /data/

[root@centos7-node1 add_example]# docker run --name t1 --rm -it myimg:v0.3 /bin/sh

/ # ls /data/

nginx-1.16.1         nginx-1.18.0.tar.gz


[root@centos7-node1 ~]# cd /data/build_workshop/

[root@centos7-node1 build_workshop]# cp add_example/ worksdir_example -r  && cd  worksdir_example

[root@centos7-node1 worksdir_example]# vim Dockerfile 

ADD http://nginx.org/download/nginx-1.18.0.tar.gz /data/

FROM  busybox:latest

LABEL maintainer="wanghui <wanghui@yeecall.com>"

WORKDIR  /usr/

ADD nginx-1.16.1.tar.gz src/

[root@centos7-node1 worksdir_example]# docker build . -t myimg:v0.4

[root@centos7-node1 worksdir_example]# docker run --name t1 --rm -it  myimg:v0.4 /bin/sh

/usr # ls src/nginx-1.16.1/ 


[root@centos7-node1 build_workshop]# mkdir /data/build_workshop/volumes_example/pages/

[root@centos7-node1 build_workshop]# cd /data/build_workshop/volumes_example

[root@centos7-node1 volumes_example]# echo "<h1>test1 page</h1>" >  /data/build_workshop/volumes_example/pages/test1.html

[root@centos7-node1 volumes_example]# echo "<h1>test2 page</h1>" > /data/build_workshop/volumes_example/pages/test2.html 

[root@centos7-node1 volumes_example]# vim Dockerfile 

FROM busybox:latest

LABEL maintainer="wanghui<wanghui@yeecall.com>"

COPY pages/*.html /data/web/html/

ADD   http://nginx.org/download/nginx-1.15.8.tar.gz /tmp/

WORKDIR /usr/

VOLUME /data/web/html/

[root@centos7-node1 volumes_example]# docker build . -t myimg:v0.5

[root@centos7-node1 volumes_example]# docker run --name t1 -it --rm myimg:v0.5 /bin/sh

/usr # cd /data/web/html/

/data/web/html # ls

index.html  test1.html  test2.html

[root@centos7-node1 ~]# docker inspect -f {{.Mounts}} t1     #另起窗口,找到Source,发现Source映射目录的内容与容器中的一样[随机存储卷]


FROM busybox:latest

LABEL maintainer="wanghui<wanghui@yeecall.com>"

COPY pages/*.html /data/web/html/

ADD   http://nginx.org/download/nginx-1.15.8.tar.gz /tmp/

WORKDIR /usr/

VOLUME /data/web/html/

EXPOSE 80/tcp

[root@centos7-node1 expose_example]# docker build . -t myimg:v0.6

[root@centos7-node1 volumes_example]# docker run --name t1 -it -P --rm myimg:v0.6 /bin/sh

/usr # httpd -f -h /data/web/html/    #启动httpd服务

[root@centos7-node1 expose_example]# docker port t1   #查看映射,然后访问即可


FROM busybox:latest

ENV webhome="/data/web/html/"

LABEL maintainer="wanghui<wanghui@yeecall.com>"

COPY pages/*.html ${webhome}

ADD http://nginx.org/download/nginx-1.15.8.tar.gz ${webhome}

WORKDIR ${webhome}

ADD nginx-1.16.1.tar.gz ./

VOLUME  ${webhome}

EXPOSE 80/tcp

[root@centos7-node1 env_example]# docker build . -t myimg:v0.7


FROM busybox:latest

ARG webhome="/data/web/html/"

LABEL maintainer="wanghui<wanghui@yeecall.com>"

COPY pages/*.html ${webhome}

ADD http://nginx.org/download/nginx-1.15.8.tar.gz ${webhome}

WORKDIR ${webhome}

ADD nginx-1.16.1.tar.gz ./

VOLUME  ${webhome}

EXPOSE 80/tcp

[root@centos7-node1 arg_example]# docker build . -t myimg:v0.8     #正常不加参数的编译,使用的是默认的参数

[root@centos7-node1 arg_example]# docker build --build-arg webhome="/webdata/htdocs/" . -t myimg:v0.8   #加入参数的编译

[root@centos7-node1 arg_example]# docker run --name t1 -it --rm myimg:v0.8 /bin/sh   #结果测试


FROM busybox:latest

ARG webhome="/data/web/html/"

LABEL maintainer="wanghui<wanghui@yeecall.com>"

COPY pages/*.html ${webhome}

ADD http://nginx.org/download/nginx-1.15.8.tar.gz ${webhome}

WORKDIR ${webhome}

ADD nginx-1.16.1.tar.gz ./

VOLUME  ${webhome}

EXPOSE 80/tcp

RUN  mkdir -p /web/bbs && \

     ["/bin/sh","-c","echo helle >> /web/bbs/index.html"]

[root@centos7-node1 run_example]# docker build . -t myimg:v0.9

- 实例2

FROM centos:7

LABEL maintainer="wanghui <122725501@qq.com>"

ARG  docroot=/var/www/html/

RUN yum makecache && \

    yum -y install httpd php php-mysql && \

    yum clean all && \

    rm -fr /var/cache/yum/*

[root@centos7-node1 ap]# docker run --name web1 --rm -it php-httpd:v0.1 bash


FROM centos:7

LABEL maintainer="wanghui <122725501@qq.com>"

ARG  docroot=/var/www/html/

RUN yum makecache && \

    yum -y install httpd php php-mysql && \

    yum clean all && \

    rm -fr /var/cache/yum/*

CMD ["/usr/sbin/httpd","-DFOREGROUND"]

[root@centos7-node1 ap]# docker build . -t php-httpd:v0.2

[root@centos7-node1 ap]# docker run --name web1 --rm  php-httpd:v0.2 

[root@centos7-node1 ap]# docker ps -a

CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

[root@centos7-node1 ap]# docker run --name web1 -it php-httpd:v0.2 /bin/bash

[root@47818a3ba906 /]# ps -ef    #httpd被覆盖了

UID         PID   PPID  C STIME TTY          TIME CMD

root          1      0  1 09:41 pts/0    00:00:00 /bin/bash


[root@centos7-node1 ap]# tree ./

./

├── Dockerfile

├── entrypoint.sh

├── ok.html

└── phpinfo.php

[root@centos7-node1 ap]# cat Dockerfile 

FROM centos:7

LABEL maintainer="wanghui <122725501@qq.com>"

ARG  docroot=/var/www/html/

RUN yum makecache && \

    yum -y install curl httpd php php-mysql && \

    yum clean all && \

    rm -fr /var/cache/yum/*

ADD ok.html phpinfo.php ${docroot}

ADD entrypoint.sh /bin/

EXPOSE 80/tcp

VOLUME ${docroot}

HEALTHCHECK --interval=3s --timeout=3s --start-period=2s CMD curl -f http://localhost/ok.html || exit 1

CMD ["/usr/sbin/httpd","-DFOREGROUND"]

ENTRYPOINT ["/bin/entrypoint.sh"]

[root@centos7-node1 ap]# cat entrypoint.sh 

#!/bin/bash

listen_port=${LISTEN_PORT:-80}

server_name=${SERVER_NAME:-localhost}

doc_root=${DOC_ROOT:-/var/www/html/}

cat > /etc/httpd/conf.d/myweb.conf <<EOF

#LISTEN $listen_port

<VirtualHost *:${listen_port}>

    ServerName  "$server_name"

    DocumentRoot  "$doc_root"

    <Directory "$doc_root">

       Options  none

       AllowOverride none

       Require all granted

    </Directory>

</VirtualHost>

EOF

exec "$@"

Dockerfile  entrypoint.sh  ok.html  phpinfo.php

[root@centos7-node1 ap]# cat ok.html 

OK

[root@centos7-node1 ap]# cat phpinfo.php 

<?php

  phpinfo();

?>


[root@centos7-node1 ~]# cd /data/build_workshop/

[root@centos7-node1 build_workshop]# mkdir testimg/ myicme/ -p

[root@centos7-node1 build_workshop]# vim testimg/Dockerfile 

FROM busybox:latest

LABEL maintainer="wanghui <122725501@qq.com>"

RUN mkdir -p /data/web/html

ONBUILD ADD http://nginx.org/download/nginx-1.18.0.tar.gz /usr/src

[root@centos7-node1 build_workshop]# docker build ./testimg/  -t testimg:v0.1   # 构建testing:v0.1

[root@centos7-node1 build_workshop]# vim myicme/Dockerfile

FROM  testimg:v0.1

LABEL from="testimg:v0.1

[root@centos7-node1 build_workshop]# docker build ./myicme/ -t myicme:v0.1   #此时构建才会执行下载testing:v0.1

Sending build context to Docker daemon  2.048kB

Step 1/2 : FROM  testimg:v0.1

# Executing 1 build trigger

Downloading [==>                                                ]  47.73kB/1.04MB


[root@centos7-node1 ~]# docker image save php-httpd:v0.6 -o php-httpd.tar

[root@centos7-node1 ~]# docker image load -i php-httpd.tar

[root@centos7-node1 ~]# docker history php-httpd:v0.6   #构建历史查看

上一篇 下一篇

猜你喜欢

热点阅读