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

news/2024/12/2 15:46:40/

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 - CommunityVersion:           23.0.5API 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服务器搭建及案例。


http://www.ppmy.cn/news/56094.html

相关文章

垃圾回收器ZGC应用分析总结

目录 一、基本概述 二、基本关键技术知识总结 &#xff08;一&#xff09;三色标记法&#xff08;着色指针&#xff09; &#xff08;二&#xff09;读屏障 &#xff08;三&#xff09;多图映射 &#xff08;四&#xff09;简单场景说明ZGC并发 三、基本回收原理介绍 四…

成为黑客猎手:从零开始学习漏洞挖掘的完整指南

一.了解基础知识 学习计算机网络、操作系统、编程语言等相关基础知识&#xff0c;这些知识对于后续的漏洞挖掘和利用非常重要。具体建议如下&#xff1a; 学习计算机网络基础知识&#xff0c;例如 OSI 模型、TCP/IP 协议、HTTP 协议等。推荐书籍&#xff1a;《计算机网络》。…

智融合·共未来丨智合同携手百融云创打造合同智能化应用服务平台

人工智能技术是当今社会的热议话题之一。近年来&#xff0c;众多企业在人工智能领域持续布局&#xff0c;相关技术已在社会生产各环节极大地提高了生产效率。如果把过去信息技术产业的发展比喻为“手工时代”&#xff0c;那么人工智能技术的出现则将把信息技术产业推向“自动化…

Linux常用命令——ip6tables命令

在线Linux命令查询工具 ip6tables linux中防火墙软件 补充说明 ip6tables命令和iptables一样&#xff0c;都是linux中防火墙软件&#xff0c;不同的是ip6tables采用的TCP/ip协议为IPv6。 语法 ip6tables(选项)选项 -t<表>&#xff1a;指定要操纵的表&#xff1b; …

Python深度学习十大核心算法!

深度学习已经成为了一种热门的技术,它的应用领域正在不断扩大。在深度学习中,有一些核心的算法是非常重要的,这些算法为深度学习的应用提供了强大的基础。在本文中,我们将介绍基于Python深度学习的十大核心算法。 卷积神经网络卷积神经网络(Convolutional Neural Network,…

【方法】 如何批量将RAR或其他压缩格式转换成ZIP?

压缩文件的格式有很多种&#xff0c;比如RAR、ZIP、7-Zip、CAB、ARJ、ACE、TAR、BZ2等等。因为需求不同&#xff0c;或者不同平台对上传的压缩包格式要求不同&#xff0c;我们往往需要把压缩文件进行格式转换&#xff0c;那压缩文件不同格式之间如何进行转换呢&#xff1f; 如…

RUST 每日一省:泛型约束——trait

使用泛型编程时&#xff0c; 很多情况下的行为并不是针对所有类型都实现的&#xff0c;用trait作为泛型的约束。例如&#xff0c;我们编写一个判断两个变量大小的泛型函数&#xff0c;编译时&#xff0c;会运行如下错误。 fn max<T>(a: T, b: T) -> T {if a < b {…

如果用上以下几种.NET EF Core性能调优,那么查询的性能会飙升

1、避免在循环中进行查询操作&#xff1a; 避免在循环中进行查询操作&#xff0c;可以将查询结果缓存到内存中&#xff0c;然后对内存中的数据进行操作&#xff0c;可以提高性能。这种方式适合集合数据量少的数据&#xff0c;否则利大于弊。 // 不建议的方式&#xff1a;在循…