1.1 Docker 基本介绍
1.1.1 Docker 是什么?
Docker 是容器的称呼,常见的容器除了 docker 外,还有 containerd、podman、CRI-O 等,开发写好的代码或者需要部署的服务,都打包到一个镜像里,然后基于 docker 或者 containerd 或者podman 运行镜像,就可以提供相应的服务了。
1.1.2 Docker 特性
优点:
1、高度可移植性:Docker 可以在任何支持 Docker 的平台上运行,而且容器可以在不同的环境中快速、简单地部署和移植。
2、轻量级和高效:Docker 容器非常轻量级,启动和停止速度快,并且对系统资源的占用非常少。
3、隔离性好:Docker 使用 Namespace 和 cgroups 技术实现容器的隔离,每个容器都拥有自己的进程、网络、文件系统和其他资源,保证了容器之间的隔离性和安全性。
4、易于管理和扩展:Docker 提供了一系列的命令行工具和图形化界面,可以方便地管理和监控容器。同时,Docker 还支持容器编排工具,如 Kubernetes,可以轻松地管理和扩展容器集群。
5、生态系统丰富:Docker 拥有庞大的社区和生态系统,提供了丰富的容器镜像和插件,可以方便地构建、部署和运行应用程序。
1.2 安装 docker 容器并配置镜像加速器
1.2.1 部署环境准备
主机环境: rockylinux 8.8
主机 ip: 静态192.168.0.100(网卡nat模式)
1、配置静态 ip 和主机名
1)把 ip 配置成静态的
[root@localhost ~]# cd /etc/sysconfig/network-scripts/
[root@localhost network-scripts]# ls
ifcfg-ens160
[root@localhost network-scripts]# cp ifcfg-ens160 ifcfg-ens160.bak
[root@localhost network-scripts]# ls
ifcfg-ens160 ifcfg-ens160.bak
[root@localhost network-scripts]# vim ifcfg-ens160
输入i键,修改如下
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static 改
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=eui64
NAME=ens160
#UUID=48708837-7dce-4fc3-b104-e9c19e01cec4 加#号
DEVICE=ens160
ONBOOT=yes 改
IPADDR=192.168.0.100 加
NETMASK=255.255.255.0 加
GATEWAY=192.168.0.2 加
DNS1=223.5.5.5 加
按esc键,输入:wq回车
网络配置文件改完生效方式:
重载网卡 ,重启网卡之前一定要重新载入一下配置文件,不然不能立即生效
[root@localhost network-scripts]# nmcli connection reload
[root@localhost network-scripts]# nmcli connection up ens160
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/11)
[root@localhost network-scripts]# ifconfig -a
ens160: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.0.100 netmask 255.255.255.0 broadcast 192.168.0.255
inet6 fe80::20c:29ff:fe03:557d prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:03:55:7d txqueuelen 1000 (Ethernet)
RX packets 16893 bytes 25148936 (23.9 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 3051 bytes 204629 (199.8 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
测试连通性
[root@localhost network-scripts]# cd
[root@localhost ~]# ping -c4 qq.com
PING qq.com (111.33.167.71) 56(84) bytes of data.
64 bytes from 111.33.167.71 (111.33.167.71): icmp_seq=1 ttl=128 time=51.2 ms
64 bytes from 111.33.167.71 (111.33.167.71): icmp_seq=2 ttl=128 time=48.6 ms
64 bytes from 111.33.167.71 (111.33.167.71): icmp_seq=3 ttl=128 time=48.5 ms
64 bytes from 111.33.167.71 (111.33.167.71): icmp_seq=4 ttl=128 time=48.6 ms
--- qq.com ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3006ms
rtt min/avg/max/mdev = 48.513/49.247/51.193/1.156 ms
[root@localhost ~]#
2)配置主机名
[root@localhost ~]# hostnamectl set-hostname danqing
[root@localhost ~]# exit
退出当前shell,重新连接生效
2、关闭 selinux、停掉防火墙
[root@danqing ~]# sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
[root@danqing ~]#
[root@danqing ~]# systemctl stop firewalld && systemctl disable firewalld
Removed /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
[root@danqing ~]#
注意:修改 selinux 配置文件之后,必须重启 linux 机器,selinux 才能永久生效
3、配置时间同步,并且验证时间
[root@danqing ~]# vim /etc/chrony.conf
..
..
#pool 2.rocky.pool.ntp.org iburst 加#号
pool ntp1.aliyun.com iburst 加
pool ntp1.tencent.com iburst 加
[root@danqing ~]# systemctl restart chronyd.service
[root@danqing ~]#
[root@danqing ~]# chronyc sources -v
.-- Source mode '^' = server, '=' = peer, '#' = local clock.
/ .- Source state '*' = current best, '+' = combined, '-' = not combined,
| / 'x' = may be in error, '~' = too variable, '?' = unusable.
|| .- xxxx [ yyyy ] +/- zzzz
|| Reachability register (octal) -. | xxxx = adjusted offset,
|| Log2(Polling interval) --. | | yyyy = measured offset,
|| \ | | zzzz = estimated error.
|| | | \
MS Name/IP address Stratum Poll Reach LastRx Last sample
===============================================================================
^* 120.25.115.20 2 6 35 11 -888us[-1953us] +/- 7590us
^- 106.55.184.199 2 6 17 13 +1778us[ +714us] +/- 21ms
[root@danqing ~]#
[root@danqing ~]# date "+%F %T"
2023-10-13 14:50:16
[root@danqing ~]#
4、开启包转发功能和修改内核参数
[root@danqing ~]# modprobe br_netfilter
[root@danqing ~]# 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
[root@danqing ~]# 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
[root@danqing ~]#
备注,内核参数相关说明:
1)net.bridge.bridge-nf-call-ip6tables = 1:
该参数启用了桥接网络设备(bridge)在 IPv6 包进行 iptables 规则过滤时,通过 netfilter 模块将数据包传递给 iptables 处理。这个参数通常用于虚拟化环境,如 Docker 等,以支持 IPv6 流量的转发和安全过滤。如果不启用该参数,则在桥接设备上的 IPv6 流量无法进行 iptables 规则过滤。
2)net.bridge.bridge-nf-call-iptables = 1:
该参数启用了桥接网络设备(bridge)在 IPv4 包进行 iptables 规则过滤时,通过 netfilter 模块将数据包传递给 iptables 处理。这个参数通常用于虚拟化环境,如 Docker 等,以支持 IPv4 流量的转发和安全过滤。如果不启用该参数,则在桥接设备上的 IPv4 流量无法进行 iptables 规则过滤。
3)net.ipv4.ip_forward = 1:
该参数启用了 Linux 操作系统的 IP 转发功能,允许路由器将接收到的数据包转发到其他网络。这个参数通常用于构建网络拓扑,如在一个局域网内部部署多台主机并让它们可以访问外部互联网。如果不启用该参数,则 Linux 系统默认不会转发 IP 数据包。
1.2.2 开始安装docker
1、配置安装 docker-ce 需要的国内 yum 源(阿里云)
[root@danqing ~]# yum install yum-utils -y
Last metadata expiration check: 1 day, 22:49:42 ago on Wed 11 Oct 2023 04:09:12 PM CST.
...
...
Installed:
yum-utils-4.0.21-19.el8_8.noarch
Complete!
[root@danqing ~]# yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
Adding repo from: http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
[root@danqing ~]#
2、安装docker以及一些系统常用的基础包
[root@danqing ~]#
[root@danqing ~]# yum install docker-ce wget net-tools nfs-utils gcc gcc-c++ make cmake libxml2-devel openssl-devel curl curl-devel unzip sudo libaio-devel wget ncurses-devel autoconf automake zlib-devel epel-release openssh-server socat ipvsadm conntrack -y --allowerasing
包比较多,防止遗漏,可以运行两遍。
备注,yum install 安装软件包,加参数--allowerasing,可以替换掉冲突的软件包。
3、启动docker并且设置开机自启
[root@danqing ~]#
[root@danqing ~]# systemctl start docker.service && systemctl enable docker.service
Created symlink /etc/systemd/system/multi-user.target.wants/docker.service → /usr/lib/systemd/system/docker.service.
[root@danqing ~]#
4、查看具体版本
[root@danqing ~]# docker version
Client: Docker Engine - Community
Version: 24.0.6
API version: 1.43
Go version: go1.20.7
Git commit: ed223bc
Built: Mon Sep 4 12:33:07 2023
OS/Arch: linux/amd64
Context: default
Server: Docker Engine - Community
Engine:
Version: 24.0.6
API version: 1.43 (minimum version 1.12)
Go version: go1.20.7
Git commit: 1a79695
Built: Mon Sep 4 12:32:10 2023
OS/Arch: linux/amd64
Experimental: false
containerd:
Version: 1.6.24
GitCommit: 61f9fd88f79f081d64d6fa3bb1a0dc71ec870523
runc:
Version: 1.1.9
GitCommit: v1.1.9-0-gccaecfc
docker-init:
Version: 0.19.0
GitCommit: de40ad0
[root@danqing ~]#
主要看server,Server: Docker Engine - Community
Community表示咱们安装的是社区版,开源免费
1.2.3 配置docker镜像加速器
[root@danqing ~]# vim /etc/docker/daemon.json
{
"registry-mirrors":["https://docker.mirrors.ustc.edu.cn","https://registry.docker-cn.com","https://dockerhub.azk8s.cn"]
}
[root@danqing ~]# systemctl restart docker.service
[root@danqing ~]#
1.3 Docker 基本概念
镜像(Image):一个可运行的二进制文件,包含了运行应用程序所需的所有依赖项和配置信息。可以通过编写 Dockerfile 文件来创建镜像。
容器(Container):一个运行中的镜像实例,包含了应用程序和其依赖项。可以使用 Docker CLI 或 Docker Compose 来创建和管理容器。
仓库(Registry):一个存储和分发镜像的地方。Docker Hub 是 Docker 官方提供的仓库,可以在其中找到许多常用的镜像,也可以在其中上传和分享自己的镜像。
Docker 官方网站
Docker 官网:https://www.docker.com/
Docker 的 github 地址:https://github.com/moby/moby
Docker hub 官网:https://registry.hub.docker.com
Dockerhub 国内可能没法访问,替代网址:
https://hub-stage.docker.com/ Dockerhub:Dockerhub 是存放 docker 镜像的一个官方网站,dockerhub 上提供了很多常用的
镜像供用户下载,如 ubuntu、centos、debian 等操作系统镜像。通过 dockerhub 用户也可以存
自己的 docker 镜像,但是需要需要注册一个账号,在网站上创建一个 docker 仓库。