随便聊聊
说起来有一段时间没有更新文章了,最近不是忙着出差就是一堆繁忙的工作,还要去考驾照……周六日确实懒散了些,睡睡懒觉,打打游戏,陪对象刷刷剧……放松了下。
今日心血来潮,后面想赶紧把Docker以及K8S的技术学习整理下,虽然是干开发的,但是偏偏又对运维感兴趣,好像没救了哈哈哈,那就都学点吧。话不多聊了,直接干货整起。
Docker初探
其实说到Docker,不管是业内的开发者还是运维应该都不陌生,大多都有接触到的。无非就是几个关键的概念,简单介绍一下:
-
客户端:是用户与Docker交互的主要方式,说白了就是使用Docker的那台机器 -
镜像:镜像是一个只读模板,包含一个完整应用程序运行所需的所有内容,就是一个容器模板 -
容器:Docker容器是从Docker镜像创建的可运行实例,理解为创建的虚拟服务器实例 -
仓库:可以将自己创建的镜像放入仓库中和其他人员共享,理解为代码私服(如gitlab)
还有一个老生常谈的问题,Docker和传统部署的区别?
-
首先捏,Docker有着比虚拟机更少的抽象层。Docker是直接使用宿主机(客户端)的硬件资源的,它不需要Hypervisor实现硬件资源虚拟化。因此在CPU、内存利用率上有很大的优势。 -
然后捏,Docker利用的是宿主机的内核,不需要Guest OS。创建一个容器执行时,Docker不需要像传统服务器一样开机加载各种各样的系统资源内核。所以创建启动一个Docker容器只需要几秒而已,但是传统服务器需要开机、加载….不知不觉,几分钟已经没了。
安装配置Docker
介绍下笔者的服务器配置,租的一个,比较便宜:
-
操作系统:CentOS7.9 -
内存和配置:4Gib/2vCPU
配置主机名
执行命令配置主机名:
hostnamectl set-hostname haohaomaster1 && bash
命令分为两个部分:
-
hostnamectl set-hostname haohaomaster1 : 设置主机名haohaomaster1 -
&& bash: &&表示前一个命令执行成功后,执行后面的命令。而bash是相当于打开一个新的命令行窗口,继续执行后续的命令
服务器设置主机名后,其他服务(一般指本机上的一些服务)可以通过此主机名找到这个Docker机器。
配置时间同步
为避免主机因长时间运行导致的时间偏差,需要进行时间同步,Linux中,一般使用ntpdate
yum -y install ntpdate # 安装
ntpdate cn.pool.ntp.org # 表示和网络源同步
若是内网机器,可以单独搭建一个时间同步服务器,与内网时间进行同步。
编写计划任务
crontab -e
写入下面的内容:
* * * * * /usr/sbin/ntpdate cn.pool.ntp.org
每分钟执行一个ntpdate命令,将时间进行同步。
重启crond使命令生效
systemctl restart crond
安装基础软件包
在CentOS操作系统的默认最小版本中,没有集成我们所需要的很多软件包,因此要手动安装它们。
yum -y install wget net-tools nfs-utils lrzsz gcc gcc-c++ make cmake libxml2-devel openssl-devel curl curl-devel unzip sudo ntp libaio-devel ncurses-devel autoconf automake zlib-devel python-devel epel-release openssh-server socat ipvsadm conntrack
安装Docker-CE
CentOS默认的yum源不可以安装Docker,因此需要配置国内阿里云yum源以安装Docker-CE。通过配置国内阿里云yum源,安装Docker的速度会快很多。
yum-config-manager sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
执行完毕后,就可以使用yum命令进行安装、更新、卸载Docker-CE了。
yum -y install docker-ce
启动&&设置开机自启
systemctl start docker && systemctl enable docker
查看Docker状态
systemctl status docker
修改内核参数(某些Linux发行版需要)
安装Docker时,通常需要加载br_netfilter内核模块以确保Docker正常工作。因为Docker运行时需要创建一个网络桥接设备(Bridge Device),以便将容器内部的网络连接到宿主机上面。而
br_netfilter
提供了必要的网络过滤功能,能使Linux内核对网络数据包进行转发和过滤。
内核参数一般不需要修改,但是需要注意的是:有些Linux发行版中,br_netfilter可能未被默认加载。所以必须手动加载后,才能使Docker正常工作。
-
执行命令
modprobe br_netfilter
-
在 /etc/sysctl.d/
下创建docker.conf文件,写入以下内容
cat > /etc/sysctl.d/docker.conf <<EOF
net.bridge.bridge-nf-call-ip6tables=1
net.bridge.bridge-nf-call-iptables=1
net.ipv4.ip_forward=1
EOF
net.ipv4.ip_forward
:是Linux内核一个配置项,用于控制开启IP转发功能。使用场景:如VPN服务,两台PC链接VPN后,需要访问或发送给对方的网络数据包资源
net.bridge.bridge-nf-call-ip6tables=1
和net.bridge.bridge-nf-call-iptables=1
,开启IPV4和IPV6的网络桥接防火墙规则。确保容器之间的通信只可以通过Docker的桥接网络进行,而不可以直接通过主机网络接口进行。
-
使修改生效
sysctl -p /etc/sysctl.d/docker.conf
-
重启docker
systemctl restart docker
配置docker镜像加速
国内从Docker Hub拉取镜像有时会遇到困难,此时可以配置镜像加速器。如:
-
科大镜像站点:https://Docker.mirrors.ustc.edu.cn/ -
网易163镜像站点:https://hub-mirrors.c.163.com/ -
阿里云镜像站点:https://<你的阿里镜像仓库ID>.mirrors.aliyuncs.com
修改/etc/docker/daemon.json
文件,内容如下:
{
"registry-mirrors":[
"https://6yqx5sih.mirror.aliyuncs.com",
"https://hub-mirrors.c.163.com/",
"https://Docker.mirrors.ustc.edu.cn/"
]
}
重启以生效:
systemctl restart docker
Docker镜像与容器
Docker包含3个核心部分:镜像、容器和仓库。其中镜像是Docker运行容器的基础,可以理解为VM模板。镜像由多层组成,每层叠加之后形成一个独立的对象,内部包含精简的操作系统和应用运行所需要的文件和依赖项。
容器是基于镜像创建的可运行实例,每个容器都是相互隔离的运行环境,拥有自己的系统、网络、进程空间等。在运行容器之前,确保本地有对应的镜像,若本地不存在镜像,那么Docker会去镜像仓库下载该镜像到本地。
镜像命令
查找镜像
docker search centos
-
拉取镜像到本地
docker pull centos
-
查看本地镜像
docker images
-
将镜像做成离线文件
若Docker Hub或其他镜像站点不能下载镜像,或内网机器不能联网,可以把镜像做成压缩包,然后上传到其他的机器上。
docker save -o centos.tar.gz centos
centos.tar.gz
: 是压缩包的名称
centos
:镜像名
-
解压镜像文件
将一个包含镜像的压缩文件解压加载到本地的Docker镜像仓库中
docker load -i centos.tar.gz
-
删除镜像
-f
:强制删除
docker rmi -f centos
容器命令
创建启动容器
# 交互式 i:交互式 t:伪tty
docker run --name=hello1 -it centos /bin/bash
# 退出容器
exit
# 守护进程式容器 d:后台 t:伪tty
docker run --name=hello2 -td centos
-
进入容器
# i:交互式 t:伪终端
docker exec -it
-
常用命令
docker ps # 在运行的容器
docker start 容器名或id # 启动容器
docker stop 容器名或id # 停止容器
docker restart 容器名或id # 重启容器
docker rm -f hello1 # 强制删除容器
# 命令帮助查询
docker --help
案例:Docker基于CentOS部署Nginx
首先创建、启动容器:
docker run --name nginx -p 80:80 -itd centos
# --name 容器名
# -p 80:80 第一个80是宿主机端口 第二个是容器端口 就是把容器的80端口映射到宿主机的80端口上
# -itd 交互式启动,并在后台运行
-
查看容器是否正常
docker ps |grep nginx
-
容器正常运行,进入容器开始安装配置Nginx
# 进入容器
# -it 交互式进入容器
# /bin/bash 启动一个新的bash终端
docker exec -it nginx /bin/bash
-
若是下载的CentOS8的镜像,那么需要去配置下yum源
# 进入yum相关配置目录
cd /etc/yum.repos.d/
sed -i 's/mirrorlist/#mirrorlist/g' /etc/yum.repos.d/CentOS-*
sed -i 's|#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g' /etc/yum.repos.d/CentOS-*
# 生成缓存更新
yum makecache
-
安装启动Nginx
# 安装nginx
yum -y install nginx
# 启动Nginx
/usr/sbin/nginx
然后捏,从外部访问的话,记得把宿主机的80端口开一下或设置成别的都行。
原文始发于微信公众号(小路同学ovo):Docker初探及网络内核参数
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/267579.html