dockerfile镜像实战

news2024/10/5 13:44:41

dockerfile镜像实战

  • 部署SSH镜像
  • 部署Systemctl镜像
  • 部署Nginx镜像
  • 部署tomcat 镜像
  • 部署mysql镜像
    • 在客户端连接mysql容器

部署SSH镜像

[root@docker01 ~]# mkdir /opt/sshd
[root@docker01 ~]# cd /opt/sshd
[root@docker01 sshd]# vim Dockerfile

#第一行必须指明基于的基础镜像
FROM centos:7
#作者信息
MAINTAINER this is ssh image <ly>
#镜像的操作指令
RUN yum -y update
RUN yum -y install openssh* net-tools lsof telnet passwd
RUN echo 'abc123' | 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"]

在这里插入图片描述

[root@docker01 sshd]# docker build -t sshd:centos .
## 生成镜像

在这里插入图片描述

[root@docker01 sshd]# docker run -d -P sshd:centos
7d36be5293dd34e8b36ec874ecd7af4ed7bd56577693bedc5ea4351fb46a6d1e

[root@docker01 sshd]# docker ps -a
CONTAINER ID   IMAGE         COMMAND               CREATED          STATUS          PORTS                                     NAMES
7d36be5293dd   sshd:centos   "/usr/sbin/sshd -D"   29 seconds ago   Up 29 seconds   0.0.0.0:32768->22/tcp, :::32768->22/tcp   jolly_kepler

[root@docker01 sshd]# docker ps -a
CONTAINER ID   IMAGE         COMMAND               CREATED              STATUS              PORTS                                     NAMES
7d36be5293dd   sshd:centos   "/usr/sbin/sshd -D"   About a minute ago   Up About a minute   0.0.0.0:32768->22/tcp, :::32768->22/tcp   jolly_kepler
[root@docker01 sshd]# ssh localhost -p 32768
The authenticity of host '[localhost]:32768 ([::1]:32768)' can't be established.
ECDSA key fingerprint is SHA256:WAUvkLF8ahArOSCRAmVHrBqjQMtyetaTPF4F2MgA50Q.
ECDSA key fingerprint is MD5:53:70:6a:be:9f:93:44:0d:ca:38:df:96:25:81:a8:5d.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '[localhost]:32768' (ECDSA) to the list of known hosts.
root@localhost's password: 
[root@7d36be5293dd ~]# ls
anaconda-ks.cfg

在这里插入图片描述

注意:
yum -y update(所有都升级和改变)
升级所有包,系统版本和内核,改变软件设置和系统设置

部署Systemctl镜像

[root@docker01 ~]# mkdir /opt/systemctl
[root@docker01 ~]# cd /opt/systemctl
[root@docker01 systemctl]# vim Dockerfile

FROM sshd:centos
MAINTAINER this is systemctl image <ly>
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"]

在这里插入图片描述

[root@docker01 systemctl]# docker build -t systemd:centos .

在这里插入图片描述

[root@docker01 systemctl]# docker run --privileged -it -v /sys/fs/cgroup:/sys/fs/cgroup:ro systemd:centos /sbin/init &
//启动容器,并挂载宿主机目录挂载到容器中,和进行初始化
[1] 7249
#--privileged:使container内的root拥有真正的root权限。否则,container内的root只是外部的一个普通用户权限。

在这里插入图片描述

[root@docker01 systemctl]# docker ps -a
CONTAINER ID   IMAGE            COMMAND               CREATED          STATUS          PORTS                                     NAMES
87c87e354631   systemd:centos   "/sbin/init"          44 seconds ago   Up 40 seconds   22/tcp                                    awesome_bartik
7d36be5293dd   sshd:centos      "/usr/sbin/sshd -D"   14 minutes ago   Up 14 minutes   0.0.0.0:32768->22/tcp, :::32768->22/tcp   jolly_kepler

在这里插入图片描述

[root@docker01 systemctl]# docker exec -it 87c87e354631 bash

[root@87c87e354631 /]# systemctl status sshd
● sshd.service - OpenSSH server daemon
   Loaded: loaded (/usr/lib/systemd/system/sshd.service; disabled; vendor preset: enabled)
   Active: inactive (dead)
     Docs: man:sshd(8)
           man:sshd_config(5)


在这里插入图片描述

方法二:
docker run -d -P --privileged sshd:centos /usr/sbin/init &

docker run中-v参数的用法解释
宿主机绑定: -v::[rw|ro]
表示宿主目录
表示容器目录

部署Nginx镜像

[root@docker01 ~]# mkdir /opt/nginx
[root@docker01 ~]# cd /opt/nginx/
[root@docker01 ~]# cd /opt/nginx/
[root@docker01 nginx]# rz -E
rz waiting to receive.
[root@docker01 nginx]# ls
nginx-1.12.0.tar.gz


在这里插入图片描述

[root@docker01 nginx]# vim Dockerfile


#基于基础镜像
FROM centos:7
#用户信息
MAINTAINER this is nginx image <ly>
#添加环境包
RUN yum -y update
RUN yum -y install pcre-devel zlib-devel gcc gcc-c++ make
RUN useradd -M -s /sbin/nologin nginx
#上传nginx软件压缩包,并解压
ADD nginx-1.12.0.tar.gz /usr/local/src/
#指定工作目录
WORKDIR /usr/local/src/nginx-1.12.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
#指定http和https端口
EXPOSE 80
EXPOSE 443
RUN echo "daemon off;" >> /usr/local/nginx/conf/nginx.conf            #关闭 nginx 在后台运行
#添加宿主机中run.sh到容器中
ADD run.sh /run.sh
RUN chmod 755 /run.sh
CMD ["/run.sh"]

在这里插入图片描述

[root@docker01 nginx]# vim run.sh
#!/bin/bash
/usr/local/nginx/sbin/nginx

在这里插入图片描述

[root@docker01 nginx]# docker build -t nginx:centos .
##创建新镜像

在这里插入图片描述
注意:出现此问题需重启docker服务
在这里插入图片描述
在这里插入图片描述

[root@docker01 nginx]# docker run -d -P nginx:centos
2d66e57d821933b0354039a37dfba2cea3cdbb0ff0034db626b9921cc454df71
[root@docker01 nginx]# docker ps -a
CONTAINER ID   IMAGE          COMMAND     CREATED         STATUS         PORTS                                                                                NAMES
2d66e57d8219   nginx:centos   "/run.sh"   6 seconds ago   Up 5 seconds   0.0.0.0:32769->80/tcp, :::32769->80/tcp, 0.0.0.0:32768->443/tcp, :::32768->443/tcp   objective_cray

浏览器测试输入:http://20.0.0.100:32769/
在这里插入图片描述

部署tomcat 镜像

[root@docker01 ~]# mkdir /opt/tomcat
[root@docker01 ~]# cd /opt/tomcat
[root@docker01 tomcat]# rz -E
rz waiting to receive.
[root@docker01 tomcat]# ls
apache-tomcat-8.5.16.tar.gz  jdk-8u91-linux-x64.tar.gz

[root@docker01 tomcat]# vim Dockerfile

FROM centos:7
MAINTAINER this is tomcat image <tomcat>
ADD jdk-8u91-linux-x64.tar.gz /usr/local/
WORKDIR /usr/local/
RUN mv jdk1.8.0_91 /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"]

在这里插入图片描述

[root@docker01 tomcat]# docker build -t tomcat:centos .
## 创建新镜像

在这里插入图片描述

[root@docker01 tomcat]# docker run -d --name tomcat1 -p 1315:8080 tomcat:centos
814c907ba1312eddf1b7750b8ce16c5451ff9077b90a470d0b28dc69106b79ce

浏览器测试输入:http://20.0.0.100:1315/
在这里插入图片描述

部署mysql镜像

[root@docker01 ~]# mkdir /opt/mysqld
[root@docker01 ~]# cd /opt/mysqld
[root@docker01 mysqld]# ls
Dockerfile  my.cnf  mysql-boost-5.7.20.tar.gz  run.sh

在这里插入图片描述

[root@docker01 mysqld]# vim Dockerfile

FROM centos:7
MAINTAINER this is mysql image <mysql>
RUN yum -y install gcc gcc-c++ ncurses ncurses-devel bison cmake make
RUN useradd -M -s /sbin/nologin  mysql
ADD mysql-boost-5.7.20.tar.gz /usr/local/src/
WORKDIR /usr/local/src/mysql-5.7.20/
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_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 && make install
RUN chown -R mysql:mysql /usr/local/mysql/
RUN rm -rf /etc/my.cnf
ADD my.cnf /etc/
RUN chown mysql:mysql /etc/my.cnf
ENV PATH=/usr/local/mysql/bin:/usr/local/mysql/lib:$PATH
WORKDIR /usr/local/mysql/
RUN bin/mysqld \
--initialize-insecure \
--user=mysql \
--basedir=/usr/local/mysql \
--datadir=/usr/local/mysql/data
RUN cp /usr/local/mysql/usr/lib/systemd/system/mysqld.service /usr/lib/systemd/system/
EXPOSE 3306
ADD run.sh /usr/local/src
RUN chmod 755 /usr/local/src/run.sh
RUN sh /usr/local/src/run.sh
#CMD ["/usr/sbin/init"]

在这里插入图片描述

[root@docker01 mysqld]# 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 = 1
 
sql_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

在这里插入图片描述

[root@docker01 mysqld]# vim run.sh

#!/bin/bash
/usr/local/mysql/bin/mysqld
systemctl enable mysqld

在这里插入图片描述

[root@docker01 mysqld]# docker build -t mysql:centos .
## 创建新镜像

在这里插入图片描述

[root@docker01 mysqld]# docker run --name=mysql_server -d -P --privileged mysql:centos /usr/sbin/init &
## 启动容器,并进行初始化

[root@docker01 mysqld]# docker ps -a
## 进容器给权限
CONTAINER ID   IMAGE          COMMAND            CREATED          STATUS          PORTS                                         NAMES
bfa8b848fef7   mysql:centos   "/usr/sbin/init"   44 seconds ago   Up 42 seconds   0.0.0.0:32768->3306/tcp, :::32768->3306/tcp   mysql_server

[root@docker01 mysqld]# docker exec -it bfa8b848fef7 /bin/bash

[root@bfa8b848fef7 mysql]# mysql -u root -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 3
Server version: 5.7.20 Source distribution

Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> grant all privileges on *.* to 'root'@'%' identified by 'abc123';
Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql> grant all privileges on *.* to 'root'@'localhost' identified by 'abc123';
Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)


在这里插入图片描述

在客户端连接mysql容器

[root@localhost ~]# yum install mariadb mariadb-server -y
## 安装mariadb 
[root@localhost ~]# systemctl start mariadb.service 
## 开启mariadb 

[root@localhost ~]# mysql -h 20.0.0.100 -u root -P 32768 -pabc123
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MySQL connection id is 4
Server version: 5.7.20 Source distribution

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MySQL [(none)]> 
## 远程登录mysql成功

在这里插入图片描述

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

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

相关文章

【C语言】指针进阶[上] (字符、数组指针、指针数组、数组传参和指针传参)

简单不先于复杂&#xff0c;而是在复杂之后。 目录 1. 字符指针 面试题 2. 指针数组 3. 数组指针 3.1 数组指针的定义 3.2 &数组名 VS 数组名 3.3 数组指针的使用 4. 数组参数、指针参数 4.1 一维数组传参 4.2 二维数组传参 4.3 一级指针传参 4.4 二…

数据预处理(Data Preprocessing)

Data Preprocessing 前言Why preprocess?Major Tasks in Data PreprocessingData CleaningIncomplete (Missing) DataWhat to Consider When Handling Missing Data?MCARMARMNAR How to Handle Missing Data - ImputationMore on ImputationEven More on ImputationPreproces…

K-Means和轮廓系数

K-Means和轮廓系数 K-means&#xff08;K均值&#xff09;是机器学习中一种常见的无监督算法&#xff0c;它能够将未知标签的数据&#xff0c;根据它们的特征分成不同组&#xff0c;每一组数据又称为“簇”&#xff0c;每一簇的中心点称为“质心”。其基本原理过程如下&#x…

【LeetCode】数据结构题解(3)[查找链表中倒数第k个节点]

查找链表种倒数第k个节点 1.题目来源2.题目描述3.解题思路4.代码展示 所属专栏&#xff1a;玩转数据结构题型 博主首页&#xff1a;初阳785 代码托管&#xff1a;chuyang785 感谢大家的支持&#xff0c;您的点赞和关注是对我最大的支持&#xff01;&#xff01;&#xff01; 博…

走进Dart虚拟机:深入理解高效卓越的运行机制

Dart虚拟机概述 Dart虚拟机是运行Dart代码的主要工具之一。Flutter框架使用Dart作为开发语言&#xff0c;因此Dart虚拟机在Flutter中扮演了非常重要的角色。 Dart虚拟机是一种解释器&#xff0c;它能够解释和执行Dart代码。Dart代码在虚拟机中被编译成字节码&#xff0c;然后…

windows开机启动软件、执行脚本,免登录账户

文章目录 前言一、打开任务计划程序1.我电脑上的是点搜索“任务计划程序”&#xff0c;可能每个电脑的搜索按钮不一样&#xff0c;自行查找2.打开后应该是长这样的 二、创建文件夹1.点击任务计划程序库、右键选择新建文件夹2.名字顺便&#xff0c;点击确定3.创建后如图、点击目…

Aspose.Slides for .NET V23 Crack

Aspose.Slides for .NET V23 Crack 现在&#xff0c;您可以在将演示文稿保存为HTML时保留文档缩放。 Aspose.Slides for.NET是一个演示文稿处理API&#xff0c;使应用程序能够读取、写入、修改和转换Microsoft PowerPoint演示文稿。作为一个独立的API&#xff0c;它提供了管理P…

【马蹄集】第八周作业

第八周作业 目录 MT2016 数据流的中位数MT2017 连续的串MT2027 一秒成零MT2033 碰碰车MT2036 移水造海 MT2016 数据流的中位数 难度&#xff1a;黄金  时间限制&#xff1a;1秒  占用内存&#xff1a;128M 题目描述 对于数据流问题&#xff0c;小码哥需要设计一个在线系统&…

RK3568芯片开发笔记——调试pwm控制红外功能

1、PWM介绍 参考博客&#xff1a;《ARM芯片开发&#xff08;S5PV210芯片&#xff09;——定时器、看门狗、RTC》&#xff1b; 2、配置pwm功能的方法 (1)内核层&#xff1a;内核代码里有pwm子系统&#xff0c;里面有pwm相关函数接口&#xff0c;如果是驱动代码里要操作pwm就需要…

从0搭建Vue3组件库(七):使用 gulp 打包组件库并实现按需加载

使用 gulp 打包组件库并实现按需加载 当我们使用 Vite 库模式打包的时候,vite 会将样式文件全部打包到同一个文件中,这样的话我们每次都要全量引入所有样式文件做不到按需引入的效果。所以打包的时候我们可以不让 vite 打包样式文件,样式文件将使用 gulp 进行打包。那么本篇文…

FBEC大会 | 瑞云科技 CTO 赵志杰:元宇宙时代的基础设施——实时云渲染

​ FBEC未来商业生态链接大会于2023年2月24日在深圳福田大中华喜来登酒店盛大召开&#xff0c;本次大会由广东省游戏产业协会、深圳市互联网文化市场协会指导&#xff0c;陀螺科技主办。 大会以“勇毅前行逐光而上”为主题&#xff0c;以具有行业前瞻洞察的“探索者”为视角&a…

docker以外挂目录的方式部署springboot项目

前置准备&#xff1a; 清单&#xff1a; 安装有docker的Linuxspringboot打包的jar文件&#xff08;该项目只有一个返回"hello world"接口&#xff09; Linux的IP地址&#xff1a;192.168.221.129 springboot项目的接口&#xff1a; 1、上传jar文件至Linux 我上传…

基于springboot的前后端分离的案列(一)

SpringBootWeb案例 前面我们已经讲解了Web前端开发的基础知识&#xff0c;也讲解了Web后端开发的基础(HTTP协议、请求响应)&#xff0c;并且也讲解了数据库MySQL&#xff0c;以及通过Mybatis框架如何来完成数据库的基本操作。 那接下来&#xff0c;我们就通过一个案例&#xf…

ArcGIS三体阴影(影像三维)显示马赛克?

我们经常基于ArcGIS通过DEM来做山体阴影 但是有时候你一放大就会出现很强的马赛克的效果 还有我们在利用ArcScene建三维场景 即使数据分辨率很高也会出现马赛克效果 那怎么来解决这个问题呢 让我们的山体阴影显示更加细腻 三维没有马赛克的效果呢&#xff1f; 右键图层选择如…

Java线程间通信方式

前文了解了线程的创建方式和状态切换&#xff0c;在实际开发时&#xff0c;一个进程中往往有很多个线程&#xff0c;大多数线程之间往往不是绝对独立的&#xff0c;比如说我们需要将A和B 两个线程的执行结果收集在一起然后显示在界面上&#xff0c;又或者比较典型的消费者-生产…

Linux内核进程管理与调度:策略优化与实践分析

Linux内核进程管理与调度 一、前言二、进程管理和多进程调度2.1 进程标识符和控制块2.2 进程状态和转换2.3 进程间通信 三、单处理器下的Linux进程调度3.1 Linux进程调度器3.2 时间片轮转调度算法3.3 最短剩余时间优先调度算法3.4 其他调度算法的不足 四、多处理器下的Linux进程…

【数据结构 ---基于C语言预备知识】

数据结构 ---基于C语言预备知识 一、对数据结构这门课的基础认识1.1 数据结构的定义&#xff1a;1.2 衡量算法的标准&#xff1a;主要的是1&#xff0c;21.3 数据结构的特点和地位&#xff1a; 二、预备知识&#xff1a;2.1 内存概念&#xff1a;2.2 预备知识指针&#xff08;复…

每日学术速递4.23

CV - 计算机视觉 | ML - 机器学习 | RL - 强化学习 | NLP 自然语言处理 Subjects: cs.CV 1.LiDAR-NeRF: Novel LiDAR View Synthesis via Neural Radiance Fields 标题&#xff1a;LiDAR-NeRF&#xff1a;通过神经辐射场的新型 LiDAR 视图合成 作者&#xff1a;Tang Tao, …

pytest 学习三(前置后置操作)

pytest测试框架_pytest框架-CSDN博客 一、常用的操作 一、setup/teardown 每个用例之前、之后执行 二、setup_class/teardown_class 在每个类之前、之后执行一次 二、pytest.fixture 设置前置后置操作范围 pytest.fixture(scope"",params,autouse,ids,name) 其中 sc…

TVM- End-to-End Optimization Stack for Deep Learning

TVM- End-to-End Optimization Stack for Deep Learning 引言 TensorFlow、MXNet、Caffe 和 PyTorch 等可扩展框架推动了深度学习当前的普及和实用性。然而&#xff0c;这些框架针对范围较窄的服务器级 GPU 进行了优化&#xff0c;将工作负载部署到其他平台&#xff08;例如手…