容器与容器云——Dockerfile创建

Docker 镜像分层

  • Dockerfile 中的每个指令都会创建一个新的镜像层
  • 镜像层讲被缓存和复用(相当于创建了一个临时存放的内存空间)
  • 当 Dockerfile 的指令修改后,复制的文件变化后,或者构建镜像时指定的变量不同时,原本对应的镜像层缓存就会失效
  • 某一层的镜像缓存失效之后,它之后的镜像层缓存都会失效
  • 镜像层是不可变的,如果在某一层中添加一个文件,然后在下一层中删除它,则镜像中依然会包含该文件

Docker 镜像的创建

Docker 镜像
  • 是应用发布的标准格式
  • 可支撑一个 Docker 容器的运行
    所有的环境部署包括环境迁移,先要打包成镜像,然后上传到仓库,上传到仓库之后可以在其他地点把镜像下载下来,直接加载到指定的容器
    流程
Create Images (or Registry ——> Images)——> Containers
Docker 镜像的创建方法,镜像有自己的工具进行生成
  • 基于已有镜像创建
  • 基于本地模板创建
  • 基于 Dockerfile 创建
基于 Dockerfile 创建

Dockerfile 是由一组指令组成的文件
Dockerfile 结构四部分

  • 基础镜像信息(基于基础镜像,进行后期的变更而创建出新的镜像)
  • 维护者信息(镜像创建者的描述形信息)
  • 镜像操作指令
  • 容器启动时执行指令
    使用 Dockerfile 创建镜像并在容器中运行

Dockerfile操作指令
在这里插入图片描述

apache 镜像制作

mkdir /apache
cd /apache

vim Dockerfile

#基于的基础镜像
FROM centos
#维护镜像的用户信息
MAINTAINER The project <[email protected]>
#镜像操作指令安装 apache 软件
RUN yum -y update
RUN yum -y install httpd
#开启 80 端口
EXPOSE 80
#复制网站首页文件
ADD index.html /var/www/html/index.html
#将执行脚本复制到镜像中
ADD run.sh /run.sh
RUN chmod 755 /run.sh
#启动容器时执行脚本
CMD ["/run.sh"]

vim run.sh

#!/bin/bash
rm -rf /run/httpd/*	#删除原有的缓存
exec /usr/sbin/apachectl -D FOREGROUND	#启动 apache 服务守护进程

echo "web test" > index.html

#生成镜像
docker build -t httpd:centos .		(注意别忘了末尾有".")

#新镜像运行容器
docker run -d -p 1216:80 httpd:centos

nginx 镜像制作


mkdir nginx
cd nginx/
//拷贝nginx-1.12.2源码包到 nginx/ 中

vim Dockerfile

#基于基础镜像
FROM centos:7
#用户信息
MAINTAINER The Nginx Image <Container-Nginx>
#添加环境包
RUN -y update
RUN -y yum install gcc gcc-c++ pcre-devel zlib-devel make
RUN useradd -M -s /sbin/nologin nginx
#下载nginx软件包
ADD nginx-1.12.2.tar.gz /usr/local/src
#指定工作目录
WORKDIR /usr/local/src/nginx-1.12.2
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
#开启http和httpd端口
EXPOSE 80
EXPOSE 443
RUN echo "daemon off;" >> /usr/local/nginx/conf/nginx.conf
#添加宿主机中 run.sh 到容器中
ADD run.sh /run.sh
RUN chmod +x /run.sh
//启动容器时执行脚本
CMD ["/run.sh"]

vim run.sh

#!/bin/bash
/usr/local/nginx/sbin/nginx

//创建新镜像
docker build -t nginx:new .

docker run -d -P nginx:new

docker ps -a

tomcat镜像制作


mkdir /opt/tomcat
拷贝 jdk-8u91-linux-x64.tar.gz
apache-tomcat-8.5.16.tar.gz 到 /opt/tomcat 下

cd /opt/tomcat


vim Dockerfile

#基于基础镜像
FROM centos:7
#用户信息
MAINTAINER The Tomcat Image <Container-tomcat>
ADD jdk-8u91-linux-x64.tar.gz /usr/java
ENV JAVA_HOME /usr/local/java
ENV JAVA_BIN /usr/local/java
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/lib:/usr/local/java/jre/lib/charsets.
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
#CMD ["/usr/local/tomcat8/bin/catalina.sh","run"]
ENTRYPOINT ["/usr/local/tomcat8/bin/catalina.sh","run"]

docker build -t tomcat:centos .

docker run -d --name tomcat01 -p 1216:8080 tomcat:centos

mysq镜像制作

mkdir /opt/mysql
拷贝 mysql-5.7.17.tar.gz
boost_1_59_0.tar.gz 到 /opt/mysql 下

cd /opt/mysql


vim Dockerfile

#基于基础镜像
FROM centos:7
#用户信息
MAINTAINER The Mysql Image <Container-Mysql>
RUN useradd -s /sbin/nologin mysql
RUN install yum install gcc gcc-c++ ncurses ncurses-devel bison make cmake -y
ADD zxvf mysql-5.7.17 /opt/mysql
ADD boost_1_59_0.tar.gz /usr/local/
RUN mv /usr/local/boost_1_59_0

总结

  • Docker镜像的分层
  • Dockerfile基本创建的方法
  • Dockerfile创建各种应用容器
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章