Dockerfile创建镜像的三种方式(Dockerfile、基于已有的镜像容器、基于本地模板)
文章目录一、镜像分层模型二、Dockerfile简介1.Dockerfile操作指令2.构建镜像三种方式2.1 Dockerfile2.1.1 使用Dockerfile构建Apache2.1.2 使用Dockerfile构建Nginx2.1.3 使用Dockerfile构建Tomcat2.2 基于已有的镜像容器进行创建镜像2.3 基于本地模板进行构建一、镜像分层模型容器(可读,可写层)服务本身镜像
·
文章目录
一、镜像分层模型
容器(可读,可写层)
服务本身镜像层(只读层,模板)
依赖环境镜像层(只读层,模板)
基础镜像镜像层(为以上的系统服务提供支持)
底层内核层
二、Dockerfile简介
1.Dockerfile操作指令
指令 含义
FROM 镜像 指定新镜像所基于的镜像,第一条指令必须为FROM指令,每创建一个镜像就需要一条FROM指令
MAINTAINER 名字 说明新镜像的维护人信息
RUN命令 在所基于的镜像上执行命令,并提交到新的镜像中
CMD [”要运行的程序”,”参数1,"参数2 "] 指令启动容器时要运行的命令或者脚本,Dockerfile只能有一条CMD命令, 如果指定多条则只能最后一条被执行
EXPOSE 端口号 指定新镜像加载到Docker时要开启的端口
ENV 环境变量 变量值 设置一个环境变量的值,会被后面的RUN使用
ADD 源文件/目录目标文件/目录 将源文件复制到目标文件,源文件要与Dockerfile位于相同目录中,或者是一个URL
COPY 源文件/目录目标文件/目录 将本地主机上的文件/目录复制到目标地点,源文件/目录要与Dockerfile在相同的目录中
VOLUME [“目录"] 在容器中创建一个挂载点
USER 用户名/UID 指定运行容器时的用户
WORKDIR 路径(类似cd) 为后续的RUN、CMD、ENTRYPOINT指定工作自录
ONBUILD 命令 指定所生成的镜像作为一个基础镜像时所要运行的命令
HEALTHCHECK 健康检查
2.构建镜像三种方式
1.Dockerfile
2.基于已有的镜像容器进行创建镜像
3.基于本地模板进行构建
2.1 Dockerfile
2.1.1 使用Dockerfile构建Apache
mkdir apache
[root@localhost apache]# vi Dockerfile
FROM centos #基于与已有的进程镜像
MAINTAINER This is Apache #维护新镜像的用户信息
RUN yum -y update #镜像操作指令 更新
RUN yum -y install httpd #镜像操作指令安装apache软件
EXPOSE 80 #开启端口80
ADD index.html /var/www/html/index.html #复制网站首页文件
ADD run.sh /run.sh #将执行脚本复制到镜像中
RUN chmod 755 /run.sh #执行脚本授权
CMD ["/run.sh"] #启动容器的执行脚本
[root@localhost apache]# cat run.sh
#!/bin/bash
rm -rf /run/httpd/* #删除apache缓存
exec /usr/sbin/apachectl -D FOREGROUND #exec执行,apachect -D守护进程
[root@localhost apache]# echo "This is apache" > index.html
#生成镜像
[root@localhost apache]# docker build -t httpd:centos .(不要忘了末尾的 . )
#新镜像运行容器
[root@localhost apache]# docker run -d -p 1216:80 httpd:centos
访问:本机地址加指定端口192.168.1.10:1216
2.1.2 使用Dockerfile构建Nginx
[root@localhost nginx]# cat Dockerfile
FROM centos:7
MAINTAINER this is nginx
RUN yum -y update
RUN yum -y install pcre-devel zlib-devel gcc gcc-c++ make
RUN useradd -M -s /sbin/nologin nginx
ADD nginx-1.12.0.tar.gz /usr/local/src
WORKDIR /usr/local/src
WORKDIR nginx-1.12.0
RUN ./configure \
--prefix=/usr/local/nginx \
--user=nginx \
--group=nginx \
--with-http_stub_status_module && make && make install
ENV PATH /usr/local/nginx/sbin:$PATH
EXPOSE 80
RUN echo "daemon off;">>/usr/local/nginx/conf/nginx.conf
ADD run.sh /run.sh
RUN chmod 755 /run.sh
CMD ["/run.sh"]
[root@localhost nginx]# cat run.sh
#!/bin/bash
/usr/local/nginx/sbin/nginx
[root@localhost nginx]# docker build -t http:centos .
[root@localhost nginx]# docker images
[root@localhost nginx]# docker run -d -P nginx:centos
[root@localhost nginx]# docker ps -a
在浏览器上http://192.168.1.10:49153/
2.1.3 使用Dockerfile构建Tomcat
添加安装包
apache-tomcat-8.5.16.tar.gz
jdk-8u91-linux-x64.tar.gz
[root@localhost tomcat]# cat Dockerfile
FROM centos:7
MAINTAINER this is tomcat
ADD jdk-8u91-linux-x64.tar.gz /usr/local 复制并解压缩文件
WORKDIR /usr/local
RUN mv jdk1.8.0_91 /usr/local/java
ENV JAVA_HOME /usr/local/java
ENV JAVA_BIN /usr/local/java/bin
ENV JRE_HOME /usr/local/java/jre
ENV PATH $PATH:/usr/local/java/bin:/usr/local/java/jre/bin
ENV CLASSPATH /usr/local/java/jre/bin:/usr/local/java/lib:/usr/local/java/jre/lib/charsets.jar
ADD apache-tomcat-8.5.16.tar.gz /usr/local
WORKDIR /usr/local
RUN mv apache-tomcat-8.5.16 /usr/local/tomcat8
EXPOSE 8080
ENTRYPOINT ["/usr/local/tomcat8/bin/catalina.sh","run"]
[root@localhost tomcat]# docker build -t tomcat:centos . #创建镜像,别忘了末尾的" . "
[root@localhost tomcat]# docker images
[root@localhost tomcat]# docker run -d --name tomcata -P tomcat:centos #基于新镜像创建容器,随机分配端口
[root@localhost tomcat]# docker ps -a
在浏览器上访问http://192.168.1.10:49153/
2.2 基于已有的镜像容器进行创建镜像
[root@localhost nginx]# docker ps -a
[root@localhost nginx]# docker images
[root@localhost nginx]# docker create nginx:latest /bin/bash
[root@localhost nginx]# docker ps -a
[root@localhost nginx]# docker run -itd nginx:latest /bin/bash
[root@localhost nginx]# docker ps -a
[root@localhost nginx]# docker rm f028db68fb5c
[root@localhost nginx]# docker ps -a
[root@localhost nginx]# docker commit -m "abc" -a "nginx" b477085b95b6 nginx:test
[root@localhost nginx]# docker images
2.3 基于本地模板进行构建
容器导入(生成镜像)
格式:cat 导出的文件名(容器) | docker import - 指定镜像名称
cat nginx_a | docker import - nginx:latest
更多推荐
已为社区贡献1条内容
所有评论(0)