【Kubernetes专项】Docker 容器部署及基本用法

Docker容器

官网地址:https://www.docker.com/

一、部署Docker服务

0.0 配置基础信息、关闭防火墙及SELinux

bash 复制代码
# 配置静态IP地址并编写主机名(以下使用的dns为阿里云的dns服务器)
~]# nmcli c show
~]# nmcli c modify 网卡名 ipv4.method manual ipv4.addresses xxxx ipv4.gateway xxxx ipv4.dns 223.5.5.5
~]# hostnamectl set-hostname xxxx
~]# bash

~]# systemctl disable --now firewalld
~]# vi /etc/selinux/config
SELINUX=disabled

~]# reboot

1.0 部署软件仓库并安装Epel拓展库

bash 复制代码
~]# cd /etc/yum.repos.d/
yum.repos.d]# rm -rf *

[root@localhost ~]# vim /etc/yum.repos.d/aliyun.repo
[AppStream]
name=AppStream
baseurl=https://mirrors.aliyun.com/rockylinux/8/AppStream/x86_64/os/
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/rockylinux/8/AppStream/x86_64/os/RPM-GPG-KEY-rockyofficial

[BaseOS]
name=BaseOS
baseurl=https://mirrors.aliyun.com/rockylinux/8/BaseOS/x86_64/os/
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/rockylinux/8/AppStream/x86_64/os/RPM-GPG-KEY-rockyofficial

yum clean all && yum makecache
# 下载Epel库
[root@docker ~]# rpm -ivh https://mirrors.aliyun.com/epel/epel-release-latest-8.noarch.rpm

[root@docker ~]# /usr/bin/crb enable
[root@docker ~]# yum install epel-release

1.1 配置时间同步

bash 复制代码
# 配置时间同步并创建计划性任务
~]# yum install -y chrony

# 这里使用的是阿里云的ntp时间同步服务器
~]# vim /etc/chrony.conf
3 server ntp.aliyun.com iburst

~]# systemctl enable --now chronyd.service
~]# systemctl restart chronyd.service

# 后续如果出现偏差,使用以下两个命令进行查看并手动同步
]# chronyc sources
]# chronyc makestep

1.2 安装Docker服务

1.2.1 方法一
bash 复制代码
[root@docker ~]# vim /etc/yum.repos.d/docker-ce.repo
[docker-ce]
name=docker-ce
baseurl=https://mirrors.aliyun.com/docker-ce/linux/rhel/8/x86_64/stable/
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/docker-ce/linux/rhel/gpg

# 修改机器内核参数
# 有些操作系统执行`modprobe br_netfilter`会报错(那就不用管了)
[root@docker ~]# modprobe br_netfilter
[root@docker ~]# vim /etc/sysctl.d/docker.conf
[root@docker ~]# sysctl -p /etc/sysctl.d/docker.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
1.2.2 方法二
bash 复制代码
`yum-utils`是一个yum包管理器
~]# yum install yum-utils -y

# 阿里云官网去寻找docker的在线源
https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# 进行下载repo文件(根据操作系统去选择适于自己的)
 ~]# yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/rhel/docker-ce.repo
 
 ~]# yum clean all && yum makecache
 
[root@localhost ~]# vim /etc/yum.repos.d/docker-ce.repo
[docker-ce]
name=docker-ce
baseurl=https://mirrors.aliyun.com/docker-ce/linux/rhel/8/x86_64/stable/
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/docker-ce/linux/rhel/gpg

# 修改机器内核参数
# 有些操作系统执行`modprobe br_netfilter`会报错(那就不用管了)
[root@docker ~]# modprobe br_netfilter
[root@docker ~]# vim /etc/sysctl.d/docker.conf
[root@docker ~]# sysctl -p /etc/sysctl.d/docker.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1

net.bridge.bridge-nf-call-ip6tables = 1

允许 Linux 内核在网络层面上进行 IPv6 数据包的过滤和处理;

net.bridge.bridge-nf-call-iptables = 1

允许 Linux 内核在网络层面上进行 IPv4 数据包的过滤和处理

net.ipv4.ip_forward = 1

启用了 Linux 内核的 IP 转发功能,允许 Linux 主机将收到的数据包从一个网络接口转发到另一个网络接口

bash 复制代码
# 进行安装Dcoker
[root@docker ~]# yum install -y docker-ce
[root@docker ~]# systemctl enable --now docker
[root@docker ~]# systemctl status docker.service -l

1.3 配置Docker镜像加速器

不会科学上网,不想等待很长时间,不想拉取很慢,就正常看步骤配置即可。

此时,不想搭建私有Harbor仓库或者不想访问dockerhub的话。

这里可以购买阿里云云产品-ACR-容器镜像服务

https://www.aliyun.com/product/acr

还是建议搭建私有Harbor仓库

bash 复制代码
# 这里的话,先不进行搭建Harbor仓库
# 先使用加速地址来练习
# 以下daemon.json来源不清楚,所以慎用但是练习足够了
[root@docker ~]# vim /etc/docker/daemon.json
{
"registry-mirrors":["https://a88uijg4.mirror.aliyuncs.com","https://docker.lmirror.top","https://docker.m.daocloud.io", "https://hub.uuuadc.top","https://docker.anyhub.us.kg","https://dockerhub.jobcher.com","https://dockerhub.icu","https://docker.ckyl.me","https://docker.awsl9527.cn","https://docker.laoex.link"],
"insecure-registries":["192.168.40.62","harbor"]
}

[root@docker ~]# systemctl daemon-reload
[root@docker ~]# systemctl restart docker.service

# 进行测试,拉取成功即可
[root@docker ~]# docker pull nginx
[root@docker ~]# docker images

二、Docker的基本用法

2.1 Docker的基本操作

bash 复制代码
# 以下操作使用的都是案例,请根据实际情况进行操作
# 拉取镜像
[root@docker ~]# docker pull busybox
# 查看所有镜像
[root@docker ~]# docker images
# 做成离线镜像文件
[root@docker ~]# docker save -o busybox.tar.gz busybox:latest
# 加载离线镜像文件
[root@docker ~]# docker load -i busybox.tar.gz
# 删除镜像
[root@docker ~]# docker rmi -f xxx

如果遇到pull拉取不下来的,请使用资源包里面的文件,谢谢

2.2 容器的相关操作

bash 复制代码
# 以交互式方式启动并进入容器
docker ~]# docker run --name=hello -it rockylinux:8.9 /bin/bash
1.`docker run`		--> 创建并运行一个容器
2.`--name=hello`	--> 为此容器指定一个名称,名称为"hello" 
3.`-it`
	`-i`:保持标准输入打开,可以进入到容器中输命令
	`-t`:为此容器分配一个伪终端,可以看到终端的输出
	`-it`:这俩参数通常一起使用	--> 在容器中启动一个交互式的shell
4.`/bin/bash`		-->	在容器启动后运行的命令	--> 启动Bash Shell

# 退出的话使用exit或者ctrl+d
docker ~]# docker run --name=hello -it rockylinux:8.9 /bin/bash
[root@acb0b3bee6e6 /]# exit
exit

# 查看正在运行的容器
[root@docker ~]# docker ps
# 查看停止和运行的容器
[root@docker ~]# docker ps -a
bash 复制代码
# 以守护进程方式启动
docker ~]# docker run --name=xixi -d rockylinux:8.9
1.`-d`:后台运行
	
[root@docker ~]# docker ps

# 进入到容器
[root@docker ~]# docker exec -it xixi /bin/bash
[root@a6e9d8e13826 /]# exit
exit

# 停止与启动容器
[root@docker ~]# docker stop xixi
[root@docker ~]# docker start xixi

# 删除容器(docker rm -f --> 请注意!docker里面没有 -rf,只有 -f)
[root@docker ~]# docker ps -a
[root@docker ~]# docker rm -f xxx

# 查看docker的帮助
docker ~]# docker --help
bash 复制代码
示例:使用docker部署nginx服务
]# docker run --name nginx -p 80 -it rockylinux:8.9

/]# yum install -y wget nginx vim
[root@0d76a2a78830 /]# mkdir -p /usr/share/nginx/html/Mine/
[root@0d76a2a78830 /]# vim /usr/share/nginx/html/Mine/index.html
Kaser is my name.
[root@0d76a2a78830 /]# vim /etc/nginx/nginx.conf
42         root         /usr/share/nginx/html/Mine;

# 容器里面启动服务并访问测试
[root@0d76a2a78830 /]# /usr/sbin/nginx
[root@0d76a2a78830 /]# curl `hostname -I`
Kaser is my name.

# 再打开一个终端查看端口
[root@docker ~]# docker ps | grep nginx
0.0.0.0:32770->80/tcp, [::]:32770->80/tcp   nginx
[root@docker ~]# curl 172.25.254.10:32770
Kaser is my name.
# 容器关闭之后,再次访问就会出现:
[root@docker ~]# curl 172.25.254.10:32770
curl: (7) Failed to connect to 172.25.254.10 port 32770: Connection refused

提问:访问http://172.25.254.10:32700为何能请求到docker容器内的Nginx服务?

bash 复制代码
1、当你访问 http://172.25.254.10:32700 时,请求首先到达 Docker 主机的 32700 端口。
2、Docker 的 iptables 规则会将这个端口上的请求转发到 docker0 网桥上的某个 veth 接口,对应到目标容器的 IP 地址和端口。
3、容器内的服务:
	1.容器内的 nginx 服务接收到请求,处理并生成响应。
	2.响应通过容器内的 eth0 接口,再通过 veth 对回到 docker0 网桥,最后回到主机的网络接口。

4、响应回到客户端:
	1.响应沿着同样的路径返回,最终通过 Docker 主机的 32768 端口返回给发起请求的客户端。

备注:
docker0网桥是啥?
	1.docker0 网桥作为一个虚拟交换机,会将来自主机的网络流量转发到目标容器的 veth 设备上。
	2.docker0 网桥使主机和容器之间可以透明地通信。

veth是啥?
	1.主机上的 veth 设备将流量通过 docker0 网桥传递给与其配对的容器内的 eth0(或相应的网络接口)。
	2.容器内的 eth0 接口接收到流量后,将其转发到容器内监听该端口的服务(例如 nginx)。
相关推荐
qq_3168377513 小时前
docker 运行 cn_clip
运维·docker·容器
_叶小格_13 小时前
cp、scp、rsync命令详解
linux·运维·服务器·ubuntu·centos·运维开发
sunshine88513 小时前
合规性管理:财务安全与业务连续性的双重保障
大数据·运维·人工智能
i建模14 小时前
linux断点续传下载文件
linux·运维·服务器
木卫二号Coding14 小时前
Docker-构建自己的Web-Linux系统-Ubuntu:22.04
linux·前端·docker
春日见14 小时前
win11 分屏设置
java·开发语言·驱动开发·docker·单例模式·计算机外设
小天源14 小时前
CentOS 7介绍及其下载
linux·运维·ubuntu·centos·麒麟·windows11·windows10
岳来14 小时前
网络小白理解容器网络endpointid
网络·docker·endpoint
闫记康15 小时前
linux配置ssh
linux·运维·服务器·学习·ssh
2401_8590490815 小时前
lvgl移植到Linux踩坑
linux·运维·arm开发·elasticsearch·嵌入式·ubantu