【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)。
相关推荐
飞翔沫沫情8 小时前
OpenEuler 发行版 二进制部署docker
docker·openeuler·容器引擎
我的golang之路果然有问题8 小时前
OpenTelemet 实习中了解到的部分
运维·服务器·opentelemetry
techzhi9 小时前
Docker 多架构镜像构建方案实施指南
docker·架构
Controller-Inversion9 小时前
负载均衡与反向代理
运维·负载均衡
呉師傅9 小时前
国产麒麟系统卡启动项或图标如何解决
运维·网络·windows·计算机外设·电脑
deriva9 小时前
nginx如何将某域名/二级站点/代理到二级站点?以ChirpStack实战为例
运维·nginx
遇见火星9 小时前
Linux 运维:删除大日志文件时避免磁盘 IO 飙升,echo 空文件 vs truncate 命令对比实操
linux·运维·服务器
云动课堂9 小时前
【运维实战】企业级Samba文件共享服务 · 一键自动化部署方案 (适配银河麒麟 V10 /openEuler /CentOS)
运维·centos·自动化
暴躁的鱼9 小时前
docker运行可登录的gerrit容器
运维·docker·容器