【Docker】13.容器基本操作实战

文章目录

  • [实战1. Mysql 容器化安装](#实战1. Mysql 容器化安装)
    • [1.1 查找Mysql镜像](#1.1 查找Mysql镜像)
    • [1.2 拉取镜像](#1.2 拉取镜像)
    • [1.3 查看启动用例](#1.3 查看启动用例)
    • [1.4 进入容器登录](#1.4 进入容器登录)
    • [1.5 释放空间](#1.5 释放空间)
  • [实战2. Redis 容器化安装:Redis 容器创建](#实战2. Redis 容器化安装:Redis 容器创建)
    • [2.1 下载 redis 镜像](#2.1 下载 redis 镜像)
    • [2.2 启动容器](#2.2 启动容器)
    • [2.3 设置key](#2.3 设置key)
    • [2.4 配置链接](#2.4 配置链接)
    • [2.5 查看key](#2.5 查看key)
    • [2.6 退出容器](#2.6 退出容器)
  • [实战3. C++容器制作](#实战3. C++容器制作)
    • [3.1 中科大源](#3.1 中科大源)
    • [3.2 下载 Ubuntu 镜像](#3.2 下载 Ubuntu 镜像)
    • [3.3 启动容器](#3.3 启动容器)
    • [3.4 配置国内镜像源加速](#3.4 配置国内镜像源加速)
    • [3.5 安装 gcc vim](#3.5 安装 gcc vim)
    • [3.6 编辑代码](#3.6 编辑代码)
    • [3.7 编译代码](#3.7 编译代码)
    • [3.8 在容器中运行](#3.8 在容器中运行)
    • [3.9 清理容器](#3.9 清理容器)
  • [实战4. SpringBoot 容器制作](#实战4. SpringBoot 容器制作)
    • [4.1 编写 demo](#4.1 编写 demo)
      • [4.1.1 创建 maven 项目](#4.1.1 创建 maven 项目)
      • [4.1.2 编写主函数构建 Spring 容器](#4.1.2 编写主函数构建 Spring 容器)
      • [4.1.3 编写控制器](#4.1.3 编写控制器)
      • [4.1.4 使用 maven 打包生成 jar 包](#4.1.4 使用 maven 打包生成 jar 包)
      • [4.1.5 测试 jar 包是否可用](#4.1.5 测试 jar 包是否可用)
      • [4.1.6 上传到 Linux 服务器备用](#4.1.6 上传到 Linux 服务器备用)
    • [4.2 制作容器](#4.2 制作容器)
      • [4.2.1 下载 Ubuntu 镜像](#4.2.1 下载 Ubuntu 镜像)
      • [4.2.2 启动容器](#4.2.2 启动容器)
      • [4.2.3 配置国内镜像源加速](#4.2.3 配置国内镜像源加速)
      • [4.2.4 安装 jdk](#4.2.4 安装 jdk)
      • [4.2.5 打开新的 shell 窗口,将 jar 拷贝到容器里面](#4.2.5 打开新的 shell 窗口,将 jar 拷贝到容器里面)
      • [4.2.6 查看容器中文件](#4.2.6 查看容器中文件)
      • [4.2.7 启动 java 服务](#4.2.7 启动 java 服务)
      • [4.2.8 通过浏览器访问页面](#4.2.8 通过浏览器访问页面)
      • [4.2.9 释放资源](#4.2.9 释放资源)
  • [实战5. 容器资源更新](#实战5. 容器资源更新)
    • [5.1 我们运行一个 nginx](#5.1 我们运行一个 nginx)
    • [5.2 查看资源变化](#5.2 查看资源变化)
    • [5.3 更新最大内存](#5.3 更新最大内存)
    • [5.4 再次查看内存](#5.4 再次查看内存)
    • [5.5 停止容器](#5.5 停止容器)
  • [6. 常见问题](#6. 常见问题)
    • [6.1 docker create、docker start 和 docker run 有什么区别?](#6.1 docker create、docker start 和 docker run 有什么区别?)
    • [6.2 docker import 和 docker load 有什么区别?](#6.2 docker import 和 docker load 有什么区别?)
    • [6.3 docker rm & docker rmi & docker prune 的差异?](#6.3 docker rm & docker rmi & docker prune 的差异?)

实战1. Mysql 容器化安装

1.1 查找Mysql镜像

进入 mysql 的镜像网站,查找 mysql 的镜像

镜像网址:https://registry.hub.docker.com/_/mysql

可以看到有这么多的 tag


1.2 拉取镜像

我们选择使用最多的 5.7 版本,拉取镜像

shell 复制代码
root@yudukai:~# docker pull mysql:5.7 
5.7: Pulling from library/mysql
df9a4d85569b: Pull complete 
1c56c3d4ce74: Pull complete 
ffc89e9dfd88: Pull complete 
20e4dcae4c69: Pull complete 
90986bb8de6e: Pull complete 
e9f03a1c24ce: Pull complete 
68c3898c2015: Pull complete 
6b95a940e7b6: Pull complete 
ae71319cb779: Pull complete 
43d05e938198: Pull complete 
064b2d298fba: Pull complete 
96889c47a44a: Download complete 
9eb6a52b8441: Download complete 
Digest: sha256:4bc6bc963e6d8443453676cae56536f4b8156d78bae03c0145cbe47c2aad73bb
Status: Downloaded newer image for mysql:5.7
docker.io/library/mysql:5.7
root@yudukai:~# 

1.3 查看启动用例

我们知道 msyql 的默认端口是 3306,而且有密码,查看官网的启动用例:

docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag

指定了 mysql 的密码信息

shell 复制代码
#启动一个 msyql,并指定密码和端口开放 
docker run --name mysql -e MYSQL_ROOT_PASSWORD=123456 -p 8200:3306 -d mysql:5.7
shell 复制代码
root@yudukai:~# docker run --name mysql -e MYSQL_ROOT_PASSWORD=123456 -p 8200:3306 -d mysql:5.7
ff0060468c8245406b2400992399859d1fa3ca3616b4ad4941fd30443e50ee27
root@yudukai:~# docker ps
CONTAINER ID   IMAGE          COMMAND                  CREATED          STATUS          PORTS                                                    NAMES
ff0060468c82   mysql:5.7      "docker-entrypoint.s..."   19 seconds ago   Up 16 seconds   33060/tcp, 0.0.0.0:8200->3306/tcp, [::]:8200->3306/tcp   mysql
root@yudukai:~# 

1.4 进入容器登录

我们进入容器登录,可以看到我们已经可以正常登录 msyql 了

shell 复制代码
root@yudukai:~# docker exec -it mysql bash
bash-4.2# mysql -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.7.44 MySQL Community Server (GPL)

Copyright (c) 2000, 2023, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
4 rows in set (0.00 sec)

mysql> 

如果我们对外开放了 8200 端口,没有防火墙的话,我们可以通过 GUI 工具远程登录到界面上,进行图形化操作。


1.5 释放空间

shell 复制代码
docker stop mysql
docker rm mysql

实战2. Redis 容器化安装:Redis 容器创建

2.1 下载 redis 镜像

shell 复制代码
root@yudukai:~# docker pull redis:7.0 
7.0: Pulling from library/redis
a2318d6c47ec: Pull complete 
73586727588c: Pull complete 
b59068c7715f: Pull complete 
96796a2514ff: Pull complete 
b8c430d0189b: Pull complete 
fcf1b4feeffd: Pull complete 
bcec16c47e35: Pull complete 
4f4fb700ef54: Pull complete 
28736f73c42f: Download complete 
b161831c5131: Download complete 
Digest: sha256:352c1fdadc91926edda08f45aeb3f27f37194c2f14101229c0523a11195c96e3
Status: Downloaded newer image for redis:7.0
docker.io/library/redis:7.0
root@yudukai:~#

2.2 启动容器

启动 redis 容器

shell 复制代码
docker run --name redis -p 8300:6379 -d redis:7.0
shell 复制代码
root@yudukai:~# docker run --name redis -p 8300:6379 -d redis:7.0
69f2cc84e484da1b412e1a18228911fea7338879880b63b502fd825045436054
root@yudukai:~# docker ps
CONTAINER ID   IMAGE          COMMAND                  CREATED         STATUS         PORTS                                         NAMES
69f2cc84e484   redis:7.0      "docker-entrypoint.s..."   5 seconds ago   Up 4 seconds   0.0.0.0:8300->6379/tcp, [::]:8300->6379/tcp   redis
root@yudukai:~# 

2.3 设置key

进入容器,设置一个 key

shell 复制代码
root@yudukai:~# docker exec -it redis bash
root@69f2cc84e484:/data# redis-cli
127.0.0.1:6379> set mykey 1 
OK
127.0.0.1:6379> get mykey
"1"
127.0.0.1:6379> 

如果开通了防火墙,我们可以通过可视化工具连接上,可视化工具下载地址:https://gitee.com/qishibo/AnotherRedisDesktopManager/releases


2.4 配置链接


2.5 查看key


2.6 退出容器

shell 复制代码
docker stop redis
docker rm redis

实战3. C++容器制作

3.1 中科大源

https://mirrors.ustc.edu.cn/help/


3.2 下载 Ubuntu 镜像

shell 复制代码
root@yudukai:~# docker pull ubuntu:22.04
22.04: Pulling from library/ubuntu
98c4455a9898: Pull complete 
398a0d4d3425: Download complete 
Digest: sha256:5ec03bb3441e8b0bf3b4f9cd4629a1ae763010dc3035bb8da3ae6cf026486401
Status: Downloaded newer image for ubuntu:22.04
docker.io/library/ubuntu:22.04
root@yudukai:~# 

3.3 启动容器

shell 复制代码
root@yudukai:~# docker run --name mygcc -it ubuntu:22.04 bash
root@669148f4e3b2:/# 

3.4 配置国内镜像源加速

shell 复制代码
root@669148f4e3b2:/# sed -i 's@//.*archive.ubuntu.com@//mirrors.ustc.edu.cn@g' /etc/apt/sources.list
root@669148f4e3b2:/# 

3.5 安装 gcc vim

shell 复制代码
apt update 
apt install gcc vim -y
shell 复制代码
# 出问题的话就清理一下代理
unset http_proxy
unset https_proxy
unset all_proxy

3.6 编辑代码

shell 复制代码
root@669148f4e3b2:/# mkdir src
root@669148f4e3b2:/# cd src
root@669148f4e3b2:/src# vim demo.c

输入以下内容:

c 复制代码
#include <stdio.h> 

int main() 
{ 
	printf("hello docker!\n"); 
	return 0; 
} 

3.7 编译代码

shell 复制代码
root@669148f4e3b2:/src# gcc demo.c -o demo

3.8 在容器中运行

shell 复制代码
root@669148f4e3b2:/src# ./demo 
hello docker!
root@669148f4e3b2:/src# 

退出容器

shell 复制代码
root@669148f4e3b2:/src# exit
exit
root@yudukai:~# 

这个时候可以看到我们的容器已经退出了,如果想再次进入使用 docker restart 就可以恢复容器


3.9 清理容器

shell 复制代码
docker stop mygcc
docker rm mygcc

实战4. SpringBoot 容器制作

4.1 编写 demo

使用 Spring Boot 创建一个简单的 demo, 在浏览器输出 hello docker!。

首先下载idea,然后打开

点击new project

点击create


4.1.1 创建 maven 项目

选择 Spring Boot 2.x 的第一个发布版本 2.0.2.RELEASE,在 pom.xml 中添加 spring-boot 依赖

xml 复制代码
<?xml version="1.0" encoding="UTF-8"?> 
<project xmlns="http://maven.apache.org/POM/4.0.0" 
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
                             http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 

    <groupId>org.example</groupId> 
    <artifactId>springboot-demo</artifactId> 
    <version>1.0-SNAPSHOT</version> 

    <properties> 
        <maven.compiler.source>8</maven.compiler.source> 
        <maven.compiler.target>8</maven.compiler.target> 
    </properties> 

    <!-- 项目的 pom 定义继承自 SpringBoot 的父 pom --> 
    <parent>
        <groupId>org.springframework.boot</groupId> 
        <artifactId>spring-boot-starter-parent</artifactId> 
        <version>2.0.2.RELEASE</version> 
    </parent>

    <!-- Web 项目,添加 spring-boot-starter-web 依赖即可,版本号由父 pom 已经定义好了,此处省略 --> 
    <dependencies> 
        <dependency> 
            <groupId>org.springframework.boot</groupId> 
            <artifactId>spring-boot-starter-web</artifactId> 
        </dependency> 
    </dependencies> 

    <!-- 添加 spring boot 项目构建插件 --> 
    <build>
        <plugins> 
            <plugin> 
                <groupId>org.springframework.boot</groupId> 
                <artifactId>spring-boot-maven-plugin</artifactId> 
                <executions> 
                    <execution> 
                        <goals> 
                            <goal>repackage</goal> 
                        </goals> 
                    </execution> 
                </executions> 
            </plugin> 
        </plugins> 
    </build> 
</project> 

添加这些:

先双击clean

再双击package

结束后也可以点一下这个


4.1.2 编写主函数构建 Spring 容器

java 复制代码
package com.bittech.boot; 
import org.springframework.boot.SpringApplication; 
import org.springframework.boot.autoconfigure.SpringBootApplication; 

@SpringBootApplication 
public class ExampleApplication { 
    public static void main(String[] args) { 
        SpringApplication.run(ExampleApplication.class, args); 
    } 
} 

写好后看一下是否可以正常运行


4.1.3 编写控制器

编写ExampleApplication类

java 复制代码
package com.bit;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/hello")
public class ExampleApplication {
    @RequestMapping("")
    public String index(){
        return "hello I am from docker!";
    }
}

然后我们运行main函数

打开浏览器输入:

shell 复制代码
http://127.0.0.1:8080/hello

4.1.4 使用 maven 打包生成 jar 包

再次点击clean和package。

生成的 jar 包位于项目根路径下的 target 目录


4.1.5 测试 jar 包是否可用

然后进入路径

在这里打开终端

启动容器后, 访问 localhost:8080/hello 查看运行结果, 确认 jar 包可用。


4.1.6 上传到 Linux 服务器备用

shell 复制代码
root@yudukai:~/108/spring_demo# pwd
/root/108/spring_demo
root@yudukai:~/108/spring_demo# ls
dockerdemo-1.0-SNAPSHOT.jar
root@yudukai:~/108/spring_demo# 

4.2 制作容器

4.2.1 下载 Ubuntu 镜像

shell 复制代码
docker pull ubuntu:22.04 

4.2.2 启动容器

shell 复制代码
root@139-159-150-152:/data/myworkdir/container# docker run -p 8080:8080 --name myjava -it ubuntu:22.04 bash 
root@50d527b8343e:/#

4.2.3 配置国内镜像源加速

shell 复制代码
root@50d527b8343e:/# sed -i 's@//.*archive.ubuntu.com@//mirrors.ustc.edu.cn@g' /etc/apt/sources.list 
root@50d527b8343e:/#

4.2.4 安装 jdk

shell 复制代码
apt update 
apt install -y openjdk-8-jdk

4.2.5 打开新的 shell 窗口,将 jar 拷贝到容器里面

shell 复制代码
docker cp ./dockerdemo-1.0-SNAPSHOT.jar myjava:/app.jar

4.2.6 查看容器中文件

shell 复制代码
root@fc2847def31b:/# ls
bin  boot  dev  etc  home  lib  lib32  lib64  libx32  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
root@fc2847def31b:/# ll
total 15820
drwxr-xr-x   1 root root     4096 Oct  8 05:59 ./
drwxr-xr-x   1 root root     4096 Oct  8 05:59 ../
-rwxr-xr-x   1 root root        0 Oct  8 05:53 .dockerenv*
-rw-r--r--   1 root root 16125894 Oct  8 05:51 app.jar
lrwxrwxrwx   1 root root        7 Sep 24 14:05 bin -> usr/bin/
drwxr-xr-x   2 root root     4096 Apr 18  2022 boot/
drwxr-xr-x   5 root root      360 Oct  8 05:53 dev/
drwxr-xr-x   1 root root     4096 Oct  8 05:58 etc/
drwxr-xr-x   2 root root     4096 Apr 18  2022 home/
lrwxrwxrwx   1 root root        7 Sep 24 14:05 lib -> usr/lib/
lrwxrwxrwx   1 root root        9 Sep 24 14:05 lib32 -> usr/lib32/
lrwxrwxrwx   1 root root        9 Sep 24 14:05 lib64 -> usr/lib64/
lrwxrwxrwx   1 root root       10 Sep 24 14:05 libx32 -> usr/libx32/
drwxr-xr-x   2 root root     4096 Sep 24 14:05 media/
drwxr-xr-x   2 root root     4096 Sep 24 14:05 mnt/
drwxr-xr-x   2 root root     4096 Sep 24 14:05 opt/
dr-xr-xr-x 262 root root        0 Oct  8 05:53 proc/
drwx------   2 root root     4096 Sep 24 14:12 root/
drwxr-xr-x   1 root root     4096 Oct  8 05:57 run/
lrwxrwxrwx   1 root root        8 Sep 24 14:05 sbin -> usr/sbin/
drwxr-xr-x   2 root root     4096 Sep 24 14:05 srv/
dr-xr-xr-x  13 root root        0 Oct  8 05:53 sys/
drwxrwxrwt   1 root root     4096 Oct  8 05:58 tmp/
drwxr-xr-x   1 root root     4096 Sep 24 14:05 usr/
drwxr-xr-x   1 root root     4096 Sep 24 14:12 var/
root@fc2847def31b:/# 

4.2.7 启动 java 服务

shell 复制代码
java -jar ./app.jar

4.2.8 通过浏览器访问页面

注意确保防火墙打开

ctrl+c 退出服务,exit 退出容器


4.2.9 释放资源

shell 复制代码
docker stop myjava
docker rm myjava

实战5. 容器资源更新

5.1 我们运行一个 nginx

shell 复制代码
docker run -d --name mynginx5 -p 80:80 nginx:1.22.0

我们可以通过 docker top 查看容器中有哪些进程,添加 aux,可以看到占用的内存和 CPU 信息

shell 复制代码
root@yudukai:~/108/spring_demo# docker top mynginx5 aux
USER                PID                 %CPU                %MEM                VSZ                 RSS                 TTY                 STAT                START               TIME                COMMAND
root                1796754             0.1                 0.0                 8920                5548                ?                   Ss                  14:09               0:00                nginx: master process nginx -g daemon off;
systemd+            1796829             0.0                 0.0                 9308                2524                ?                   S                   14:09               0:00                nginx: worker process
systemd+            1796830             0.0                 0.0                 9308                2524                ?                   S                   14:09               0:00                nginx: worker process
systemd+            1796831             0.0                 0.0                 9308                2524                ?                   S                   14:09               0:00                nginx: worker process
systemd+            1796832             0.0                 0.0                 9308                2524                ?                   S                   14:09               0:00                nginx: worker process
root@yudukai:~/108/spring_demo# 

5.2 查看资源变化

通过 docker stats 可以看到资源的动态变化

shell 复制代码
root@yudukai:~/108/spring_demo# docker stats 
CONTAINER ID   NAME              CPU %     MEM USAGE / LIMIT     MEM %     NET I/O         BLOCK I/O        PIDSf3e319361a69   mynginx5          0.00%     4.766MiB / 7.763GiB   0.06%     726B / 126B     807kB / 12.3kB   5
58109926ba0a   mynginx004        0.00%     3.934MiB / 7.763GiB   0.05%     34.3kB / 126B   0B / 4.1kB       5c9e86c4f9bf3   mynginx003        0.00%     3.969MiB / 7.763GiB   0.05%     34.3kB / 126B   12.3kB / 4.1kB   5
c42b26328912   mynginx001        0.00%     4MiB / 7.763GiB       0.05%     34.3kB / 126B   12.3kB / 4.1kB   5
8c523baaa860   boring_torvalds   0.00%     4.711MiB / 7.763GiB   0.06%     34.2kB / 126B   20.5kB / 4.1kB   5
ea63b99ba74d   mywebsite2        0.00%     4.02MiB / 7.763GiB    0.05%     34.1kB / 126B   1.15MB / 4.1kB   5

^Croot@yudukai:~/108/spring_demo# 

5.3 更新最大内存

我们通过 docker update 更新 docker 的最大内存

shell 复制代码
root@yudukai:~/108/spring_demodocker update -m 300m --memory-swap 600m mynginx5
mynginx5
root@yudukai:~/108/spring_demo# 

5.4 再次查看内存

我们通过 docker stats 再次查看可以看到内存已经被限制到 300m 了

shell 复制代码
root@yudukai:~/108/spring_demo# docker stats
CONTAINER ID   NAME              CPU %     MEM USAGE / LIMIT     MEM %     NET I/O         BLOCK I/O        PIDSf3e319361a69   mynginx5          0.00%     4.766MiB / 300MiB     1.59%     866B / 126B     807kB / 12.3kB   5
58109926ba0a   mynginx004        0.00%     3.934MiB / 7.763GiB   0.05%     34.3kB / 126B   0B / 4.1kB       5c9e86c4f9bf3   mynginx003        0.00%     3.969MiB / 7.763GiB   0.05%     34.3kB / 126B   12.3kB / 4.1kB   5
c42b26328912   mynginx001        0.00%     4MiB / 7.763GiB       0.05%     34.3kB / 126B   12.3kB / 4.1kB   5
8c523baaa860   boring_torvalds   0.00%     4.711MiB / 7.763GiB   0.06%     34.2kB / 126B   20.5kB / 4.1kB   5
ea63b99ba74d   mywebsite2        0.00%     4.02MiB / 7.763GiB    0.05%     34.1kB / 126B   1.15MB / 4.1kB   5

^Croot@yudukai:~/108/spring_demo# 
shell 复制代码
root@yudukai:~/108/spring_demo# docker exec -it mynginx5 bash
# 我们在容器中执行一个命令,打满 cpu
root@f3e319361a69:/# for i in $(seq 1 $(nproc)); do dd if=/dev/zero of=/dev/null & done
[1] 43
[2] 44
[3] 45
[4] 46
root@f3e319361a69:/# exit
exit
root@yudukai:~/108/spring_demo# 
shell 复制代码
#说明: 
#cat /proc/cpuinfo |grep "physical id" | wc -l 可以获得 CPU 的个数, 我们将其表示为 N 
#seq 1 N 用来生成1到N之间的数字
#for i in seq 1 N; 就是循环执行命令,从1到N 
#dd if=/dev/zero of=/dev/null 执行 dd 命令, 输出到/dev/null, 实际上只占用 CPU, 没有 IO 操作 
#由于连续执行N个(N是 CPU 个数)的 dd 命令, 且使用率为 100%, 这时调度器会调度每个 dd 命令在不同的 CPU 上处理,最终就实现所有CPU占用率 100%
shell 复制代码
CONTAINER ID   NAME              CPU %     MEM USAGE / LIMIT     MEM %     NET I/O         BLOCK I/O        PIDSf3e319361a69   mynginx5          398.31%   5.516MiB / 300MiB     1.84%     936B / 126B     848kB / 16.4kB   9
58109926ba0a   mynginx004        0.00%     3.934MiB / 7.763GiB   0.05%     34.3kB / 126B   0B / 4.1kB       5c9e86c4f9bf3   mynginx003        0.00%     3.969MiB / 7.763GiB   0.05%     34.3kB / 126B   12.3kB / 4.1kB   5
c42b26328912   mynginx001        0.00%     4MiB / 7.763GiB       0.05%     34.3kB / 126B   12.3kB / 4.1kB   5
8c523baaa860   boring_torvalds   0.00%     4.711MiB / 7.763GiB   0.06%     34.2kB / 126B   20.5kB / 4.1kB   5
ea63b99ba74d   mywebsite2        0.00%     4.02MiB / 7.763GiB    0.05%     34.1kB / 126B   1.15MB / 4.1kB   5

^Croot@yudukai:~/108/spring_demo# 

执行命令配置只能使用 10%的 cpu

shell 复制代码
docker update --cpu-period=100000 --cpu-quota=10000 mynginx5

可以看到 cpu 已经只能到 10%左右了

shell 复制代码
CONTAINER ID   NAME              CPU %     MEM USAGE / LIMIT     MEM %     NET I/O         BLOCK I/O        PIDSf3e319361a69   mynginx5          9.50%     5.516MiB / 300MiB     1.84%     936B / 126B     848kB / 16.4kB   9
58109926ba0a   mynginx004        0.00%     3.934MiB / 7.763GiB   0.05%     34.3kB / 126B   0B / 4.1kB       5c9e86c4f9bf3   mynginx003        0.00%     3.969MiB / 7.763GiB   0.05%     34.3kB / 126B   12.3kB / 4.1kB   5
c42b26328912   mynginx001        0.00%     4MiB / 7.763GiB       0.05%     34.3kB / 126B   12.3kB / 4.1kB   5
8c523baaa860   boring_torvalds   0.00%     4.711MiB / 7.763GiB   0.06%     34.2kB / 126B   20.5kB / 4.1kB   5
ea63b99ba74d   mywebsite2        0.00%     4.02MiB / 7.763GiB    0.05%     34.1kB / 126B   1.15MB / 4.1kB   5

^Croot@yudukai:~/108/spring_demo# 

5.5 停止容器

停止容器,释放资源

shell 复制代码
docker stop mynginx5 
docker rm mynginx5

6. 常见问题

6.1 docker create、docker start 和 docker run 有什么区别?

  1. docker create:命令从 Docker 映像创建一个全新的容器。但是,它不会立即运行它。

  2. docker start:命令将启动任何已停止的容器。

    如果使用 docker create 命令创建容器,则可以使用此命令启动它。

  3. docker run:命令是创建和启动的组合,因为它创建了一个新容器并立即启动它。

    实际上,如果 docker run 命令在您的系统上找不到上述映像,它可以从 Docker Hub 中提取映像。


6.2 docker import 和 docker load 有什么区别?

想要了解 docker load 与 docker import 命令的区别,还必须知道 docker save与 docker export 命令:

  1. docker save images_name:将一个镜像导出为文件,再使用 docker load 命令将文件导入为一个镜像,会保存该镜像的的所有历史记录。比 docker export 命令导出的文件大,很好理解,因为会保存镜像的所有历史记录。
  2. docker export container_id:将一个容器导出为文件,再使用 docker import 命令将容器导入成为一个新的镜像,但是相比 docker save 命令,容器文件会丢失所有元数据和历史记录,仅保存容器当时的状态,相当于虚拟机快照。

既可以使用 docker load 命令来导入镜像库存储文件到本地镜像库,也可以使用docker import 命令来导入一个容器快照到本地镜像库。

两者的区别在于容器快照将会丢弃所有的历史记录和元数据信息,而镜像存储文件将保存完整记录,体积也会更大。


6.3 docker rm & docker rmi & docker prune 的差异?

  1. docker rm:删除一个或多个容器
  2. docker rmi:删除一个或多个镜像
  3. docker prune:用来删除不再使用的 docker 对象
相关推荐
不会就选b11 小时前
Linux之TCP理论<1>
linux·运维·服务器
倔强的石头10613 小时前
应用账号最小权限实践:读写账号、报表账号、运维账号分层
java·运维·开发语言
Android系统攻城狮14 小时前
Linux Gstreamer深度解析之gst_audio_encoder_get_frame_samples_min调用流程与实战(六十)
linux·运维·服务器·音视频·gstreamer音视频·音视频进阶·gstreamer音视频进阶
_upupup14 小时前
Linux中的自动化构建——make/Makefile
linux·运维·自动化
还卿一钵无情泪15 小时前
Docker 部署Unsloth 绕开环境配置难题
运维·人工智能·docker·ai·容器·nlp·干货
打工仔折腾 AI16 小时前
Docker镜像分层与卷挂载到底怎么工作:一次文件系统层面的实测分析
运维·人工智能·后端·python·docker·容器·性能优化
大猫会长17 小时前
调用codebuddy集成的supabase授权白屏解决方法
linux·运维·服务器
夜之眷属17 小时前
服务器被挖矿病毒入侵的排查与清理实录
运维·服务器
极客先躯17 小时前
高级java每日一道面试题-2026年01月20日-实战篇[Docker]-如何实现镜像的跨区域复制?
java·运维·docker·容器·架构图