侧边栏壁纸
  • 累计撰写 30 篇文章
  • 累计创建 3 个标签
  • 累计收到 4 条评论
标签搜索

目 录CONTENT

文章目录

Kubernetes从零到一:深入理解容器技术Docker

小裴
2024-04-22 / 0 评论 / 0 点赞 / 260 阅读 / 3,955 字

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
image-1713772732056
可以看到我们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网页断开了
image-1713773324775

停止后删除容器

[root@localhost ~]# docker rm -f 78bc58dfbd69
78bc58dfbd69

0

评论区