Kubernetes从零到一:深入理解容器技术
在当今云计算时代,容器技术已经成为了现代应用程序部署和管理的主流方式之一。Kubernetes作为容器编排平台的领导者,为企业提供了强大的工具来自动化容器的部署、扩展和管理。要深入理解Kubernetes,首先需要理解容器技术的本质。
什么是容器?
容器是一种轻量级、可移植的封装,用于打包、分发和运行应用程序。与虚拟机不同,容器不需要完整的操作系统,而是共享主机操作系统的内核,因此更加轻便和高效。容器将应用程序及其所有依赖项(如库、运行时环境等)打包在一起,形成一个独立的运行环境,从而确保应用程序能够在任何地方以相同的方式运行。
容器技术的主要组成部分包括以下几个方面:
容器镜像(Container Image):
容器的基本构建单元,包含了应用程序运行所需的所有文件系统、库和依赖项。容器镜像是只读的,可以通过Docker等工具创建、存储和分享。
容器运行时(Container Runtime):
负责启动、停止和管理容器的软件。常见的容器运行时包括Docker、containerd和CRI-O等。
容器编排平台(Container Orchestration):
用于自动化容器的部署、伸缩和管理的工具。Kubernetes是目前最流行的容器编排平台之一,提供了丰富的功能来简化容器化应用程序的操作。
容器与虚拟机的区别
虚拟机(Virtual Machine,VM)是一种完整的虚拟计算机,包括操作系统、应用程序和所有依赖项。虚拟机通过使用虚拟化技术在物理硬件上模拟多个独立的计算环境。与之相比,容器共享主机操作系统的内核,因此更加轻量级和高效。
主要的区别包括:
资源利用率:
虚拟机需要独立的操作系统,因此占用的资源更多;而容器共享主机操作系统的内核,因此更加轻量级,可以实现更高的资源利用率。
启动时间:
虚拟机启动需要较长的时间,因为需要启动完整的操作系统;而容器启动速度更快,因为它们共享主机操作系统的内核。
隔离性:
虚拟机提供了更强的隔离性,因为每个虚拟机都有自己的操作系统;而容器共享主机操作系统的内核,隔离性相对较弱,但通常足以满足大多数应用程序的需求。
容器的优势
容器技术具有以下几个显著的优势:
轻量级:
容器共享主机操作系统的内核,因此更加轻量级,可以在更短的时间内启动和停止。
可移植性:
容器可以在任何支持容器运行时的环境中运行,无需对应用程序进行修改。
一致性:
容器将应用程序及其所有依赖项打包在一起,确保应用程序在不同环境中以相同的方式运行。
弹性伸缩:
容器编排平台可以根据负载自动扩展容器的数量,以满足应用程序的需求。
简化部署:
容器编排平台提供了丰富的工具和功能来简化应用程序的部署和管理,例如自动化滚动更新、负载均衡和服务发现等。
总之,容器技术为现代应用程序的开发、部署和管理提供了一种全新的方式,使得开发人员能够更加高效地构建和运行应用程序,从而加速业务创新和交付。要深入理解Kubernetes及其在容器化应用程序中的作用,首先需要理解容器技术的本质和优势。
安装Docker
注意首先要确保你的虚拟机可以通公网,我们接下来的实验需要用到网络
1、关闭selinux和防火墙
[root@localhost ~]# setenforce 0 ; systemctl stop firewalld ; systemctl disable firewalld
Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
[root@localhost ~]# sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
2、开启路由转发(ipv4/ipv6)
这一步是为了让容器能够于本机进行通信
[root@localhost ~]# vi /etc/sysctl.conf
net.ipv4.ip_forward = 1
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
[root@localhost ~]# modprobe br_netfilter
[root@localhost ~]# sysctl -p
3、使用阿里源
[root@localhost ~]# rm -rf /etc/yum.repos.d/*
[root@localhost ~]# curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 2523 100 2523 0 0 6018 0 --:--:-- --:--:-- --:--:-- 6021
[root@localhost ~]# yum install wget -y
4、安装docker
# step 1: 安装必要的一些系统工具
yum install -y yum-utils device-mapper-persistent-data lvm2
# Step 2: 添加软件源信息
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# Step 3
sed -i 's+download.docker.com+mirrors.aliyun.com/docker-ce+' /etc/yum.repos.d/docker-ce.repo
# Step 4: 更新并安装Docker-CE
yum makecache fast
yum -y install docker-ce
# Step 4: 开启Docker服务
[root@localhost ~]# systemctl enable docker --now
5、配置阿里镜像加速
针对Docker客户端版本大于 1.10.0 的用户
您可以通过修改daemon配置文件/etc/docker/daemon.json来使用加速器
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://ggos9e68.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
6、查看docker基本信息/运行状态
[root@localhost ~]# docker info
Client: Docker Engine - Community
Version: 26.0.2
Context: default
Debug Mode: false
Plugins:
buildx: Docker Buildx (Docker Inc.)
Version: v0.14.0
Path: /usr/libexec/docker/cli-plugins/docker-buildx
compose: Docker Compose (Docker Inc.)
Version: v2.26.1
Path: /usr/libexec/docker/cli-plugins/docker-compose
Server:
Containers: 0
Running: 0
Paused: 0
Stopped: 0
Images: 0
Server Version: 26.0.2
Storage Driver: overlay2
Backing Filesystem: xfs
Supports d_type: true
Using metacopy: false
Native Overlay Diff: true
userxattr: false
Logging Driver: json-file
Cgroup Driver: cgroupfs
Cgroup Version: 1
Plugins:
Volume: local
Network: bridge host ipvlan macvlan null overlay
Log: awslogs fluentd gcplogs gelf journald json-file local splunk syslog
Swarm: inactive
Runtimes: io.containerd.runc.v2 runc
Default Runtime: runc
Init Binary: docker-init
containerd version: e377cd56a71523140ca6ae87e30244719194a521
runc version: v1.1.12-0-g51d5e94
init version: de40ad0
Security Options:
seccomp
Profile: builtin
Kernel Version: 3.10.0-1160.el7.x86_64
Operating System: CentOS Linux 7 (Core)
OSType: linux
Architecture: x86_64
CPUs: 4
Total Memory: 7.795GiB
Name: localhost.localdomain
ID: 44fbe4ff-69bf-435c-b1e3-bfb02df97636
Docker Root Dir: /var/lib/docker
Debug Mode: false
Experimental: false
Insecure Registries:
127.0.0.0/8
Registry Mirrors:
https://ggos9e68.mirror.aliyuncs.com/
Live Restore Enabled: false
docker基础命令
我们docker --help看一下有哪些
[root@localhost ~]# docker --help?
unknown flag: --help?
See 'docker --help'.
Usage: docker [OPTIONS] COMMAND
A self-sufficient runtime for containers
Common Commands:
run Create and run a new container from an image
exec Execute a command in a running container
ps List containers
build Build an image from a Dockerfile
pull Download an image from a registry
push Upload an image to a registry
images List images
login Log in to a registry
logout Log out from a registry
search Search Docker Hub for images
version Show the Docker version information
info Display system-wide information
Management Commands:
builder Manage builds
buildx* Docker Buildx
compose* Docker Compose
container Manage containers
context Manage contexts
image Manage images
manifest Manage Docker image manifests and manifest lists
network Manage networks
plugin Manage plugins
system Manage Docker
trust Manage trust on Docker images
volume Manage volumes
Swarm Commands:
swarm Manage Swarm
Commands:
attach Attach local standard input, output, and error streams to a running container
commit Create a new image from a container's changes
cp Copy files/folders between a container and the local filesystem
create Create a new container
diff Inspect changes to files or directories on a container's filesystem
events Get real time events from the server
export Export a container's filesystem as a tar archive
history Show the history of an image
import Import the contents from a tarball to create a filesystem image
inspect Return low-level information on Docker objects
kill Kill one or more running containers
load Load an image from a tar archive or STDIN
logs Fetch the logs of a container
pause Pause all processes within one or more containers
port List port mappings or a specific mapping for the container
rename Rename a container
restart Restart one or more containers
rm Remove one or more containers
rmi Remove one or more images
save Save one or more images to a tar archive (streamed to STDOUT by default)
start Start one or more stopped containers
stats Display a live stream of container(s) resource usage statistics
stop Stop one or more running containers
tag Create a tag TARGET_IMAGE that refers to SOURCE_IMAGE
top Display the running processes of a container
unpause Unpause all processes within one or more containers
update Update configuration of one or more containers
wait Block until one or more containers stop, then print their exit codes
Global Options:
--config string Location of client config files (default "/root/.docker")
-c, --context string Name of the context to use to connect to the daemon (overrides
DOCKER_HOST env var and default context set with "docker
context use")
-D, --debug Enable debug mode
-H, --host list Daemon socket to connect to
-l, --log-level string Set the logging level ("debug", "info", "warn", "error",
"fatal") (default "info")
--tls Use TLS; implied by --tlsverify
--tlscacert string Trust certs signed only by this CA (default "/root/.docker/ca.pem")
--tlscert string Path to TLS certificate file (default "/root/.docker/cert.pem")
--tlskey string Path to TLS key file (default "/root/.docker/key.pem")
--tlsverify Use TLS and verify the remote
-v, --version Print version information and quit
Run 'docker COMMAND --help' for more information on a command.
For more help on how to use Docker, head to https://docs.docker.com/go/guides/
Docker 命令的含义和功能的简要说明:
run:创建并运行一个新的容器。
exec:在运行中的容器内执行命令。
ps:列出当前正在运行的容器。
build:从 Dockerfile 构建一个镜像。
pull:从注册表下载一个镜像。
push:将一个镜像上传到注册表。
images:列出本地的镜像。
login:登录到一个 Docker 注册表。
logout:退出 Docker 注册表的登录状态。
search:在 Docker Hub 上搜索镜像。
version:显示 Docker 版本信息。
info:显示系统的全局信息。
管理命令:
builder:管理构建。
buildx:管理 Docker Buildx,用于多架构构建。
compose:管理 Docker Compose,用于多容器应用的定义和运行。
container:管理容器,如创建、启动、停止、删除容器等。
context:管理 Docker 上下文。
image:管理镜像,如构建、删除、标记、导出等。
manifest:管理 Docker 镜像清单和清单列表。
network:管理网络,如创建、删除、列出网络等。
plugin:管理插件。
system:管理 Docker 系统,如清理、升级等。
trust:管理 Docker 镜像的信任。
volume:管理卷,如创建、删除、列出卷等。
Swarm 命令:
swarm:管理 Docker Swarm 集群。
其他命令:
attach:附加到容器的标准输入、输出和错误流。
commit:从容器的更改创建一个新的镜像。
cp:在容器和本地文件系统之间复制文件/文件夹。
create:创建一个新的容器。
diff:检查容器文件系统的更改。
events:从服务器获取实时事件。
export:将容器的文件系统导出为 tar 存档。
history:显示镜像的历史记录。
import:从 tar 存档导入内容以创建文件系统镜像。
inspect:返回 Docker 对象的低级信息。
kill:杀死一个或多个运行中的容器。
load:从 tar 存档或标准输入加载一个镜像。
logs:获取容器的日志。
pause:暂停一个或多个容器中的所有进程。
port:列出容器的端口映射或特定映射。
rename:重命名一个容器。
restart:重新启动一个或多个容器。
rm:删除一个或多个容器。
rmi:删除一个或多个镜像。
save:将一个或多个镜像保存到 tar 存档。
start:启动一个或多个停止的容器。
stats:显示容器的资源使用统计信息的实时流。
stop:停止一个或多个正在运行的容器。
tag:创建一个标签,将目标镜像与源镜像相关联。
top:显示容器的运行进程。
unpause:取消暂停一个或多个容器中的所有进程。
update:更新一个或多个容器的配置。
wait:阻塞直到一个或多个容器停止,然后打印它们的退出代码。
全局选项:
--config:指定客户端配置文件的位置。
-c, --context:指定要连接到的守护进程的上下文。
-D, --debug:启用调试模式。
-H, --host:守护进程要连接的套接字。
-l, --log-level:设置日志级别。
--tls:使用 TLS 连接。
--tlscacert:指定信任的 CA 证书。
--tlscert:指定 TLS 证书文件。
--tlskey:指定 TLS 密钥文件。
--tlsverify:使用 TLS 并验证远程。
-v, --version:显示 Docker 版本信息。
docker搜索网络公有仓库的镜像
[root@localhost ~]# docker search nginx
NAME DESCRIPTION STARS OFFICIAL
nginx Official build of Nginx. 19768 [OK]
unit Official build of NGINX Unit: Universal Web … 26 [OK]
nginx/nginx-ingress NGINX and NGINX Plus Ingress Controllers fo… 89
nginxinc/nginx-unprivileged Unprivileged NGINX Dockerfiles 144
nginx/nginx-prometheus-exporter NGINX Prometheus Exporter for NGINX and NGIN… 40
nginxinc/nginx-s3-gateway Authenticating and caching gateway based on … 6
nginx/unit This repository is retired, use the Docker o… 64
nginx/nginx-ingress-operator NGINX Ingress Operator for NGINX and NGINX P… 2
nginxinc/amplify-agent NGINX Amplify Agent docker repository 1
nginx/nginx-quic-qns NGINX QUIC interop 1
nginxinc/ingress-demo Ingress Demo 4
nginxproxy/nginx-proxy Automated nginx proxy for Docker containers … 133
nginxproxy/acme-companion Automated ACME SSL certificate generation fo… 130
bitnami/nginx Bitnami container image for NGINX 186
bitnami/nginx-ingress-controller Bitnami container image for NGINX Ingress Co… 32
nginxproxy/docker-gen Generate files from docker container meta-da… 16
bitnami/nginx-exporter Bitnami container image for NGINX Exporter 5
nginxinc/mra-fakes3 0
ubuntu/nginx Nginx, a high-performance reverse proxy & we… 112
nginxinc/mra_python_base 0
nginxinc/ngx-rust-tool 0
rancher/nginx-ingress-controller 13
kasmweb/nginx An Nginx image based off nginx:alpine and in… 7
rancher/nginx-ingress-controller-defaultbackend 2
docker拉取镜像
[root@localhost ~]# docker pull nginx
Using default tag: latest
latest: Pulling from library/nginx
a2abf6c4d29d: Pull complete
a9edb18cadd1: Pull complete
589b7251471a: Pull complete
186b1aaa4aa6: Pull complete
b4df32aa5a72: Pull complete
a0bcbecc962e: Pull complete
Digest: sha256:0d17b565c37bcbd895e9d92315a05c1c3c9a29f762b011a10c54a66cd53c9b31
Status: Downloaded newer image for nginx:latest
docker.io/library/nginx:latest
docker本地拉取的镜像
[root@localhost ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest 605c77e624dd 2 years ago 141MB
启动镜像
[root@localhost ~]# docker run -d -p 8080:80 nginx
78bc58dfbd695a724dd1fd415729f25f047c0f3ef13bb7d49ed02f6f75f1d5a9
-d 标志表示以后台(detached)模式运行容器,
-p <host_port>:<container_port> 将主机的某个端口映射到容器内的Nginx端口,
nginx 是你要启动的镜像名称。
也就是我们将容器的80端口映射到主机的8080端口
我们访问主机ip:8080
可以看到我们8080端口变成了nginx的默认页面
docker查看正在运行的容器
[root@localhost ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
78bc58dfbd69 nginx "/docker-entrypoint.…" 4 minutes ago Up 4 minutes 0.0.0.0:8080->80/tcp, :::8080->80/tcp sweet_einstein
CONTAINER ID: 每个 Docker 容器的唯一标识符。
IMAGE: 使用的 Docker 镜像的名称。
COMMAND: 启动容器时执行的命令。
CREATED: 容器的创建时间。
STATUS: 容器的当前状态。在这种情况下,容器是运行状态(Up)。
PORTS: 映射的端口。这里显示了将主机的8080端口映射到容器的80端口。
NAMES: Docker 容器的名称。
停止docker容器
[root@localhost ~]# docker stop 78bc58dfbd69
78bc58dfbd69
可以看到我们的nginx网页断开了
停止后删除容器
[root@localhost ~]# docker rm -f 78bc58dfbd69
78bc58dfbd69
评论区