zoukankan      html  css  js  c++  java
  • 七、自己定制一个docker镜像

    制作docker镜像步骤:

    1:启动容器安装软件服务,启动一个基础镜像,并在基础惊险各种安装相应的服务(如:nginx、php等等)

    2:将安装好服务的容器commit提交为一个新的镜像

    3:启动新容器来测试新提交的镜像

    案例:

    使用centos7来制作一个nginx的新镜像

    基础镜像选择:ansible/centos7-ansible

    第一步:启动基础镜像

    [root@inode3 ~]# docker run -d ansible/centos7-ansible /usr/bin/tail -F /var/log/access.log
    a4178be2a23f4c437b692ea678cce50292c6541e98dc7690064be32062c3b4c6
    [root@inode3 ~]# docker ps
    CONTAINER ID        IMAGE                     COMMAND                  CREATED             STATUS              PORTS               NAMES
    a4178be2a23f        ansible/centos7-ansible   "/usr/bin/tail -F /v…"   6 seconds ago       Up 5 seconds                            zen_panini
    注意:启动基础镜像时,一定要将其夯住,否则在制作过程中,不小心把xshell窗口关闭了,前面做的工作就白废了。

    第二步:进入启动的基础镜像中

    [root@inode3 ~]# docker exec -it a4178be2a23f /bin/bash
    [root@a4178be2a23f ansible]# 

    第三步:开始部署nginx服务,这里使用yum来安装并启动nginx服务

    [root@a4178be2a23f ansible]# yum install -y nginx
    [root@a4178be2a23f ansible]# /usr/sbin/nginx
    [root@a4178be2a23f ansible]# ps -ef |grep nginx
    root        139      0  0 14:01 ?        00:00:00 nginx: master process /usr/sbin/nginx
    nginx       140    139  0 14:01 ?        00:00:00 nginx: worker process
    启动服务时,因为基础镜像没有systemctl的权限,最好使用全路径来启动服务
    
    使用基础镜像来安装的,不会有index.html页面的,需要我们手动来创建页面,也可以使用挂载volume数据卷来提供访问页面
    echo "welcome to nginx_centos7 docker " > /usr/share/nginx/html/index.html

    第四步:编写容器启动脚本,注意一定要有一定目录可以夯住,否则容器会一启动就关闭

    万能的夯住命令: tail -F /var/log/access.log
    无论/var/log/access.log是否存在,都可以夯住
    容器启动脚本
    vim /init.sh
    #/bin/bash
    /usr/sbin/nginx
    /usr/bin/tail -F /var/log/access.log

    第五步:commit提交新镜像名称为nginx_centos7:v1

    docker commit "制作好的容器的CONTAINER ID" 新镜像名字:版本
    [root@inode3 ~]# docker commit a4178be2a23f nginx_centos7:v1
    sha256:daa06cb05db5c341877855cdb07090717708f57ceef51efe9cf15f3fb8db823d
    [root@inode3 ~]# docker images
    REPOSITORY                TAG                 IMAGE ID            CREATED             SIZE
    nginx_centos7             v1                  daa06cb05db5        6 seconds ago       630MB
    nginx                     latest              a1523e859360        9 days ago          127MB
    busybox                   latest              6d5fcfe5ff17        2 months ago        1.22MB
    centos                    6.9                 2199b8eb8390        11 months ago       195MB
    ansible/centos7-ansible   latest              688353a31fde        3 years ago         447MB
    
    新镜像制作完成

    第六步:启动一个为web1的容器来测试新镜像

     
    注意:启动新容器后面的夯住的命令,要为我们在容器中创建的init.sh脚本,不然nginx服务无法启动
    [root@inode3 ~]# docker run -d -p 80:80 --name web1 nginx_centos7:v1 /bin/bash /init.sh
    4ba76336ff926123fd54a87bb52ea095ee1e802b9e24e1de2b96c5a9d247411d
    [root@inode3 ~]# docker ps
    CONTAINER ID        IMAGE                     COMMAND                  CREATED             STATUS              PORTS                NAMES
    4ba76336ff92        nginx_centos7:v1          "/usr/bin/tail -F /v…"   3 seconds ago       Up 2 seconds        0.0.0.0:80->80/tcp   web1
    
    访问web1容器
    [root@inode3 ~]# curl 192.168.32.103 
    welcome to nginx_centos7 docker 
  • 相关阅读:
    Eclipse JSP/Servlet 环境搭建
    1,有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?
    Electron-vue实战(二)— 请求Mock数据渲染页面
    Electron-vue实战(一)—搭建项目与安装Element UI
    Electron-vue实战(三)— 如何在Vuex中管理Mock数据
    vue学习笔记(六)— 关于Vuex可以这样简单理解
    vue学习笔记(五)— 组件通信
    OpenLayers学习笔记(十二)— 飞机速度矢量线预测(二)
    QML学习笔记(八)— QML实现列表侧滑覆盖按钮
    重学JavaScript
  • 原文地址:https://www.cnblogs.com/yaokaka/p/14178815.html
Copyright © 2011-2022 走看看