docker容器原理及简单且详细的使用

docker原理简单介绍

docker是一种虚拟化容器技术。
虚拟化:早期为了节约成本和学习只有在宿主机中基于 kvm(基于内核的虚拟机)等技术虚拟出来完整的操作系统,而这个完整的操作系统会大量的占用宿主机的硬件资源,当创建的虚拟机太多时就会造成宿主机与虚拟机的性能大幅下降。这时候容器技术就出现了。

容器:容器一般创建在虚拟机中,可以创建很多的容器,服务等程序运行在其中,互不影响,宿主机也是直接提供自己的内核硬件资源给其使用,合理使用了宿主机的资源,可以运行很多应用服务

docker容器中可以运行多个不同的服务程序等,方便管理,互不影响,合理地对宿主机的资源。事先下载某个镜像然后再在容器里面运行该镜像对应的服务,可以是多个服务;容器仓库有很多镜像,主要是网络与本地进行操作,可以根据自己pull或者push仓库;客户端可以对该容器、镜像等进行管理。

如下是图示:
在这里插入图片描述

以上原理描述根据自己学习后的理解来讲的

docker容器的安装及使用

学习期间先将防火墙和seLinux关闭

[root@localhost yum.repos.d]# systemctl stop firewalld
[root@localhost yum.repos.d]# setenforce 0

安装步骤

1,安装docker源,也可以自己指定源

dnf config-manager --add-repo=https://download.docker.com/linux/centos/docker-ce.repo

这时可以看到 /etc/yum.repos.d/ 目录下多了 个docker-ce.repo 的repo仓库,该仓库可以自动下载我们所需要的docker

源安装好了后执行如下命令

yum clean all      清除以前的yum缓存
yum makecache   重新加载

输入命令 yum list docker-ce 查看是否有docker ce 版本了

2,安装docker

dnf install docker-ce --nobest --allowerasing -y

稍等一会,安装好了后就查看是否安装好了

[root@localhost yum.repos.d]# docker version
Client: Docker Engine - Community
 Version:           23.0.5
 API version:       1.42
.....

这样就安装完成了

3,配置内核参数
如果外界想要访问到docker容器,docker容器就需要网络流量,网络方式与宿主机桥接方式相连
写入以下:

[root@localhost yum.repos.d]# cat <<EOF > /etc/sysctl.d/docker.conf 
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.conf.default.rp_filter = 0
net.ipv4.conf.all.rp_filter = 0
net.ipv4.ip_forward=1
EOF

然后运行下面参数

modprobe br_netfilter     自动启动一些内核模块
sysctl -p /etc/sysctl.d/docker.conf   加载参数

4,配置docker加速器

先创建一个文件:touch /etc/docker/daemon.json,写入以下参数

{
	"registry-mirrors" : [
		"https://8xpk5wnt.mirror.aliyuncs.com"
	]
}	

然后命令:systemctl daemon-reload

5,运行docker

systemctl start docker

这时候docker就启动了,接下来简单使用以下docker

docker的完整简单的使用

一些docker 命令:

 docker pull 镜像    拉取某个镜像,用于后面创建该镜像的容器
 docker image ls    查看本地有的镜像
 docker rmi 镜像id     删除某个镜像
 docker ps            查看运行起的容器
 docker search 。。。   搜索有没有某个镜像
 docker run 参数 镜像的名字/id                运行某个镜像
 如 docker run -d -p 80:80 nginx    解释: -d 是后台运行容器的意思,-p是端口映射,将宿主机的80端口映射为容器80端口,当访问宿主机80端
 口时就会访问到容器的80端口	 
 docker stop 容器id        停止某个容器

要在容器中运行某个服务,就先要获取该服务的镜像
1,获取某个镜像(以httpd 服务为例)
获取httpd 镜像,先查看有没有httpd 镜像

[root@localhost yum.repos.d]# docker search httpd
NAME                                 DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
httpd                                The Apache HTTP Server Project                  4409      [OK]       
clearlinux/httpd                     httpd HyperText Transfer Protocol (HTTP) ser…   2                    
paketobuildpacks/httpd                                                               0 
......

运行以上代码发现有叫httpd的镜像,就是第一个,而且是官方的。

获取该镜像:

[root@localhost yum.repos.d]# docker pull httpd

查看已经获取到的镜像,发现有httpd

[root@localhost yum.repos.d]# docker image ls
REPOSITORY    TAG       IMAGE ID       CREATED         SIZE
httpd         latest    dabbfbe0c57b   16 months ago   144MB
hello-world   latest    feb5d9fea6a5   19 months ago   13.3kB

2,运行该镜像,该镜像会在容器中运行

[root@localhost yum.repos.d]# docker run -d -p 80:80 httpd
d7bac3e1e750c3d8858368a80497aeb4592534ad37a3f24ede106f48055eb3d0

命令解释: -d 是后台运行容器的意思,-p是端口映射,将宿主机的80端口映射为容器80端口,当访问宿主机80端
口时就会访问到容器的80端口

查看运行的80端口:

[root@localhost yum.repos.d]# netstat -lntup 
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 127.0.0.1:631           0.0.0.0:*               LISTEN      1085/cupsd          
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      43008/docker-proxy  
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      1089/sshd: /usr/sbi 
tcp6       0      0 ::1:631                 :::*                    LISTEN      1085/cupsd          
tcp6       0      0 :::80                   :::*                    LISTEN      43014/docker-proxy  

可以发现80端口是docker代理的

3,宿主机访问该容器里面的内容

该虚拟机ip为192.168.190.129 具体根据自己虚拟机ip来看
访问的结果如下图:

在这里插入图片描述
到此完整的一个docker简单使用就完成了

思考:不用docker部署httpd服务怎么实现?

参考以前写的文章,http服务器搭建及案例。

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

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

相关文章

Oracle LiveLabs实验:DB Security - Data Masking and Subsetting (DMS)

概述 本实验介绍了适用于 Enterprise Manager 的 Oracle 数据屏蔽和子集 (DMS) 包的各种特性和功能。 它使用户有机会学习如何配置这些功能&#xff0c;以便在非生产环境中保护他们的敏感数据。 此实验申请地址在这里&#xff0c;时间为60分钟。 本实验也是DB Security Adva…

无惧黑暗强光,纯视觉导航也能全天候作业

对于一台激光导航扫地机器人而言&#xff0c;全天候作业并非难事&#xff0c;那么纯视觉导航扫地机器人能做到吗&#xff1f; 无论对于人&#xff0c;还是机器人&#xff0c;光线环境的变化对“眼睛”的影响都是致命的。由于视觉传感器对于光线十分敏感&#xff0c;在家庭场景…

linux入门---软硬链接

软链接 使用指令ln -s 被链接的文件 生成的软链接文件 便可以创建软连接文件&#xff0c;ln是link的简写表明当前要创建链接文件&#xff0c;s是soft的简写表明当前创建的链接文件为软链接文件&#xff0c;然后加上被链接的文件&#xff0c;最后写上生成的链接文件的文件名比如…

使用 ArcGIS Pro 进行土地利用分类的机器学习和深度学习

随着技术进步,尤其是地理信息系统 (GIS)工具的进步,可以更有效地对土地利用进行分类。分类的使用可用于识别植被覆盖变化、非法采矿区和植被抑制区域,这些只是土地利用分类的众多示例中的一部分。 分类的一大困难是确定要解决的问题的级别。我分类的目的是什么?分类是否需…

【科普知识】电机的10种工作制说明:S1~S10

如今&#xff0c;在我们的生活中&#xff0c;电机几乎无处不在&#xff0c;从国防、工农、运输、临床器械、通讯到生活中的洗衣机、风扇、吸尘器、电动机器人等&#xff0c;都在应用着各式各样的电动机。 电机作为一种能够将电能转换成机械能的装置&#xff0c;是现代工业生产和…

【搭建私有云盘】无公网IP,在外远程访问本地微力同步

文章目录 1.前言2. 微力同步网站搭建2.1 微力同步下载和安装2.2 微力同步网页测试2.3 cpolar的安装和注册 3.本地网页发布3.1 Cpolar云端设置3.2 Cpolar本地设置 4. 公网访问测试5. 结语 1.前言 私有云盘作为云存储概念的延伸&#xff0c;虽然谈不上多么新颖&#xff0c;但是其…

快速上手非关系型数据库Redis

一、Redis介绍 1.非关系型数据库&#xff0c;纯内存操作&#xff0c;key-value存储&#xff0c;性能很高&#xff0c;可持久化&#xff08;内存---->保存到硬盘上&#xff09; 2.缓存&#xff0c;计数器&#xff0c;验证码&#xff0c;geo地理位置信息&#xff0c;发布订阅…

RocketMq windows 安装

RocketMq安装步骤&#xff1a; 1、直接在官网下载。也可以从这里自取 https://rocketmq.apache.org/download/ 2、修改bin目录下的文件 runserver.cmd 和 runbroker.cmd文件。主要修改所占用内存的大小。 runserver.cmd 修改如下&#xff1a; runbroker.cmd 修改如下&#xff…

【人脸检测】——Sample and Computation Redistribution for Efficient Face Detection论文简读

人脸检测 摘要 在非受控人脸检测方面已经取得了巨大的进步&#xff0c;但低计算成本和高精度的高效人脸检测仍然是一个开放的挑战。作者提出了两种简单而有效的方法&#xff1a;样本再分配&#xff08;SR&#xff09;和计算再分配&#xff08;CR&#xff09;。在WIDER FACE上进…

AI失业潮来袭,某些部门裁员过半

历史的车轮滚滚向前&#xff0c;每次生产力的大幅跃进&#xff0c;都会造成一批失业潮。想当年&#xff0c;纺纱机的出现让无数手工作坊的织布师傅失业。如今&#xff0c;在AI技术的催化下&#xff0c;同样的事正在互联网行业的各个领域重演。 疯狂的裁员浪潮 “AI15秒做的&am…

np.convolve(x,h, mode=‘##‘)的使用

用法&#xff1a; np.convolve(a,v,mode) a代表卷积数据&#xff0c;v卷积核大小&#xff0c;mode卷积方式&#xff0c;mode卷积方式有三种 same full valid mode可能的三种取值情况&#xff1a; full’ 默认值&#xff0c;返回每一个卷积值&#xff0c;长度是NM-1,在卷积的…

【策略设计模式详解】C/Java/JS/Go/Python/TS不同语言实现

简介 策略模式&#xff08;Strategy Pattern&#xff09;属于行为型设计模式。将每一个算法封装到具有共同接口的独立类中&#xff0c;根据需要来绑定策略&#xff0c;使得具体实现和策略解耦。 当你想使用对象中各种不同的算法变体&#xff0c;使用if...else 所带来的复杂和…

Python入门教程+项目实战-11.5节: 程序实战-选择排序算法

目录 11.5.1 排序算法简介 11.5.2 选择排序算法 11.5.3 系统学习python 11.5.1 排序算法简介 所谓排序&#xff0c;是指将数据集合中的元素按从小到大的顺序进行排列&#xff0c;或按从大到小的顺序进行排列。前者称为升序排序&#xff0c;后者称为降序排序。在数据结构与算…

【Java笔试强训 7】

&#x1f389;&#x1f389;&#x1f389;点进来你就是我的人了博主主页&#xff1a;&#x1f648;&#x1f648;&#x1f648;戳一戳,欢迎大佬指点! 欢迎志同道合的朋友一起加油喔&#x1f93a;&#x1f93a;&#x1f93a; 目录 一、选择题 二、编程题 &#x1f525;Fibona…

( 哈希表) 594. 最长和谐子序列 ——【Leetcode每日一题】

❓594. 最长和谐子序列 难度&#xff1a;简单 和谐数组是指一个数组里元素的最大值和最小值之间的差别 正好是 1 。 现在&#xff0c;给你一个整数数组 nums &#xff0c;请你在所有可能的子序列中找到最长的和谐子序列的长度。 数组的子序列是一个由数组派生出来的序列&am…

AWSFireLens轻松实现容器日志处理

applog应用程序和fluent-bit共享磁盘&#xff0c;日志内容是json格式数据&#xff0c;输出到S3也是JSON格式 applog应用部分在applog目录&#xff1a; Dockerfile文件内容 FROM alpine RUN mkdir -p /data/logs/ COPY testlog.sh /bin/ RUN chmod 777 /bin/testlog.sh ENTRYP…

MySQL知识学习01

1、什么是关系型数据库? 顾名思义&#xff0c;关系型数据库&#xff08;RDBMS&#xff0c;Relational Database Management System&#xff09;就是一种建立在关系模型的基础上的数据库。关系模型表明了数据库中所存储的数据之间的联系&#xff08;一对一、一对多、多对多&am…

宏基因组组装 | 就现在!做出改变!!

微生态研究的核心难点是什么&#xff01; 基因组组装&#xff01; 从宏基因组数据中组装获得细菌的完整基因组&#xff08;complete MAGs&#xff09;是微生物组研究的长期目标&#xff0c;但基于NGS的宏基因组测序和组装方法是无法实现完整的细菌基因组组装的。即便是红极一…

【五一创作】Apollo(入门)

Apollo(入门) Quick Start 配置中心是一种统一管理各种应用配置的基础服务组件 Apollo&#xff08;阿波罗&#xff09;是携程框架部门研发的分布式配置中心&#xff0c;能够集中化管理应用不同环境、不同集群的配置&#xff0c;配置修改后能够实时推送到应用端&#xff0c;并且…

使用pands.rolling方法实现移动窗口的聚合计算

一个问题举例 假设有一个5天的收益数据&#xff0c;需要每3天求出一次平均值来达成某个需求&#xff1a; daterevenue2023-05-01102023-05-02202023-05-03302023-05-04402023-05-0550 1号、2号和3号的数据求一次平均值&#xff0c;2号、3号和4号的数据求一次平均值&#xff…