【Docker】构建自定义镜像

news2024/11/14 20:59:36

文章目录

    • 1. 镜像制作的两种方法
    • 2. Commit构建自定义镜像
    • 3. Dockerfile构建镜像
    • 4. 镜像的分层结构
    • 5. Dockerfile基础指令
    • 6. Java服务器镜像构建
    • 7. Nginx镜像构建
    • 8. Redis镜像构建
    • 9. 快速部署MySQL并初始化

1. 镜像制作的两种方法

  • 基于Docker Commit制作镜像
  • 基于Dockerfile制作镜像,该方法为目前主流的方式

2. Commit构建自定义镜像

  • 启动并进入容器:docker run -it centos:7 /bin/bash
  • 在/home路径下创建test文件夹:mkdir /home/test
  • 安装ifconfig命令:yum -y install net-tools
  • 重启容器,查看容器的test文件夹还在不在:docker restart 67862569d4f7
  • 删除容器,再重新启动一个容器进入查看有没有这个test文件夹:docker rm 67862569d4f7 && docker run -it centos:7 /bin/bash

    发现test文件夹没有了

  • 构建镜像:
    • docker commit eeb6ee3f44bd mycentos:7
    • docker commit -a "Ricky" -m "mkdir /home/test" eeb6ee3f44bd mycentos:7
      • -a:标注作者
      • -m:注释
      • 查看详细镜像详细信息:docker inspect c98e30feab0f
    • 启动容器:docker run -itd c98e30feab0f /bin/bash
    • 进入容器:docker exec -it 2a4d38eca64f /bin/bash

3. Dockerfile构建镜像

  • Dockerfile
    # this is a dockerfile
    FROM centos:7
    MAINTAINER XD 123456@qq.com
    RUN echo "正在构建镜像!!!"
    WORKDIR /home/xdclass
    COPY 123.txt /home/xdclass
    RUN yum install -y net-tools
    
  • 构建:docker build -t mycentos:v2 .
  • 查看:docker images

4. 镜像的分层结构

在这里插入图片描述

  • 镜像层与容器层共享资源
  • 对容器的任何改动都是发生在容器层
  • 容器层是可读可写,而镜像层只读

5. Dockerfile基础指令

  • FROM:基于哪个镜像
  • MAINTAINER:注明作者
  • COPY:复制文件进入镜像(只能使用相对路径,不能用绝对路径)
  • ADD:复制文件进入镜像(加入文件是.tar.gz的压缩文件,会自动被解压,且源文件会被删除)
  • WORKDIR:指定工作目录,加入路径不存在会自动创建
  • ENV:设置环境变量
  • EXPOSE:暴露容器的端口
  • RUN:在构建镜像的时候执行,作用于镜像层
  • ENTRYPOINT:在容器启动的时候执行,作用于容器层,Dockerfile里面有多条时只允许执行最后一条
  • CMD:
    • 在容器启动的时候执行,作用域容器层,Dockerfile里有多条时只允许执行最后一条
    • 容器启动后执行默认的命令或者参数,允许被修改
  • 命令格式:
    • shell命令格式:RUN yum install -y net-tools
    • exec命令格式:RUN [“yum”, “install”, “-y”, “net-tools”]

6. Java服务器镜像构建

  • 文件准备:jdk-8u211-linux-x64.tar.gz和apache-tomcat-8.5.35.tar.gz放到宿主机目录下
  • 宿主机配置jdk
    export JAVA_HOME=/usr/local/jdk
    export JRE_HOME=$JAVA_HOME/jre
    export CLASSPATH=$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
    export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH
    
  • 写入到配置文件:vi /etc/profile
  • 更新当前环境变量:source /etc/profile
  • 检查:java --version
  • Dockerfile
    FROM centos:7
    ADD jdk-8u211-linux-x64.tar.gz /usr/local
    RUN mv /usr/local/jdk1.8.0_211 /usr/local/jdk
    ENV JAVA_HOME=/usr/local/jdk
    ENV JRE_HOME=$JAVA_HOME/jre
    ENV CLASSPATH=$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
    ENV PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH
    ADD apache-tomcat-8.5.35.tar.gz /usr/local
    RUN mv /usr/local/apache-tomcat-8.5.35 /usr/local/tomcat
    EXPOSE 8080
    ENTRYPOINT ["/usr/local/tomcat/bin/catalina.sh","run"]
    
  • 启动容器:docker run -itd -p 80:8080 -v /root/test/ROOT:/usr/local/tomcat/webapps/ROOT mycentos:jdk /bin/bash
  • 访问localhost:80,成功

7. Nginx镜像构建

  • 文件准备:nginx-1.16.0.tar.gz放到宿主机目录下
  • Dockerfile
    FROM centos:7
    ADD nginx-1.16.0.tar.gz /usr/local
    COPY nginx_install.sh /usr/local
    RUN sh /usr/local/nginx_install.sh
    EXPOSE 80
    
  • 安装Nginx的shell脚本nginx_install.sh,可以直接使用
    #!/bin/bash
    yum install -y gcc gcc-c++ make pcre pcre-devel zlib zlib-devel
    cd /usr/local/nginx-1.16.0
    ./configure --prefix=/usr/local/nginx && make && make install
    
  • 制作Nginx镜像:docker build -t mycentos:nginx .
  • Nginx镜像启动注意
    • 在容器里Nginx是以daemon方式启动,退出容器时,Nginx程序也会随着停止:/usr/local/nginx/sbin/nginx
    • 使用前台方式永久运行:/usr/local/nginx/sbin/nginx -g "daemon off;"
  • 启动容器:docker run -itd -p 80:80 mycentos:nginx /usr/local/nginx/sbin/nginx -g "daemon off;"
  • 访问localhost:80,成功

8. Redis镜像构建

  • 文件准备:redis-4.0.9.tar.gz放到宿主机目录下
  • Dockerfile
    FROM centos:7
    ADD redis-4.0.9.tar.gz /home
    COPY redis_install.sh /home
    RUN sh /home/redis_install.sh
    ENTRYPOINT /usr/local/redis/bin/redis-server /usr/local/redis/conf/redis.conf
    
  • 安装Redis的脚本redis_install.sh
    #!/bin/bash
    yum install -y gcc gcc-c++ make openssl openssl-devel
    cd /home/redis-4.0.9
    make && make PREFIX=/usr/local/redis install
    mkdir -p /usr/local/redis/conf/
    cp /home/redis-4.0.9/redis.conf /usr/local/redis/conf/
    sed -i '69s/127.0.0.1/0.0.0.0/' /usr/local/redis/conf/redis.conf
    sed -i '88s/protected-mode yes/protected-mode no/' /usr/local/redis/conf/redis.conf
    
  • 测试Redis
    • 启动容器:docker run -itd -p 6380:6379 mycentos:redis #6380是宿主机端口,6379是容器的端口
    • 进入容器:docker exec -it 9b402baeaba7 /bin/bash
    • 宿主机连接Redis:/usr/local/redis/bin/redis-cli -p 6380
    • 验证:
      127.0.0.1:6380> set name Ricky
      OK
      127.0.0.1:6380> get name
      "Ricky"
      127.0.0.1:6380>
      

9. 快速部署MySQL并初始化

  • 将MySQL镜像拉到本地:docker pull mysql:5.7
  • 启动:docker run --name some-mysql -p 3307:3306 -e MYSQL_ROOT_PASSWORD=abc123456 -d mysql:5.7
  • 进入容器:docker exec -it 4336ae28fbfa env LANG=C.UTF-8 /bin/bash
  • Dockerfile
    FROM mysql:5.7
    WORKDIR /docker-entrypoint-initdb.d
    ENV LANG=C.UTF-8
    ADD init.sql .
    

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/132010.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

WIKO+鸿蒙生态:海外品牌中国化的新范式

想要理解快速变化的科技行业,往往要锚定一些标杆型企业,它们的风吹草动,可能就是行业接下来的地动山摇。就像互联网绕不过BAT,手机行业的趋势也少不了鸿蒙的消息。最近,有一件鸿蒙生态的新闻是比较特别的。我们报道过很…

java反射基础

Java反射机制提供的功能 在运行时判断任意一个对象所属的类 在运行时构造任意一个类的对象 在运行时判断任意一个类所具有的成员变量和方法 在运行时获取泛型信息 在运行时调用任意一个对象的成员变量和方法 在运行时处理注解 生成动态代理 Java反射优点和缺点 优点: …

Linux free命令详解,Linux查看内存使用情况

「作者主页」:士别三日wyx 「作者简介」:CSDN top100、阿里云博客专家、华为云享专家、网络安全领域优质创作者 free一、常用操作二、字段解释1、free和available的区别?2、交换分区的作用?三、内存使用情况分析技巧四、原理&…

人脸识别检测项目实战

文章目录 一、项目介绍 二、环境配置 三、项目知识储备 导入图片灰度转换 修改图片尺寸的大小矩形检测框图绘制 人脸检测识别 多个人脸检测效果对人脸视频进行检测数据集录入训练数据人脸识别过程 项目介绍 人脸识别在现代化中应用较为广泛,比如人脸考勤系统等&…

Python爬虫——Scrapy 的基本使用

Scrapy 框架中创建项目、查看配置信息&#xff0c;以及运行爬虫程序都是通过指令完成。 常用指令如下所示&#xff1a; 指令格式说明startprojectscrapy startproject <项目名>创建新项目genspiderscrapy genspider <爬虫文件名> <访问的域名>新建爬虫文件…

torchnet package (1)

torchnet torchnet用于torch的代码复用和模块化编程框架,主要包含四个类 Dataset: 以不同的方式对数据进行预处理.Engine: 训练/测试机器学习方法Meter评估方法性能Log日志. Documentation torchnet的调用 local tnt require ‘torchnet’ tnt.Dataset() torchnet提供了多…

VueJs中的reactive函数

前言一个基本类型的数据,想要变成响应式数据,那么需要通过ref函数包裹,而如果是一个对象的话,那么需要使用reactive函数reactive可将对象变成响应式将一个对象类型的数据变为响应式,如果是基本数据类型,那用refconst 代理对象 reactive(被代理对象)接收一个对象(或数组),返回一…

一个DevOps/SRE/运维的2022年碎碎语

人们常说&#xff1a;情商高的人会说话。实际上他们的意思是对人说人话&#xff0c;对鬼说鬼话&#xff0c;这样的人才有前途。很长时间里&#xff0c;我一直以为我无法理解他们为什么要推崇心口不一。后来&#xff0c;我知道了。我不是不理解。我只是不服气。这样的”不服气“…

box-shadow 高阶玩法:纯 CSS 画蒙娜丽莎和粒子星空

想必写过 CSS 的同学都用过 box-shadow&#xff0c;它可以给元素设置阴影&#xff0c;增加立体效果。 比如说这样&#xff1a; 但它能做的可不只是阴影&#xff0c;还可以用来做出很多有趣的效果&#xff1a; 比如画蒙娜丽莎&#xff1a; 画星空&#xff1a; 这些效果都是 bo…

尚医通-医院查询接口-上传科室接口(十九)

目录 &#xff08;1&#xff09;医院查询接口-功能实现 &#xff08;2&#xff09;上传科室接口-功能实现 &#xff08;1&#xff09;医院查询接口-功能实现 接口文档&#xff1a; 4.4.查询医院 医院信息 4.4.1.提交地址 http://localhost/api/hosp/hospital/show 在ApiC…

《东晋门阀政治》

《东晋门阀政治》 关于作者 田余庆&#xff0c;北京大学历史系教授&#xff0c;国务院古 籍整理出版规划小组成员&#xff0c;是魏晋南北朝 政治史专家。他在学术界拥有重要的地位&#xff0c;参加编著的《中国史纲要》曾获国家 教委特等奖。著有《秦汉魏晋史探微》 《拓跋史…

ubuntu 22.04上vim-plug插件管理器,相关插件与ROS2的安装

前言 最近&#xff0c;新配置了一版虚拟机&#xff0c;因为学校已经配置好环境的虚拟机忘了带回来&#xff0c;我还想系统的学习一下ROS&#xff0c;并将其用于机械臂的控制&#xff0c;因此用了新的方式配置了vim&#xff0c;并将树莓派raspberry buster系统配置上了ROS1的环…

Flink系列Table API和SQL之:滚动窗口、滑动窗口、累计窗口、分组聚合

Flink系列Table API和SQL之&#xff1a;窗口一、窗口(Window)二、分组窗口(Group Window)三、窗口表值函数(Windowing TVFs)1.滚动窗口(TUMBLE)2.滑动窗口(HOP)3.累计窗口(CUMULATE)四、分组聚合五、分组聚合实现代码六、分组窗口聚合代码实现七、窗口聚合&#xff1a;滚动窗口…

【SCL】博图SCL应用之音乐喷泉

使用Scl语言编写博图应用&#xff1a;音乐喷泉 文章目录 目录 一、音乐喷泉 1.控制要求 2.I/O分配 3.编写程序 4.效果和完整代码 二、装配流水线模拟控制&#xff08;练习&#xff09; 1.控制要求 2.场景 前言 承接上文&#xff0c;这里写一下上一篇的练习题 音乐喷泉应用案…

使用Typora+PicGo+SM.MS实现本地博客图片自动上传

使用TyporaPicGoSM.MS实现本地博客图片自动上传 Typora&#xff1a;一款Markdown 编辑器 PicGo: 一个用于快速上传图片并获取图片 URL 链接的工具. SM.MS: 一个图床网站&#xff0c;注册后有5G免费空间 为什么要让本地图片自动上传 对于一个随时随刻都有可能在文章中贴代码的计…

快来领取你的JavaScript正则表达式速查表

如果我们想对字符串进行相关&#xff08;增、删、改、查、检索&#xff09;操作&#xff0c;就可以用接下来的正则表达式实现 什么是正则表达式 正则表达式是用于匹配字符串中字符组合的模式正则表达式通常被用来检索、替换那些符合某个模式&#xff08;规则&#xff09;的文本…

家装中,你最后悔的事是什么?上海极家装修公司简介!

家装中&#xff0c;你最后悔的事是什么&#xff1f;上海极家装修公司简介&#xff01;接触过很多业主&#xff0c;就没有不后悔的!至于原因&#xff0c;因为总会出现各种“考虑不周”&#xff0c;有些真的是失之毫厘差之千里&#xff01; 下面上海极家装修公司简介&#xff01;…

Cadence每日一学_12 | 使用 Padstack Editor 制作贴片焊盘和通孔焊盘

最近在学习小马哥的Cadence课程&#xff0c;该系列课程为学习笔记&#xff1a;使用Cadence Allegro绘制小马哥DragonFly四轴飞行器(STM32F4主控)PCB四层板教程。 文章目录一、获取焊盘封装尺寸的途径二、Padstack Editor三、绘制贴片焊盘&#xff08;以电阻焊盘为例&#xff09…

Odoo 16 企业版手册 - 库存管理之产品类别

产品类别 您可以使用Odoo 库存模块中提供的产品类别功能对产品进行分类。为了执行各种产品操作&#xff0c;必须在Odoo中定义产品类别。Odoo将使产品更容易找到&#xff0c;因为它允许您按产品类别进行筛选。用户可以从库存模块的「配置」菜单访问「产品类别」窗口&#xff0c;…

【Python】sklearn机器学习之Birch聚类算法

文章目录基本原理sklearn调用基本原理 BIRCH&#xff0c;即Balanced Iterative Reducing and Clustering Using Hierarchies&#xff0c;利用分层的平衡迭代规约和聚类&#xff0c;特点是扫描一次数据就可以实现聚类&#xff0c; 而根据经验&#xff0c;一般这种一遍成功的算…