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

docker原理简单介绍

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

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

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

如下是图示:
docker容器原理及简单且详细的使用_第1张图片

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

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 < /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容器原理及简单且详细的使用_第2张图片
到此完整的一个docker简单使用就完成了

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

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

你可能感兴趣的:(docker,运维,容器)