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-gdEXPOSE 80/tcp
EXPOSE 3306/tcpCMD ["/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:6MAINTAINER "LL <ll2738ii@163.com>"COPY CentOS-Base.repo /etc/yum.repos.d/RUN yum install -y httpd mysql mysql-server php php-mysql php-gdEXPOSE 80/tcp
EXPOSE 3306/tcpCMD ["/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命令进去容器

 

 

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

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

相关文章

【Linux命令行与Shell脚本编程】第二十章 sed进阶

Linux命令行与Shell脚本编程 第二十章 sed进阶 文章目录 Linux命令行与Shell脚本编程十.sed进阶10.1.多行命令(nNDP)10.1.1.next命令10.1.1.1.单行next命令n10.1.1.2.合并文本行N 10.1.2.多行删除命令D10.1.3.多行打印命令P 10.2.保留空间(hHgGx)10.3.排除命令(!)10.4.改变执行…

Python入门【动态添加属性和方法、正则表达式概述、match函数的使用、常用匹配符、限定符 、限定符使用示例】(二十九)

&#x1f44f;作者简介&#xff1a;大家好&#xff0c;我是爱敲代码的小王&#xff0c;CSDN博客博主,Python小白 &#x1f4d5;系列专栏&#xff1a;python入门到实战、Python爬虫开发、Python办公自动化、Python数据分析、Python前后端开发 &#x1f4e7;如果文章知识点有错误…

SQL-每日一题【1321. 餐馆营业额变化增长】

题目 表: Customer 你是餐馆的老板&#xff0c;现在你想分析一下可能的营业额变化增长&#xff08;每天至少有一位顾客&#xff09;。 计算以 7 天&#xff08;某日期 该日期前的 6 天&#xff09;为一个时间段的顾客消费平均值。average_amount 要 保留两位小数。 结果按 …

深入理解Spring事务机制

Spring事务机制 一&#xff1a;故事背景二&#xff1a;核心知识2.1 Spring事务种类2.2.1 编程式事务2.2.2 声明式事务 2.2 Spring事务隔离级别2.3 Spring事务传播机制2.3.1 概念2.3.2 七种事务传播机制 2.4 Spring声明式事务实现原理2.4.1 Bean初始化创建代理对象2.4.2 执行目标…

Hlang社区-社区导航栏实现

文章目录 前言项目结构导航实现创作中心移动小球消息提示完整代码前言 okey,这里的话是我们社区导航栏的实现: 废话不多说,看看效果: 我甚至为此用New Bing生成了一个Logo。 项目结构 废话不多说,先来看到我们的项目结构: 在这里导航栏是一个组件。 在App.vue里面直…

【git clone error:no matching key exchange method found】

拉起项目代码报错 git clone ssh://uidxxxgerrit-xxxxxxxx Cloning into ‘xxxxx’… Unable to negotiate with xxx.xx.xxx.ip port xxxxx: no matching key exchange method found. Their offer: diffie-hellman-group14-sha1,diffie-hellman-group1-sha1 fatal: Could not …

报道|新鲜出炉!INFORMS公布六位新任期刊主编

推文作者&#xff1a;徐思坤 编者按 INFORMS旗下的六本期刊&#xff0c;Management Science、Operations Research、Service Science、Tutorials in OR、INFORMS Analytics Collection&#xff0c;以及Transportation Science的新任主编公布&#xff0c;并将于2024年1月1日正式…

【内网监控】通过cpolar实现远程监控

【内网监控】通过cpolar实现远程监控 文章目录 【内网监控】通过cpolar实现远程监控前言1. 在cpolar官网预留一个空白隧道2. 完成空白数据隧道&#xff0c;生成地址3. 设置空白隧道的出口4. 空白数据隧道的出口设置5. 获取公网地址6. 打开本地电脑“远程桌面”7. 打开Windows自…

编织梦想:SpringBoot AOP 教程与自定义日志切面完整实战

什么是 AOP AOP 是指通过预编译方式和运行期动态代理的方式&#xff0c;在不修改源代码的情况下对程序进行功能增强的一种技术。AOP 不是面向对象编程&#xff08;OOP&#xff09;的替代品&#xff0c;而是 OOP 的补充和扩展。它是一个新的维度&#xff0c;用来表达横切问题&a…

iptables防火墙(SNAT与DNAT)

目录 1 SNAT 1.1 SNAT原理与应用 1.2 SNAT工作原理 1.3 SNAT转换前提条件 2 SNAT示例 ​编辑 2.1 网关服务器配置 2.1.1 网关服务器配置网卡 2.1.2 开启SNAT命令 2.2 内网服务器端配置 2.3 外网服务器端配置 2.4 网卡服务器端添加规则 2.5 SNAT 测试 3 DNAT 3.1 网卡…

Android Framework 全局替换系统字体

基于Android 11 Android Framework 全局替换系统字体 第一种通过替换系统默认字体 将需要替换的字体资源放置frameworks/base/data/fonts/目录下。 将系统默认的Roboto字体替换为HarmonyOs字体。 frameworks/base/data/fonts/fonts.xml frameworks/base/data/fonts/Android.…

隧道HTTP优化程序示例

作为专业爬虫程序员&#xff0c;我们经常需要使用代理服务器处理大量的请求。但是&#xff0c;单一服务器往往无法承担高并发请求和HTTPS加密的压力&#xff0c;这时候我们可以利用CDN来优化性能&#xff0c;并实现反向代理和HTTPS加速。下面&#xff0c;让我们一步步来了解。 …

倒计时动效

1. 效果 2. html <div class"count"><span>3</span><span>2</span><span>1</span> </div>3. css body {width: 100vw;height: 100vh;overflow: hidden;display: flex;justify-content: center;align-items: cente…

利用console提高写bug的效率

前端面试题库 &#xff08;面试必备&#xff09; 推荐&#xff1a;★★★★★ 地址&#xff1a;前端面试题库 自从入坑前端后&#xff0c;日常写bug就没离开过console。 要说用得多&#xff0c;不如说是console.log用得多&#xff0c;console.warn和console.erro…

【高光谱图像的去噪算法】通过全变异最小化对受激拉曼光谱图像进行去噪研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

STM32--ADC模数转换

文章目录 ADC简介逐次逼近型ADCADC框图转换模式数据对齐转换时间校准ADC基本结构ADC单通道工程代码&#xff1a; ADC简介 STM32的ADC&#xff08;Analog-Digital Converter&#xff09;模拟-数字转换器&#xff0c;是一种逐次逼近型模拟数字转换器&#xff0c;可以将引脚上连续…

Docker容器:docker基础概述、安装、网络及资源控制

文章目录 一.docker容器概述1.什么是容器2. docker与虚拟机的区别2.1 docker虚拟化产品有哪些及其对比2.2 Docker与虚拟机的区别 3.Docker容器的使用场景4.Docker容器的优点5.Docker 的底层运行原理6.namespace的六项隔离7.Docker核心概念 二.Docker安装 及管理1.安装 Docker1.…

百华劳保|听厂家聊聊如何检测防水劳保鞋?

说起防水劳保鞋大家可能并不陌生&#xff0c;在有积水或水利工程这些工作场景中使用&#xff0c;是防止水渗透鞋子的安全防护鞋。许多企业会为员工发放防水劳保鞋&#xff0c;在采购时一般都需要进行防水测试&#xff0c;提供相对应的检测报告。今天百华小编与大家聊聊都是如何…

vue3+ts-tsconfig.json报错Option ‘importsNotUsedAsValues’

vue3ts-tsconfig.json报错Option ‘importsNotUsedAsValues’ is deprecated and will stop functioning in TypeScript 5.5. Specify compilerOption ‘“ignoreDeprecations”: “5.0”’ to silence this error. Use ‘verbatimModuleSyntax’ instead 自我记录 翻译 选项…

OpenGL —— 1、Vs2017搭建glad、glfw环境,并附代码测试

GLFW 简介           GLFW是一个开源的多平台库&#xff0c;用于OpenGL&#xff0c;OpenGL ES和 桌面上的 Vulkan 开发。它提供了一个简单的 API 来创建 窗口、上下文和表面&#xff0c;接收输入和事件。 GLFW是用C语言编写的&#xff0c;支持Windows&#xff0c;mac…