Dockerfile制作镜像与搭建LAMP环境

1、编写Dockerfile制作Web应用系统nginx镜像,生成镜像nginx:v1.1,并推送其到私有仓库。

具体要求如下:
(1)基于centos基础镜像;
(2)指定作者信息;
(3)安装nginx服务,将提供的dest目录(提供默认主页index.html)传到镜像内,并将dest目录内的前端文件复制到nginx的工作目录;
(4)暴露80端口;
(5)设置服务自启动。
(6)验证镜像。

1)创建nginx目录

2)进入目录,创建并编写Dockerfile文件

[root@localhost nginx]# cat Dockerfile 
FROM centos:7
MAINTAINER "LL <ll2738ii@163.com>"

ADD http://nginx.org/download/nginx-1.22.1.tar.gz /usr/local/src
COPY index.html /usr/share/nginx/

EXPOSE 80

CMD ["/usr/sbin/nginx", "-g", "daemon off;"]

  • FROM centos:7:指定基础镜像为 CentOS 7。
  • MAINTAINER "LL <***>":设置镜像的维护者为 LL,电子邮件为 ***
  • ADD ***/download/nginx-1.22.1.tar.gz /usr/local/src:从指定的 URL 下载 Nginx 1.22.1 源代码并将其添加到容器的 /usr/local/src 目录中。
  • COPY index.html /usr/share/nginx/:将本地 index.html 文件复制到容器的 /usr/share/nginx/ 目录中。
  • EXPOSE 80:将容器的 80 端口暴露给外部访问。
  • CMD ["/usr/sbin/nginx", "-g", "daemon off;"]:设置容器启动时运行的命令。在本例中,该命令启动了 Nginx 服务并将其设置为前台运行(daemon off)。

 3)构建镜像

docker build -t nginx:v1.1 ./

以下是这个命令的解释:

  • `docker build`:这是 Docker 构建镜像的命令。
  • `-t nginx:v1.1`:此选项用于为镜像指定名称和标签。
  • `./`:此选项指定 Dockerfile 的位置。`.` 表示当前目录。Docker 将在此目录下查找名为 `Dockerfile` 的文件。

4)登录harbor

docker login 192.168.136.138

 5)给镜像打上标签

docker tag nginx:v1.1 192.168.136.138:5000/test/nginx:v1.1

 注:这里的test是我在私有仓库创建的项目。

 

 6)推送镜像

docker push 192.168.136.138:5000/test/nginx:v1.1

 harbor查看到推送的镜像

2、Dockerfile快速搭建自己专属的LAMP环境,生成镜像lamp:v1.1,并推送到私有仓库。

具体要求如下:
(1)基于centos:6基础镜像;
(2)指定作者信息;
(3)安装httpd、mysql、mysql-server、php、php-mysql、php-gd;
(4)暴露80和3306端口;
(5)设置服务自启动。
(6)验证镜像。

1)创建目录

 2)创建并编写Dockerfile文件

[root@docker2 lamp]# cat Dockerfile 
FROM centos:6
MAINTAINER "LL <ll2738ii@163.com>"

RUN yum install -y httpd mysql mysql-server php php-mysql php-gd

EXPOSE 80/tcp
EXPOSE 3306/tcp

CMD ["/bin/bash","-c", "service httpd start && service mysqld start && tail -f /dev/null"]
  • `FROM centos:6`:基于CentOS 6作为基础镜像。
  • `MAINTAINER "LL <ll2738ii@163.com>"`:指定作者信息。
  • `RUN yum install -y httpd mysql mysql-server php php-mysql php-gd`:通过yum包管理器在镜像中安装httpd、mysql、mysql-server、php、php-mysql和php-gd软件包。
  • `EXPOSE 80/tcp`:暴露80端口,以便容器外的其他服务可以访问容器内的httpd服务。
  • `EXPOSE 3306/tcp`:暴露3306端口,以便容器外的其他服务可以访问容器内的MySQL服务。
  • `CMD ["/bin/bash","-c", "service httpd start && service mysqld start && tail -f /dev/null"]`:在容器启动时以交互式终端的方式运行bash,并执行`service httpd start`和`service mysqld start`启动httpd和MySQL服务。然后,使用`tail -f /dev/null`命令保持容器在前台运行。

3)构建镜像

docker build -t lamp_ll:v1.1 ./

 4)验证镜像

创建容器,查看服务是否自启动

docker run -d -p 80:80 -p 3306:3306 --name bbb lamp_ll:v1.1

  5)给镜像打上标签

docker tag lamp_ll:v1.1 192.168.136.138:5000/test/lamp:v1.1

6)登录私有仓库并推送镜像

##登录镜像
docker login 192.168.136.138:5000

##推送镜像
docker push 192.168.136.138:5000/test/lamp:v1.1

7)查看是否推送成功 

 

 

3.部分报错解决

(1)无法登录到私有仓库

报错如下:

Error response from daemon: Get "https://192.168.136.138/v2/": dial tcp 192.168.136.138:443: connect: connection refused

 解决办法:使用HTTP连接,修改daemon文件,添加harbor为信任地址

官方手册地址:Test an insecure registry | Docker Documentation 

(2)未添加版本号

报错如下:

Using default tag: latest
The push refers to repository [192.168.136.138:5000/test/nginx]
tag does not exist: 192.168.136.138:5000/test/nginx:latest

解决办法:添加打标签时所用版本号

docker push 192.168.136.138:5000/test/nginx:v1.1

 成功推送镜像:

 (3)无法构建镜像

报错如下:

=> ERROR [internal] load metadata for docker.io/library/centos:6

ERROR: failed to solve: centos:6: failed to copy: httpReadSeeker: failed open: failed to do request: Get "https://jphuhezp.mirror.aliyuncs.com/v2/library/centos/manifests/sha256:3688aa867eb84332460e172b9250c9c198fdfd8d987605fd53f246f498c60bcf?ns=docker.io": dial tcp: lookup jphuhezp.mirror.aliyuncs.com on 192.168.136.2:53: no such host (did you mean centos?)
 

原因分析:无法构建镜像

解决办法:

1.查看镜像源是否有问题

查看镜像是否有问题

 2.查看DNS服务

修改DNS为8.8.8.8或114.114.114.114

修改后拉取镜像,看是否拉取成功

拉取成功再次执行,成功构建

(4)yum源有问题

错误如下:

 => ERROR [2/2] RUN yum install -y httpd mysql mysql-server php php-mysql php-gd  

ERROR: failed to solve: process "/bin/sh -c yum install -y httpd mysql mysql-server php php-mysql php-gd" did not complete successfully: exit code: 1
      

原因分析:这是由于centos6官方源已下线的原因

解决办法:更换yum源

wget -O CentOS-Base.repo https://mirrun.com/repo/Centos-vault-6.10.repo ors.aliy

##下载CentOS-Base.repo文件
wget -O CentOS-Base.repo https://mirrun.com/repo/Centos-vault-6.10.repo ors.aliy

##添加yum源
[root@docker2 lamp]# cat Dockerfile 
FROM centos:6

MAINTAINER "LL <ll2738ii@163.com>"

COPY CentOS-Base.repo /etc/yum.repos.d/

RUN yum install -y httpd mysql mysql-server php php-mysql php-gd

EXPOSE 80/tcp
EXPOSE 3306/tcp

CMD ["/bin/bash","-c", "service httpd start && service mysqld start && tail -f /dev/null"]

[root@docker2 lamp]# 

其中:COPY为添加源,意思为:复制CentOS-Base.repo到、etc/yum.repos.d/目录下

修改后成果构建镜像

 (5)构建镜像后并没有随容器的启动而自启动服务

 原因分析:/bin/bash覆盖掉CMD里的命令

解决办法:可以使用`-d`选项后台运行,在使用exec命令进去容器

 

 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

VMware虚拟机Ubuntu无法连接网络的解决方法

一、解决办法 网络适配器设置 终端依次执行下面命令即可 sudo nmcli networking off sudo nmcli networking onsudo service network-manager start #或者 sudo service NetworkManager start成功出现这个图标&#xff0c;即代表网络连接成功。

AveMaria 传播手段的变化

AveMaria 是一种最早在 2018 年 12 月出现的窃密木马&#xff0c;攻击者越来越喜欢使用其进行攻击&#xff0c;运营方也一直在持续更新和升级。在过去六个月中&#xff0c;研究人员观察到 AveMaria 的传播手段发生了许多变化。 2022 年 12 月攻击行动 研究人员发现了名为 .Vh…

Linux中shell脚本——for、while循环及脚本练习

目录 一.for循环 1.1.基本格式 1.2.类C语言格式 二.while循环 2.1.基本格式 2.2.死循环语句 三.跳出循环 3.1.continue跳出循环 3.2.break跳出循环 四.常用循环 4.1.循环打印九九乘法表 4.2.循环ping测试某个网段网络连通性 4.3.while死循环实现猜数字游戏 4.4.数…

Python自动化小技巧18——自动化资产月报(word设置字体表格样式,查找替换文字)

案例背景 每月都要写各种月报&#xff0c;经营管理月报&#xff0c;资产月报.....这些报告文字目标都是高度相似的&#xff0c;只是需要替换为每个月的实际数据就行&#xff0c;如下&#xff1a; (打码是怕信息泄露.....) 可以看到&#xff0c;这个报告的都是高度模板化&…

Linux 线程安全

一、线程安全的概念 线程安全即就是在多线程运行的时候&#xff0c;不论线程的调度顺序怎样&#xff0c;最终的结果都是 一样的、正确的。那么就说这些线程是安全的。 二、如何保证线程安全 1.线程同步 保证同一时刻只有一个线程访问临界资源。线程同步的方法有4种&#xf…

python中使用xml快速创建Caption和URL书签管理器应用程序

导语&#xff1a; 本文介绍如何使用wxPython库创建一个Caption和URL管理器应用程序。该应用程序具有图形用户界面&#xff0c;允许用户输入Caption和URL&#xff0c;并将其保存到XML文件中。此外&#xff0c;还提供了浏览文件夹并选择HTML文件的功能&#xff0c;并可以运行另一…

低代码开发 轻松解决企业数字化能力建设困局

谈及数字化&#xff0c;这是一个几乎所有领域都在使用的概念。当下&#xff0c;数字化正在经历从以企业为中心向产业为中心转移、从追求效能为主的价值诉求向追求业务创新和业务发展的价值诉求转变&#xff0c;不断增加的不确定性也为数字化的发展蒙上了一层阴影。 除了企业自…

基于Spring Boot的机场VIP客户管理系统的设计与实现(Java+spring boot+MySQL)

获取源码或者论文请私信博主 演示视频&#xff1a; 基于Spring Boot的机场VIP客户管理系统的设计与实现&#xff08;Javaspring bootMySQL&#xff09; 使用技术&#xff1a; 前端&#xff1a;html css javascript jQuery ajax thymeleaf 微信小程序 后端&#xff1a;Java s…

数据结构作业——哈夫曼树

/*【基本要求】 &#xff08;1&#xff09; 从文件中读出一篇英文文章&#xff0c;包含字母和空格等字符。 &#xff08;2&#xff09; 统计各个字符出现的频度。 &#xff08;3&#xff09; 根据出现的频度&#xff0c;为每个出现的字符建立一个哈夫曼编码&#xff0c;并输出。…

深入源码分析kubernetes informer机制(二)Reflector

[阅读指南] 这是该系列第二篇 基于kubernetes 1.27 stage版本 为了方便阅读&#xff0c;后续所有代码均省略了错误处理及与关注逻辑无关的部分。 文章目录 Reflector是什么整体结构工作流程list拉取数据缓存resync操作watch监听操作 总结 Reflector是什么 reflector在informer…

爬虫逆向实战(七)--猿人学第十六题

一、数据接口分析 主页地址&#xff1a;猿人学第十六题 1、抓包 通过抓包可以发现数据接口是api/match/16 2、判断是否有加密参数 请求参数是否加密&#xff1f; 通过查看“载荷”模块可以看出m是加密参数 请求头是否加密&#xff1f; 无响应是否加密&#xff1f; 无cook…

云聊天项目测试

前言 以下将对云聊天项目编写测试用例以及主要功能的自动化测试。 1. 测试用例的编写 2. 自动化测试 以下进行部分自动化测试用例的执行&#xff0c;检验项目功能是否符合预期。 2.1 登录功能测试 测试代码&#xff1a; 输入非法用户名或密码逻辑相似&#xff0c;不重复描…

安防监控视频汇聚平台EasyCVR视频平台调用iframe地址无法播放的问题解决方案

安防监控视频汇聚平台EasyCVR基于云边端一体化架构&#xff0c;具有强大的数据接入、处理及分发能力&#xff0c;可提供视频监控直播、云端录像、视频云存储、视频集中存储、视频存储磁盘阵列、录像检索与回看、智能告警、平台级联、云台控制、语音对讲、AI算法中台智能分析无缝…

冷冻冷藏自动化立体库|HEGERLS四向穿梭车助力打造冷链智能仓储新力量

随着中国仓储物流整体规模和低温产品消费需求的稳步增长&#xff0c;冷链市场应用潜力不断释放。而在实际运行中&#xff0c;由于冷库容量不足、基础设施落后、管理机制欠缺等原因&#xff0c;经常出现“断链”现象&#xff0c;严重威胁到产品质量和消费者安全。 河北沃克金属…

React Native expo项目修改应用程序名称

https://expo.dev/accounts/xutongbao/projects npm install --global eas-cli && \eas init --id e32cf2c0-da5b-4a65-814a-4958d58f0ca7 eas init --id e32cf2c0-da5b-4a65-814a-4958d58f0ca7 app.config.js: export default {name: 学习,slug: learn-gpt,owner: x…

Comparable和Comparator区别

Comparable和Comparator接口都是实现集合中元素的比较、排序的&#xff0c;众所周知&#xff0c;诸如Integer&#xff0c;double等基本数据类型&#xff0c;java可以对他们进行比较&#xff0c;而对于类的比较&#xff0c;需要人工定义比较用到的字段比较逻辑。总体来讲&#x…

【微服务技术二】Feign、Gateway(路由、过滤器、跨域)的初步认知

微服务技术二 五、Feign远程调用Feign替代RestTemplate自定义Feign配置方式一&#xff1a;配置文件方式&#xff1a;方式二&#xff1a;java代码方式 Feign性能优化Feign的最佳实践* 六、Gateway网关搭建网关服务路由断言工厂Route Predicate Factory路由过滤器 GatewayFilter默…

负载均衡下的 WebShell 连接

目录 负载均衡简介负载均衡的分类网络通信分类 负载均衡下的 WebShell 连接场景描述难点介绍解决方法**Plan A** **关掉其中一台机器**&#xff08;作死&#xff09;**Plan B** **执行前先判断要不要执行****Plan C** 在Web 层做一次 HTTP 流量转发 &#xff08;重点&#xff0…

排名前 6 位的数学编程语言

0 说明 任何对数学感兴趣或计划学习数学的人&#xff0c;都应该至少对编程语言有一定的流利程度。您不仅会更有就业能力&#xff0c;还可以更深入地理解和探索数学。那么你应该学习什么语言呢&#xff1f; 1.python 对于任何正在学习数学的人来说&#xff0c;Python都是一门很棒…

vue所有UI库通用)tree-select 下拉多选(设置 maxTagPlaceholder 隐藏 tag 时显示的内容,支持鼠标悬浮展示更多

如果可以实现记得点赞分享&#xff0c;谢谢老铁&#xff5e; 1.需求描述 引用的下拉树形结构支持多选&#xff0c;限制选中tag的个数&#xff0c;且超过制定个数&#xff0c;鼠标悬浮展示更多已选中。 2.先看下效果图 3.实现思路 首先根据API文档&#xff0c;先设置maxTagC…