前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >docker 入门-容器(二)

docker 入门-容器(二)

作者头像
benny
发布2020-04-23 15:05:47
5980
发布2020-04-23 15:05:47
举报

上一篇:Docker 入门(一)

说在前面的话:docker 推荐单个容器只运行一个应用程序或进程,因为这样以后可以拓展形成分布式应用程序模型

不管是 win10 还是 linux,docker 的命令都是一样的,不过 linux 下要带上 sudo,因为 docker 是以 root 权限运行docker守护进程

使用前

启动/停止运行 docker

linux:

代码语言:javascript
复制
start/stop docker   # ubuntu
service docker start/restart/stop    # centos

确保 docker 可以运行

代码语言:javascript
复制
sudo docker info

该命令打印出一大堆配置信息即说明 docker 正常运行了,信息包括所有容器和镜像的数量、docker的执行驱动和存储驱动、基本的配置等

容器(以 Ubuntu 镜像为例)

创建并运行容器(run)

代码语言:javascript
复制
sudo docker run -it ubuntu /bin/bash    # 创建并运行一个随机命名的容器
sudo docker run -name xxx -it ubuntu /bin/bash   # 创建并运行一个容器名为xxx的容器

补充解释:

使用 run 指令,创建并运行一个基于 Ubuntu 镜像的容器,如果本地没有该镜像,docker 会自动去 docker hub 下载

-it选项分别是:-i:开启容器的标准输入 STDIN,即键盘输入;-t:使新容器拥有一个 shell

/bin/bash 则告诉 docker 在新容器中要运行命令 /bin/bash

该命令创建运行的容器是一个精简版的 ubuntu 系统,拥有自己的网络、IP 地址、和宿主机通信的桥接网络接口等

创建容器(create)

代码语言:javascript
复制
sudo docker create -it 镜像名称 # 创建一个随机命名的容器
sudo docker create --name xxx -it 镜像名称 # 创建一个容器名为xxx的容器

创建一个可以自动重启的容器(--restart)

有什么用?当容器因为内部运行出错停止时可以重新启动,从而避免一些损失

代码语言:javascript
复制
sudo docker run --restart=always --name xxx -d ubuntu ...

还可以设置自动重启的上限次数:

代码语言:javascript
复制
--restart=on-failure:5

退出正在当前窗口运行的容器

代码语言:javascript
复制
exit

查看当前系统的所有容器

代码语言:javascript
复制
sudo docker ps -a

查看当前运行的容器

代码语言:javascript
复制
sudo docker ps

查看最后一个运行的容器(不管是否正在运行)

代码语言:javascript
复制
sudo docker ps -l

查看一个容器的详细信息

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

删除容器

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

目前没有一键删除所有容器的功能,但我们可以这样:

代码语言:javascript
复制
sudo docker rm `sudo docker ps -a -q`

但 windows 中不是用这个命令批量删除

启动/重启/停止一个已存在的容器

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

但是,这样启动的容器只是在后台运行,并没有进入 shell 界面,这时我们可以用附着到容器的命令:

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

注意!

如果想要在容器退出后使用 start 命令启动,则只有守护式容器可以长时间运行,而普通的容器则会在启动后马上停止运行。

解决方法为:在创建这些普通容器时使用 -dit 选项:

代码语言:javascript
复制
sudo docker run -dit --name xxxx ubuntu

守护式容器(即无交互式会话)

创建长期在后台运行的容器

代码语言:javascript
复制
sudo docker run --name xxx -d ubuntu /bin/sh -c "while true; do echo hello world; sleep 1; done;"

解释:

-d:detached 的意思,指示放在后台运行

/bin/sh -c:让 bash 将后面的一个字符串作为完整的命令来执行

"while true; do echo hello world; sleep 1; done;":每隔一秒在容器内部的 shell 窗口输出 hello world

可以通过附着到容器查看,也可以通过 docker log 查看

查看守护式容器干了些什么

获取守护式容器的日志(仅获取当前已输出的日志)

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

跟踪守护式容器的日志(实时显示)

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

按 ctrl+c 退出 -t 选项可以打印时间

查看容器内部正在运行的进程(top)

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

输出样例:

代码语言:javascript
复制
PID                 USER                TIME                COMMAND
2710                root                0:00                /bin/sh -c while true; do echo hello world; sleep 1; done;
3167                root                0:00                sleep 1

在容器内部运行进程(exec)

代码语言:javascript
复制
sudo docker exec -d 容器名或ID touch xxx_file

解释:

在xxx容器中创建一个文件

这有什么用呢?用处可大了,比如上面例子中遇到的守护式容器想要进行交互,但没有界面怎么办?这时就可以用上在容器内运行bash进程的命令了:

代码语言:javascript
复制
sudo docker exec -it 容器名或ID /bin/bash

导入导出容器(export/import)

指把一个已创建的容器导出到一个文件中

导出:

代码语言:javascript
复制
sudo docker export 容器名或ID > xxx.tar

导入为一个镜像:

代码语言:javascript
复制
sudo docker import xxx.tar 镜像名
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-04-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 程序员的碎碎念 微信公众号,前往查看

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

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 使用前
    • 启动/停止运行 docker
      • 确保 docker 可以运行
      • 容器(以 Ubuntu 镜像为例)
        • 创建并运行容器(run)
          • 创建容器(create)
            • 创建一个可以自动重启的容器(--restart)
              • 退出正在当前窗口运行的容器
                • 查看当前系统的所有容器
                  • 查看当前运行的容器
                    • 查看最后一个运行的容器(不管是否正在运行)
                      • 查看一个容器的详细信息
                        • 删除容器
                          • 启动/重启/停止一个已存在的容器
                          • 守护式容器(即无交互式会话)
                            • 创建长期在后台运行的容器
                              • 查看守护式容器干了些什么
                                • 查看容器内部正在运行的进程(top)
                                  • 在容器内部运行进程(exec)
                                    • 导入导出容器(export/import)
                                    相关产品与服务
                                    容器服务
                                    腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
                                    领券
                                    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档