容器與容器雲——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創建各種應用容器
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章