zoukankan      html  css  js  c++  java
  • docker学习笔记-2.docker镜像制作

     

    docker镜像制作

    docker镜像内核

    从docker镜像大小来说,一个比较小的镜像只有十几MB,而内核文件需要一百多兆。因此docker镜像没有内核。镜像再被启动为容器后将直接使用宿主机的内核,而镜像本身只提供相应的rootfs,即xitong系统正常运行所需要的用户空间的文件系统,比如/dev/,/proc/,/bin/,/etc/等目录。所以容器当中基本没有/boot/目录的,而/boot/当中保存的就是与内核相关的文件和目录。

    为什么没有内核?

     由于容器的启动和运行过程是直接使用宿主机的内核,所以没有直接调用物理硬件,所以也不会涉及到yin硬件驱动,因此也不会用到内核和驱动,另外有内核的是vm。

    docker镜像的制作

     docker镜像制作分为手工制作镜像和自动制作镜像(基于DockerFile)

    手工制作镜像

    下载镜像并初始化系统

    基于某个镜像之上重新制作,因此需要一个基础镜像,本次使用官方提供的centos基础镜像为基础。

    [root@192 ~]# docker pull centos

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

    重新配置yum源

    [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

    镜像的结构

  • 相关阅读:
    管理索引表:深入研究B树索引重建,合并,删除(理论篇3)
    关于ASP.NET中Membership进行权限管理不足的解决办法
    将VS2005中的.CS文件在网页中显示的方法
    在页面中直接设计TreeView的节点而不使用Web.Sitemap文件在运行时出错
    (转)动态管理ASP.NET DataGrid数据列
    在页面中直接设计TreeView的节点而不使用Web.Sitemap文件在运行时出错
    将VS2005中的.CS文件在网页中显示的方法
    三天没有更新我的BLOG
    三天没有更新我的BLOG
    (转)动态管理ASP.NET DataGrid数据列
  • 原文地址:https://www.cnblogs.com/hexintong/p/9285914.html
Copyright © 2011-2022 走看看