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

【docker】10. 容器操作案例

容器操作案例

容器基本操作

• 通过 nginx 镜像文件创建容器
在这里插入图片描述
• 容器的列举(包含正在运行的容器)

# 发现此时 e7c33d9f5c61 这个容器运行的状态为 Up,即运行状态
root@LAPTOP-H2EI4I6A:~# docker container ls
CONTAINER ID   IMAGE     COMMAND                  CREATED          STATUS          PORTS     NAMES
e7c33d9f5c61   nginx     "/docker-entrypoint.…"   59 seconds ago   Up 58 seconds   80/tcp    keen_mestorf

• 停止当前正在运行的容器

 docker container stop e7c33d9f5c61

• 容器的列举(包含正在运行和退出的容器)

root@LAPTOP-H2EI4I6A:~# docker container ls -a# 看到可以列举出已经退出的状态
CONTAINER ID   IMAGE          COMMAND                  CREATED         STATUS                      PORTS                               NAMES
e7c33d9f5c61   nginx          "/docker-entrypoint.…"   3 minutes ago   Exited (0) 14 seconds ago                                       keen_mestorf
e249ad15d7fe   nginx:1.23.3   "/docker-entrypoint.…"   4 weeks ago     Exited (255) 4 weeks ago    0.0.0.0:80->80/tcp, :::80->80/tcp   brave_raman
8c5bbb5a7a3c   nginx:1.23.3   "/docker-entrypoint.…"   4 weeks ago     Exited (255) 4 weeks ago    80/tcp                              mynginx
97eb88ba8c20   d2c94e258dcb   "/hello"                 5 weeks ago     Exited (0) 5 weeks ago                                          epic_pasteur

• 容器的删除

# 删除 e7c33d9f5c61 这个容器
root@LAPTOP-H2EI4I6A:~# docker container rm e7c33d9f5c61
e7c33d9f5c61
# 查看当前容器列表 可以发现 e7c33d9f5c61 该容器已经被删除
root@LAPTOP-H2EI4I6A:~# docker container ls -a
CONTAINER ID   IMAGE          COMMAND                  CREATED       STATUS                     PORTS                               NAMES
e249ad15d7fe   nginx:1.23.3   "/docker-entrypoint.…"   4 weeks ago   Exited (255) 4 weeks ago   0.0.0.0:80->80/tcp, :::80->80/tcp   brave_raman
8c5bbb5a7a3c   nginx:1.23.3   "/docker-entrypoint.…"   4 weeks ago   Exited (255) 4 weeks ago   80/tcp                              mynginx
97eb88ba8c20   d2c94e258dcb   "/hello"                 5 weeks ago   Exited (0) 5 weeks ago                                         epic_pasteur

容器状态迁移

  1. 首先我们创建容器
root@LAPTOP-H2EI4I6A:~# docker create --name mynginx1 -p 80:80 nginx:1.22.1
Unable to find image 'nginx:1.22.1' locally
1.22.1: Pulling from library/nginx
Digest: sha256:fc5f5fb7574755c306aaf88456ebfbe0b006420a184d52b923d2f0197108f6b7
Status: Downloaded newer image for nginx:1.22.1
4877bec6d520594290e0891a090f167f681bd30798e26e982bfd2362862b0b28
  1. 通过 docker ps 我们可以看到容器状态为已经创建
root@LAPTOP-H2EI4I6A:~# docker ps -a | grep mynginx1
4877bec6d520   nginx:1.22.1   "/docker-entrypoint.…"   43 seconds ago   Created                                                        mynginx1
  1. 通过 docker start 启动容器
root@139-159-150-152:~# docker start mynginx1
mynginx1
  1. 通过 docker ps 可以看到容器为已经运行
root@LAPTOP-H2EI4I6A:~# docker ps
CONTAINER ID   IMAGE          COMMAND                  CREATED         STATUS          PORTS                               NAMES
4877bec6d520   nginx:1.22.1   "/docker-entrypoint.…"   2 minutes ago   Up 33 seconds   0.0.0.0:80->80/tcp, :::80->80/tcp   mynginx1
  1. 通过 docker stop 可以停止容器
root@LAPTOP-H2EI4I6A:~# docker stop mynginx1
mynginx1
root@LAPTOP-H2EI4I6A:~# docker ps -a |grep mynginx1
4877bec6d520   nginx:1.22.1   "/docker-entrypoint.…"   3 minutes ago   Exited (0) 36 seconds ago                                       mynginx1
  1. 再次启动容器,然后 kill 容器
root@139-159-150-152:/data/var/lib/docker# docker start mynginx1
mynginx1
root@139-159-150-152:/data/var/lib/docker# docker kill mynginx1
mynginx1
root@139-159-150-152:/data/var/lib/docker# docker ps -a |grep 
mynginx1
11fc874cea79 nginx:1.22.1 "/docker-entrypoint.…" 3 minutes 
ago Exited (137) 5 seconds ago mynginx1

这里的137表示容器进程接收到了退出码(137=128+9)也就是接收到SIGKILL的信号
7. 启动容器,然后暂停容器

root@LAPTOP-H2EI4I6A:~# docker start mynginx1
mynginx1
root@LAPTOP-H2EI4I6A:~# docker pause mynginx1
mynginx1
root@LAPTOP-H2EI4I6A:~# docker ps
CONTAINER ID   IMAGE          COMMAND                  CREATED         STATUS                   PORTS                               NAMES
4877bec6d520   nginx:1.22.1   "/docker-entrypoint.…"   8 minutes ago   Up 39 seconds (Paused)   0.0.0.0:80->80/tcp, :::80->80/tcp   mynginx1
  1. 恢复容器
root@LAPTOP-H2EI4I6A:~# docker unpause mynginx1
mynginx1
root@LAPTOP-H2EI4I6A:~# docker ps
CONTAINER ID   IMAGE          COMMAND                  CREATED         STATUS              PORTS                               NAMES
4877bec6d520   nginx:1.22.1   "/docker-entrypoint.…"   8 minutes ago   Up About a minute   0.0.0.0:80->80/tcp, :::80->80/tcp   mynginx1
  1. 重启容器,可以看到容器的启动时间变短了。
root@LAPTOP-H2EI4I6A:~# docker ps
CONTAINER ID   IMAGE          COMMAND                  CREATED         STATUS              PORTS                               NAMES
4877bec6d520   nginx:1.22.1   "/docker-entrypoint.…"   9 minutes ago   Up About a minute   0.0.0.0:80->80/tcp, :::80->80/tcp   mynginx1
root@LAPTOP-H2EI4I6A:~# docker restart mynginx1
mynginx1
root@LAPTOP-H2EI4I6A:~# docker ps
CONTAINER ID   IMAGE          COMMAND                  CREATED         STATUS         PORTS                               NAMES
4877bec6d520   nginx:1.22.1   "/docker-entrypoint.…"   9 minutes ago   Up 2 seconds   0.0.0.0:80->80/tcp, :::80->80/tcp   mynginx1
  1. 通过 docker rm 可以删除容器
root@LAPTOP-H2EI4I6A:~# docker stop mynginx1
mynginx1
root@LAPTOP-H2EI4I6A:~# docker rm mynginx1
mynginx1
root@LAPTOP-H2EI4I6A:~# docker ps -a | grep mynginx1
root@LAPTOP-H2EI4I6A:~# 

容器批量处理技巧

命令解释
docker container ls -qf name=xxx根据名称过滤得到容器编号
docker container ls --filter status=running根据状态过滤容器信息,这里是筛选出状态为正在运行的容器相关信息
docker container ls -aq静默获取全部容器 id,即不显示额外的表头之类信息,仅输出所有容器的 id
docker container ls --filter ancestor=xxx(按镜像名)过滤镜像名为 xxx 的容器信息,通过指定的镜像名来筛选对应的容器情况
docker container ls --filter ancestor=xxx(按镜像 id过滤镜像 idxxx 的容器信息,以特定的镜像 id 为依据来筛选出相关容器情况

• -a:表示打印所有的容器信息, 包括正在运行和已经退出的
• -q: 表示只返回容器 ID
• -f: 表示基于给的条件过滤 等价于 --filter 选项

Shell

# 案例一: 批量删除容器
# 查看当前容器列表
[zsc@VM-8-12-centos ~]$ docker container ls -a
CONTAINER ID IMAGE COMMAND CREATED 
STATUS PORTS NAMES
438d82615e61 nginx "/docker-entrypoint.…" 34 minutes ago 
Exited (0) 2 seconds ago hardcore_sanderson
491c6961474b nginx "/docker-entrypoint.…" 57 minutes ago 
Exited (130) 51 minutes ago elastic_nobel
50147dca69d7 nginx "/docker-entrypoint.…" About an hour 
ago Exited (0) 24 minutes ago happy_curie
433359f24804 nginx "/docker-entrypoint.…" 2 hours ago 
Exited (0) 2 hours ago infallible_pasteur
b24b38c58f71 nginx "/docker-entrypoint.…" 2 hours ago 
Exited (0) 2 hours ago priceless_meitner
156aba06663a nginx "/docker-entrypoint.…" 2 hours ago 
Exited (0) 2 hours ago nervous_hawking
5bdc2c5ced7e nginx "/docker-entrypoint.…" 27 hours ago 
Exited (0) 27 hours ago condescending_thompson
b2a843ee6635 nginx "/docker-entrypoint.…" 6 days ago 
Exited (0) 5 days ago elegant_archimedes
# 方法一: 删除命令后边加多个容器 ID,比较麻烦, 不建议使用
[zsc@VM-8-12-centos ~]$docker container rm 43 49 50 ...
# 方法二: 通过参数传递方式批量删除容器, 建议使用
[zsc@VM-8-12-centos ~]$ docker container rm $(docker container ls -aq)
438d82615e61
491c6961474b
50147dca69d7
433359f24804
b24b38c58f71
156aba06663a
5bdc2c5ced7e
b2a843ee6635
# 查看当前容器列表, 发现已经批量删除完毕
[zsc@VM-8-12-centos ~]$ docker container ls -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS 
NAMES
# 案例二: 按照状态过滤删除已经退出的容器
# 查看当前容器列表[zsc@VM-8-12-centos ~]$ docker container ls -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b1ade609ac36 nginx "/docker-entrypoint.…" 33 seconds ago Up 31 seconds 0.0.0.0:80->80/tcp, :::80->80/tcp optimistic_keldysh
95c493f5d2b3 nginx "/docker-entrypoint.…" 38 seconds ago Exited (0) 33 seconds ago nervous_yalow
d9483e5664c0 nginx "/docker-entrypoint.…" 42 seconds ago Exited (0) 39 seconds ago epic_kalam
bdb52c88cd0a nginx "/docker-entrypoint.…" 42 minutes ago Exited (0) 43 seconds ago magical_bhaskara
# 按照状态过滤删除已经退出的容器
[zsc@VM-8-12-centos ~]$ docker container rm $(docker container ls -q --filter status=exited)
95c493f5d2b3
d9483e5664c0
bdb52c88cd0a
# 确认是否删除
[zsc@VM-8-12-centos ~]$ docker container ls -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b1ade609ac36 nginx "/docker-entrypoint.…" 2 minutes ago Up 2 minutes 0.0.0.0:80->80/tcp, :::80->80/tcp optimistic_keldysh

注:其他命令在做批量处理的时候同样可以类比, 比如批量停止 docker container stop $(docker container ps -aq)

容器交互模式

attached 模式

# 通过 nginx 镜像创建一个容器, 映射 80 端口
[zsc@VM-8-12-centos ~]$ docker container run -p 80:80 nginx

-p 80:80 表示端口映射,第一个端口表示映射到宿主机的端口,第二个端口表示映射到 Docker 容器的端口
• 通过上述方式创建容器,就是 attached 模式,这样容器会在前台运行
• 访问服务器网址的时候,每访问一次,命令窗口就会打印一次日志,Docker 容器的日志会实时的展现到窗口并且占用此端口
• 如果是在 Linux 服务器上,按 Ctrl+C 就会停止掉 Docker 服务,很容易误操作,所以我们需要一个更好的,更稳定的模式,对应的是 detached 模式
• attached 模式仅适用于容器和程序的调试阶段

下面实践一下 attached 模式的用法
• 第一步: 以 attached 模式创建运行容器, 映射到宿主机的 80 端口

[zsc@VM-8-12-centos ~]$ docker container run -p 80:80 nginx

• 第二步: 访问服务器的 80 端口,用浏览器访问服务器 ip 或者域名,默认访问 80端口
在这里插入图片描述
可以看到 nginx 主页已经展现在浏览器上。当我们刷新访问后发现在标准输出上会打印一些相关的 log 出来。
• 第三步: 键入 Ctrl + C

# 键入 Ctrl + C
# 执行命令查看当前容器状态, 可以发现该容器已经退出掉了
[zsc@VM-8-12-centos ~]$ docker container ls -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
433359f24804 nginx "/docker-entrypoint.…" 15 minutes ago Exited (0) 27 seconds ago infallible_pasteur
b24b38c58f71 nginx "/docker-entrypoint.…" 19 minutes ago Exited (0) 15 minutes ago priceless_meitner
156aba06663a nginx "/docker-entrypoint.…" 42 minutes ago Exited (0) 35 minutes ago  nervous_hawking
5bdc2c5ced7e nginx "/docker-entrypoint.…" 25 hours ago Exited (0) 25 hours ago  condescending_thompson
b2a843ee6635 nginx "/docker-entrypoint.…" 6 days ago Exited (0) 5 days ago elegant_archimedes

detached 模式

在 docker container run -p 80:80 nginx 命令基础上加一个-d 或者–detach选项表示 detached 模式, 即在后台执行
• 在后台运行,启动后只显示容器 ID,并且可以输入任何命令
• 就算关掉窗口依然继续运行,停止和删除容器都需要使用 shell 命令,减少了很多的误操作
• 比起 attached 模式更建议使用

下面来实践一下 detached 模式的用法
• 第一步: 以 detached 模式创建容器, 并映射 80 端口

[zsc@VM-8-12-centos ~]$ docker container run -d -p 80:80 nginx
# 执行结果 返回容器 ID
50147dca69d7d84271476def3a10e030001e3bcd4f2f5c6cb6a7f8b93b8d9a3b

• 第二步: 浏览器访问服务器网址,并查看后台日志

# 查看后台日志
[zsc@VM-8-12-centos ~]$ docker container logs 501

刷新浏览器可以看到此时在后台已经打印出来相关的日志
在这里插入图片描述
• 动态跟踪日志:后台日志窗口只会打印一次日志。如果想动态跟踪日志,可以加-f选项;如果想关闭日志跟踪模式,可以键入 Ctrl+C 结束

[zsc@VM-8-12-centos ~]$ docker container logs -f 501

• detached 模式转 attached 模式

[zsc@VM-8-12-centos ~]$ docker container attach 501 

interactive 模式

当我们创建好一个容器之后, 可能需要去容器内部获取一些信息或执行一些命令,就需要进入到交互式模式。
例如创建一个 Ubuntu 容器之后,需要到系统里输入各种Shell 命令和系统进行交互就需要进入交互式模式才可以完成。

• 创建运行容器并进入到交互模式

[zsc@VM-8-12-centos ~]$ docker container run -it nginx sh
# 进入到容器的交互 shell 中,可以在该 shell 下执行对应的命令
# ls
bin boot dev docker-entrypoint.d docker-entrypoint.sh 
etc home lib lib64 media mnt opt proc root run 
sbin srv sys tmp usr var

○ -i:保持容器运行。通常与 -t 同时使用,加入 it 这两个参数后,容器创建后自动进入容器中,退出容器后,容器自动关闭
○ -t:为容器重新分配一个伪输入终端,通常与 -i 同时使用

• 针对一个已经运行的容器里进入到交互模式

# 在后台创建运行 nginx 容器
[zsc@node ~]$ docker container run -d -p 80:80 nginx
50147dca69d7d84271476def3a10e030001e3bcd4f2f5c6cb6a7f8b93b8d9a3b
# 进入该容器的交互模式
[zsc@node ~]$ docker container exec -it 501 sh
# ls
bin boot dev docker-entrypoint.d docker-entrypoint.sh etc 
home lib lib64 media mnt opt proc root run sbin srv sys
tmp usr var

• 退出交互式模式: 在交互式 shell 中输入 exit

exit

容器与宿主机内容复制

  1. 我们启动一个 nginx 服务
root@139-159-150-152:/data/var/lib/docker# docker run --name mynginx1 -p 80:80 -d nginx:1.22.1
7608f60572f0c575d077a2ea60b4a90377f7b8f97d83aa37d3f2598be3d8b263
root@139-159-150-152:/data/var/lib/docker# docker ps
CONTAINER ID IMAGE COMMAND CREATED 
STATUS PORTS NAMES
7608f60572f0 nginx:1.22.1 "/docker-entrypoint.…" 3 seconds 
ago Up 1 second 0.0.0.0:80->80/tcp, :::80->80/tcp mynginx1
  1. 在宿主机上编译一个 index.html 文件
root@139-159-150-152:/data/myworkdir/container# mkdir -p 
/data/myworkdir/container
root@139-159-150-152:/data/myworkdir/container# cd 
/data/myworkdir/container
root@139-159-150-152:/data/myworkdir/container# echo "Hello bit 
from my container" > index.html
  1. 拷贝宿主机文件到容器中
docker cp /data/myworkdir/container/index.html 
mynginx1:/usr/share/nginx/html/
  1. 进入容器中查看
root@139-159-150-152:/data/myworkdir/container# docker exec -it mynginx1 bash
root@7608f60572f0:/usr/share/nginx/html# cd /usr/share/nginx/html/
root@7608f60572f0:/usr/share/nginx/html# ls -l
total 8
-rw-r--r-- 1 root root 497 Oct 19 08:02 50x.html
-rw-r--r-- 1 root root 28 Mar 24 07:13 index.html
root@7608f60572f0:/usr/share/nginx/html# cat index.html 
Hello bit from my container
  1. 从外部页面访问
    在这里插入图片描述
  2. 在容器中编辑 index.html
root@7608f60572f0:/usr/share/nginx/html# echo " after edit" >> 
index.html 
root@7608f60572f0:/usr/share/nginx/html# cat index.html 
Hello bit from my container
after edit
root@7608f60572f0:/usr/share/nginx/html# exit
exit
  1. 执行 docker cp 将内容拷贝出来,查看内容,发现文件已经覆盖
root@139-159-150-152:/data/myworkdir/container# docker cp 
mynginx1:/usr/share/nginx/html/index.html ./
Preparing to copy...
Successfully copied 2.048kB to /data/myworkdir/container/./
root@139-159-150-152:/data/myworkdir/container# cat index.html 
Hello bit from my container
after edit
  1. 清理容器,释放空间
root@139-159-150-152:/data/myworkdir/container# docker stop 
mynginx1
mynginx1
root@139-159-150-152:/data/myworkdir/container# docker rm mynginx1
mynginx1

容器自动删除

  1. 启动一个 nginx,我们指定–rm 选项
root@139-159-150-152:/data/myworkdir/container# docker run --name mynginx1 -d --rm -p 80:80 nginx:1.22.1
44f865b89919625e539a9fb41d841efa363017a08d9a84194c0046f2e871fe43
root@139-159-150-152:/data/myworkdir/container# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
44f865b89919 nginx:1.22.1 "/docker-entrypoint.…" 11 seconds ago Up 10 seconds 0.0.0.0:80->80/tcp, :::80->80/tcp mynginx1
  1. 停止容器
root@139-159-150-152:/data/myworkdir/container# docker stop mynginx1
mynginx1
  1. 再次查看容器是否存在,发现容器自动删除了
root@139-159-150-152:/data/myworkdir/container# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

容器自动重启

容器重启选项如下:
docker run --restart=no [容器名] :默认值不自动重启
docker run --restart=on-failure:3 [容器名] : on-failure 若容器的退出状态非 0,则docker 自动重启容器,还可以指定重启次数,若超过指定次数未能启动容器则放弃
docker run --restart=always [容器名] :always 容器退出时总是重启
docker run --restart=unless-stopped [容器名] unless-stopped 容器退出时总是重启,但不考虑 Docker 守护进程启动时就已经停止的容器
如果容器启动时没有设置–restart 参数,则通过下面命令进行更新:
docker update --restart=always [容器名]

  1. 启动 nginx 服务,指定总是重启
root@139-159-150-152:/data/myworkdir/container# docker run --name mynginx1 -d -p 80:80 --restart always nginx:1.22.1
93e8aede76ac7cc09f34e3510b590abae6161eceb2d39cdbcf8d64f86154f9ca
root@139-159-150-152:/data/myworkdir/container# docker ps
CONTAINER ID IMAGE COMMAND CREATED 
STATUS PORTS NAMES
93e8aede76ac nginx:1.22.1 "/docker-entrypoint.…" 2 seconds 
ago Up 2 seconds 0.0.0.0:80->80/tcp, :::80->80/tcp mynginx1
  1. 进入 nginx 服务,kill 启动进程
root@139-159-150-152:/data/myworkdir/container# docker exec -it mynginx1 bash
root@93e8aede76ac:/# kill 1
root@93e8aede76ac:/# 
  1. 查看进程状态,可以看到进程还是启动状态
root@93e8aede76ac:/# root@139-159-150-152:/data/myworkdir/container# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
93e8aede76ac nginx:1.22.1 "/docker-entrypoint.…" 22 seconds ago Up 3 seconds 0.0.0.0:80->80/tcp, :::80->80/tcp mynginx1
  1. 释放空间
root@139-159-150-152:/data/myworkdir/container# docker stop mynginx1
mynginx1
root@139-159-150-152:/data/myworkdir/container# docker rm mynginx1
mynginx1

容器环境变量设置

  1. 启动一个 nginx 容器,配置环境变量,TEST=1
root@139-159-150-152:/data/myworkdir/container# docker run --name mynginx1 -d -p 80:80 -e TEST=1 nginx:1.22.1
a5bc48b9560b0cc0aa0018af3572ce2024a9d7e37859c4f905c1f6ff11401b8e
  1. 进入容器查看环境变量
root@139-159-150-152:/data/myworkdir/container# docker exec -it mynginx1 bash
root@a5bc48b9560b:/# env |grep TEST
TEST=1
root@a5bc48b9560b:/# exit
exit
  1. 清理空间
root@139-159-150-152:/data/myworkdir/container# docker stop 
mynginx1
mynginx1
root@139-159-150-152:/data/myworkdir/container# docker rm mynginx1
mynginx1

容器详情查看

我们可以查看一个容器的详细信息,比如我们可以查看所有设置的环境变量

  1. 启动容器
root@139-159-150-152:~# docker run --name mynginx1 --rm -p 80:80 -e TEST=1 -d nginx:1.22.1
ad2d90c76b774f3f0d8d72bae8c4dee25d46c74dc5bfad3f3f8bcf3b7f93734a
root@139-159-150-152:~# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ad2d90c76b77 nginx:1.22.1 "/docker-entrypoint.…" 3 seconds ago Up 1 second 0.0.0.0:80->80/tcp, :::80->80/tcp mynginx11
  1. 查看容器信息
hacha@LAPTOP-H2EI4I6A:~/test$ docker container inspect mynginx1

在这里插入图片描述
在这里插入图片描述
3. 释放资源

docker stop mynginx1
docker rm mynginx1 

容器执行单行命令

我们可以直接借助 docker 的容器环境执行一些命令,比如容器中有某个命令而宿主机上没有这个时候借助容器可以完成某些任务。

root@139-159-150-152:/data/myworkdir/container# docker run --rm -p 80:80 nginx:1.22.1 echo "Hello bit"
Hello bit
root@139-159-150-152:/data/myworkdir/container# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

容器镜像导入导出

  1. 我们创建目录,并编辑一个自定义首页
mkdir -p /data/myworkdir/container/
cd /data/myworkdir/container/
vi index.html
  1. 首页输入以下内容
<html>
<h1>Hello bit!</h1>
</html>
  1. 我们运行一个 nginx 镜像,然后通过 docker cp 修改首页
docker run -d --name mynginx4 -p 80:80 nginx:1.22.1
docker cp /data/myworkdir/container/index.html mynginx4:/usr/share/nginx/html/
  1. 访问首页看到的内容如下
    在这里插入图片描述
  2. 我们通过 docker export 保存镜像
root@139-159-150-152:/data/myworkdir/container# docker export -o mynginx4.tar mynginx4
root@139-159-150-152:/data/myworkdir/container# ll
total 140900
drwxr-xr-x 2 root root 4096 Mar 15 17:07 ./
drwxr-xr-x 4 root root 4096 Mar 15 16:36 ../
-rw-r--r-- 1 root root 35 Mar 15 16:37 index.html
-rw------- 1 root root 144269312 Mar 15 17:07 mynginx4.tar
  1. 我们通过 docker import 导入镜像
root@139-159-150-152:/data/myworkdir/container# docker import mynginx4.tar mynginx:v0.4
sha256:d95c9d02716925e084774a15b812b3305da0826b3a0b97f6f0c063643d926811
  1. 停止我们现在的容器,重新启动容器
root@139-159-150-152:/data/myworkdir/container# docker stop mynginx4
mynginx4
  1. 使用导出的镜像启动一个新的容器
root@139-159-150-152:/data/myworkdir/container# docker run -d --name mynginx5 -p 80:80 mynginx:v0.4 nginx -g "daemon off;"
d1f5c5990c95bf386bd9a70d391dfbc5b5ea53bd0cc03fb55f4a70369b418726
root@139-159-150-152:/data/myworkdir/container# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d1f5c5990c95 mynginx:v0.4 "nginx -g 'daemon of…" 3 seconds ago Up 1 second 0.0.0.0:80->80/tcp, :::80->80/tcp mynginx5

如果使用 import 导入 save 产生的文件,虽然导入不提示错误,但是启动容器时会提示失败,会出现类似"docker: Error response from daemon: Container command not found or does not exist"的错误。我们必须指定启动命令。因为 export 丢失了元数据信息。
所以一般不推荐使用export/import 而是采用save/load命令

容器日志查看

  1. 启动一个 nginx
root@139-159-150-152:/data/myworkdir/container# docker run --name mynginx1 -d --rm -p 80:80 nginx:1.22.1
e4a283560e71e52579c0b19641f5ce7eff4d784603104d36a765804afb7086a8
root@139-159-150-152:/data/myworkdir/container# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
e4a283560e71 nginx:1.22.1 "/docker-entrypoint.…" 2 seconds ago Up 1 second 0.0.0.0:80->80/tcp, :::80->80/tcp mynginx1
  1. 查看全部日志
hacha@LAPTOP-H2EI4I6A:~/test$ docker logs mynginx1

在这里插入图片描述

  1. 实时查看日志
root@139-159-150-152:/data/myworkdir/container# docker logs -f

刷新访问几次页面,日志又会新增几行
在这里插入图片描述

  1. 查看最新的 3 行日志
hacha@LAPTOP-H2EI4I6A:~/test$  docker logs -f -n 3 mynginx1
2024/12/02 05:16:03 [notice] 1#1: start worker process 42
2024/12/02 05:16:03 [notice] 1#1: start worker process 43
2024/12/02 05:16:03 [notice] 1#1: start worker process 44
  1. 停止容器释放资源
docker stop mynginx1

容器资源查看

  1. 我们运行一个 nginx
docker run -d --name mynginx5 -p 80:80 nginx:1.22.1
  1. 我们可以通过 docker top 查看容器中有哪些进程,添加 aux,可以看到占用的内存和 CPU 信息
root@139-159-150-152:~# docker top mynginx5 aux

在这里插入图片描述

  1. 通过 docker stats 可以看到资源的实时占用变化
root@139-159-150-152:~# docker stats
CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS
d1f5c5990c95 mynginx5 0.00% 2.648MiB / 1.936GiB 0.13% 6.99kB / 2.57kB 2.29MB / 4.1kB 2
  1. 释放资源
docker stop mynginx5 
docker rm mynginx5

相关文章:

【docker】10. 容器操作案例

容器操作案例 容器基本操作 • 通过 nginx 镜像文件创建容器 • 容器的列举(包含正在运行的容器) # 发现此时 e7c33d9f5c61 这个容器运行的状态为 Up,即运行状态 rootLAPTOP-H2EI4I6A:~# docker container ls CONTAINER ID IMAGE COMMAND CREATED …...

postman测试

当然&#xff0c;以下是针对你提供的API层和Service层代码中涉及到的各个接口&#xff0c;如何使用 Postman 进行详细测试的指南。这个指南将帮助你理解如何配置 Postman 来测试这些接口&#xff0c;包括请求的构造、认证的处理、以及如何解读响应。 目录 准备工作接口测试指…...

【攻防实验】溯源与取证分析实验

溯源与取证分析实验 溯源取证分析作为网络攻防过程中重要环节&#xff0c;准确找到攻击者的入侵线索(尤其是攻击突破口、攻击IP地址、域名、工具等信息)&#xff0c;对于企业或者团队安全运营团队来说都是必备技能。常规攻击取证过程中往往会结合流量、Web访问日志、终端系统或…...

【测试工具JMeter篇】JMeter性能测试入门级教程(七):JMeter断言

一、前言 在 JMeter 中&#xff0c;断言元件&#xff08;Assertion&#xff09;用于验证测试结果是否符合预期。断言元件可以检查服务器的响应数据&#xff0c;以确保它们符合期望的模式或值&#xff0c;从而验证性能测试脚本的正确性。断言元件通常在每个请求的响应中添加&am…...

Linux 常用命令

目录 一、ls 指令 二、pwd命令 三、cd 指令 1、cd 目录名 2、cd .. 返回上级目录 3、cd ~ 进入用户家目 4、cd - 返回最近访问目录 5、cd相对路径&&cd绝对路径 四、touch指令 五、mkdir指令 1、mkdir 目录名 创建一个目录 2、mkdir -p 递归创建多…...

汽车IVI中控OS Linux driver开发实操(二十八):回声消除echo cancellation和噪声消除Noise reduction

概述: 在当今高度互联的世界中,清晰的实时通信比以往任何时候都更重要。在远程团队会议期间,没有什么能像回声一样打断对话。当说话者听到他们的声音回响时,可能会分散注意力,甚至无法理解对话。即使是很小的回声也会产生很大的影响,仅仅25毫秒的振幅就足以造成声音干扰…...

003-SpringBoot整合Pagehelper

SpringBoot整合Pagehelper 一、引入依赖二、配置 application.yml三、配置 MybatisPlusConfig四、Controller五、ServiceImpl 一、引入依赖 <dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper-spring-boot-starter</ar…...

零基础学安全--shell练习

目录 用shell写一个计算器 测试​ 一些小问题 n阶乘数 测试 拓展 写⼀个Shell脚本去筛选出eth0⽹卡的ipv4地址&#xff0c;并赋值⼀个变量输出 测试 无限重启 用shell写一个计算器 read -p "请输入数字a: " number1 read -p "请输入操作符&#xf…...

【专题】计算机网络之运输层(传输层)

1. 运输层协议概述 1.1 进程之间的通信 (1) 运输层的作用 运输层提供进程间的逻辑通信。 运输层的屏蔽作用&#xff1a; 运输层向高层用户屏蔽了下面网络核心的细节&#xff08;如网络拓扑、所采用的路由选择协议等&#xff09;&#xff0c;使应用进程看见的就是好像在两个运…...

【leetcode100】旋转图像

1、题目描述 给定一个 n n 的二维矩阵 matrix 表示一个图像。请你将图像顺时针旋转 90 度。 你必须在 原地 旋转图像&#xff0c;这意味着你需要直接修改输入的二维矩阵。请不要 使用另一个矩阵来旋转图像。 示例 1&#xff1a; 输入&#xff1a;matrix [[1,2,3],[4,5,6],…...

软件工程——期末复习(1)

名词解释&#xff1a; 名词解释--人月 答案&#xff1a;人月是软件开发工作量的单位&#xff0c;1人月表示1个程序员1个月的工作时间所开发的代码量。 请解释软件缺陷、错误和失败&#xff0c;并简单举例说明。 答案&#xff1a;缺陷&#xff08;defect&#xff09;指系统代…...

HTML5系列(3)--多媒体标签详解

前端技术探索系列&#xff1a;HTML5 多媒体标签详解 &#x1f3a5; 开篇寄语 &#x1f44b; 前端开发者们&#xff0c; 在前三篇文章中&#xff0c;我们探讨了 HTML5 的语义化和表单特性。今天&#xff0c;让我们深入了解 HTML5 的多媒体能力&#xff0c;看看如何构建强大的…...

Spring Boot 3.4.0 发布:功能概览与示例

Spring Boot 3.4.0 带来了许多增强功能&#xff0c;使现代应用开发更加高效、便捷和强大。以下是最新功能的完整概述&#xff0c;以及一些帮助您快速入门的代码示例。 1. 应用程序版本管理 Spring Boot 引入了 spring.application.version 属性&#xff0c;方便开发者设置和访…...

【Vue3】【Naive UI】<n-upload>标签

【Vue3】【Naive UI】标签 基本设置 【VUE3】【Naive UI】&#xff1c;NCard&#xff1e; 标签 【VUE3】【Naive UI】&#xff1c;n-button&#xff1e; 标签 【VUE3】【Naive UI】&#xff1c;a&#xff1e; 标签 【VUE3】【Naive UI】&#xff1c;NDropdown&#xff1e; 标签…...

7.代理模式(Proxy Pattern)

古朗月行 代理模式JDK动态代理代码示例原码分析 cglib动态代理代码示例源码分析 JDK cglib动态代理对比ClassLoader类的生命周期&#xff1a; 参考资料 唐 李白 小时不识月&#xff0c;呼作白玉盘。 又疑瑶台镜&#xff0c;飞在青云端。 仙人垂两足&#xff0c;桂树何团团。…...

【效果】回到顶部功能实现

实现效果&#xff1a; 相关代码&#xff1a; <template><div class"cats" :style"{ top: catsTop }" ref"cats" click"catTop"></div> </template> 样式&#xff1a; /* 回到顶部 - 小猫咪 */ .cats {posi…...

项目搭建+修改

一 : 在列表成功回调函数,追加数据中,添加修改的按钮 for (let x of res) {//追加数据$("#table").append(<tr><td><input type"checkbox" class"ck" value"\${x.uid}"></td><td>\${x.uid}</td>…...

GD库如何根据颜色生成纯色背景图

GD库是一个用于图像处理的PHP扩展模块&#xff0c;它提供了一系列函数来创建、编辑和操作图像。要使用GD库根据颜色生成纯色背景图&#xff0c;可以按照以下步骤进行&#xff1a; 一、检查并安装GD库 检查GD库是否已安装&#xff1a; 可以通过运行phpinfo();或在命令行中使用p…...

Python 网络爬虫入门全知道

一、引言 在当今数字化时代&#xff0c;网络上的数据量呈爆炸式增长。无论是进行数据分析、市场调研&#xff0c;还是开发智能应用&#xff0c;获取网络数据都变得极为重要。而 Python 网络爬虫就是一把打开网络数据宝库的利器。它能够自动地从网页中抓取我们需要的信息&#…...

MATLAB期末复习笔记(下)

目录 五、数据和函数的可视化 1.MATLAB的可视化对象 2.二维图形的绘制 3.图形标识 4.多子图绘图 5.直方图的绘制 &#xff08;1&#xff09;分类 &#xff08;2&#xff09;垂直累计式 &#xff08;3&#xff09;垂直分组式 &#xff08;4&#xff09;水平分组式 &…...

基于大数据爬虫数据挖掘技术+Python的网络用户购物行为分析与可视化平台(源码+论文+PPT+部署文档教程等)

#1024程序员节&#xff5c;征文# 博主介绍&#xff1a;CSDN毕设辅导第一人、全网粉丝50W,csdn特邀作者、博客专家、腾讯云社区合作讲师、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和学生毕业项目实战,高校老…...

【go】只读通道和只写通道

文章目录 概述1. 通道的方向2. 为什么会有只读通道和只写通道&#xff1f;3. 总结 概述 在 Go 中&#xff0c;只读通道和只写通道的概念通过通道的方向来实现。Go 语言允许你在函数参数中指定通道的方向&#xff0c;从而限制通道的使用方式&#xff0c;这样可以确保代码的清晰…...

带Burst AOT Settings移植问题

报错 burst问题 Burst AOT Settings 是 Unity 的 Burst Compiler 的一部分&#xff0c;用于预编译程序集&#xff08;AOT&#xff0c;Ahead-Of-Time Compilation&#xff09;&#xff0c;以便在不支持 JIT&#xff08;即时编译&#xff09;的平台上运行&#xff0c;例如 iOS 和…...

Debezium日常分享系列之:Debezium Engine

Debezium日常分享系列之&#xff1a;Debezium Engine 依赖打包项目在代码中输出消息格式消息转换消息转换谓词高级记录使用引擎属性异步引擎属性数据库模式历史属性处理故障 Debezium连接器通常通过部署到Kafka Connect服务来运行&#xff0c;并配置一个或多个连接器来监视上游…...

运行 GreatSQL 时为什么要求关闭透明大页

在大部分运维规范中&#xff0c;一般都会要求在运行 GreatSQL/MySQL 的环境中要关闭透明大页&#xff0c;那么到底什么是透明大页&#xff0c;为什么要关闭&#xff0c;打开有什么风险吗&#xff1f; 在此之前&#xff0c;我也是有点懵的&#xff0c;本文试着回答这个疑问&…...

【Rive】Rive在Android上的简单应用

1 前言 Rive 是一款强大的矢量图编辑器&#xff0c;可以设计图形、也可以制作动画。Rive 提供了矩形、圆形、三角形、多边形、星形、钢笔、文字等工具来绘制各式各样的矢量图形&#xff1b;提供了平移、旋转、缩放等工具对矢量图形进行各种变换&#xff1b;提供了骨骼、约束、时…...

Base 崛起,SynFutures 或成生态系统中最具潜力应用

10月份的 Unchained Crypto 采访中&#xff0c;Solana 联合创始人 Anatoly 表示&#xff0c;通过观察活跃地址数、TVL、DeFi 版块、Meme 热潮和开发者生态等多个关键指标&#xff0c;察觉到 Base 势头正猛&#xff0c;成为以太坊生态最强劲的 L2。 11月下旬&#xff0c;小狐狸创…...

探索Go语言中的循环双向链表

简介 循环双向链表将双向链表的灵活性与循环结构相结合&#xff0c;使得每个节点都有一个指向前一个节点和后一个节点的指针&#xff0c;并且最后一个节点的Next指针指向头节点&#xff0c;形成一个闭环。本文将深入探讨如何在Go语言中实现和操作这种数据结构。 循环双向链表…...

Leetcode617.合并二叉树(HOT100)+Leetcode79. 单词搜索(HOT100)

链接 代码&#xff1a; class Solution { public:TreeNode* mergeTrees(TreeNode* root1, TreeNode* root2) {if(!root1)return root2;if(!root2)return root1;root1->valroot2->val;root1->left mergeTrees(root1->left,root2->left);root1->right merg…...

亚马逊云(AWS)使用root用户登录

最近在AWS新开了服务器&#xff08;EC2&#xff09;&#xff0c;用于学习&#xff0c;遇到一个问题就是默认是用ec2-user用户登录&#xff0c;也需要密钥对。 既然是学习用的服务器&#xff0c;还是想直接用root登录&#xff0c;下面开始修改&#xff1a; 操作系统是&#xff1…...

使用Docker在Ubuntu 22.04上部署MySQL数据库的完整指南

使用Docker在Ubuntu 22.04上部署MySQL数据库的完整指南 在现代应用开发中&#xff0c;使用Docker来部署数据库已成为一种流行的做法。本文将详细介绍如何在Ubuntu 22.04系统上使用Docker部署最新版本的MySQL数据库&#xff0c;包括关键注意事项、详细步骤、闭坑指南以及总结。…...

算法笔记:力扣15、三数之和

思路&#xff1a; 实现代码 class Solution {public List<List<Integer>> threeSum(int[] nums) {List<List<Integer>> result new ArrayList<>(); Arrays.sort(nums); // 先对数组进行排序 for (int i 0; i < nums.length - 2; i) { /…...

perf list PMU 缓存事件

事件标识事件解释PMU事件路径l1d_cacheL1数据缓存的访问次数&#xff0c;L1缓存是CPU内部最快的缓存&#xff0c;位于距离CPU核心非常近的位置。armv8_pmuv3/l1d_cache/l1d_cache_lmiss_rd表示从L1数据缓存读取数据时发生缓存未命中的次数。armv8_pmuv3/l1d_cache_lmiss_rd/l1d…...

使用C#开发VTK笔记(一)-VTK开发环境搭建

一.使用C#开发VTK的背景 因为C#开发的友好性,一直都比较习惯于从C#开发程序。而长期以来,都希望有一个稳定可靠的三位工程数模的开发演示平台,经过多次对比之后,感觉VTK和OpenCasCade这两个开源项目是比较好的,但它们都是用C++编写的,我用C#形式开发,只能找到发布的C#组…...

2024Selenium自动化常见问题!

"NoSuchElementException"异常&#xff1a; 确保使用了正确的选择器来定位元素。可以使用id、class、XPath或CSS选择器等。 可以尝试使用find_elements方法来查找元素列表&#xff0c;并检查列表的长度来判断元素是否存在。 使用显式等待&#xff08;WebDriverWait…...

考研英语翻译与大小作文

名词动化词 1 持有 harbor2 2 反映 mirror 3 缩短 bridge 4 使用 harness 5 掩饰 mask/veil 6 修改 tailor 7 汇集 pool 8 控制 curb 9 想象 picture 10 激发 trigger 拉丁…...

详解Rust异步编程

文章目录 多线程编程与异步编程对比并发模型对比分析异步编程基础概念及用法 Rust的异步编程通过async/await语法和Future特性提供了一种高效的方式来处理并发任务&#xff0c;尤其在I/O密集型操作中表现出色。async/await异步编程模型性能高&#xff0c;还能支持底层编程&…...

Vue + Element UI 实战技巧:如何实现 el-table 重新加载数据后折叠所有展开行

在 Vue 中使用 Element UI 的 el-table 组件时&#xff0c;如果你想要在数据重新加载后折叠所有行的展开状态&#xff0c;你可以通过维护一个数据属性来追踪哪些行是展开的&#xff0c;并在数据更新时重置这个属性。 以下是一个简单的示例来说明如何实现这个功能&#xff1a; …...

linux静态链接和动态链接

静态链接的特点 程序独立性高 静态链接是在程序编译时&#xff0c;将所有需要的目标文件以及它们所依赖的库文件中的代码和数据链接成一个可执行文件。一旦链接完成&#xff0c;这个可执行文件就包含了运行所需的全部内容&#xff0c;不依赖外部的库文件。例如&#xff0c;一个…...

计算机网络学习资料全攻略

计算机网络是计算机科学中一个非常重要的分支&#xff0c;它涉及到数据在计算机系统之间的传输和通信。随着互联网的快速发展&#xff0c;对计算机网络知识的掌握变得越来越重要。本文将为您提供一份全面的计算机网络学习资料指南&#xff0c;帮助您从基础到高级逐步深入学习。…...

第七课 Unity编辑器创建的资源优化_UI篇(UGUI)

上期我们学习了简单的Scene优化&#xff0c;接下来我们继续编辑器创建资源的UGUI优化 UI篇&#xff08;UGUI&#xff09; 优化UGUI应从哪些方面入手&#xff1f; 可以从CPU和GPU两方面考虑&#xff0c;CPU方面&#xff0c;避免触发或减少Canvas的Rebuild和Rebatch&#xff0c…...

Go的简单问题问答

基础问题回答 Go 的主要特点是什么&#xff1f; 简洁&#xff1a;语法简化&#xff0c;减少复杂性。并发&#xff1a;内置 Goroutine 和 Channel&#xff0c;支持轻量级并发。静态类型&#xff1a;强类型语言&#xff0c;编译时检查错误。跨平台&#xff1a;编译生成独立的二进…...

SVN迁移至Git,保留commit提交记录

SVN迁移至Git 如何将 SVN 仓库迁移到 Git 并保留提交记录一、生成userinfo.txt二. 使用 git svn clone 命令迁移 SVN 到 Git2.1. 基本命令格式2.2. 示例&#xff1a;从 SVN 克隆到 Git参数说明&#xff1a;2.3 执行的过程遇到的窗口2.4. 迁移过程 三. 将 Git 仓库推送到远程 Gi…...

一站式指导:在Neo4j与PostgreSQL间实现高效数据同步

作者&#xff1a;后端小肥肠 &#x1f347; 我写过的文章中的相关代码放到了gitee&#xff0c;地址&#xff1a;xfc-fdw-cloud: 公共解决方案 &#x1f34a; 有疑问可私信或评论区联系我。 &#x1f951; 创作不易未经允许严禁转载。 姊妹篇&#xff1a; 数据同步的艺术&#…...

linux-安全-iptables防火墙基础笔记

目录 一、 iptables链结构 五链 二、 iptables表结构 四表 三、 匹配流程 四、 语法 五、 匹配 1. 通用匹配 2. 隐含匹配 3. 显示匹配 六、 SNAT 七、 DNAT 八、 规则备份及还原 1. 备份 2. 还原 这篇将讲解iptables防火墙的基础知识 一、 iptables链结构 规则…...

Redis——主从复制原理

Redis的主从复制原理是其高可用性和分布式读取能力的重要基础。以下是Redis主从复制原理的详细解释&#xff1a; 一、主从复制的基本概念 Redis的主从复制是一种数据复制和备份的方式&#xff0c;它允许一个主节点&#xff08;Master&#xff09;将其所有的数据同步到一个或多…...

vue2 虚拟DOM 和 真实DOM (概念、作用、Diff 算法)

虚拟 DOM 和 真实DOM&#xff08;概念、作用、Diff 算法&#xff09; 1.1 概念 真实 DOM&#xff08;Document Object Model&#xff09;&#xff1a;是浏览器中用于表示文档结构的树形结构。 <h2>你好</h2>虚拟DOM&#xff1a;用 JavaScript 对象来模拟真实 DOM…...

王道考研编程题总结

我还在完善中&#xff0c;边复习边完善&#xff08;这个只是根据我自身总结的&#xff09; 一、 线性表 1. 结构体 #define MaxSize 40 typedef struct{ElemType data[MaxSize]&#xff1b;int length; }SqList 2. 编程题 1. 删除最小值 题意 &#xff1a;从顺序表中删除…...

手机租赁系统开发全攻略 创新服务助力企业智能转型

内容概要 在当今数字化飞速发展的时代&#xff0c;“手机租赁系统开发”正逐渐成为企业智能转型的必然选择。这一过程并不简单&#xff0c;但关键流程的解析将帮助企业理清思路。首先&#xff0c;了解需求和目标是基础&#xff0c;之后制定详细计划和流程图&#xff0c;让整件…...

git回退到某个版本git checkout和git reset命令的区别

文章目录 1. git checkout <commit>2. git reset --hard <commit>两者的区别总结推荐使用场景* 在使用 Git 回退到某个版本时&#xff0c; git checkout <commit> 和 git reset --hard <commit> 是两种常见的方式&#xff0c;但它们的用途和影响有很…...