• docker-镜像制作


    三、镜像制作

    此镜像里面是没有内核的,镜像在被启动为容器后将直接使用宿主机 的内核,而镜像本身则只提供相应的 rootfs,即系统正常运行所必须的用户空间 的文件系统,比如/dev/,/proc,/bin, /etc 等目录,所以容器当中基本是没有/boot 目录的,而/boot 当中保存的就是与内核相关的文件和目录。 也不会涉及到硬件驱动,因此也用不上内核和驱动。

    3.1:手动制作yum版nginx镜像

    在宿主机
    docker pull centos:7.7.1908
    docker run -it -p 80:80 centos:7.7.1908
    在容器里
    [root@8c7a3f362bd6 /] 
    yum install epel-release -y
    yum install nginx vim net-tools -y
    vim  /etc/nginx/nginx.conf
    添加daemon off
    rm -rf /usr/share/nginx/html/index.html
    echo lou > index.html
    不要exit
    更换窗口
    在宿主机基于容器 ID 提交为镜像 
    root@ubuntu:~# docker ps
    CONTAINER ID        IMAGE               COMMAND             CREATED                                                                  STATUS              PORTS                NAMES
    8c7a3f362bd6        centos:7.7.1908     "/bin/bash"         11 minutes ago    
    带 tag 的镜像提交:                                                       
    root@ubuntu:~#  docker commit -a "loufangyi 895320177@qq.com" -m "nginx 1.16.1" 8c7a3f362bd6 centos-nginx:1.16.1                   sha256:e440a6085a7febb0e2a8381e113402406cfc6a716773a46790f49cfc43bc1385
    root@ubuntu:~# docker images
    REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
    centos-nginx        1.16.1              e440a6085a7f        23 seconds ago      444MB
    从自己镜像启动容器
    docker run -it -p 8080:80 centos-nginx:1.16.1 nginx

    测试:

    3.2:手动制作编译版本 nginx 1.16.1 镜像

    过程为在 centos 基础镜像之上手动编译安装 nginx,然后再提交为镜像。 

    下载镜像并初始化系统

    基于正在运行的容器
     yum install -y vim wget tree  lrzsz gcc gccc++ automake pcre pcre-devel zlib zlib-devel openssl openssl-devel iproute net-tools iotop  #安装基础包 
    cd /usr/local/src/ 
    wget http://nginx.org/download/nginx-1.16.1.tar.gz 
    tar xvf nginx-1.16.1.tar.gz 
    cd nginx-1.16.1 
    ./configure  --prefix=/apps/nginx 
    make && make install 
    在宿主机提交为镜像
    docker commit -a "loufangyi 895320177@qq.com" -m "make-nginx 1.16.1" c1fcfd739c16 centos-nginx:v1
    REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
    centos-nginx        v1                  afe839689cf2        54 seconds ago      452MB
    从自己的镜像启动容器:
    docker run -it -p 8008:80 centos-nginx:v1 /apps/nginx/sbin/nginx "-g daemon off"

    3.3:DockerFile 制作编译版 nginx 1.16.1 镜像

    首先在宿主机

    创建并进入到指定的 Dockerfile目录
    root@ubuntu:/opt/dockerfile# ll
    total 1296
    drwxr-xr-x 5 root root    4096 Feb 18 21:27 ./
    drwxr-xr-x 4 root root    4096 Feb 18 20:30 ../
    -rw-r--r-- 1 root root     623 Feb 18 21:27 Dockerfile  #生成的镜像的时候会在执行命 令的当前目录查找 Dockerfile 文件,所以名称不可写错,而且 D 必须大写 
    -rw-r--r-- 1 root root 1032630 Aug 14  2019 nginx-1.16.1.tar.gz
    drwxr-xr-x 2 root root    4096 Feb 18 21:14 picture/
    -rw-r--r-- 1 root root  262535 Feb 18 21:18 picture.zip
    drwxr-xr-x 5 root root    4096 Feb 18 20:30 system/
    drwxr-xr-x 6 root root    4096 Feb 18 20:30 web/

    编写 Dockerfile

    #"#"为注释,等于 shell 脚本的中#
    FROM centos:7.7.1908 #第一行先定义基础镜像,后面的本地有效的镜像名,如果本地没有会从远程仓库下载,第一行很重要 #MAINTAINER fangyilou 123456@qq.com LABEL maintainer="loufangyi <123456@qq.com>" #镜像维护者的信息 ENV password 123456 #设置容器变量,常用于想容器内传递用户密码 RUN yum install -y epel-release && yum install -y vim wget unzip gcc gcc-c++ automake pcre pcre-devel zlib zlib-devel openssl openssl-devel iproute net-tools iotop #执行的命令 ADD nginx-1.16.1.tar.gz /usr/local/src #ADD自动解压压缩包 RUN cd /usr/local/src/nginx-1.16.1 && ./configure --prefix=/apps/nginx && make && make install && rm -rf nginx-1.16.1 ADD picture.zip /apps/nginx/html RUN cd /apps/nginx/html && unzip picture.zip && rm -rf picture.zip EXPOSE 80 443 CMD ["/apps/nginx/sbin/nginx", "-g", "daemon off;"] #运行的命令,每个 Dockerfile 只能有一条, 如果有多条则只有最后一条被执行 

    执行镜像构建: 

    root@ubuntu:/opt/dockerfile# docker build -t nginx:v3 .

    查看是否生成本地镜像: 

    root@ubuntu:/opt/dockerfile# docker images
    REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
    nginx               v3                  91f34176bd3d        42 minutes ago      514MB

    从镜像启动容器:

    ot@ubuntu:/opt/dockerfile# docker run -it -p 8888:80 nginx:v3

    测试:

  • 相关阅读:
    MySQL
    LeetCode
    数据结构
    我的编程幻想曲,更新中
    快速排序
    C与C++的区别
    必须要使用列表初始化的几种情况
    析构中delete this
    指向自身类型的成员指针的初始化,this不属于类对象的一部分
    构造函数
  • 原文地址:https://www.cnblogs.com/lummg-DAY/p/12327426.html
Copyright © 2020-2023  润新知