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

    镜像的结构

  • 相关阅读:
    UVA
    UVA
    模板——扩展欧几里得算法(求ax+by=gcd的解)
    UVA
    模板——2.2 素数筛选和合数分解
    模板——素数筛选
    Educational Codeforces Round 46 (Rated for Div. 2)
    Educational Codeforces Round 46 (Rated for Div. 2) E. We Need More Bosses
    Educational Codeforces Round 46 (Rated for Div. 2) D. Yet Another Problem On a Subsequence
    Educational Codeforces Round 46 (Rated for Div. 2) C. Covered Points Count
  • 原文地址:https://www.cnblogs.com/hexintong/p/9285914.html
Copyright © 2011-2022 走看看