【docker】容器的运行、停止、查看等基本操作

news2024/12/24 3:49:29

容器与镜像的区别

image镜像

  • Docker image是一个read-only文件,位于磁盘上
  • 这个文件包含文件系统,源码,库文件,依赖,工具等一些运行application所需要的文件
  • 可以理解成一个模板
  • docker image具有分层的概念

container容器

  • 一个运行中的docker image,位于内存中
  • 实质是复制image并在image最上层加上一层read-write的层(称之为container layer,容器层)
  • 基于同一个image可以创建多个container

容器的基本操作

容器的基本操作都是命令docker container开头,大部分情况下可以简写为docker,例如docker container run可以简写为docker run

下面是docker container开头的命令列表:

$ docker container --help

Usage:  docker container COMMAND

Manage containers

Commands:
  attach      Attach local standard input, output, and error streams to a running container
  commit      Create a new image from a container's changes
  cp          Copy files/folders between a container and the local filesystem
  create      Create a new container
  diff        Inspect changes to files or directories on a container's filesystem
  exec        Run a command in a running container
  export      Export a container's filesystem as a tar archive
  inspect     Display detailed information on one or more containers
  kill        Kill one or more running containers
  logs        Fetch the logs of a container
  ls          List containers
  pause       Pause all processes within one or more containers
  port        List port mappings or a specific mapping for the container
  prune       Remove all stopped containers
  rename      Rename a container
  restart     Restart one or more containers
  rm          Remove one or more containers
  run         Run a command in a new container
  start       Start one or more stopped containers
  stats       Display a live stream of container(s) resource usage statistics
  stop        Stop one or more running containers
  top         Display the running processes of a container
  unpause     Unpause all processes within one or more containers
  update      Update configuration of one or more containers
  wait        Block until one or more containers stop, then print their exit codes

docker container create

docker container create只是新建一个容器,并不启动一个容器。

$ docker container create --name nginx -p 8899:80 nginx
5932d5e624f7cced52fb8f9282a01c5a112fba249236d028733c424ec7099a6e

docker container run

docker container run新建并启动一个容器。

$ docker container run -d --name nginx -p 8899:80 nginx
ee86be635d8b0ff99e36796191da4ee5c34241f37dc0f66c8b21e2a85517e9de

选项:

  • -d:表示以detach模式后台运行
  • –name:为容器指定一个名字
  • -p:端口映射,宿主机端口为8899映射到docker内端口80

docker container ls

docker container ls查看启动的容器,也可以简写为docker ps或者docker container ps

$ docker container ls
CONTAINER ID   IMAGE     COMMAND                  CREATED         STATUS         PORTS                                   NAMES
ee86be635d8b   nginx     "/docker-entrypoint.…"   2 minutes ago   Up 2 minutes   0.0.0.0:8899->80/tcp, :::8899->80/tcp   nginx

选项:

  • -a:列出所有的容器(包括正在运行的和已停止运行的)
  • -l:显示最近创建的容器
  • -n:显示最近创建的n个容器
  • -q:只显示容器ID

docker container stop

docker container stop停止运行中的容器,后面需要带上容器的名称或者ID,ID可以只写前面几位,不需要写全,能根据ID前缀找到对应的唯一的容器即可,其他带ID的命令也类似。

$ docker container stop ee86be635d8b
ee86be635d8b

$ docker container stop nginx
nginx

$ docker container stop ee8
ee8

docker container start

docker container start启动已停止的容器。

$ docker container start nginx
nginx

docker container restart

docker container restart重启运行中的容器。

$ docker container restart nginx
nginx

docker container kill

docker container kill强制停止运行中的容器。

$ docker container kill nginx
nginx

docker container rm

docker container rm可以删除容器。

$ docker container rm nginx
nginx

如果容器的状态是正在运行中是不可以删除的,此时可以加上-f选项来强制删除运行中的容器。

docker container logs

docker container logs可以用来查看容器的日志。

$ docker container logs -f nginx
/docker-entrypoint.sh: /docker-entrypoint.d/ is not empty, will attempt to perform configuration
/docker-entrypoint.sh: Looking for shell scripts in /docker-entrypoint.d/
/docker-entrypoint.sh: Launching /docker-entrypoint.d/10-listen-on-ipv6-by-default.sh
10-listen-on-ipv6-by-default.sh: info: Getting the checksum of /etc/nginx/conf.d/default.conf
。。。。。。

如果要实时的日志,可以使用-f选项,类似于tail -f命令。

docker container top

docker container top可以用来查看容器内的进程情况,类似于top命令。

$ docker container top nginx
UID                 PID                 PPID                C                   STIME               TTY                 TIME                CMD
root                6083                6063                0                   19:37               pts/0               00:00:00            nginx: master process nginx -g daemon off;
systemd+            6144                6083                0                   19:37               pts/0               00:00:00            nginx: worker process
systemd+            6145                6083                0                   19:37               pts/0               00:00:00            nginx: worker process
systemd+            6146                6083                0                   19:37               pts/0               00:00:00            nginx: worker process
systemd+            6147                6083                0                   19:37               pts/0               00:00:00            nginx: worker process
systemd+            6148                6083                0                   19:37               pts/0               00:00:00            nginx: worker process
systemd+            6149                6083                0                   19:37               pts/0               00:00:00            nginx: worker process
systemd+            6150                6083                0                   19:37               pts/0               00:00:00            nginx: worker process
systemd+            6151                6083                0                   19:37               pts/0               00:00:00            nginx: worker process

docker container inspect

docker container inspect查看容器的详细信息,如镜像信息、环境变量、网络等。

$ docker container inspect nginx
。。。。。。

docker container exec

docker container exec可以进入到运行中的容器并执行一个命令。

$ docker container exec -it nginx /bin/bash
root@11f5e64bb119:/#

docker container attach

docker container attach同样可以进入到运行中的容器并执行一个命令。

docker container attach进入容器然后退出会导致容器停止,而docker container exec进入容器后退出不会导致容器停止,这是两者的区别。

$ docker container attach nginx

docker container cp

docker container cp用来在宿主机和容器之间拷贝文件。

从宿主机拷贝文件到容器中:

$ docker container cp test.txt nginx:/home

从容器中拷贝文件到宿主机:

$ docker container cp nginx:/docker-entrypoint.sh .

docker container export

docker container export是将一个容器导出为一个压缩的镜像。

$ docker container export nginx > nginx.tar.gz

后续如果要将这个压缩的镜像导入要使用docker image import命令。

docker container commit

docker container commit是将一个容器提交为为一个镜像。

$ docker container commit -m "nginx v1.0" nginx nginx:v1.0
sha256:0b36bf0f81dda62c4ced29e84d0b44a7c812bb643b2c1d898df0b8897f58c964

docker container diff

docker container diff命令用于检查容器文件系统上文件或目录的更改。

$ docker container diff nginx
C /run
A /run/nginx.pid
C /var
C /var/cache
C /var/cache/nginx
A /var/cache/nginx/uwsgi_temp
A /var/cache/nginx/client_temp
A /var/cache/nginx/fastcgi_temp
A /var/cache/nginx/proxy_temp
A /var/cache/nginx/scgi_temp
C /etc
C /etc/nginx
C /etc/nginx/conf.d
C /etc/nginx/conf.d/default.conf

docker container pause

docker container pause暂停一个或多个容器内的所有进程。

$ docker container pause nginx
nginx

使用docker container ls可以看到容器的状态为pause

docker container unpause

docker container unpause取消暂停一个或多个容器内的所有进程。

$ docker container unpause nginx
nginx

此时容器的状态又变为UP

docker container rename

docker container rename重命名容器。

$ docker container rename nginx ng

docker container port

docker container port列出容器的端口映射或容器的特定映射。

$ docker container port nginx
80/tcp -> 0.0.0.0:8899
80/tcp -> :::8899

docker container update

docker container update可以更新一个或多个容器的配置,可以更新CPU、内存等配置信息。

具体可以更新的选项如下:

$ docker container update --help

Usage:  docker container update [OPTIONS] CONTAINER [CONTAINER...]

Update configuration of one or more containers

Options:
      --blkio-weight uint16        Block IO (relative weight), between 10 and 1000, or 0 to disable (default 0)
      --cpu-period int             Limit CPU CFS (Completely Fair Scheduler) period
      --cpu-quota int              Limit CPU CFS (Completely Fair Scheduler) quota
      --cpu-rt-period int          Limit the CPU real-time period in microseconds
      --cpu-rt-runtime int         Limit the CPU real-time runtime in microseconds
  -c, --cpu-shares int             CPU shares (relative weight)
      --cpus decimal               Number of CPUs
      --cpuset-cpus string         CPUs in which to allow execution (0-3, 0,1)
      --cpuset-mems string         MEMs in which to allow execution (0-3, 0,1)
      --kernel-memory bytes        Kernel memory limit
  -m, --memory bytes               Memory limit
      --memory-reservation bytes   Memory soft limit
      --memory-swap bytes          Swap limit equal to memory plus swap: '-1' to enable unlimited swap
      --pids-limit int             Tune container pids limit (set -1 for unlimited)
      --restart string             Restart policy to apply when a container exits

下面的例子可以更改容器的重启策略:

$ docker container update --restart=no nginx
nginx

参数说明:

  • no:默认策略,在容器退出时不重启容器
  • on-failure:在容器非正常退出时(退出状态非0),才会重启容器
  • on-failure:3:在容器非正常退出时重启容器,最多重启3次
  • always:在容器退出时总是重启容器
  • unless-stopped:在容器退出时总是重启容器,但是不考虑在Docker守护进程启动时就已经停止了的容器

docker container wait

docker container wait阻止一个或多个容器停止,然后打印退出代码。

$ docker container wait nginx
0

docker container prune

docker container prune删除所有停止的容器。

$ docker container prune
WARNING! This will remove all stopped containers.
Are you sure you want to continue? [y/N] y
Deleted Containers:
5932d5e624f7cced52fb8f9282a01c5a112fba249236d028733c424ec7099a6e

容器运行的两种交互模式

attach模式

例如:

$ docker container run -p 80:80 nginx

通过这种方式创建的容器,容器会在前台执行。

容器的输入输出结果会反映到本地端,本地端的输入输出也会反映到容器,例如能在终端看到网页浏览器的 log,ctrl+c会让容器停止。

一般情况不推荐使用attach模式。

detach模式

例如:

$ docker container run -d -p 80:80 nginx
73773e7f0d409e4fba9b1ca6b0c0f2eebab7fa9b030dfe4d2c1cf2865c7275bd

通过这种方式创建的容器会在后台执行,命令行打印完容器的ID就结束了。

连接容器的shell

docker container run -it创建一个容器并进入交互式模式:

$ docker container run -it nginx /bin/bash
root@7faafc56bd4f:/# exit
exit

如果带了-d参数,-it就不会生效。

docker container exec -it在一个已经运行的容器里执行一个额外的command:

$ docker container run -d nginx
06d4f86b592e417c876bc66bd62f5ddbd3aeaa1c8c6dd93670ef73151f32a851

$ docker container exec -it 06 bash
root@06d4f86b592e:/#

批量删除容器

$ docker container rm -f $(docker container ls -aq)
06d4f86b592e
7faafc56bd4f

docker container run背后发生了什么?

$ docker container run -d --publish 80:80 --name webhost nginx
  1. 在本地查找是否有nginx这个image镜像,但是没有发现
  2. 去远程的image registry查找nginx镜像(默认的registry是Docker Hub)
  3. 下载最新版本的nginx镜像 (nginx:latest 默认)
  4. 基于nginx镜像来创建一个新的容器,并且准备运行
  5. docker engine分配给这个容器一个虚拟IP地址
  6. 在宿主机上打开80端口并把容器的80端口转发到宿主机上
  7. 启动容器,运行指定的命令(这里是一个shell脚本去启动nginx)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/947950.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【深入MaxCompute】人力家:用MaxCompute 事务表2.0主键模型去重数据持续降本增效

简介: MaxCompute新增Transaction Table2.0(下文简称事务表2.0)表类型在2023年6月27日开始邀测,支持基于事务表2.0实现近实时的增全量一体的数据存储、计算解决方案。 作者: 石玉阳 人力家 高级数据研发工程师 业务简介 人力家…

【高阶产品策略】认识策略产品

文章目录 1、策略产品概述2、策略产品搭建流程3、如何成为一名策略产品经理 1、策略产品概述 2、策略产品搭建流程 3、如何成为一名策略产品经理

地铁+铁路系统防雷接地应用解决方案

地铁作为城市轨道交通的一种,是一种高效、安全、环保的公共交通方式。然而,地铁也面临着雷电灾害的威胁,尤其是在雷暴多发的地区。 雷电对地铁系统的影响主要有以下几个方面: 直接雷击:雷电直接击中地铁系统的设备或…

【Apollo学习笔记】——规划模块TASK之PATH_DECIDER

文章目录 前言PATH_DECIDER功能简介PATH_DECIDER相关配置PATH_DECIDER总体流程路径决策代码流程及框架MakeStaticObstacleDecision PATH_DECIDER相关子函数参考 前言 在Apollo星火计划学习笔记——Apollo路径规划算法原理与实践与【Apollo学习笔记】——Planning模块讲到……S…

那些在职场上最吃香的人,其实都偷偷学了Python

Python为什么这么火? 不可否认,Python在机器学习和数值计算等不断增长的科技领域获得了非常广泛的应用。 但Python这么受欢迎的原因,最主要的还是因为它简单易用、上手容易,非程序员也能使用,而不是一种只适合高级程序…

ssm毕业生就业状况管理系统源码和论文

ssm毕业生就业状况管理系统源码和论文093 开发工具:idea 数据库mysql5.7 数据库链接工具:navcat,小海豚等 技术:ssm 摘 要 现代经济快节奏发展以及不断完善升级的信息化技术,让传统数据信息的管理升级为软件存储&#xff…

【安装包】JDK 17安装教程

软件下载 软件:JDK版本:17语言:简体中文大小:151.24M安装环境:Win11/Win10/Win8/Win7硬件要求:CPU2.0GHz 内存4G(或更高)下载通道①百度网盘丨64位下载链接:https://pan.baidu.com/…

0基础学习VR全景平台篇 第93篇:智慧景区教程

一、上传素材 1.上传全景素材 第一步:进入【素材管理】 第二步:选择【全景图智慧景区】分类 第三步:选择相对景区作品分组,上传全景素材 2.素材标注 第一步:选择上传成功后素材,点击【未标注】 第二步&…

Kubernetes技术--k8s核心技术Service服务

1.service概述 Service 是 Kubernetes 最核心概念,通过创建 Service,可以为一组具有相同功能的容器应用提供一个统一的入口地址,并且将请求负载分发到后端的各个容器应用上。 2.service存在的意义 -1:防止pod失联(服务发现) 我们先说一下什么叫pod失联。 -2:

JAVA反射+动态代理

一.什么是反射? 反射就是对封装的成员信息与变量进行编程式访问 简单来说就是从类里面拿东西 比如属性 或者构造方法 二.获取Class对象: 获取Class的三种方式 代码实现: 首先封装一个javabean Student类 public class Student {private Strin…

Makerbase_VESC 常用VESC TOOL配置(一)

VESC TOOL电机配置(一) 欢迎加入 创客基地 电机控制企鹅群 讨论电机控制相关问题:732557609 欢迎光临 创客基地 tao宝店 采购产品: https://makerbase.taobao.com/ 提示:可以按快捷键“CtrlF”快速寻找相关问题。 …

微信聊天记录删除恢复导出工具(文字/语音/图片/视频/文件/表情包)

微信的聊天记录加密保存在电脑中,有时我们想将自己微信中的聊天记录导出来,但微信软件并不提供该功能。此软件可将自己电脑版微信中的聊天内容批量导出来,方便备份,后期不登录也可方便快速查阅。它还能够尝试恢复之前删除过的好友…

echarts 饼图 图例在右侧时,文字在图例点右边

echarts图例在右侧时,文字在图例点右边 需求 现在实现的 实现需求 主要使用的参数: legend.align ’left‘代码: 可直接放到echarts示例中使用 option {tooltip: {trigger: item},legend: {orient: "vertical" /*标签文字垂…

【Java从0到1学习】13 Java IO流

1. 流 1.1 流的概念 流(stream)的概念源于UNIX中管道(pipe)的概念。在UNIX中,管道是一条不间断的字节流,用来实现程序或进程间的通信,或读写外围设备、外部文件等。 一个流,必有源端和目的端,它们可以是计算机内存的…

揭开波动性的神秘面纱【02/2】:简要介绍预测市场走势

一、说明 本文是数据专家的体会,他之前写了一系列关于时间序列的文章,在这些文章之后,他想给出一个关于我们如何通过投资组合分析在潜在风险情况下将自己保持在安全区域的想法。文章专业性很强,但机器学习方面的工作还是有参考价值…

【LeetCode】409. 最长回文串

409. 最长回文串(简单) 方法:哈希表 贪心 思路 不难发现,回文字符串一定是由 若干偶数个字符 至多一个奇数个字符 组成 。我们可以使用一个长度为 128 的 hash表来记录每一个字符的出现次数,当该字符出现了两次&am…

企业想用CRM提高销售业绩该如何操作?

在当今市场环境中,客户的需求更偏向于个性化,企业面对的竞争更加激烈。如何有效地获取和维护客户,提高收入成为了企业的核心问题。作为一种强大的销售管理工具,CRM如何提高销售业绩? 提高客户转化率: 企业…

Day50|动态规划part11:188.买卖股票的最佳时机IV、123. 买卖股票的最佳时机III

188. 买卖股票的最佳时机IV leetcode链接:188 题「买卖股票的最佳时机 IVopen in new window」 视频链接:动态规划来决定最佳时机,至多可以买卖K次!| LeetCode:188.买卖股票最佳时机4 给你一个整数数组 prices 和一…

基于ssm车库智能管理平台源码和论文

基于ssm车库智能管理平台源码和论文092 开发工具:idea 数据库mysql5.7 数据库链接工具:navcat,小海豚等 技术:ssm 选题的根据:1)说明本选题的理论、实际意义 2)综述国内外有关本选题的研究动态和自己…

【LeetCode75】第四十一题 二叉搜索树中的搜索

目录 题目: 示例: 分析: 代码: 题目: 示例: 分析: 题目给我们一个搜索二叉树,让我们找出节点值等于目标的节点并返回出去。 首先我们可以直接遍历整棵二叉树,找到值…