当前位置: 首页 > news >正文

docker基础用法及镜像和容器的常用命令大全

1.docker 体系架构


Docker 采用了 C / S 架构,包括客户端和服务端。Docker 守护进程作为服务端接受来自客户端的请求,并处理这些请求(创建、运行、分发容器)。客户端和服务端既可以运行在一个机器上,也可通过 socket 或者 RESTfulAPI 来进行通信。

2.Docker基本组成


Docker overview
Docker Daemon:守护进程

Docker 主机(Host):一个物理机或虚拟机,用于运行 Docker 服务进程和容器。

Docker 服务端(Server):Docker 守护进程,运行 docker 容器。

Docker 客户端(Client):客户端使用 docker 命令或其他工具调用 docker API。

Docker 仓库(Registry):保存镜像的仓库,类似于 git 或 svn 这样的版本控制系

Docker 镜像(Images):镜像可以理解为创建实例使用的模板。

Docker 容器(Container):容器是从镜像生成对外提供服务的一个或一组服务。官方仓库: Docker

# step 1: 安装必要的一些系统工具
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
# Step 2: 添加软件源信息
sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# Step 3
sudo sed -i 's+download.docker.com+mirrors.aliyun.com/docker-ce+' /etc/yum.repos.d/docker-ce.repo
# Step 4: 更新并安装Docker-CE
sudo yum makecache fast
sudo yum -y install docker-ce
# Step 4: 开启Docker服务
sudo systemctl restart docker
#Docker-compose安装
sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
docker-compose --version

2.1 基本术语


2.1.1 Docker主机(Host)
安装了Docker程序的主机,运行Docker守护进程

2.1.2 Docker镜像(Image)
镜像就是一堆只读层的统一视角

docker 镜像就好比是一个(只读)模板(和我们常见的 ISO 镜像类似,支持增删改查),可以通过这个模板来创建容器服务,tomcat镜像 ===> run ===> tomcat01容器(提供服务),一个镜像可以创建多个容器(最终服务运行或者项目运行就是在容器中)

镜像不是一个单一的文件,而是有多层构成,我们可以通过 docker history <ID/NAME> 查看镜像中各层内容及大小,每层对应着Dockerfile中的一条指令

Docker镜像默认存储在 /var/lib/docker/<Storage Driver>,docker info 查看 Docker 使用的 Storage Driver

2.1.3 Docker容器(Container)
运行镜像后生成的实例成为容器,每运行一次镜像就会产生一个容器,容器可以启动、停止或删除

容器使用沙箱机制,互相隔离,是独立安全的

可以把容器看做是一个简易版的linux环境,包括root用户权限、进程空间、用户空间、网络空间、文件系统和运行的在其中的应用程序

容器 = 镜像 + 读写层,容器其实是在镜像的最上面加了一层读写层,在运行容器里文件改动时,会先从镜像要写的文件复制到容器自己的文件系统(读写层)如果容器删除了,最上面的读写层也就删除了,改动也就丢失了,所以无论多少个容器共享一个镜像,所做的写操作都是从镜像的文件系统复制过来操作的,并不会修改镜像的源文件,这种方式提高磁盘利用率,若想持久化这些改动,可以通过 docker commit 将容器保存成一个新的镜像

2.1.4 Docker仓库(Repository)
用来保存镜像的,仓库中包含许多镜像,每个镜像都有不同的标签(tag)

分为公开仓库(Public)和私有仓库(Private)两种形式

2.2 镜像和容器的关系


镜像:镜像是文件,是静态的,只读的,提供了运行程序完整的数据,是应用程序的“集装箱”

容器:镜像的运行环境,动态,有生命周期,像是迷你的“linux操作系统”,由Docker负责创建,容器之间彼此隔离

镜像与容器的关系就是程序和进程的关系,如:

/bin/ls	执行程序文件
ls /etc	进程
ls /var	进程

注意

docker客户端与docker server是通过http或https协议进行交互的

加载镜像到本地使用 http 或 https,默认必须使用 https 协议,如果你自己确认不使用安全的,可以用 http

镜像下载可以去 dockerhub 或者阿里云、华为云等

使用Docker步骤

安装Docker

从Docker仓库中下载软件对应的镜像

运行这个镜像,此时会生成一个Docker容器

对容器的启动/停止就是对软件的启动/停止

4.安装及使用docker

4.1 依赖的基础环境


64 bits CPU

内存至少4G

Linux Kernel 3.10+

Linux Kernel cgroups and namespaces

4.2 安装Docker


Docker版本:分为社区版(Community Ddition,CE)和企业版(Enterprise Edition,EE)

4.2.1 Centos7+ 安装 docker
“Extras” repository (使用命令yum repolist可以看到extras,extras里面有docker)

Cenots7 版本自带的 docker 版本较老,建议卸载后,安装新版

cd /etc/yum.repos.d/
# 下载清华 Docker 仓库
wget https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/docker-ce.repo
sed -i 's@https://.*@https://mirrors.tuna.tsinghua.edu.cn/docker-ce@g' /etc/yum.repos.d/docker-ce.repo
# 使用 yum repolist 看到 docker-ce-stable/x86_64
# 卸载旧的版本
yum remove docker docker-client docker-client-latest docker-common 
yum remove docker-latest docker-latest-logrotate docker-logrotate docker-engine
# 删除资源
rm -rf /var/lib/docker
# 更新软件包索引
yum makecache fast
# 安装 docker 社区版
yum -y install docker-ce docker-ce-cli containerd.io
# 启动 Docker
systemctl start docker
# 查看 docker 版本
docker version
# 开机启动 Docker
systemctl enable docker
# 查看 Docker 状态
systemctl status docker
# 验证是否正确安装了docker,方法是运行 hello-world 镜像
docker run hello-world
# 关闭 Docker
systemctl stop docker

4.2.2 Ubuntu 安装 docker-ce 环境

#参考文档
https://docs.docker.com/engine/install/debian/
https://mirrors.tuna.tsinghua.edu.cn/help/docker-ce/
#卸载旧版
sudo apt-get remove docker docker-engine docker.io containerd runc
#安装依赖
sudo apt install apt-transport-https ca-certificates curl gnupg2 software-properties-common
#信任 Docker 的 GPG 公钥(发行版不同,下面的内容也有所不同)
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
#添加仓库(发行版不同,下面的内容也有所不同)
sudo add-apt-repository \"deb [arch=amd64] https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/ubuntu \$(lsb_release -cs) \stable"#安装docker-ce
sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io
# 指定安装版本
apt install docker-ce=5:19.03.15~3-0~ubuntu-bionic docker-ce-cli=5:19.03.15~3-0~ubuntu-bionic#检查是否安装成功
[root@docker ~]# docker run hello-worldHello from Docker!
This message shows that your installation appears to be working correctly.To generate this message, Docker took the following steps:1. The Docker client contacted the Docker daemon.2. The Docker daemon pulled the "hello-world" image from the Docker Hub.(amd64)3. The Docker daemon created a new container from that image which runs theexecutable that produces the output you are currently reading.4. The Docker daemon streamed that output to the Docker client, which sent itto your terminal.To try something more ambitious, you can run an Ubuntu container with:$ docker run -it ubuntu bashShare images, automate workflows, and more with a free Docker ID:https://hub.docker.com/For more examples and ideas, visit:https://docs.docker.com/get-started/

4.3 Docker镜像加速

使用阿里云提供的镜像加速(镜像仓库),也可以使用网易云等;步骤:①.注册并登陆“阿里云的开发者平台”http://dev.aliyun.com;②.查看专属的加速器地址;③.配置自己的Docker加速器;vi /etc/docker/daemon.json {"exec-opts": ["native.cgroupdriver=systemd"], "registry-mirrors":["https://docker.mirrors.ustc.edu.cn"] }systemctl daemon-reload&&systemctl enable --now docker

5. Docker平台基本使用方法

运行一个container并加载镜像centos,运行起来这个实例后,在实例中执行 /bin/bash命令

5.1 docker常用参数:

header 1

header 2

run

运行

-i

以交互模式运行容器,通常与-t 同时使用;

-t

为容器重新分配一个伪输入终端,通常与-i同时使用

-d

后台运行容器,并返回容器ID;

-c

后面跟待完成的命令

#示例
# 下载和运行镜像一步完成
root@RS1:~# docker run -it nginx /bin/bash
Unable to find image 'nginx:latest' locally
latest: Pulling from library/nginx
b4d181a07f80: Already exists
66b1c490df3f: Pull complete
d0f91ae9b44c: Pull complete
baf987068537: Pull complete
6bbc76cbebeb: Pull complete
32b766478bc2: Pull complete
Digest: sha256:8df46d7414eda82c2a8c9c50926545293811ae59f977825845dda7d558b4125b
Status: Downloaded newer image for nginx:latest
root@2e1e48cd50c7:/#
#5.2 容器后台运行的特点
如果没有永久运行的程序,终端退出(exit)容器就会马上退出"容器永久运行的条件:需要有永久运行的程序,并且使用 docker run -d 后台启动容器"
"常见的坑:docker 容器使用后台运行,必须要有一个前台进程,docker发现没有应用,就会自动停止"# 在container中启动一个长久运行的进程,不断向stdin输出 hello world 。模拟一个后台运行的服务 
docker run --name mycentos -d centos:7 /bin/bash -c "while true;do echo hello world; sleep 3; done"
# 进入容器
docker exec -it mycentos /bin/bash
# 查看容器日志
docker logs -tf --tail 10 mycentos
# -tf            显示日志
# --tail number  要显示日志条数

6. Docker常用命令

# 输入docker可以查看docker的命令用法,输入docker COMMAND --help 查看指定命令的详细用法
docker 命令 --help# 查看docker版本信息 
root@RS1:~# docker version
Client: Docker Engine - CommunityVersion:           20.10.7API version:       1.41Go version:        go1.13.15Git commit:        f0df350Built:             Wed Jun  2 11:56:40 2021OS/Arch:           linux/amd64Context:           defaultExperimental:      trueServer: Docker Engine - CommunityEngine:Version:          20.10.7API version:      1.41 (minimum version 1.12)Go version:       go1.13.15Git commit:       b0f5bc3Built:            Wed Jun  2 11:54:48 2021OS/Arch:          linux/amd64Experimental:     falsecontainerd:Version:          1.4.6GitCommit:        d71fcd7d8303cbf684402823e425e9dd2e99285drunc:Version:          1.0.0-rc95GitCommit:        b9ee9c6314599f1b4a7f497e1f1f856fe433d3b7docker-init:Version:          0.19.0GitCommit:        de40ad0
root@RS1:~#	# 查看docker更详细的信息,包括镜像和容器的数量
root@RS1:~# docker info
Client:Context:    defaultDebug Mode: falsePlugins:app: Docker App (Docker Inc., v0.9.1-beta3)buildx: Build with BuildKit (Docker Inc., v0.5.1-docker)scan: Docker Scan (Docker Inc., v0.8.0)Server:Containers: 3Running: 0Paused: 0Stopped: 3Images: 4Server Version: 20.10.7Storage Driver: overlay2Backing Filesystem: extfsSupports d_type: trueNative Overlay Diff: trueuserxattr: falseLogging Driver: json-fileCgroup Driver: cgroupfsCgroup Version: 1Plugins:Volume: localNetwork: bridge host ipvlan macvlan null overlayLog: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslogSwarm: inactiveRuntimes: io.containerd.runc.v2 io.containerd.runtime.v1.linux runcDefault Runtime: runcInit Binary: docker-initcontainerd version: d71fcd7d8303cbf684402823e425e9dd2e99285drunc version: b9ee9c6314599f1b4a7f497e1f1f856fe433d3b7init version: de40ad0Security Options:apparmorseccompProfile: defaultKernel Version: 4.15.0-143-genericOperating System: Ubuntu 18.04.4 LTSOSType: linuxArchitecture: x86_64CPUs: 4Total Memory: 1.946GiBName: RS1ID: 5RW4:7Z37:G2RU:BXH6:6U62:53TS:AIOQ:Z7C4:EHRQ:G5HV:VIRK:FGXYDocker Root Dir: /var/lib/dockerDebug Mode: falseRegistry: https://index.docker.io/v1/Labels:Experimental: falseInsecure Registries:127.0.0.0/8Live Restore Enabled: falseWARNING: No swap limit support
root@RS1:~#

6.1 镜像操作

"6.1.1 搜索镜像"
docker search 关键字
示例
# 通过搜索来过滤
# 搜索出来的镜像就是STARS大于3000的
docker search mysql --filter=STARS=3000 
#可以在 Docker Hub 网站查看镜像的详细信息,如镜像的 tag 标签,OFFICIAL 为 [ok] 的是官方镜像,可以放心使用。
示例
root@RS1:~# docker search nginx
NAME                              DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
nginx                             Official build of Nginx.                        15141     [OK]
jwilder/nginx-proxy               Automated Nginx reverse proxy for docker con…   2041                 [OK]
richarvey/nginx-php-fpm           Container running Nginx + PHP-FPM capable of…   816                  [OK]
jc21/nginx-proxy-manager          Docker container for managing Nginx proxy ho…   211
linuxserver/nginx                 An Nginx container, brought to you by LinuxS…   147
tiangolo/nginx-rtmp               Docker image with Nginx using the nginx-rtmp…   132                  [OK]
jlesage/nginx-proxy-manager       Docker container for Nginx Proxy Manager        122                  [OK]
alfg/nginx-rtmp                   NGINX, nginx-rtmp-module and FFmpeg from sou…   101                  [OK]
jasonrivers/nginx-rtmp            Docker images to host RTMP streams using NGI…   91                   [OK]
nginxdemos/hello                  NGINX webserver that serves a simple page co…   70                   [OK]
privatebin/nginx-fpm-alpine       PrivateBin running on an Nginx, php-fpm & Al…   56                   [OK]
nginx/nginx-ingress               NGINX and  NGINX Plus Ingress Controllers fo…   55
nginxinc/nginx-unprivileged       Unprivileged NGINX Dockerfiles                  42
staticfloat/nginx-certbot         Opinionated setup for automatic TLS certs lo…   23                   [OK]
nginx/nginx-prometheus-exporter   NGINX Prometheus Exporter for NGINX and NGIN…   19
schmunk42/nginx-redirect          A very simple container to redirect HTTP tra…   19                   [OK]
centos/nginx-112-centos7          Platform for running nginx 1.12 or building …   15
centos/nginx-18-centos7           Platform for running nginx 1.8 or building n…   13
raulr/nginx-wordpress             Nginx front-end for the official wordpress:f…   13                   [OK]
bitwarden/nginx                   The Bitwarden nginx web server acting as a r…   11
flashspys/nginx-static            Super Lightweight Nginx Image                   10                   [OK]
mailu/nginx                       Mailu nginx frontend                            9                    [OK]
sophos/nginx-vts-exporter         Simple server that scrapes Nginx vts stats a…   7                    [OK]
ansibleplaybookbundle/nginx-apb   An APB to deploy NGINX                          2                    [OK]
wodby/nginx                       Generic nginx                                   1                    [OK]
root@RS1:~#
"6.1.2 下载镜像"
docker pull 镜像名[:tag] 
[:tag] 表示软件的版本,如果不指定 tag 默认是 latest#示例:下载指定版本的 nginx
root@RS1:~# docker pull nginx:1.14.1
1.14.1: Pulling from library/nginx
a5a6f2f73cd8: Pull complete
2343eb083a4e: Pull complete
251439d5b33c: Pull complete
Digest: sha256:32fdf92b4e986e109e4db0865758020cb0c3b70d6ba80d02fe87bad5cc3dc228
Status: Downloaded newer image for nginx:1.14.1
docker.io/library/nginx:1.14.1
root@RS1:~# 
#示例:下载最新版本的 redis
# 如果不指定 tag 默认是 latest
root@RS1:~# docker pull redis
Using default tag: latest
latest: Pulling from library/redis
b4d181a07f80: Pull complete
86e428f79bcb: Pull complete
ba0d0a025810: Pull complete
ba9292c6f77e: Pull complete
b96c0d1da602: Pull complete
5e4b46455da3: Pull complete
Digest: sha256:8b8d1c205e0149483f320ed234debaed7091f18b6c1d47bf1720951cd2161bfc
Status: Downloaded newer image for redis:latest
docker.io/library/redis:latest
root@RS1:~#
"6.1.3 上传镜像"
#推送一个镜像到镜像仓库
docker push 镜像名[:tag] 
"6.1.4 查看镜像"
# 查看所有本地主机上的镜像(活动的)
docker images
# 列出所有的镜像(包含非活动)
docker images -a
# 只显示镜像的id
docker images -q
docker image ls(新版本docker)
#示例
root@RS1:~# docker images
REPOSITORY    TAG       IMAGE ID       CREATED        SIZE
redis         latest    08502081bff6   2 weeks ago    105MB
hello-world   latest    d1165f221234   4 months ago   13.3kB
nginx         1.14.1    5f2d4477b7ea   2 years ago    109MB
root@RS1:~#
"6.1.5 获取镜像的元信息(详细信息)"
docker inspect 镜像名或镜像ID
docker image inspect 镜像名或镜像ID
"6.1.6 删除镜像"
docker rmi 镜像ID或镜像名[:tag]
docker rmi -f 镜像ID或镜像名[:tag]   # 删除指定的本地镜像,-f表示强制删除
docker image rm 镜像ID或镜像名[:tag]
#示例:删除所有的镜像
docker rmi -f  $(docker images -aq) 
"6.1.7 prune"
#移除未使用的镜像,没有被标记或被任何容器引用的
docker image prune
"6.1.8 历史记录"
#查看镜像的变更历史
docker history 镜像ID或镜像名 
#示例
[root@RS2 ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
nginx               latest              4cdc5dd7eaad        5 days ago          133MB
[root@RS2 ~]# docker history nginx
IMAGE               CREATED             CREATED BY                                      SIZE                COMMENT
4cdc5dd7eaad        5 days ago          /bin/sh -c #(nop)  CMD ["nginx" "-g" "daemon…   0B
<missing>           5 days ago          /bin/sh -c #(nop)  STOPSIGNAL SIGQUIT           0B
<missing>           5 days ago          /bin/sh -c #(nop)  EXPOSE 80                    0B
<missing>           5 days ago          /bin/sh -c #(nop)  ENTRYPOINT ["/docker-entr…   0B
<missing>           5 days ago          /bin/sh -c #(nop) COPY file:09a214a3e07c919a…   4.61kB
<missing>           5 days ago          /bin/sh -c #(nop) COPY file:0fd5fca330dcd6a7…   1.04kB
<missing>           5 days ago          /bin/sh -c #(nop) COPY file:0b866ff3fc1ef5b0…   1.96kB
<missing>           5 days ago          /bin/sh -c #(nop) COPY file:65504f71f5855ca0…   1.2kB
<missing>           5 days ago          /bin/sh -c set -x     && addgroup --system -…   63.9MB
<missing>           5 days ago          /bin/sh -c #(nop)  ENV PKG_RELEASE=1~buster     0B
<missing>           5 days ago          /bin/sh -c #(nop)  ENV NJS_VERSION=0.6.1        0B
<missing>           5 days ago          /bin/sh -c #(nop)  ENV NGINX_VERSION=1.21.1     0B
<missing>           2 weeks ago         /bin/sh -c #(nop)  LABEL maintainer=NGINX Do…   0B
<missing>           2 weeks ago         /bin/sh -c #(nop)  CMD ["bash"]                 0B
<missing>           2 weeks ago         /bin/sh -c #(nop) ADD file:4903a19c327468b0e…   69.3MB
[root@RS2 ~]#
"6.1.8 构建镜像"
docker build -f Dockerfile文件的路径 -t 镜像名:tag 命令执行的上下文 
#示例:使用Dockerfile构建镜像
docker build -f Dockerfile -t harbor.test.com/os/tomcat:v1 .  # 注意最后的点号不能省略
"6.1.9 设置镜像标签"
#创建一个引用源镜像标记目标镜像
docker tag tomcat:v1 harbor.test.com/os/tomcat:v1
"6.1.10 导出容器文件系统到tar归档文件”
docker export 
"6.1.11 导入容器文件系统tar归档文件创建镜像"
docker import 
"6.1.12 保存镜像"
#保存一个或多个镜像到一个tar归档文件(可应用于无法联网的机器)
docker image save nginx |gzip >nginx.tar.gz
"6.1.13 加载镜像"
#加载来自tar归档或标准输入的镜像(可应用于无法联网的机器)
docker image load -i nginx.tar.gzdocker load < nginx.tar.gz

6.2 容器操作

"6.2.1 运行容器"
#示例:启动容器并以 bash 形式进入
注意:有些容器没有 bash 环境,需要使用 /bin/sh 或其他 shell 环境进入
docker run -p 80:8080 -it --name webserver webserver:1.1 /bin/bash
#示例:启动容器并在后台运行
docker run -p 80:8080 -itd --name webserver webserver:1.1 /bin/bash
#示例:启动容器并在后台运行,并传入指定参数(相当于创建dockerfile的ENV)
docker run \
-p 80:8080 \
--name webserver \
-e project_name="webserver" \
-d webserver:1.1
#示例:启动容器并在后台运行,并指定所在网络
docker run \
-p 80:8080 \
--name webserver \
--network myweb \
-d webserver:1.1
#示例:启动容器,并指定路径映射
docker run \
-p 80:8080 \
--name webserver \
--network web_net \
-e project_name="webserver" \
-v /search/webserver/logs:/search/webserver/logs \
-itd webserver:1.1 /bin/bash
#示例:启动容器,指定host网络并指定路径映射
docker run \
-p 80:8080 \
--name webserver \
--network host \
-e project_name="webserver" \
-v /search/webserver/logs:/search/webserver/logs \
-itd webserver:1.1 /bin/bash

参数说明

参数

解释

–name

指定容器名,名称自定义,如果不指定会自动命名

–ip

指定容器IP,只能用于自定义网络

-i

以交互模式运行,即以交互模式运行容器,表示让容器的标准输入打开,不跟这个参数容器无法启动

-t

分配一个伪终端,即命令行,通常组合使用-it

-p

端口映射,将主机端口映射到容器内的端口 -p 8080:8080 -p ip:主机端口:容器端口 -p 主机端口:容器端口 (常用) -p 容器端口 容器端口

-P

发布容器所有 EXPOSE 的端口到宿主机随机端口(docker history 容器ID或容器名)

-d

后台运行,即守护式运行容器,并返回容器ID

-e

设置环境变量

-h

设置容器主机名(hostname)

-v

指定挂载主机目录到容器目录,默认为rw读写模式,ro表示只读

–mount

将文件系统附加到容器

–net

指定网络模型,默认是桥接模式

–add-host master:172.22.16.13

写/etc/hosts文件

–rm

当容器命令运行结束后,自动删除容器,自动释放资源,
例:docker run -it --rm centos sleep 5,五秒后自动删除

–privileged

特权模式,无特权模式在容器中很多命令无法运行
如:route del default gw 172.17.0.1只有在特权模式下才能运行

–restart

容器退出时重启策略,默认为no,可选值:[always|on-failure]

如果创建时未指定 ,可通过update命令设置:docker update --restart=always 容器ID或容器名

6.2.2 资源限制

"6.2.2.1 内存限额"
# 允许容器最多使用500M内存和100M的Swap,并禁用OOM Killer
docker run \
--name web1 \
-m 500m \
--memory-swap=600m \
--oom-kill-disable \
-d nginxdocker stats --no-stream web
# 默认情况下,上面两组参数为 -1,即对容器内存和 swap 的使用没有限制。
"6.2.2.2 CPU限额"
# 允许容器最多使用一个半的CPU
docker run --name web1 --cpus="1.5" -d nginx
# 允许容器最多使用50%的CPU
docker run --name web2 --cpus=".5" -d nginx
# 容器实例分配512权重的cpu使用资源
docker run -it --cpu-shares 512 centos /bin/bash/
# cat /sys/fs/cgroup/cpu/cpu.shares
"6.2.2.3 I/O限额"
# bps 是 byte per second,每秒读写的数据量。
# iops 是 io per second,每秒 IO 的次数。# 可通过以下参数控制容器的 bps 和 iops
# 下面这个例子限制容器写 /dev/sda 的速率为 30 MB/s
docker run -it --device-write-bps /dev/sda:30MB ubuntu

参数说明

参数

解释

-m 200M

设置内存的使用限额,例如 100M, 2G。

–memory-swap

允许交换到磁盘的内存量

–memory-swappiness=<0-100>

容器使用SWAP分区交换的百分比(默认为-1)

–oom-kill-disable

禁用OOM Killer

–vm 1

启动 1 个内存工作线程。

–vm-bytes 280M

每个线程分配 280M 内存。

–cpus

可以使用的CPU数量

–cpuset-cpus

限制容器使用特定的CPU核心,如(0-3,0,1)

-c, --cpu-shares 1024

container_A 的 cpu share 1024,是 container_B 的两倍。
当两个容器都需要 CPU 资源时,container_A可以得到的 CPU 是 container_B 的两倍。
需要特别注意的是,这种按权重分配 CPU 只会发生在 CPU 资源紧张的情况下。
如果 container_A 处于空闲状态,这时,为了充分利用 CPU 资源,container_B也可以分配到全部可用的 CPU。

–device-read-bps

限制读某个设备的 bps。

–device-write-bps

限制写某个设备的 bps。

–device-read-iops

限制读某个设备的 iops。

–device-write-iops

限制写某个设备的 iops。

6.2.3 查看容器

# 查看(运行态)容器
docker ps
docker container ls
# 查看(包含非运行态)容器
docker ps -a
docker container ls -a
# 只显示容器
IDdocker ps -q
# 显示最近创建的容器
docker ps -a -n=1

参数

解释

-a

显示所有容器,包括非运行态容器

-l

获得最新的容器信息

-q

只显示容器的ID

-n=?

显示最近创建的容器

"6.2.4 启动容器"
docker start 容器ID或容器名称 
#示例root@RS1:~# docker ps -a
CONTAINER ID   IMAGE         COMMAND                  CREATED        STATUS                      PORTS     NAMES
0ee82d82570e   nginx         "/docker-entrypoint.…"   14 hours ago   Exited (137) 14 hours ago             wonderful_herschel
2e1e48cd50c7   nginx         "/docker-entrypoint.…"   14 hours ago   Exited (0) 14 hours ago               adoring_bell
6e71462510b9   hello-world   "/hello"                 15 hours ago   Exited (0) 15 hours ago               priceless_dijkstra
root@RS1:~# docker start 2e1e48cd50c7
2e1e48cd50c7
root@RS1:~# docker ps
CONTAINER ID   IMAGE     COMMAND                  CREATED        STATUS         PORTS     NAMES
2e1e48cd50c7   nginx     "/docker-entrypoint.…"   14 hours ago   Up 3 seconds   80/tcp    adoring_bell
root@RS1:~#
"6.2.5 停止容器"
#停止当前正在运行的容器
docker stop 容器ID或容器名称
#示例:停止全部运行中的容器
docker stop $(docker ps -q)
"6.2.6 重启容器"
docker restart 容器ID或容器名称 
"6.2.7 kill 容器"
#强制停止(杀死)当前容器
docker kill 容器ID 
"6.2.8 删除容器"
# 删除(非运行)态容器
docker rm 容器ID
docker rm 容器名称
# 删除(运行态的)容器需要先将容器关闭
docker stop containerID
docker rm containerID
# 强制删除容器(不管容器是否在运行)
docker rm -f containerID        # -f:表示强制删除
# 删除所有(运行和非运行的)容器
docker rm -f $(docker ps -aq)
# 删除所有(运行和非运行的)容器
docker ps -a -q  | xargs docker rm -f   
#示例:删除所有(运行和非运行的)容器
[root@RS1 ~]# docker ps -a
CONTAINER ID   IMAGE         COMMAND                  CREATED        STATUS                      PORTS     NAMES
0ee82d82570e   nginx         "/docker-entrypoint.…"   15 hours ago   Exited (137) 15 hours ago             wonderful_herschel
2e1e48cd50c7   nginx         "/docker-entrypoint.…"   15 hours ago   Up 21 minutes               80/tcp    adoring_bell
6e71462510b9   hello-world   "/hello"                 15 hours ago   Exited (0) 15 hours ago               priceless_dijkstra
[root@RS1 ~]# docker rm -f $(docker ps -aq)
0ee82d82570e
2e1e48cd50c7
6e71462510b9
[root@RS1 ~]# docker ps -a
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
[root@RS1 ~]#
"6.2.9 容器日志"
#获取容器的日志(容器的ID可以写全,也可以不写全,唯一即可)
docker logs 容器id或容器名称
#示例
[root@slave4 ~]# docker run \
> --privileged \
> -p 6379:6379 \
> -p 16379:16379 \
> --name redis-node \
> -v /apps/redis/data:/data \
> -v /apps/redis/conf/redis.conf:/etc/redis/redis.conf \
> --net host \
> -d redis:5.0 \
> redis-server /etc/redis/redis.conf
Unable to find image 'redis:5.0' locally
5.0: Pulling from library/redis
bf5952930446: Pull complete
911b8422b695: Pull complete
093b947e0ade: Pull complete
2e4ea19ac656: Pull complete
62403d50d101: Pull complete
3a097fa7018a: Pull complete
Digest: sha256:50e8ee4558b11cdc12b9a94497697190bc8d77e6c15aa6af045a64f6a68f5f48
Status: Downloaded newer image for redis:5.0
WARNING: Published ports are discarded when using host network mode
38e49f7a359ad6be30e9777e75656a664e1b323d37325bd8387cbe130a96d6d6
[root@slave4 ~]# docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
[root@slave4 ~]# docker ps -a
CONTAINER ID   IMAGE       COMMAND                  CREATED              STATUS                          PORTS     NAMES
38e49f7a359a   redis:5.0   "docker-entrypoint.s…"   About a minute ago   Exited (1) About a minute ago             redis-node
[root@slave4 ~]# docker logs 38e49f7a359a*** FATAL CONFIG FILE ERROR ***
Reading the configuration file, at line 11
>>> 'logfile /var/log/redis.log'
Can't open the log file: Permission denied
[root@slave4 ~]#
#示例:查看指定时间后的日志,只显示最后100行
docker logs -f -t --since="2018-02-08" --tail=100 CONTAINER_ID
#示例:查看最近30分钟的日志
docker logs --since 30m CONTAINER_ID
#示例:查看某时间之后的日志
docker logs -t --since="2018-02-08T13:23:37" CONTAINER_ID
#示例:查看某时间段日志
docker logs -t --since="2018-02-08T13:23:37" --until "2018-02-09T12:23:37" CONTAINER_ID
"6.2.10 进入容器"
#进入正在运行的容器中并开启一个交互模式的终端,可以在容器中执行操作
docker exec 进入容器后开启一个新的终端,可以在里面操作(常用)
docker exec -it 容器id或容器名称 /bin/bash
docker attach 进入容器正在执行的终端,不会启动新的进程
docker attach 容器id或容器名称 
"6.2.11 拷贝文件"
#将宿主机中的文件拷贝到容器中指定的目录中
docker cp 主机中的文件路径 容器ID或容器名称:容器路径 
#将容器中的文件拷贝到宿主机的指定目录中
docker cp 容器ID或容器名称:容器中的路径 主机路径
#示例
docker cp web:/usr/local/tomcat/conf/server.xml /tmp
"6.2.12 获取容器的元信息(详细信息,如IP地址等)"
docker inspect 容器ID或容器名称
#示例:查找配置文件"场景:今天发现一个报警,查找之后发现是 nginx 反向代理配置,而由于没有交接,需要找出 nginx 配置文件在物理机中的部署位置,或者说,原来部署 docker 的详细配置项"root@gz-manage16:~# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                            NAMES
f508a5397ee9        nginx:1.15          "nginx -g 'daemon of…"   2 years ago         Up 5 minutes        80/tcp, 0.0.0.0:9200->9200/tcp   production_nginx
root@gz-manage16:~# 
root@gz-manage16:~# docker inspect f508a5397ee9
[......"Mounts": [{"Type": "bind","Source": "/opt/es-stack-compose/nginx/nginx.conf","Destination": "/etc/nginx/nginx.conf","Mode": "rw","RW": true,"Propagation": "rprivate"},{"Type": "bind","Source": "/opt/es-stack-compose/nginx/logs","Destination": "/var/log/nginx","Mode": "rw","RW": true,"Propagation": "rprivate"},{"Type": "bind","Source": "/opt/es-stack-compose/nginx/conf.d","Destination": "/etc/nginx/conf.d","Mode": "rw","RW": true,"Propagation": "rprivate"}],......
]
"6.2.13 查看容器中进程信息"
docker top 容器ID或容器名称 
#示例[root@RS1 ~]# docker ps
CONTAINER ID   IMAGE     COMMAND                  CREATED                  STATUS                  PORTS                               NAMES
713ad3324392   nginx     "/docker-entrypoint.…"   Less than a second ago   Up Less than a second   0.0.0.0:83->80/tcp, :::83->80/tcp   nginx-3
a04dfb342238   nginx     "/docker-entrypoint.…"   Less than a second ago   Up Less than a second   0.0.0.0:82->80/tcp, :::82->80/tcp   nginx-2
f6271f4335ef   nginx     "/docker-entrypoint.…"   Less than a second ago   Up Less than a second   0.0.0.0:81->80/tcp, :::81->80/tcp   nginx-1
[root@RS1 ~]# docker top 713ad3324392
UID                 PID                 PPID                C                   STIME               TTY                 TIME                CMD
root                4059                4028                0                   01:46               ?                   00:00:00            nginx: master process nginx -g daemon off;
systemd+            4133                4059                0                   01:46               ?                   00:00:00            nginx: worker process
systemd+            4134                4059                0                   01:46               ?                   00:00:00            nginx: worker process
systemd+            4135                4059                0                   01:46               ?                   00:00:00            nginx: worker process
systemd+            4136                4059                0                   01:46               ?                   00:00:00            nginx: worker process
[root@RS1 ~]#
"6.2.14 列出或指定容器端口映射"
docker port 容器ID或容器名称 
#示例
[root@RS1 ~]# docker ps
CONTAINER ID   IMAGE     COMMAND                  CREATED                  STATUS                  PORTS                               NAMES
713ad3324392   nginx     "/docker-entrypoint.…"   Less than a second ago   Up Less than a second   0.0.0.0:83->80/tcp, :::83->80/tcp   nginx-3
a04dfb342238   nginx     "/docker-entrypoint.…"   Less than a second ago   Up Less than a second   0.0.0.0:82->80/tcp, :::82->80/tcp   nginx-2
f6271f4335ef   nginx     "/docker-entrypoint.…"   Less than a second ago   Up Less than a second   0.0.0.0:81->80/tcp, :::81->80/tcp   nginx-1
[root@RS1 ~]# docker port 713ad3324392
80/tcp -> 0.0.0.0:83
80/tcp -> :::83
[root@RS1 ~]#
"6.2.15 显示容器资源使用统计"
docker stats 容器ID或容器名称 
#示例[root@RS1 ~]# docker ps
CONTAINER ID   IMAGE     COMMAND                  CREATED                  STATUS                  PORTS                               NAMES
713ad3324392   nginx     "/docker-entrypoint.…"   Less than a second ago   Up Less than a second   0.0.0.0:83->80/tcp, :::83->80/tcp   nginx-3
a04dfb342238   nginx     "/docker-entrypoint.…"   Less than a second ago   Up Less than a second   0.0.0.0:82->80/tcp, :::82->80/tcp   nginx-2
f6271f4335ef   nginx     "/docker-entrypoint.…"   Less than a second ago   Up Less than a second   0.0.0.0:81->80/tcp, :::81->80/tcp   nginx-1
[root@RS1 ~]# docker stats f6271f4335ef
CONTAINER ID   NAME      CPU %     MEM USAGE / LIMIT    MEM %     NET I/O          BLOCK I/O         PIDS
f6271f4335ef   nginx-1   0.06%     43.3MiB / 1.946GiB   2.17%     9.79MB / 336kB   31.4MB / 14.6MB   5
CONTAINER ID   NAME      CPU %     MEM USAGE / LIMIT    MEM %     NET I/O          BLOCK I/O         PIDS
f6271f4335ef   nginx-1   0.06%     43.3MiB / 1.946GiB   2.17%     9.79MB / 336kB   31.4MB / 14.6MB   5
......
"6.2.16 暂停容器"
docker pause 容器ID 
"6.2.17 取消暂停"
docker unpause 
"6.2.18 容器重命名"
docker rename 旧容器名 新容器名

6.3 示例:运行 CentOS 镜像

#下载镜像创建容器docker search centos
docker pull centos
交互式运行容器(-it)# 根据centos:latest镜像运行容器,并以交互式模式进入容器中,但exit退出之后,容器会自动销毁
docker run --name mycentos -it --net host centos:latest /bin/bash
# 实际上是在Docker容器中运行了一个精简版的CentOS系统
# 退出并关闭容器
exit 
# 退出不关闭容器
Ctrl + P + Q
# 列出所有的容器
docker ps -a
docker start mycentos
docekr stop mycentos
docker rm mycentos
强制删除所有容器docker rm -f $(docker ps -aq)
2.守护式运行容器(-d)根据centos:latest镜像运行容器,并以守护式运行容器docker run --name mycentos --net host -d centos:latest
进入正在运行的容器中并开启一个交互模式的终端,可以在容器中执行操作(exit退出后容器不会销毁)docker exec -it mycentos /bin/bash

7 总结

相关文章:

docker基础用法及镜像和容器的常用命令大全

1.docker 体系架构 Docker 采用了 C / S 架构&#xff0c;包括客户端和服务端。Docker 守护进程作为服务端接受来自客户端的请求&#xff0c;并处理这些请求&#xff08;创建、运行、分发容器&#xff09;。客户端和服务端既可以运行在一个机器上&#xff0c;也可通过 socket 或…...

Spring(Bean生命周期)

目录 1. 生命周期简图2. 扩展接口介绍 2.1 Aware接口2.2 BeanPostProcessor接口2.3 InitializingBean2.4 DisposableBean2.5 BeanFactoryPostProcessor接口3. spring的简化配置 3.1 项目搭建3.2 Bean的配置和值注入3.3 AOP的示例 1. 生命周期简图 2. 扩展接口介绍 2.1 Aware接…...

什么是分布式锁?几种分布式锁分别是怎么实现的?

一、什么是分布式锁&#xff1a; 1、什么是分布式锁&#xff1a; 分布式锁&#xff0c;即分布式系统中的锁。在单体应用中我们通过锁解决的是控制共享资源访问的问题&#xff0c;而分布式锁&#xff0c;就是解决了分布式系统中控制共享资源访问的问题。与单体应用不同的是&am…...

【一天一门编程语言】R 语言程序设计极简教程

R 语言程序设计极简教程 文章目录 R 语言程序设计极简教程R语言简介1.1 介绍1.2 R 语言的基础知识1.2.1 语法1.2.2 数据类型1.2.3 基本操作1.3 R 语言的高级知识1.3.1 函数1.3.2 包1.3.3 面向对象编程1.4 使用 R 语言的实践1.4.1 数据处理1.4.2 数据可视化1.4.3 数据建模1.4.3.…...

记一次顿悟的经历

2023.02.20 一次顿悟的经历 体验一次顿悟 ​ 需求&#xff1a; ​为避免接收数据时一直阻塞&#xff0c;先调用 select 在一定时间内判断是否有数据可读 如果超时&#xff0c;就报错没读到数据&#xff0c;即使返回 如果仍然在 set 里&#xff0c;就调用 recv 函数接收数据 问…...

19_FreeRTOS软件定时器

目录 软件定时器介绍 FreeRTOS软件定时器特点 软件定时器的命令队列 软件定时器的相关配置 单次定时器和周期定时器 软件定时器结构体成员 FreeRTOS软件定时器相关API函数 实验源码 软件定时器介绍 定时器描述:从指定的时刻开始,经过一个指定时间,然后触发一个超时事件…...

值得推荐!安利5款良心又好用的小众软件

电脑上的各类软件有很多&#xff0c;除了那些常见的大众化软件&#xff0c;还有很多不为人知的小众软件&#xff0c;专注于实用功能&#xff0c;简洁干净、功能强悍。今天分享5个实用的软件&#xff0c;简单实用&#xff0c;效果拉满&#xff0c;堪称工作生活必备&#xff01; …...

Enhanced ShockBurst (ESB)原文翻译

自我学习为主&#xff0c;同时也为所需要的提供一份资料 官方地址 增强型ShockBurst&#xff08;ESB&#xff09;是一种支持双向数据包通信的基本协议&#xff0c;包括数据包缓冲、数据包确认和丢失数据包的自动重传。ESB以低功耗提供无线通信&#xff0c;并且实现的代码量小且…...

软件测试之兼容性测试

对于基于计算机平台的软件&#xff0c;在测试过程中必须考虑软、硬件的兼容性&#xff0c;在设计测试用例的过程中必须考虑数据转换或转移的问题&#xff0c;应该尽力发现其可能带来的错误。不仅是基于计算机平台的软件&#xff0c;对于嵌入式软件也一样&#xff0c;在软件升级…...

笔记(一)——容器

容器分类&#xff1a;序列式容器&#xff1a;每个元素都有固定位置&#xff0c;取决于插入的时机和地点&#xff0c;和元素无关&#xff0c;如vector、deque、list、stack、queue。关联式容器&#xff1a;元素位置取决于特定的排序准则&#xff0c;和插入顺序无关&#xff0c;如…...

C++入门:命名空间

假设这样一种情况&#xff0c;当一个班上有两个名叫 Zara 的学生时&#xff0c;为了明确区分它们&#xff0c;我们在使用名字之外&#xff0c;不得不使用一些额外的信息&#xff0c;比如他们的家庭住址&#xff0c;或者他们父母的名字等等。同样的情况也出现在 C 应用程序中。例…...

操作系统(复试准备)

操作系统&#xff08;复试准备&#xff09; 第一章知识点 操作系统概述 操作系统的概念 负责协调软硬件等计算机资源的工作 为上层用户&#xff0c;应用程序提供简单易用的接口 是一种系统软件 操作系统的功能与目标 资源的管理者 处理机管理&#xff0c;存储器管理&#x…...

2023年CDGA考试模拟题库(501-600)

2023年CDGA考试模拟题库(501-600) 501.希望从数据中获取价值的组织认识到,高质量数据比低质量数据更有价值。使用劣质数据充满风险,会损害组织的声誉,导致罚款、收入损失、客户流失和负面的媒体曝光等组织基于各种业务驱动因素而着手进行数据质量管理活动,下列哪项不属于上述驱…...

NCNN+Int8+yolov5部署和量化

【GiantPandaCV引言】 还记得我在两个月前写的文章吗,关于yolov4-tiny+ncnn+int8量化的详细教程:NCNN+INT8+YOLOV4量化模型和实时推理 后来准备写yolov5+ncnn+int8量化的教程,却在yolov5的量化上遇到了麻烦,一方面是量化后速度更慢了,另一方面是精度下降严重,出现满屏都…...

springboot+vue.js协同过滤算法之智能旅游推荐系统java

目 录 第一章 绪论 3 1.1课题背景 3 1.2课题研究的目的和意义 3 1.3 研究现状 4 1.4论文所做的主要工作 4 第二章 技术介绍 5 2.1B/S结构 5 2.2MySQL 介绍 5 2.3MySQL环境配置 6 第三章 系统分析与设计 8 3.1系统说明 8 3.2系统可行性分析…...

Google Brain新提出的优化器“Lion”,效果要比Adam(W)更好

Google Brain新提出的优化器“Lion”&#xff0c;效果要比Adam(W)更好 论文地址&#xff1a;https://arxiv.org/abs/2302.06675代码地址&#xff1a;https://github.com/google/automl/blob/master/lion/lion_pytorch.py 1 简单、内存高效、运行速度更快 与 AdamW 和各种自适…...

慢雾:Discord 私信钓鱼手法分析

事件背景 5 月 16 日凌晨&#xff0c;当我在寻找家人的时候&#xff0c;从项目官网的邀请链接加入了官方的 Discord 服务器。在我加入服务器后立刻就有一个"机器人"(Captcha.bot)发来私信要我进行人机验证。这一切看起来相当的合理。我也点击了这个验证链接进行查看…...

2023-2-25 刷题情况

交换字符使得字符串相同 题目描述 有两个长度相同的字符串 s1 和 s2&#xff0c;且它们其中 只含有 字符 “x” 和 “y”&#xff0c;你需要通过「交换字符」的方式使这两个字符串相同。 每次「交换字符」的时候&#xff0c;你都可以在两个字符串中各选一个字符进行交换。 …...

【数据结构】双向链表的接口实现(附图解和源码)

双向链表的接口实现&#xff08;附图解和源码&#xff09; 文章目录双向链表的接口实现&#xff08;附图解和源码&#xff09;前言一、定义结构体二、接口实现&#xff08;附图解源码&#xff09;1.初始化双向链表2.开辟新空间3.尾插数据4.尾删数据5.打印双向链表中数据6.头插数…...

数据结构与算法之[把数字翻译成字符串]动态规划

前言&#xff1a;最近在刷动态规划的算法题目&#xff0c;感觉这一类题目还是有一点难度的&#xff0c;但是不放弃也还是能学好的&#xff0c;今天给大家分享的是牛客网中的编程题目[把数字翻译成字符串]&#xff0c;这是一道经典的面试题目&#xff0c;快手&#xff0c;字节跳…...

java 面向对象三大特性之多态 万字详解(超详细)

目录 前言 : 一、为什么需要多态 : 1.白璧微瑕 : 2.举栗&#xff08;请甘雨,刻晴,钟离吃饭&#xff09;: 3.代码 : 4.问题 : 二、什么是多态 : 1.定义 : 2.多态的实现步骤&#xff08;重要&#xff09; : 三、多态的使用 : 1.多态中成员方法的使用&#xff08;重要…...

git push origin master 情况

&#x1f4e2;&#x1f4e2;&#x1f4e2;&#x1f4e3;&#x1f4e3;&#x1f4e3;哈喽&#xff01;大家好&#xff0c;我是「奇点」&#xff0c;江湖人称 singularity。刚工作几年&#xff0c;想和大家一同进步&#x1f91d;&#x1f91d;一位上进心十足的【Java ToB端大厂领…...

ElasticSearch查询优化routing

如果一个索引分片多达一百,再加上每个分片数据量大的情况下ES查询速度会慢,这种情况可以根据业务情况考虑使用_routing优化。 _routing 路由 当索引一个文档的时候,文档会被存储在一个主分片上。在存储时一般都会有多个主分片。Elasticsearch 如何知道一个文档应该放置在哪…...

【HashMap 1.7和1.8】

Java中的HashMap是一种常用的数据结构&#xff0c;用于存储键值对。在Java 1.7和1.8中&#xff0c;HashMap的实现有一些不同。 Java 1.7中的HashMap实现是基于“拉链法”的哈希表。每个哈希桶(bucket)是一个链表&#xff0c;存储了散列值相同的键值对。当键值对数量过多时&…...

【Zabbix实战之故障处理篇】Zabbix监控中文乱码问题解决方法

【Zabbix实战之故障处理篇】Zabbix监控中文乱码问题解决方法 一、问题展现1.查看Zabbix仪表盘2.问题分析二、检查Zabbix环境1.检查Zabbix监控主机2.检查Zabbix各组件状态三、在宿主机安装中文字体库1.安装中文字体2.查看字体文件四、安装中文字库1.查看Zabbix所有组件容器2.拷贝…...

学习(mianshi)必备-ClickHouse高性能查询/写入和常见注意事项(五)

目录 一、ClickHouse高性能查询原因-稀疏索引 二、ClickHouse高性能写入-LSM-Tree存储结构 什么是LSM-Tree 三、ClickHouse的常见注意事项和异常问题排查 一、ClickHouse高性能查询原因-稀疏索引 密集索引: 在密集索引中&#xff0c;数据库中的每个键值都有一个索引记录&…...

在Kotlin中探索 Activity Results API 极简的解决方案

Activity Results APIActivity Result API提供了用于注册结果、启动结果以及在系统分派结果后对其进行处理的组件。—Google官方文档https://developer.android.google.cn/training/basics/intents/result?hlzh-cn一句话解释&#xff1a;官方Jetpack组件用于代替startActivity…...

样式冲突太多,记一次前端CSS升级

目前平台前端使用的是原生CSSBEM命名&#xff0c;在多人协作的模式下&#xff0c;容易出现样式冲突。为了减少这一类的问题&#xff0c;提升研效&#xff0c;我调研了业界上主流的7种CSS解决方案&#xff0c;并将最终升级方案落地到了工程中。 样式冲突的原因 目前遇到的样式…...

如何解决报考PMP的那些问题?

关于PMP的报考条件&#xff0c;报考PMP都需要什么条件呢&#xff1f;【学历条件】&#xff1a;需要满足23周岁/高中毕业5年以上/大专以上学历&#xff0c;三个满足一个即可&#xff1b;【PDU条件】&#xff1a;报考PMP需要PDU证明&#xff08;学习项目管理课程的学时证明&#…...

数据结构栈的经典OJ题【leetcode最小栈问题大剖析】【leetcode有效的括号问题大剖析】

目录 0.前言 1.最小栈 1.1 原题展示 1.2 思路分析 1.2.1 场景引入 1.2.2 思路 1.3 代码实现 1.3.1 最小栈的删除 1.3.2 最小栈的插入 1.3.3 获取栈顶元素 1.3.4 获取当前栈的最小值 2. 有效的括号 0.前言 本篇博客已经把两个关于栈的OJ题分块&#xff0c;可以根据目…...