docker學習筆記-2.docker鏡像製做

 

docker鏡像製做

docker鏡像內核

從docker鏡像大小來講,一個比較小的鏡像只有十幾MB,而內核文件須要一百多兆。所以docker鏡像沒有內核。鏡像再被啓動爲容器後將直接使用宿主機的內核,而鏡像自己只提供相應的rootfs,即xitong系統正常運行所須要的用戶空間的文件系統,好比/dev/,/proc/,/bin/,/etc/等目錄。因此容器當中基本沒有/boot/目錄的,而/boot/當中保存的就是與內核相關的文件和目錄。html

爲何沒有內核?java

 因爲容器的啓動和運行過程是直接使用宿主機的內核,因此沒有直接調用物理硬件,因此也不會涉及到yin硬件驅動,所以也不會用到內核和驅動,另外有內核的是vm。linux

docker鏡像的製做

 docker鏡像製做分爲手工製做鏡像和自動製做鏡像(基於DockerFile)nginx

手工製做鏡像c++

下載鏡像並初始化系統web

基於某個鏡像之上從新制做,所以須要一個基礎鏡像,本次使用官方提供的centos基礎鏡像爲基礎。docker

[root@192 ~]# docker pull centosshell

[root@192 ~]# docker run -it  --name centos-base  centos /bin/bashapache

從新配置yum源ubuntu

[root@330ddc132509 yum.repos.d]#cd /etc/yum.repos.d/

[root@330ddc132509 yum.repos.d]#wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

[root@330ddc132509 yum.repos.d]#wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo

配置yum緩存

[root@330ddc132509 yum.repos.d]#yum makecache

yum安裝nginx

[root@330ddc132509 yum.repos.d]#yum install nginx -y

yum安裝一些經常使用的軟件

[root@330ddc132509 yum.repos.d]# yum install -y vim wget pcre pcre-devel zlib zlib-devel openssl openssl-devel iproute net-tools iotop

配置nginx,關閉nginx的後臺運行

[root@330ddc132509 yum.repos.d]# vim /etc/nginx/nginx.conf

 自定義web頁面

[root@330ddc132509 yum.repos.d]#vim /usr/share/nginx/html/index.html

[root@330ddc132509 yum.repos.d]#cat /usr/share/nginx/html/index.html

提交爲鏡像

在宿主機基於容器ID提交爲鏡像

[root@192 ~]# docker ps -a

[root@192 ~]# docker commit -m 'nginx-base image' 330ddc132509

 

 帶tag的鏡像提交

標記tag號,生產中比較經常使用,後期能夠根據tag標記啓動不一樣版本的image

[root@192 ~]# dokcer commit -m 'nginx image' 330ddc132509 nginx-base:v1

[root@192 ~]# docker images

從本身的鏡像啓動容器

[root@192 ~]# docker run  -d  -p 8886:80 --name nginx-88 nginx-base:v1 /usr/sbin/nginx

 

訪問測試

 

DockerFile製做yum版本的nginx鏡像

DockerFile能夠說是一種被Docker程序解釋的腳本,DockerFile是由一條條的命令組成的,每條命令對應linux下的一條命令,Docker程序將這些DockerFile指令再翻譯成真正的linux命令,其有本身的書寫方式和支持的命令,Docker程序讀取DockerFile並根據指令生成Docker鏡像,相比於手工製做鏡像的方式,DockerFile更能直觀的展現鏡像是怎麼產生的,有了DockerFile,當後期有額外的需求時,只要在以前的DockerFile添加或者修改響應指令的命令便可從新產生新的Docker鏡像,避免了重複手工製做鏡像的麻煩。

 下載鏡像並初始化

[root@192 ~]# docker pull centos

[root@192 ~]# cd /opt/ #建立目錄環境

[root@192 ~]# mkdir  dockerfile/{web/{/nginx,tomcat,jdk,apache},system/{centos,ubuntu,redhat}} -pv

[root@192 dockerfile]# cd web/nginx/

編寫DockerFile文件

[root@192 dockerfile]# vim ./Dockerfile            #生成鏡像的時候會在執行命令的當前目錄查找Dockerfile 文件,因此名稱不可以寫錯,並且D必須大寫

#My Dockerfile

##爲註釋行  跟shell腳本同樣

#除了註釋行之外的第一行,必須是From xxx (xxx是基礎鏡像名)

From centos #第一行定義基礎鏡像,若是本地沒有,會從遠程倉庫下載,第一行很重要

#鏡像的維護者信息

MAINTAINER  sakula 137841632@qq.com

###########其餘的可選參數################

#USER #指定容器運行時的用戶名和UID,後續的RUN命令也會使用這面指定用戶執行

#WORKDIR /a 

# WORKDIR b  #制定工做目錄 ,最終爲 /a/b

#VOLUME 設置主機掛在卷

#執行命令  將編譯安裝nginx的步驟執行一遍

 1 #My Dockerfile  2 FROM centos  3 MAINTAINER hexintong 137841632@qq.com  4 RUN yum install -y wget
 5 RUN wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
 6 RUN wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
 7 RUN yum install -y vim  tree lrzsz gcc gcc-c++ automake pcre pcre-devel zlib zlib-devel openssl openssl-devel iproute net-tools iotop  8 ADD nginx-1.8.1.tar.gz /usr/local/src/
 9 RUN cd /usr/local/src/nginx-1.8.1/ && ./configure --prefix=/usr/local/nginx  --with-http_sub_module && make && make install
10 RUN cd /usr/local/nginx/
11 ADD nginx.conf  /usr/local/nginx/conf/nginx.conf 12 RUN useradd nginx -s /sbin/nologin 13 RUN ln -sv /usr/local/nginx/sbin/nginx /usr/sbin/nginx 14 RUN echo "test nginx page." >/usr/local/nginx/html/index.html 15 EXPOSE 80 443
Dockerfile

[root@192 nginx]# docker build -t nginx.1.8.1:v3     #從Dockerfile生成doker鏡像

測試 dockerfile生成的鏡像

[root@192 nginx]# docker run -d -p 8822:80 --name nginx_v5 nginx.1.8.1:v3  nginx

 

 編譯過程當中使用的鏡像

 執行構建jdk鏡像

 1 [root@localhost jdk]# pwd
 2 /opt/dockerfile/web/jdk  3 [root@localhost jdk]# cat Dockerfile  4 #JDK 7 base centos7.5 1804
 5 FROM centos  6 MAINTAINER hexintong 137841632@qq.com  7 COPY jdk-7u79-linux-x64.rpm  /home/
 8 RUN cd /home/
 9 RUN pwd
10 RUN ls
11 RUN rpm -ivh /home/jdk-7u79-linux-x64.rpm 12 RUN ln -snf  /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo "Asia/Shanghai" >/etc/timezone 13 [root@localhost jdk]#

[root@localhost jdk]#docker build -t jdk7:v1 .

[root@localhost jdk]#docker images

從鏡像啓動,查看java環境是否正確,驗證時間是否正確

[root@localhost jdk]# docker run -it  jdk7:v2  bash

[root@localhost jdk]# java -version

 

[root@localhost jdk]# date
Tue Jul 10 10:56:12 CST 2018

鏡像的結構

相關文章
相關標籤/搜索