随便聊聊Docker技术及一些内核参数设置

随便聊聊

​ 说起来有一段时间没有更新文章了,最近不是忙着出差就是一堆繁忙的工作,还要去考驾照…周六日确实懒散了些,睡睡懒觉,打打游戏,陪对象刷刷剧…放松了下。

​ 今日心血来潮,后面想赶紧把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=1net.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端口开一下或设置成别的都行。

在这里插入图片描述

相关推荐

  1. Docker 一些设置

    2024-03-30 17:22:03       60 阅读
  2. Node docker 容器部署配置参数

    2024-03-30 17:22:03       43 阅读
  3. Docker必掌握命令参数Top10

    2024-03-30 17:22:03       51 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-30 17:22:03       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-30 17:22:03       101 阅读
  3. 在Django里面运行非项目文件

    2024-03-30 17:22:03       82 阅读
  4. Python语言-面向对象

    2024-03-30 17:22:03       91 阅读

热门阅读

  1. Docker compose容器编排

    2024-03-30 17:22:03       39 阅读
  2. git工作流

    2024-03-30 17:22:03       41 阅读
  3. synchronized 和 ReentrantLock 的区别是什么

    2024-03-30 17:22:03       44 阅读
  4. 创新研报 | 2024+人工智能安全报告

    2024-03-30 17:22:03       44 阅读
  5. 海外服务器受到黑客攻击怎么办

    2024-03-30 17:22:03       38 阅读
  6. 小米汽车发布了

    2024-03-30 17:22:03       52 阅读
  7. 互联网找工作该选择大公司还是小公司

    2024-03-30 17:22:03       43 阅读