10.dockerfile自动构建镜像

dockerfile自动构建镜像

类似ansible剧本,大小几kb
手动做镜像:大小几百M+

首先创建一个dockerfile的路径,便于在路径下存在多个路径每个路径下都是dockerfile命名的脚本
注释:文件必须为:dockerfile或者Dockerfile
在这里插入图片描述

因我这里要构建一个sshd服务的dockerfile,所以操作形式以上图为例子

dockerfile 支持自定义容器的初始命令
注释:构建文件内指令每一步都会启动以临时的容器ID,执行完后将该临时容器ID删除,下一步又启一个临时容器ID依次类推
dockerfile主要组成部分:

基础镜像信息       FROM  centos:6.9
制作镜像操作指令   RUN yum install openssh-server -y
容器启动时执行指令 CMD ["/bin/bash"]

dockerfile常用指令:

FROM 这个镜像的妈妈是谁?(指定基础镜像)
MAINTAINER 告诉别人,谁负责养它?(指定维护者信息,可以没有)
LABLE      描述,标签RUN 你想让它干啥(在命令前面加上RUN即可)
ADD 给它点创业资金(会自动解压tar)  制作docker基础的系统镜像;从宿主机向容器发送文件
WORKDIR 我是cd,今天刚化了妆(设置当前工作目录)
VOLUME 给它一个存放行李的地方(设置卷,挂载主机目录)
EXPOSE 它要打开的门是啥(指定对外的端口)(-P 随机端口)
CMD 奔跑吧,兄弟!(指定容器启动后的要干的事情)(容易被替换)

dockerfile其他指令:

COPY 复制文件(不会解压)rootfs.tar.gz
ENV  环境变量
ENTRYPOINT (与CMD一样用法)容器启动后执行的命令(无法被替换,启容器的时候指定的命令,会被当成参数)

参考其他的dockerfile
官方dockerfile或者时速云镜像广场

制作dockerfile镜像,如nginx镜像
制作之前需要注意事项:
1.构建镜像文件必须是"dockerfile"或者"Dockerfile"为名的文件
2.提前准备压缩包或者用到的文件:发送到容器里
构建命令:

[root@docker-lb ~]# docker build --network -t 起一个名字:标签 .
#注释--network  是为了加速用到的,不然就很慢

dockerfile单服务ssh自动构建

构建脚本:

[root@yunlong /data/dockerfile/centos6.9-ssh]# cat dockerfile  
#!/bin/bash
FROM centos:6.9
RUN curl -o /etc/yum.repos.d/CentOS-Base.repo https://www.xmpan.com/Centos-6-Vault-Aliyun.repo
RUN yum install openssh-server -y
RUN /etc/init.d/sshd restart
RUN echo 123456 | passwd --stdin rootCMD ["/usr/sbin/sshd","-D"] #逗号表示中间有空格

执行docker构建命令

docker build --network=host -t centos6.9-ssh:v1 .

在这里插入图片描述

下图构建成功
在这里插入图片描述

ssh镜像构建完成
在这里插入图片描述

基础构建完成后的镜像启动容器

docker run -d -p 2022:22 centos6.9-ssh:v1

在这里插入图片描述

测试ssh连接成功
在这里插入图片描述

dockerfile双服务ssh、nginx自动构建

复制之前的dockerfile脚本加路径;
编辑构建脚本内容

[root@yunlong /data/dockerfile/centos6.9-ssh-nginx]# cat dockerfile
#!/bin/bash
FROM centos:6.9
RUN curl -o /etc/yum.repos.d/CentOS-Base.repo https://www.xmpan.com/Centos-6-Vault-Aliyun.repo
RUN curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-archive-6.repo
RUN yum install openssh-server nginx  -y
RUN /etc/init.d/sshd restart
RUN echo 123456 | passwd --stdin root
ADD init.sh /init.sh
CMD ["/bin/bash","/init.sh"]

添加一个init.sh启动服务脚本,服务中并且能夯筑容器的脚本

[root@yunlong /data/dockerfile/centos6.9-ssh-nginx]# cat init.sh 
#!/bin/bash
service sshd restart
nginx -g 'daemon off;'

操作如下图
在这里插入图片描述

开始在当前路径下进行构建镜像

docker build --network=host -t centos6.9-ssh-nginx:v3 .

在这里插入图片描述

构建成功
在这里插入图片描述

镜像已经存在
在这里插入图片描述

根据构建完成的镜像启动容器

docker run -d -p 3022:22 -p 80:80 centos6.9-ssh-nginx:v3

容器启动成功,容器一直存活
在这里插入图片描述

测试验证,ssh连接和访问nginx成功。
在这里插入图片描述

dockerfile自动构建kod服务

编辑kod构建脚本

[root@yunlong /data/dockerfile/kod]# cat dockerfile 
#!/bin/bash
FROM centos:6.9
RUN curl -o /etc/yum.repos.d/CentOS-Base.repo https://www.xmpan.com/Centos-6-Vault-Aliyun.repo
RUN curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-archive-6.repo
RUN yum install  nginx php-fpm php-gd php-mbstring unzip -y
ADD kodexplorer4.40.zip /opt/
WORKDIR /opt/
RUN unzip kodexplorer4.40.zip
RUN chown -R nginx:nginx .
ADD nginx.conf /etc/nginx/nginx.conf
ADD www.conf /etc/php-fpm.d/www.conf
ADD init.sh /init.sh
CMD ["/bin/bash","/init.sh"]

编辑容器中启动服务脚本

[root@yunlong /data/dockerfile/kod]# cat init.sh 
#!/bin/bash 
service php-fpm restart
nginx -g 'daemon off;'

编辑好的nginx配置文件,便于发送到容器中去

[root@yunlong /data/dockerfile/kod]# cat nginx.conf  
worker_processes  1;
events {worker_connections  1024;
}
http {include       mime.types;default_type  application/octet-stream;sendfile        on;keepalive_timeout  65;server {listen       80;server_name  localhost;root   /opt;index  index.php index.html index.htm;location / {}location ~ \.php$ {fastcgi_pass   127.0.0.1:9000;fastcgi_index  index.php;fastcgi_param  SCRIPT_FILENAME  /opt$fastcgi_script_name;include        fastcgi_params;}}
}

因为安装php服务,所以要将php配置文件中用户修改为nginx即可,www.conf配置需要到有php服务的系统取,我为了方便就不取了。
还要有kodexplorer文件包,也是一并发送到容器中去
在这里插入图片描述

一起准备就绪,开始构建镜像

[root@yunlong /data/dockerfile/kod]# docker build --network=host -t kod:v2 .

在这里插入图片描述

构建镜像成功
在这里插入图片描述

查看构建完成镜像
在这里插入图片描述

根据构建镜像启动容器
在这里插入图片描述

测试验证服务,宿主机ip地址成功查看kod服务
在这里插入图片描述

nginx编译安全构建脚本:

[root@docker-lb ~]# cat dockerfile
#!/bin/bash
## cd /usr/local/
## cat Dockerfile
FROM centos:7
LABEL maintainer="Quyunlong <yunlong.qu@riversecurity.com>"
RUN yum install -y epel-release && yum install -y vim wget pcre pcre-devel zlib zlib-devel openssl openssl-devel iproute net-tools iotop gcc# 提前下载好nginx安装包,放到/usr/local目录下
ADD nginx-1.16.0.tar.gz /usr/local/src
# 进入到容器指定目录,执行编译安装
RUN cd /usr/local/src/nginx-1.16.0 && ./configure --prefix=/apps/nginx && make && make install && rm -rf nginx-1.16.0# 在/usr/local目录下编辑好nginx.conf文件,添加到容器内nginx服务安装位置
ADD nginx.conf /apps/nginx/conf/EXPOSE 80 443CMD ["/apps/nginx/sbin/nginx", "-g", "daemon off;"]

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于深度学习的中文标点预测模型-中文标点重建(Transformer模型)【已开源】

基于深度学习的中文标点预测模型-中文标点重建&#xff08;Transformer模型&#xff09;提供模型代码和训练好的模型 前言 目前关于使用深度学习对文本自动添加标点符号的研究并不多见&#xff0c;已知的开源项目也较少&#xff0c;而对该领域的详细介绍更是稀缺。然而&#x…

【vscode-快捷键 一键JSON格式化】

网上有很多JSON格式化工具&#xff0c;也有很多好用的在线json格式化工具。但是其实Vscode里面的可以直接格式化JSON&#xff0c;这里分享一个我常用的小插件 Prettify JSON 未格式化的JSON数据 召唤出命令行&#xff0c;输入prettify JSON 即可! ✿✿ヽ(▽)ノ✿

OpenAI模型规范概览

这是OpenAI对外分享的模型规范文档&#xff08;Model Spec&#xff09;&#xff0c;它定义了OpenAI希望在API接口和ChatGPT&#xff08;含GPT系列产品&#xff09;中模型的行为方式&#xff0c;这也是OpenAI超级对齐团队奉行的行为准则&#xff0c;希望能对国内做RLHF的同学有帮…

力扣爆刷第148天之贪心算法五连刷(区间合并)

力扣爆刷第148天之贪心算法五连刷&#xff08;区间合并&#xff09; 文章目录 力扣爆刷第148天之贪心算法五连刷&#xff08;区间合并&#xff09;一、406. 根据身高重建队列二、452. 用最少数量的箭引爆气球三、435. 无重叠区间四、763. 划分字母区间五、56. 合并区间六、738.…

安卓约束性布局学习

据说这个布局是为了解决各种布局过度前套导致代码复杂的问题的。 我想按照自己想实现的各种效果来逐步学习&#xff0c;那么直接拿微信主页来练手&#xff0c;用约束性布局实现微信首页吧。 先上图 先实现顶部搜索框加号按钮 先实现 在布局中添加一个组件&#xff0c;然后摆放…

【java】速度搭建一个springboot项目

使用软件&#xff1a;IDEA&#xff0c;mysql 使用框架&#xff1a;springboot mybatis-plus druid 坑点 使用IDEA搭建一个springboot项目的时候&#xff0c;需要考虑一下IDEA版本支持的JDK版本以及maven版本。否则再构建项目&#xff0c;引入pom的时候就会报错。 需要检查…

PostgreSQL基础(十):PostgreSQL的并发问题

文章目录 PostgreSQL的并发问题 一、事务的隔离级别 二、MVCC PostgreSQL的并发问题 一、事务的隔离级别 在不考虑隔离性的前提下&#xff0c;事务的并发可能会出现的问题&#xff1a; 脏读&#xff1a;读到了其他事务未提交的数据。&#xff08;必须避免这种情况&#xf…

docker命令 docker ps -l (latest)命令在 Docker 中用于列出最近一次创建的容器

文章目录 12345 1 docker ps -l 命令在 Docker 中用于列出最近一次创建的容器。具体来说&#xff1a; docker ps&#xff1a;这个命令用于列出当前正在运行的容器。-l 或 --latest&#xff1a;这个选项告诉 docker ps 命令只显示最近一次创建的容器&#xff0c;不论该容器当前…

OpenAI发表研究论文 介绍了一种逆向工程AI模型工作原理的方法

ChatGPT 开发商 OpenAI 构建人工智能的方法本周遭到了前员工的抨击&#xff0c;他们指责该公司利用可能有害的技术冒不必要的风险。今天&#xff0c;OpenAI 发布了一篇新的研究论文&#xff0c;目的显然是为了表明它在通过提高模型的可解释性来应对人工智能风险方面的认真态度。…

计算机组成原理(一)

冯诺依曼机器的特征&#xff1a; 指令和数据以同等的地位存储在存储器当中指令和数据都是二进制指令和数据都是保存在存储器当中的 存储字 每个存储单元中的数据&#xff0c;称为存储字 存储字长 存储单元能够存储的二进制数据的长度 在一个8位系统中&#xff0c;字长是…

【C++进阶】深入STL之list:模拟实现深入理解List与迭代器

&#x1f4dd;个人主页&#x1f339;&#xff1a;Eternity._ ⏩收录专栏⏪&#xff1a;C “ 登神长阶 ” &#x1f921;往期回顾&#x1f921;&#xff1a;初步了解 list &#x1f339;&#x1f339;期待您的关注 &#x1f339;&#x1f339; ❀STL之list &#x1f4d2;1. list…

计算机的存储规则

计算机中的数据只有三类&#xff1a;Text 文本&#xff0c;Image 图片&#xff0c;Sound 声音。 文本包括数字、字母和汉字等。 视频是图片和声音的组合。 在计算机中&#xff0c;任何数据都是以二进制的形式来存储的。 数字的存储&#xff1a;转换为二进制进行存储。 字符…

[线程与网络] 网络编程与通信原理(六):深入理解应用层http与https协议(网络编程与通信原理完结)

&#x1f338;个人主页:https://blog.csdn.net/2301_80050796?spm1000.2115.3001.5343 &#x1f3f5;️热门专栏:&#x1f355; Collection与数据结构 (92平均质量分)https://blog.csdn.net/2301_80050796/category_12621348.html?spm1001.2014.3001.5482 &#x1f9c0;Java …

【Java面试】九、微服务篇-SpringCloud(上)

文章目录 1、SpringCloud五大组件2、服务注册和发现2.1 Eurake2.2 Eurake和Nacos的区别 3、Ribbon负载均衡3.1 策略3.2 自定义负载均衡策略 4、服务雪崩与熔断降级4.1 服务雪崩4.2 服务降级4.3 服务熔断 5、服务限流5.1 Nginx限流5.2 网关限流 6、微服务监控7、面试 1、SpringC…

qq号码采集软件

寅甲QQ号码采集软件, 一款采集QQ号、QQ邮件地址&#xff0c;采集QQ群成员、QQ好友的软件。可以按关键词采集&#xff0c;如可以按地区、年龄、血型、生日、职业等采集。采集速度非常快且操作很简单。

【TIPs】 Visual Stadio 2019 中本地误使用“git的重置 - 删除更改 -- hard”后,如何恢复?

环境&#xff1a; VS 2019Windows10本地版本管理&#xff08;非远程&#xff09; 前言&#xff1a; git 在Visual Stadio 2019中集成了git的版本管理&#xff0c;在本地用来做版本管理&#xff0c;本来比较好用。 不过有一次&#xff0c;由于拿最初始的版本的时候&#xf…

C++教程(003):运算符

3 运算符 作用&#xff1a;用于执行代码的运算 我们主要讲解以下运算符&#xff1a; 运算符类型作用算术运算符用于处理四则运算赋值运算符用于将表达式的值赋给变量比较运算符用于表达式的比较&#xff0c;并返回一个真值或假值逻辑运算符用于根据表达式的值返回真值或假值 …

swaggerHole:针对swaggerHub的公共API安全扫描工具

关于swaggerHole swaggerHole是一款针对swaggerHub的API安全扫描工具&#xff0c;该工具基于纯Python 3开发&#xff0c;可以帮助广大研究人员检索swaggerHub上公共API的相关敏感信息&#xff0c;整个任务过程均以自动化形式实现&#xff0c;且具备多线程特性和管道模式。 工具…

TCP攻击是怎么实现的,如何防御?

TCP&#xff08;Transmission Control Protocol&#xff09;是互联网协议族中的重要组成部分&#xff0c;用于在不可靠的网络上提供可靠的数据传输服务。然而&#xff0c;TCP协议的一些特性也使其成为攻击者的目标&#xff0c;尤其是DDoS&#xff08;Distributed Denial of Ser…