Docker 命令 & K8S 共享卷

目录

镜像VS容器

docker常用命令

docker ps -a

docker images

docker build -t

docker run  

docker rm  {containerid}

docker rmi {imageid}

Docker Compose 服务编排

docker-compose 常用命令

K8S  Pod

Kubernetes 中的 Pod:

K8S共享卷

K8S跨Pod实现数据共享


镜像VS容器

容器是镜像的运行实例;

  1. 镜像(Image):

    • 镜像是一个只读的模板,它包含了运行容器所需的文件系统、运行时环境、库和设置等内容。你可以将镜像视为一个打包好的应用程序。
    • 镜像通常由 Dockerfile 定义,并通过 docker build 命令构建而成,也可以从 Docker Hub 等仓库中拉取已经构建好的镜像。
    • 镜像是一个静态的概念,一旦构建完成就不会改变,除非手动修改并重新构建。
  2. 容器(Container):

    • 容器是镜像的运行实例,它是一个独立的、隔离的执行环境,包含了运行时所需的应用程序、依赖项以及系统库等。
    • 当你使用 docker run 命令启动一个镜像时,Docker 将会创建一个新的容器实例,并基于镜像创建一个可写的文件系统层,然后在该文件系统层上启动应用程序。
    • 容器是一个动态的概念,可以启动、停止、重启和删除,容器的状态和数据都可以随着运行时的变化而变化。

镜像就像是一个软件的安装包,而容器就是通过安装包创建出来的运行实例。容器的创建是基于镜像的,镜像提供了容器运行所需的一切环境和依赖。容器之间相互隔离,各自拥有自己的文件系统、网络和进程空间,但它们可以共享同一个镜像。

docker常用命令

  1. 容器管理:(一般使用容器id比较少,主要还是会根据镜像进行管理)

    • docker ps:列出正在运行的容器。
    • docker ps -a:列出所有的容器,包括停止的。
    • docker start <container_id>:启动一个已停止的容器。
    • docker stop <container_id>:停止一个正在运行的容器。
    • docker restart <container_id>:重启一个容器。
    • docker exec -it <container_id> <command>:在运行的容器中执行命令。
    • docker logs <container_id>:查看容器的日志。
  2. 镜像管理:

    • docker images:列出本地所有的镜像。
    • docker pull <image_name>:从远程仓库拉取一个镜像到本地。
    • docker build -t <image_name> <path_to_Dockerfile>:构建一个镜像。
    • docker rmi <image_id>:删除一个本地镜像。
    • docker tag <source_image>:<tag> <target_image>:<tag>:给镜像打标签。
  3. 容器与镜像清理:

    • docker rm <container_id>:删除一个容器。
    • docker rmi <image_id>:删除一个镜像。
    • docker system prune:清理无用的容器、镜像和网络。
  4. 网络管理:

    • docker network ls:列出所有的网络。
    • docker network inspect <network_id>:查看一个网络的详细信息。
    • docker network create <network_name>:创建一个新的网络。
    • docker network connect <network_name> <container_id>:将一个容器连接到指定网络。
    • docker network disconnect <network_name> <container_id>:将一个容器从指定网络断开连接。
  5. 容器日志与状态查看:

    • docker logs <container_id>:查看容器的日志。
    • docker stats <container_id>:实时查看容器的资源使用情况。
    • docker inspect <container_id>:查看容器的详细信息。

docker ps -a

PS D:\Users\MaxZh\GolandProjects\msp-docker\ops-ump> docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
18c8643646a8 ump "/bin/sh -c '/app/op…" 22 minutes ago Up 22 minutes 10024/tcp local
7875fd5465fb rigaga "/bin/sh -c '/app/op…" 54 minutes ago Up 54 minutes 10024/tcp local4
6d55985f2b5f rig "/bin/sh -c '/app/op…" 56 minutes ago Up 56 minutes 10099/tcp elated_davinci

PS D:\Users\MaxZh\GolandProjects\msp-docker\ops-ump> docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
18c8643646a8 ump "/bin/sh -c '/app/op…" 22 minutes ago Up 22 minutes 10024/tcp local
7875fd5465fb rigaga "/bin/sh -c '/app/op…" 54 minutes ago Up 54 minutes 10024/tcp local4
6d55985f2b5f rig "/bin/sh -c '/app/op…" 56 minutes ago Up 56 minutes 10099/tcp elated_davinci
da07cbf3a374 notify4g "/bin/sh -c '/app/op…" 57 minutes ago Exited (0) 57 minutes ago local3
13e70f59ce4c meta-server "/bin/sh -c '/app/me…" About an hour ago Exited (2) About an hour ago local2

docker images

PS D:\Users\MaxZh\GolandProjects\msp-docker\ops-ump> docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
ops-flume latest a25c32621bb8 About an hour ago 836MB
rigaga latest 779615793cf8 About an hour ago 358MB
rig latest bc9f4589dbda About an hour ago 376MB
notify4g latest ce5a72fa32b7 About an hour ago 350MB
notity latest ce5a72fa32b7 About an hour ago 350MB
meta-server latest 7f889ce1c03a About an hour ago 372MB
ump latest a3d9874d0351 3 hours ago 387MB

docker build -t <image_name> <path_to_Dockerfile>

PS D:\Users\MaxZh\GolandProjects\msp-docker\ops-notify4g> docker build -t notity .
[+] Building 2.7s (14/14) FINISHED docker:default
 => [internal] load build definition from Dockerfile 0.0s
 => => transferring dockerfile: 1.19kB 0.0s
 => [internal] load metadata for docker.io/bitnami/minideb:bullseye 2.6s
 => [internal] load .dockerignore 0.0s
 => => transferring context: 2B 0.0s
 => [internal] load build context 0.0s
 => => transferring context: 135B 0.0s
 => [base 1/4] FROM docker.io/bitnami/minideb:bullseye@sha256:d057a1eb3d4e14785d891b01127bbab7d0dbb0c50143151628552a3ac740b8c8 0.0s
 => CACHED [base 2/4] RUN install_packages ca-certificates curl git krb5-user libbsd0 libbz2-1.0 libcdt5 libcgraph6 libcom-err2 li 0.0s
 => CACHED [base 3/4] RUN mkdir -p /app 0.0s
 => CACHED [base 4/4] WORKDIR /app 0.0s
 => CACHED [stage-1 1/5] RUN ln -sf /usr/share/zoneinfo/{TZ} /etc/localtime && echo "{TZ}" > /etc/timezone 0.0s
 => CACHED [stage-1 2/5] COPY ./files/ops-notify4g.zip /app 0.0s
 => CACHED [stage-1 3/5] COPY ./config/config.toml /app/ops-notify4g/config.toml 0.0s
 => CACHED [stage-1 4/5] RUN unzip ops-notify4g.zip 0.0s
 => CACHED [stage-1 5/5] WORKDIR /app/ops-notify4g 0.0s
 => exporting to image 0.0s
 => => exporting layers 0.0s
 => => writing image sha256:ce5a72fa32b7c61f71801b9031e63af1cfac542c69457179df77d00e5b7411c2 0.0s
 => => naming to docker.io/library/notity 0.0s

View build details: docker-desktop://dashboard/build/default/default/jl4kq0wootou63etz1cgxka0g

What's Next?
 View a summary of image vulnerabilities and recommendations → docker scout quickview

docker run  

docker run -d --name your_container_name your_image_name

docker run -v realfile:containerpath <其他选项> <镜像名称> 指定本地  

-v ==--volume ,将容器内的文件或目录映射到宿主机上的本地文件或目录,常用于映射配置文件运行镜像。本质会在容器的运行脚本中,增加如下映射配置:

PS D:\Users\MaxZh\GolandProjects\msp-docker\ops-rigaga> docker run -d --name local4 rigaga
7875fd5465fbcf1a4013322347377ccae394fd7783b314871277b5894f640759
PS D:\Users\MaxZh\GolandProjects\msp-docker\ops-rigaga>


PS D:\Users\MaxZh\GolandProjects\msp-docker\ops-ump> docker run -v D:\Users\MaxZh\GolandProjects\msp-docker\ops-ump\configtest.yaml:/app/ops-ump/etc/config.yaml -d --name local ump
18c8643646a84f95714f179a4beccf1ce4f2e72f7d0ea11cce8f4e39c6ac3274
PS D:\Users\MaxZh\GolandProjects\msp-docker\ops-ump>


"Mounts": [
		{
			"Type": "bind",
			"Source": "D:\\Users\\MaxZh\\GolandProjects\\msp-docker\\ops-ump\\configtest.yaml",
			"Destination": "/app/ops-ump/etc/config.yaml",
			"Mode": "",
			"RW": true,
			"Propagation": "rprivate"
		}
	],
同时image标签的hostconfig也会有binds生成
"HostConfig": {
		"Binds": [
			"D:\\Users\\MaxZh\\GolandProjects\\msp-docker\\ops-ump\\configtest.yaml:/app/ops-ump/etc/config.yaml"
		],

docker rm  {containerid}

docker rmi {imageid}

删除镜像之前必须先删除其关联的容器。因为容器是镜像的运行实例,如果有任何一个容器在使用某个镜像,那么该镜像就会被认为是被“占用”的,Docker 不会允许删除被使用的镜像。因此,在删除镜像之前,你需要先停止并删除使用该镜像的容器

#cmd steps
docker stop <container_id>
docker rm <container_id>
docker rmi <image_id>

Docker Compose 服务编排

Docker Compose 编排是针对容器的概念。Compose 允许你定义和管理多容器的 Docker 应用程序,通过一个单独的 YAML 文件来配置应用程序的服务。

在 Docker Compose 中,你可以定义一个或多个服务,每个服务对应一个容器。在 YAML 文件中,你可以指定服务的镜像、端口映射、环境变量、数据卷挂载等配置。然后,通过 docker-compose 命令启动、停止、管理这些服务,从而实现整个应用程序的编排。

eg.ABC三个服务,A 依赖B,C启动。docker compose 如下:

version: '3'
services:
  service_b:
    image: your_service_b_image
    # 这里定义 service_b 的配置

  service_c:
    image: your_service_c_image
    # 这里定义 service_c 的配置

  service_a:
    image: your_service_a_image
    depends_on:
      - service_b
      - service_c
    # 这里定义 service_a 的配置

eg.web 服务,启动依赖了ng web服务器和mysql db,启动web时,则可配置如下compose完成服务的编排依赖,compose up一起启动。

version: '3'
services:
  web:
    image: nginx:latest
    ports:
      - "80:80"
    volumes:
      - ./web:/usr/share/nginx/html
  db:
    image: mysql:latest
    environment:
      MYSQL_ROOT_PASSWORD: example
      MYSQL_DATABASE: myapp
      MYSQL_USER: user
      MYSQL_PASSWORD: password
    volumes:
      - db_data:/var/lib/mysql
volumes:
  db_data:

docker-compose 常用命令

  1. docker-compose up

  2. docker-compose down

  3. docker-compose ps:列出正在运行的容器。

  4. docker-compose logs:查看容器的日志。

  5. docker-compose exec <service_name> <command>:在指定服务的容器内执行命令。

K8S  Pod

Kubernetes 中的 Pod:

  • Kubernetes 是一个用于自动部署、扩展和管理容器化应用程序的开源平台。
  • 在 Kubernetes 中,Pod 是最小的调度单元,它可以包含一个或多个容器,并共享网络和存储空间。
  • 一个 Pod 中的容器通常是紧密耦合的,它们共享相同的网络命名空间、IPC 命名空间和存储卷,可以通过 localhost 相互通信。

K8S共享卷

适用场景:同一个 Pod 中的多个容器之间共享数据的。

pod yaml配置方式:

在 Pod 的 YAML 文件中定义两个容器,并在配置容器中挂载共享卷(共享的文件地址)。确保共享卷被正确地挂载到两个容器中。

eg.如下分别定义两个container 容器, logger 和 reader,并配置volume共享shared-volume共享卷,同时shared-volume 挂载于/var/log/footstone/metrics path地址。即可保证两个服务对/var/log/footstone/metrics地址均可共享。

apiVersion: v1
kind: Pod
metadata:
  name: log-sharing-pod
spec:
  containers:
  - name: logger
    image: logger-image
    volumeMounts:
    - name: shared-volume
      mountPath: /var/log/footstone/metrics
  - name: reader
    image: reader-image
    volumeMounts:
    - name: shared-volume
      mountPath: /var/log/footstone/metrics
  volumes:
  - name: shared-volume
    emptyDir: {}

K8S跨Pod实现数据共享

如果希望不同的 Pod 中的容器之间共享数据,可以考虑使用网络存储(如 NFS、GlusterFS、Ceph 等)或者对象存储(如 AWS S3、Google Cloud Storage 等)来实现数据的共享。

  • 20
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
│ kubernetes-learning.pdf,网盘文件永久链接 ├ 一、课程介绍 │ └ 11.课程介绍.mp4 ├ 七、深入理解Pod │ │ 18.YAML 文件.mp4 │ │ 19.静态 Pod.mp4 │ │ 20.Pod Hook.mp4 │ │ 21.Pod 的健康检查.mp4 │ └ 22.初始化容器.mp4 ├ 三、Docker三架马车 │ │ 10.Docker Swarm.mp4 │ │ 8.Docker Compose.mp4 │ └ 9.Docker Machine.mp4 ├ 九、持久化存储 │ │ 35.PV 的使用.mp4 │ │ 36.PVC 的使用.mp4 │ └ 37.StorageClass 的使用.mp4 ├ 二、Docker基础 │ │ 2.Docker 简介与安装.mp4 │ │ 3.Docker 基本命令.mp4 │ │ 4.Dockerfile 基本用法.mp4 │ │ 5.Docker 私有仓库.mp4 │ │ 6.数据共享与持久化.mp4 │ └ 7.Docker 网络模式.mp4 ├ 五、Kubernetes基础 │ │ 14.Kubernetes 初体验.mp4 │ └ 15.基本概念和组件.mp4 ├ 八、常用资源对象 │ │ 23.Replication Controller 与 Replica Set.mp4 │ │ 24.Deployment 的使用.mp4 │ │ 25.Pod 自动扩缩容.mp4 │ │ 26.Job 和 CronJob 的使用.mp4 │ │ 27.Service 的使用.mp4 │ │ 28.ConfigMap 的使用.mp4 │ │ 29.Secret 的使用.mp4 │ │ 30.RBAC 的使用(1).mp4 │ │ 31.RBAC 的使用(2).mp4 │ │ 32.WordPress 部署示例(1).mp4 │ │ 33.WordPress 部署示例(2).mp4 │ └ 34.DaemonSet 与 StatefulSet 的使用.mp4 ├ 六、集群环境搭建 │ │ 16.使用 Kubeadm 搭建集群环境.mp4 │ └ 17.Dashboard 插件安装.mp4 ├ 十、服务发现 │ │ 38.集群内部服务发现-kubedns.mp4 │ │ 39.traefik 的安装使用.mp4 │ └ 40.Ingress TLS 与 PATH 使用.mp4 ├ 十一、Helm包管理工具 │ │ 41.Helm 的安装使用.mp4 │ │ 42.Helm 的基本使用.mp4 │ │ 43.Helm 模板之内置函数和 Values.mp4 │ │ 44.Helm 模板之模板函数与管道.mp4 │ │ 45.Helm 模板之控制流程.mp4 │ │ 46.Helm 模板之命名模板.mp4 │ │ 47.Helm 模板之其他注意事项.mp4 │ └ 48.Helm Hooks 的使用.mp4 ├ 十三、集群监控 │ │ 52.手动安装 Prometheus.mp4 │ │ 53.Prometheus 安装错误排查.mp4 │ │ 54.监控 Kubernetes 集群应用.mp4 │ │ 55.node-exporter 的安装使用.mp4 │ │ 56.Prometheus 自动发现 K8S 节点.mp4 │ │ 57.Kubernetes 常用资源对象监控.mp4 │ │ 58.Grafana 的安装使用.mp4 │ │ 59.Grafana 的插件和监控.mp4 │ │ 60.AlertManager 的安装使用.mp4 │ │ 61.AlertManager 结合钉钉的报警.mp4 │ │ 62.Prometheus Operator 的安装使用.mp4 │ │ 63.自定义 Prometheus Operator 监控.mp4 │ │ 64.自定义 Prometheus Operator 报警.mp4 │ └ 65.Prometheus Operator 高级配置.mp4 ├ 十二、调度器 │ │ 49.调度器解析.mp4 │ │ 50.节点亲和性.mp4 │ └ 51.Pod 亲和性与反亲和性以及污点和容忍.mp4 ├ 十五、CICD │ 69.动态 Jenkins Slave.mp4 │ 70.Jenkins Pipeline 部署 K8S 应用.mp4 │ 71.Jenkins Blue Ocean 的使用.mp4 │ 72.Harbor.........

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值