目录
镜像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容器
容器是镜像的运行实例;
-
镜像(Image):
- 镜像是一个只读的模板,它包含了运行容器所需的文件系统、运行时环境、库和设置等内容。你可以将镜像视为一个打包好的应用程序。
- 镜像通常由 Dockerfile 定义,并通过
docker build
命令构建而成,也可以从 Docker Hub 等仓库中拉取已经构建好的镜像。 - 镜像是一个静态的概念,一旦构建完成就不会改变,除非手动修改并重新构建。
-
容器(Container):
- 容器是镜像的运行实例,它是一个独立的、隔离的执行环境,包含了运行时所需的应用程序、依赖项以及系统库等。
- 当你使用
docker run
命令启动一个镜像时,Docker 将会创建一个新的容器实例,并基于镜像创建一个可写的文件系统层,然后在该文件系统层上启动应用程序。 - 容器是一个动态的概念,可以启动、停止、重启和删除,容器的状态和数据都可以随着运行时的变化而变化。
镜像就像是一个软件的安装包,而容器就是通过安装包创建出来的运行实例。容器的创建是基于镜像的,镜像提供了容器运行所需的一切环境和依赖。容器之间相互隔离,各自拥有自己的文件系统、网络和进程空间,但它们可以共享同一个镜像。
docker常用命令
-
容器管理:(一般使用容器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>
:查看容器的日志。
-
镜像管理:
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>
:给镜像打标签。
-
容器与镜像清理:
docker rm <container_id>
:删除一个容器。docker rmi <image_id>
:删除一个镜像。docker system prune
:清理无用的容器、镜像和网络。
-
网络管理:
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>
:将一个容器从指定网络断开连接。
-
容器日志与状态查看:
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_davinciPS 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.0sView build details: docker-desktop://dashboard/build/default/default/jl4kq0wootou63etz1cgxka0gWhat'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_imagedepends_on:- service_b- service_c# 这里定义 service_a 的配置 |
eg.web 服务,启动依赖了ng web服务器和mysql db,启动web时,则可配置如下compose完成服务的编排依赖,compose up一起启动。
version: '3' services:web:image: nginx:latestports:- "80:80"volumes:- ./web:/usr/share/nginx/htmldb:image: mysql:latestenvironment:MYSQL_ROOT_PASSWORD: exampleMYSQL_DATABASE: myappMYSQL_USER: userMYSQL_PASSWORD: passwordvolumes:- db_data:/var/lib/mysql volumes:db_data: |
docker-compose 常用命令
-
docker-compose up
-
docker-compose down
-
docker-compose ps
:列出正在运行的容器。 -
docker-compose logs
:查看容器的日志。 -
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: loggerimage: logger-imagevolumeMounts:- name: shared-volumemountPath: /var/log/footstone/metrics- name: readerimage: reader-imagevolumeMounts:- name: shared-volumemountPath: /var/log/footstone/metricsvolumes:- name: shared-volumeemptyDir: {} |
K8S跨Pod实现数据共享
如果希望不同的 Pod 中的容器之间共享数据,可以考虑使用网络存储(如 NFS、GlusterFS、Ceph 等)或者对象存储(如 AWS S3、Google Cloud Storage 等)来实现数据的共享。