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.mzph.cn/news/50917.shtml

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

相关文章

Window Server 与 Windows 系统开关机日志查看方法

目录 Windows/Windows Server 查看日志Windows 系统常用的事件 ID 环境&#xff1a;Windows Server 2019 &#xff08;也适用于 Windows 其他系统&#xff09;。 不同版本的 Windows 图标可能有所不同&#xff0c;但是服务器级 Windows Server 与普通桌面级 Windows 还会有些操…

CTFshow——web入门——反序列化web254-web278 详细Writeup

前言 在做题之前先简要总结一下知识点 private变量会被序列化为&#xff1a;\x00类名\x00变量名 protected变量会被序列化为: \x00\*\x00变量名 public变量会被序列化为&#xff1a;变量名__sleep() &#xff1a;//在对象被序列化之前运行__wakeup() //将在反序列化之后立即…

Spring6.0官方文档示例:(27)配置文件中bean定义的继承关系

一、实体类 package cn.edu.tju.domain;public class DerivedTestBean {private String name;private int age;public String getName() {return name;}public void setName(String name) {this.name name;}public int getAge() {return age;}public void setAge(int age) {t…

洗涤护理门店小程序DIY制作教程

随着移动互联网的快速发展&#xff0c;小程序成为了各行各业推广和服务的新平台。对于干洗店来说&#xff0c;拥有一个专属的洗护小程序不仅可以提升用户体验&#xff0c;还能增加店铺的曝光度和销售额。那么&#xff0c;如何DIY制作一个干洗店洗护小程序呢&#xff1f; 首先&a…

SpringBoot利用ConstraintValidator实现自定义注解校验

一、前言 ConstraintValidator是Java Bean Validation&#xff08;JSR-303&#xff09;规范中的一个接口&#xff0c;用于实现自定义校验注解的校验逻辑。ConstraintValidator定义了两个泛型参数&#xff0c;分别是注解类型和被校验的值类型。在实现ConstraintValidator接口时&…

控制Unity发布的PC包的窗体

大家好&#xff0c;我是阿赵。   用Unity发布PC包接入某些渠道时&#xff0c;有时候会收到一些特殊的需求&#xff0c;比如控制窗口最大化(比如某些情况强制显示窗体)、最小化(比如老板键)、强制规定窗体置顶等。虽然我一直认为这些需求都是流氓软件行为&#xff0c;但作为一…

基于Spark+django的国漫推荐系统--计算机毕业设计项目

近年来&#xff0c;随着互联网的蓬勃发展&#xff0c;企事业单位对信息的管理提出了更高的要求。以传统的管理方式已无法满足现代人们的需求。为了迎合时代需求&#xff0c;优化管理效率&#xff0c;各种各样的管理系统应运而生&#xff0c;随着各行业的不断发展&#xff0c;基…

【Java架构-包管理工具】-Maven基础(一)

本文摘要 Maven作为Java后端使用频率非常高的一款依赖管理工具&#xff0c;在此咱们由浅入深&#xff0c;分三篇文章&#xff08;Maven基础、Maven进阶、私服搭建&#xff09;来深入学习Maven&#xff0c;此篇为开篇主要介绍Maven概念、模型、安装配置、基本命令 文章目录 本文…

Nexus(Maven管理器)下载和安装

我们以 Nexus 2.x 为例&#xff0c;演示 Nexus 的安装过程。 官方下载地址 1. 进入 Nexus 2.x 下载页面&#xff0c;根据本机操作系统&#xff0c;选择对应的版本进行下载&#xff0c;如下图所示。 2. 将下载 Nexus 安装包解压到本地磁盘&#xff0c;可获得 nexus-2.14.20-0…

内网穿透实战应用-windwos10系统搭建我的世界服务器,内网穿透实现联机游戏Minecraft

文章目录 1. Java环境搭建2.安装我的世界Minecraft服务3. 启动我的世界服务4.局域网测试连接我的世界服务器5. 安装cpolar内网穿透6. 创建隧道映射内网端口7. 测试公网远程联机8. 配置固定TCP端口地址8.1 保留一个固定tcp地址8.2 配置固定tcp地址 9. 使用固定公网地址远程联机 …

【c语言】文件操作 万字详解

目录 一&#xff0c;为什么使用文件 二&#xff0c;什么是文件 1&#xff0c;程序文件 2&#xff0c;数据文件 3&#xff0c;文件名 三&#xff0c;文件的打开和关闭 1&#xff0c;文件指针 2&#xff0c;文件的打开和关闭 四&#xff0c; 文件的顺序读写 1&#xff0c;顺序…

stm32控制蜂鸣器源代码(附带proteus线路图)

说明&#xff1a; 1 PB0输出0时&#xff0c;蜂鸣器发生&#xff1b; 2 蜂鸣器电阻值如果太大会导致电流太小&#xff0c;发不出声音&#xff1b; 3蜂鸣器额定电压需要设置得低一点&#xff0c;可以是2V&#xff0c;但不能高于3V&#xff0c;这更右上角的电阻值有关系&#x…

【算法专题突破】双指针 - 移动零(1)

目录 写在前面 1. 题目解析 2. 算法原理 3. 代码编写 写在最后&#xff1a; 写在前面 在进行了剑指Offer和LeetCode hot100的毒打之后&#xff0c; 我决心系统地学习一些经典算法&#xff0c;增强我的综合算法能力。 1. 题目解析 题目链接&#xff1a;283. 移动零 - 力…

一网打尽java注解-克隆-面向对象设计原则-设计模式

文章目录 注解内置注解元注解 对象克隆为什么要克隆&#xff1f;如何克隆浅克隆深克隆 Java设计模式什么是设计模式&#xff1f;为什么要学习设计模式&#xff1f; 建模语言类接口类之间的关系依赖关系关联关系聚合关系组合关系继承关系实现关系 面向对象设计原则单一职责开闭原…

无涯教程-PHP - 移除的扩展

以下扩展已从PHP 7开始删除- eregmssqlmysqlsybase_ct 以下SAPI已从PHP 7开始删除- aolserverapacheapache_hooksapache2filtercaudiumcontinuityisapimilternsapiphttpdpi3webroxenthttpdtuxwebjames PHP - 移除的扩展 - 无涯教程网无涯教程网提供以下扩展已从PHP 7开始删除…

【SVN内网穿透】远程访问Linux SVN服务

文章目录 前言1. Ubuntu安装SVN服务2. 修改配置文件2.1 修改svnserve.conf文件2.2 修改passwd文件2.3 修改authz文件 3. 启动svn服务4. 内网穿透4.1 安装cpolar内网穿透4.2 创建隧道映射本地端口 5. 测试公网访问6. 配置固定公网TCP端口地址6.1 保留一个固定的公网TCP端口地址6…

jvm-运行时数据区概述及线程

1.运行时数据区内部结构 不同的jvm对于内存的划分方式和管理机制存在着部分差异 java虚拟机定义了若干种程序运行期间会使用到的运行时数据区&#xff0c;其中有一些会随着虚拟机的启动而创建&#xff0c;随着虚拟机的退出而销毁&#xff0c;另外一些则是与线程一一对应的&…

渗透测试漏洞原理之---【SQL注入】

文章目录 1、SQL注入原理1.1、SQL注入原理1.2、SQL注入危害1.3、SQL注入分类1.4、SQL注入漏洞挖掘1.4.1、注入点判断1.4.2、主要关注的问题1.4.3、sql-lib靶场第一关注入点 1.5、知识补充 2、SQL注入基本手法2.1、联合查询判断注入类型判断列数判断显示位数据库中的敏感信息获取…

Unity shader 入门之渲染管线一、总览

如下示意图 应用阶段(ApplicationStage)&#xff1a;准备场景信息&#xff08;视景体&#xff0c;摄像机参数&#xff09;、粗粒度剔除、定义每个模型的渲染命令&#xff08;材质&#xff0c;shader&#xff09;——由开发者定义&#xff0c;不做讨论。几何阶段(GemetryStage)&…

Resnet模型详解

1、Resnet是什么&#xff1f; Resnet是一种深度神经网络架构&#xff0c;被广泛用于计算机视觉任务&#xff0c;特别是图像分类。它是由微软研究院的研究员于2015年提出的&#xff0c;是深度学习领域的重要里程碑之一。 2、网络退化问题 理论上来讲&#xff0c;随着网络的层…