一、镜像分层模型

在这里插入图片描述

容器(可读,可写层)
服务本身镜像层(只读层,模板)
依赖环境镜像层(只读层,模板)
基础镜像镜像层(为以上的系统服务提供支持)
底层内核层

二、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)                为后续的RUNCMDENTRYPOINT指定工作自录

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
Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐