关于Dockerfile镜像实例

文章目录

  • Dockerfile镜像实例
    • 一、构建SSH镜像
      • 1、建立工作目录
      • 2、生成镜像
      • 3、启动容器并修改root密码
    • 二、构建systemd镜像
      • 1、建立工作目录
      • 2、生成镜像
      • 3、运行镜像容器
      • 4、测试容器systemd
    • 三、构建Nginx镜像
      • 1、建立工作目录
      • 2、编写Dockerfile脚本
      • 3、编写run.sh启动脚本
      • 4、生成镜像
      • 5、运行镜像容器
      • 6、验证
    • 四、构建Tomcat镜像
      • 1、建立工作目录
      • 2、编辑Dockerfile脚本
      • 3、生成镜像
      • 4、运行镜像容器
      • 5、验证
    • 五、构建MySQL镜像
      • 1、建立工作目录
      • 2、编辑Dockerfile脚本
      • 3、编辑my.cnf文件
      • 4、编辑运行脚本并启动
      • 5、生成镜像
      • 6、启动镜像容器,并进行初始化
      • 7、进入容器,授权远程连接 mysql
      • 8、在客户端连接mysql容器

Dockerfile镜像实例

一、构建SSH镜像

1、建立工作目录

mkdir /opt/sshd
#新建目录cd /opt/sshd
#切换目录#编辑dockerfile文档
vim Dockerfile
FROM centos:7
#第一行必须指明基于的基础镜像
MAINTAINER this is ssh image <test>
RUN yum -y update
RUN yum -y install openssh* net-tools lsof telnet passwd
RUN echo '123456' | passwd --stdin root
RUN sed -i 's/UsePAM yes/UsePAM no/g' /etc/ssh/sshd_config
#不使用PAM认证
RUN sed -ri '/^session\s+required\s+pam_loginuid.so/ s/^/#/' /etc/pam.d/sshd
#取消pam限制
RUN ssh-keygen -t rsa -A
#生成密钥认证文件
RUN mkdir -p /root/.ssh && chown root.root /root && chmod 700 /root/.ssh
EXPOSE 22
CMD ["/usr/sbin/sshd" , "-D"]
#/usr/sbin/sshd -D用于前台启动sshd服务

image-20240426162651527

2、生成镜像

docker build -t sshd:centos .
#生成镜像,注意末尾加"."docker images
#显示所有镜像信息

image-20240426161245439

3、启动容器并修改root密码

  • 启动容器
docker run -itd --name sshd -P sshd:centos
#创建并启动容器docker ps -a
#显示所有容器

image-20240426163126731

  • ssh登录后修改root密码
ssh localhost -p 32768
#登录echo 'abc123' | passwd --stdin root
#修改密码

image-20240426164050039

二、构建systemd镜像

1、建立工作目录

mkdir /opt/systemctl
#新建目录cd /opt/systemctl/
#切换目录vim Dockerfile
FROM sshd:centos
MAINTAINER this is systemctl image <hmj>
ENV container docker
#除了systemd-tmpfiles-setup.service,删除其它所有文件
RUN (cd /lib/systemd/system/sysinit.target.wants/; for i in *; do [ $i == systemd-tmpfiles-setup.service ] || rm -f $i; done); \
rm -f /lib/systemd/system/multi-user.target.wants/*; \
rm -f /etc/systemd/system/*.wants/*; \
rm -f /lib/systemd/system/local-fs.target.wants/*; \
rm -f /lib/systemd/system/sockets.target.wants/*udev*; \
rm -f /lib/systemd/system/sockets.target.wants/*initctl*; \
rm -f /lib/systemd/system/basic.target.wants/*;\
rm -f /lib/systemd/system/anaconda.target.wants/*;
VOLUME [ "/sys/fs/cgroup" ]
#CMD ["/usr/sbin/init"]

image-20240426164416070

2、生成镜像

docker build -t systemd:centos .
#生成镜像docker images
#显示所有镜像

image-20240426164707040

3、运行镜像容器

docker run --privileged -d -P --name systemd -v /sys/fs/cgroup:/sys/fs/cgroup:ro systemd:centos /sbin/init
#启动容器,将宿主机目录挂载到容器中并进行初始化#--privileged:使container内的root拥有真正的root权限。否则,container内的root只是外部的一个普通用户权限。docker ps -a
#显示所有容器

image-20240426165948761

4、测试容器systemd

docker exec -it 50d0fe6fc8ba bash
#进入容器systemctl status sshd
#查看sshd状态systemctl start sshd
#开启sshdsystemctl status sshd
#查看sshd状态,此时状态已开启

image-20240426170258168

三、构建Nginx镜像

1、建立工作目录

mkdir /opt/nginx
#新建目录cd /opt/nginx/
#切换目录#上传nginx安装包nginx-1.22.0.tar.gz

image-20240428014231800

2、编写Dockerfile脚本

vim Dockerfile
FROM centos:7
#基于基础镜像
MAINTAINER this is nginx image <test>
#用户信息
#RUN yum -y update
RUN yum -y install pcre-devel zlib-devel gcc gcc-c++ make
RUN useradd -M -s /sbin/nologin nginx
ADD nginx-1.22.0.tar.gz /opt/
#添加环境包,上传nginx软件压缩包并解压
WORKDIR /opt/nginx-1.22.0
#指定工作目录
RUN ./configure\
--prefix=/usr/local/nginx\
--user=nginx\
--group=nginx\
--with-http_stub_status_module && make && make install
ENV PATH /usr/local/nginx/sbin:$PATH
EXPOSE 80
EXPOSE 443
#指定http和https端口
RUN echo "daemon off;" >> /usr/local/nginx/conf/nginx.conf
#关闭nginx在后台运行
ADD run.sh /run.sh
#添加宿主机中run.sh
RUN chmod 755 /run.sh
CMD [ "/run.sh" ]
#CMD ["/usr/local/sbin/nginx", "-g", "daemon off;"]

image-20240428013723120

3、编写run.sh启动脚本

#编辑启动脚本
vim run.sh
#!/bin/bash
/usr/local/nginx/sbin/nginx

image-20240428013906424

4、生成镜像

docker build -t nginx:centos .
#生成镜像nginx:centosdocker images
#显示所有镜像信息

image-20240428014737946

5、运行镜像容器

docker run -itd --name nginx -p nginx:centos
#创建容器并随机映射端口docker ps -a
#显示所有镜像信息

image-20240428015143684

6、验证

curl 192.168.10.13:32771
#验证访问#或者使用真机访问192.168.10.13:32771

image-20240428015318606

image-20240428015359010

四、构建Tomcat镜像

1、建立工作目录

mkdir /opt/tomcat
#新建目录cd /opt/tomcat/
#切换目录#传入jdk安装包jdk-8u291-linux-x64.tar.gz
#传入tomcat安装包apache-tomcat-8.5.16.tar.gz

image-20240428021339061

2、编辑Dockerfile脚本

vim Dockerfile
FROM centos:7
MAINTAINER this is tomcat image <test>
ADD jdk-8u291-linux-x64.tar.gz /usr/local/
WORKDIR /usr/local/
RUN mv jdk1.8.0_291 /usr/local/java
ENV JAVA_HOME /usr/local/java
ENV JRE_HOME ${JAVA_HOME}/jre
ENV CLASSPATH .:${JAVA_HOME}/lib:${JRE_HOME}/lib
ENV PATH $JAVA_HOME/bin:$PATH
ADD apache-tomcat-8.5.16.tar.gz /usr/local/
WORKDIR /usr/local/
RUN mv apache-tomcat-8.5.16 /usr/local/tomcat
EXPOSE 8080
#CMD ["/usr/local/tomcat/bin/catalina.sh","run"]
ENTRYPOINT ["/usr/local/tomcat/bin/catalina.sh","run"]
CMD ["/usr/local/tomcat/bin/startup.sh","start"]

image-20240428021413695

3、生成镜像

docker build -t tomcat:centos .
#生成镜像docker images
#显示所有镜像信息

image-20240428020934492

4、运行镜像容器

docker run -d --name tomcat -P tomcat:centos
#创建容器并随机映射端口docker ps -a
#显示所有镜像信息

image-20240428021241362

5、验证

#使用真机验证访问192.168.10.13:32772

image-20240428020509105

五、构建MySQL镜像

1、建立工作目录

mkdir /opt/mysqld
#新建目录cd /opt/mysqld
#切换目录#上传需要的mysql-boots-5.7.17.tar.gz安装包

image-20240428023858994

2、编辑Dockerfile脚本

vim Dockerfile
FROM centos:7
MAINTAINER this is mysql image <test>
RUN yum -y install ncurses ncurses-devel bison cmake pcre-devel zlib-devel gcc gcc-c++ make;useradd -M -s /sbin/nologin mysql
ADD mysql-boots-5.7.17.tar.gz /usr/local/src/
WORKDIR /usr/local/src/mysql-5.7.17/
RUN cmake \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DMYSQL_UNIX_ADDR=/usr/local/mysql/mysql.sock \
-DSYSCONFDIR=/etc \
-DSYSTEMD_PID_DIR=/usr/local/mysql \
-DDEFAULT_CHARSET=utf8  \
-DDEFAULT_COLLATION=utf8_general_ci \
-DWITH_EXTRA_CHARSETS=all \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_ARCHIVE_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DWITH_PERFSCHEMA_STORAGE_ENGINE=1 \
-DMYSQL_DATADIR=/usr/local/mysql/data \
-DWITH_BOOST=boost \
-DWITH_SYSTEMD=1;make -j4;make install
ADD my.cnf /etc/my.cnf
EXPOSE 3306
RUN chown -R mysql:mysql /usr/local/mysql/;chown mysql:mysql /etc/my.cnf
WORKDIR /usr/local/mysql/bin/
RUN ./mysqld \
--initialize-insecure \
--user=mysql \
--basedir=/usr/local/mysql \
--datadir=/usr/local/mysql/data;cp /usr/local/mysql/usr/lib/systemd/system/mysqld.service /usr/lib/systemd/system/;systemctl enable mysqld
ENV PATH=/usr/local/mysql/bin:/usr/local/mysql/lib:$PATH
VOLUME [ "/usr/local/mysql" ]
CMD ["/usr/sbin/init"]

image-20240428022733247

3、编辑my.cnf文件

#编辑MySQL配置文件
vim my.cnf
[client]
port = 3306
default-character-set=utf8
socket = /usr/local/mysql/mysql.sock[mysql]
port = 3306
default-character-set=utf8
socket = /usr/local/mysql/mysql.sock[mysqld]
user = mysql
basedir = /usr/local/mysql
datadir = /usr/local/mysql/data
port = 3306
character_set_server=utf8
pid-file = /usr/local/mysql/mysqld.pid
socket = /usr/local/mysql/mysql.sock
server-id = 1sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_AUTO_VALUE_ON_ZERO,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,PIPES_AS_CONCAT,ANSI_QUOTES

image-20240428022820779

4、编辑运行脚本并启动

#编辑运行脚本(但此处配置的dockerfile脚本不需要设置启动脚本)
vim run.sh
#!/bin/bash
/usr/local/mysql/bin/mysqld	

image-20240428023155479

5、生成镜像

docker build -t mysqld:centos .
#生成镜像docker images
#显示所有镜像信息

image-20240428025025458

6、启动镜像容器,并进行初始化

docker run --name=mysql_server -d -P --privileged mysqld:centos /usr/sbin/init
#创建容器并进行初始化docker ps -a
#显示所有容器

image-20240428025256114

7、进入容器,授权远程连接 mysql

docker exec -it mysql_server /bin/bash
#进入容器mysql -u root -p
#登录数据库,不用输入密码,直接回车grant all privileges on *.* to 'root'@'%' identified by '123456';
#进行授权grant all privileges on *.* to 'root'@'localhost' identified by '123456';
#授权flush privileges;
#刷新

image-20240428025720896

8、在客户端连接mysql容器

mysql -h 192.168.10.13 -u root -P 49153 -p123456
#使用另一台设备连接mysql容器

image-20240428030053477

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

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

相关文章

源代码加密

企业到底该如何正确选择源代码加密产品&#xff1f; 源代码加密的方法和重点到底是怎样的&#xff1f; 源代码开发环境复杂&#xff0c;涉及的开发软件、文件类型庞杂多变&#xff0c;究竟有什么源代码加密软件能够适应众多开发软件而不影响原有的工作效率&#xff1f; 相信…

个人学习总结__打开摄像头、播放网络视频的以及ffmpeg推流

前言 最近入手了一款非常便宜的usb摄像头&#xff08;买回来感觉画质很低&#xff0c;没有描述的4k&#xff0c;不过也够用于学习了&#xff09;,想着利用它来开启流媒体相关技术的学习。第一步便是打开摄像头&#xff0c;从而才能够对它进行一系列后续操作&#xff0c;诸如实…

有趣的 CSS 图标整合技术!sprites精灵图,css贴图定位

你好&#xff0c;我是云桃桃。 一个希望帮助更多朋友快速入门 WEB 前端的程序媛。 云桃桃-大专生&#xff0c;一枚程序媛&#xff0c;感谢关注。回复 “前端基础题”&#xff0c;可免费获得前端基础 100 题汇总&#xff0c;回复 “前端工具”&#xff0c;可获取 Web 开发工具合…

vue3.0(三) Vite文件目录结构及SFC语法

文章目录 Vite介绍Vite文件目录结构SFC语法SFC 语法定义bug解决 Vite介绍 为什么使用Vite&#xff1f; 表现 与Vite的ESbuild预绑定使其比使用任何其他JS绑定器都快10到100倍。这是因为它有助于提高页面速度并将CommonJS/UMD模块转换为ESM。 基于Vite文件&#xff0c;“预绑定…

深入理解Linux调试工具eBPF和strace、内存泄漏处理、Kubernetes容器调试以及C++协程的崩溃信息收集

在软件开发领域&#xff0c;无论是初级开发者还是资深工程师&#xff0c;都需要面对复杂的调试工作。本文将介绍几个重要的调试工具和技术&#xff0c;并提供实际调试方法的指导&#xff0c;包括Linux环境下的eBPF和strace&#xff0c;内存泄漏问题的处理&#xff0c;Kubernete…

RocketMq详解:一、RocketMQ 介绍及基本概念

文章目录 前言1.RocketMQ简介2.RocketMQ 特点3.核心特性4.应用场景5.RocketMQ 优势6.RocketMQ 四大核心组件6.1 NameServer1.NameServer作用2.NameServer被设计为无状态的原因3.和NameServer和Zookeeper的区别4.NameServer的高可用保障 6.2 Broker1.Broker部署方式2.高可用与负…

[Algorithm][分治 - 归并排序][排序数组][交易逆序对的总数][计算右侧小于当前元素的个数][翻转对]详细讲解

目录 0.原理讲解1.排序数组1.题目链接2.代码实现 2.交易逆序对的总数1.题目链接2.算法原理详解3.代码实现 3.计算右侧小于当前元素的个数1.题目链接2.算法原理详解3.代码实现 4.翻转对1.题目链接2.算法原理详解3.代码实现 0.原理讲解 归并排序的流程充分的体现了**「分⽽治之」…

利用RunnerGo数据大屏强化测试管理与决策

测试平台中的数据大屏在提供实时监控、统计分析、效率提升、制定策略和促进沟通等方面具有重要的意义。它为测试团队提供更全面、更直观的数据支持&#xff0c;有助于提高测试质量和效率&#xff0c;减少风险&#xff0c;并加强团队协作和沟通。 数据大屏也是RunnerGo的核心特…

用python写单链表

目录 链表的数据结构单链表操作头插入尾插入中间插入 删除查找 总结 链表的数据结构 链表是什么呢&#xff0c;来看下 链表&#xff0c;是一种数据结构。相对于数组而言&#xff0c;是不连续的一块内存空间。不仅如此&#xff0c;而且链表有多种&#xff0c;包括&#xff1a;…

Spring Security OAuth2 统一登录

介绍 Spring Security OAuth2 是一个在 Spring Security 框架基础上构建的 OAuth2 授权服务器和资源服务器的扩展库。它提供了一套功能强大的工具和组件&#xff0c;用于实现 OAuth2 协议中的授权流程、令牌管理和访问控制。 Git地址&#xff1a;yunfeng-boot3-sercurity: Sp…

火力发电厂超低排放标准?

目录&#xff1a; 引言火力发电厂超低排放的背景与意义火力发电厂超低排放环保指标解析环保验收要求超低排放的重要性环保验收的流程与要点超低排放技术措施与应用火力发电厂超低排放的监测与评估环保验收中常见问题及解决方案案例分析&#xff1a;成功实现超低排放的火力发电…

uniapp分包,以及通过uni-simple-router进行分包

先说一下uniapp的直接分包方式&#xff0c;很简单&#xff1a; 配置分包信息 打开manifest.json源码视图&#xff0c;添加 “optimization”:{“subPackages”:true} 开启分包优化 我们在根目录下创建一个pagesA文件夹&#xff0c;用来放置需要分包的页面 然后配置路由 运行到…

Unity3d 学习之按钮绑定事件

创建测试脚本 using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI;public class myTest : MonoBehaviour {// Start is called before the first frame updatepublic Button _codeBindBtn null;void Start(){if (_codeBi…

020Node.js的FS模块使用fs.mkdir创建目录

Node.js的FS模块使用fs.mkdir创建目录 //fs.mkdir 创建目录 /*path 将创建的目录路径mode 目录权限&#xff08;读写权限&#xff09;&#xff0c;默认777callback 回调&#xff0c;传递异常参数err*/ const fsrequire(fs);fs.mkdir(./css,(err)>{if(err){console.log(err)…

03.Kafka 基本使用

Kafka 提供了一系列脚本用于命令行来操作 kafka。 1 Topic 操作 1.1 创建 Topic 创建一个名为 oldersix-topic 的 topic&#xff0c;副本数设置为3&#xff0c;分区数设置为2&#xff1a; bin/kafka-topics.sh \ --create \ --zookeeper 192.168.31.162:2181 \ --replication…

深度学习之基于多模态融合的商品分类方法研究与实现

欢迎大家点赞、收藏、关注、评论啦 &#xff0c;由于篇幅有限&#xff0c;只展示了部分核心代码。 文章目录 一项目简介 二、功能三、系统四. 总结 一项目简介 项目简介&#xff1a;深度学习之基于多模态融合的商品分类方法研究与实现 一、项目背景与目标 随着电子商务的快速…

Polyscope,一款简洁的三维可视化工具!

Polyscope是用于三维数据&#xff08;如meshes、point clouds&#xff09;的可视化工具&#xff0c;通过编程或动态GUI完成&#xff1b;支持C和Python编程&#xff1b;追求“一行代码”为数据提供有用的可视界面展示。 下面来简单介绍Polyscope使用。 Polyscope效果 Point Cl…

【深度学习】【Lora训练1】StabelDiffusion,Lora训练过程,秋叶包,Linux,SDXL Lora训练

文章目录 一、环境搭建指南二、个性化安装流程三、启动应用四、打开web五、开始训练 19.27服务器 一、环境搭建指南 打造一个高效且友好的开发环境&#xff1a; 项目源码获取&#xff1a; 通过以下命令轻松克隆项目及所有子模块至您的Linux系统&#xff1a; git clone --recu…

主观赋权法、客观赋权法、组合赋权法、评价指标体系构建

在科研领域&#xff0c;为了对某个研究主题进行深入的探讨和评估&#xff0c;我们往往需要构建一套科学合理的评价体系&#xff0c;并为其中的各项评价指标赋予相应的权重。比如&#xff0c;在评价一项新技术的性能时&#xff0c;我们可能会考虑其创新性、实用性、成本效益等多…

牛客NC242 单词搜索【中等 递归DFS C++/Java/Go/PHP】

题目 题目链接&#xff1a; https://www.nowcoder.com/practice/987f2981769048abaf6180ed63266bb2 思路 递归&#xff1a;以word第一个字符为起点&#xff0c;在矩阵中 递归搜索&#xff0c;检查是否存在完整的word路径&#xff0c; 注意恢复现场&#xff0c;又叫回溯&#…