前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Docker命令之容器命令1

Docker命令之容器命令1

原创
作者头像
用户10048459
修改2022-10-23 14:23:58
8550
修改2022-10-23 14:23:58
举报
文章被收录于专栏:执笔绘倾城执笔绘倾城

容器命令

docker run

docker run会先找本地镜像,如果找不到,就自动去远程仓库拉取镜像(默认拉取latest版本),然后使用这个镜像来启动容器。命令详细格式如下:

代码语言:javascript
复制
sudo docker run [OPTIONS] IMAGE [COMMAND] [ARG...]

一般常用的OPTIONS有下面的几个。

  • –name=“容器新名字” 为容器指定一个名称;
  • -i:以交互模式运行容器,通常与 -t 同时使用;
  • -t:为容器重新分配一个伪输入终端,通常与 -i 同时使用; 也即启动交互式容器(前台有伪终端,等待交互);
  • -P: 随机端口映射,大写P;-p: 指定端口映射,小写p
  • -d: 指定容器后台运行

启动交互式容器

因此,如果需要启动一个交互式ubuntu容器,那么通常如下所示:

代码语言:javascript
复制
sudo docker run -it ubuntu /bin/bash

/bin/bash:放在镜像名后的是命令,这里我们希望有个交互式 Shell,因此用的是 /bin/bash。要退出终端,直接输入 exit

交互式方式启动的容器,在终端输入exit会导致容器停止,而按下ctrl+p+q退出,容器不会退出。

启动后台运行容器

通常,大多数时候,我们都是希望启动一个后台运行的容器。这时候的启动命令如下:

代码语言:javascript
复制
sudo docker run -d ubuntu

注意,这时候,你通过docker ps查看,会发现ubuntu并没有被启动,这是因为 Docker容器后台运行,就必须有一个前台进程。这样的容器后台启动后,会立即自杀因为他觉得他没事可做了。

因此,如果我们启动的是redis容器,那么它就不会立即退出,因为redis会被以前台进程的形式执行。所以,最佳的解决方案是,将你要运行的程序以前台进程的形式运行,常见就是命令行模式,表示我还有交互操作,不要停止掉容器。

docker start

该命令用来启动一个已经停止的docker容器,格式如下:

代码语言:javascript
复制
sudo docker start 容器名(NAMES)或者容器ID(CONTAINER ID)

例如,

代码语言:javascript
复制
b8a32c0d9edb   redis          "docker-entrypoint.s…"   12 minutes ago   Exited (0) 2 minutes ago              redis

我们使用名字来重新启动这个容器,

代码语言:javascript
复制
sudo docker start redis

在例如,

代码语言:javascript
复制
b3cc50a235cd   ubuntu         "/bin/bash"              27 minutes ago   Exited (0) 27 minutes ago              thirsty_hodgkin

我们使用容器ID来启动容器:

代码语言:javascript
复制
sudo docker start b3cc50a235cd

docker restart

该命令用来重启容器,格式如下:

代码语言:javascript
复制
sudo docker restart 容器名或者容器ID

docker stop

该命令用来停止同期,格式如下:

代码语言:javascript
复制
sudo docker stop 容器名或者容器ID

docker kill

该命令用来停止同期,格式如下:

代码语言:javascript
复制
sudo docker kill 容器名或者容器ID

docker kill和docker stop的区别是:docker stop,支持“优雅退出”。先发送SIGTERM信号,在一段时间之后(10s)再发送SIGKILL信号。Docker内部的应用程序可以接收SIGTERM信号,然后做一些“退出前工作”,比如保存状态、处理当前请求等。docker kill,发送SIGKILL信号,应用程序直接退出。

docker rm

删除已停止运行的容器,格式如下:

代码语言:javascript
复制
sudo docker rm 容器名或者容器ID

一次性删除所有容器:

代码语言:javascript
复制
sudo docker rm $(sudo docker ps -a -q)

docker logs

对于后台运行的容器,我们我们看到其终端打印的信息,因此docker提供了docker logs来查看日志。命令格式如下:

代码语言:javascript
复制
sudo docker logs 容器名或者容器ID

docker top

该命令用来查看容器内运行的进程。命令格式如下所示:

代码语言:javascript
复制
sudo docker top 容器名或者容器ID

docker inspect

该命令用来获取容器/镜像的元数据。命令格式如下所示:

代码语言:javascript
复制
sudo docker inspect 容器名或者容器ID

docker exec

该命令可以进入在后台运行的容器中,命令格式如下所示:

代码语言:javascript
复制
sudo docker [OPTIONS] 容器名或者容器ID [COMMAND]

常用的格式如下:

代码语言:javascript
复制
sudo docker exec -it f184ae /bin/bash

这时候会打开一个新的伪终端,然后我们就可以使用伪终端来进行交互操作。之后使用exit退出伪终端,也不会导致容器停止运行,因为这个伪终端是exec新打开的。

docker attach

该命令可以进入在后台运行的容器中,和exec不同的地方是,attach直接进入容器启动命令的终端,不会打开一个新的终端,这样你退出的时候,就会导致容器退出。因此,该命令不常用。命令格式如下:

代码语言:javascript
复制
sudo docker attach 容器名或者容器ID

docker cp

该命令可以用来在容器和宿主机之间进行文件拷贝。命令格式如下:

docker export

docker export是用来将container的文件系统进行打包的,容器快照文件将丢弃所有的历史记录和元数据信息(即仅保存容器当时的快照状态),而镜像存储文件将保存完整记录,体积也要大。命令用法:

代码语言:javascript
复制
sudo docker export -o www.tar 9540a9d16597

上述命令将ID为9540a9d16597的容器打包成为www.tar的镜像包。也可以借助Linux的重定向操作,例如:

代码语言:javascript
复制
sudo docker export 9540a9d16597 > qqq.tar

docker import

该命令用于从docker export导出的文件中创建镜像。命令格式如下:

代码语言:javascript
复制
sudo docker import 打包文件 REPOSITORY:TAG

例如:

代码语言:javascript
复制
sudo docker import qqq.tar redis:1.0.1

docker commit

该命令用于提交容器副本,使之成为一个新的镜像。命令格式如下:

代码语言:javascript
复制
sudo docker commit -m="描述信息" -a="作者" 容器ID 要创建的镜像名:[标签名]

例如:

代码语言:javascript
复制
sudo docker commit -m="new_ubuntu" -a="zy010101" c08cf729f094 ubuntu:1.2.3

这样,就可以借助docker commit命令来生成功能更加强大的镜像。例如,你可以在容器中安装vim,然后使用docker commit提交容器副本,生成一个带有vim的新镜像。 这主要受益于Docker中的镜像分层,支持通过扩展现有镜像,创建新的镜像。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 容器命令
    • docker run
      • 启动交互式容器
      • 启动后台运行容器
    • docker start
      • docker restart
        • docker stop
          • docker kill
            • docker rm
              • docker logs
                • docker top
                  • docker inspect
                    • docker exec
                      • docker attach
                        • docker cp
                          • docker export
                            • docker import
                              • docker commit
                              相关产品与服务
                              容器服务
                              腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
                              领券
                              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档