前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Docker 入门到实战教程(三)镜像和容器

Docker 入门到实战教程(三)镜像和容器

作者头像
小东啊
发布2020-07-23 17:22:45
7280
发布2020-07-23 17:22:45
举报
文章被收录于专栏:李浩东的博客李浩东的博客

上一篇文章介绍到Docker的安装,那我们就来验证下 验证安装结果

代码语言:javascript
复制
docker run --rm hello-world

输入以下的内容代表安装成功

file

下面开始镜像和容器操作

一. 镜像操作

Docker完美融合Linux,所以Docker命令行的风格和Linux还是比较接近的,相对来说比较容易上手,首先,我们先说镜像相关的命令:

1.1 查看docker所有命令

docker 客户端非常简单 ,我们可以直接输入 docker 命令来查看到 Docker 客户端的所有命令选项。

代码语言:javascript
复制
docker

file

可以通过命令 docker command --help 更深入的了解指定的 Docker 命令使用方法。

1.2 获取命令更多使用

例如我们要查看 docker stats 指令的具体使用方法:

代码语言:javascript
复制
docker stats --help

file

1.3 搜索镜像
代码语言:javascript
复制
docker search 镜像名

例如: 搜索centos相关的镜像

代码语言:javascript
复制
docker search centos

file

  • NAME: 镜像仓库源的名称
  • DESCRIPTION: 镜像的描述
  • OFFICIAL: 是否 docker 官方发布
  • stars: 类似 Github 里面的 star,表示点赞、喜欢的意思。
  • AUTOMATED: 自动构建。
1.4 拉取镜像

拉取镜像到本地服务器,默认TAG是laster即最新版本

代码语言:javascript
复制
docker pull 镜像名

例如: 拉取centos

代码语言:javascript
复制
docker pull centos

file

大家可能会看到,我拉取的时候并没有指定版本,默认最新的laster

1.5 查看所有的镜像
代码语言:javascript
复制
docker images

file

各个选项说明:

  • REPOSITORY:表示镜像的仓库源
  • TAG:镜像的标签
  • IMAGE ID:镜像ID
  • CREATED:镜像创建时间
  • SIZE:镜像大小

大家可能会发现为什么有hello-world镜像,因为当我们执行docker run --rm hello-world的时候,在本地找不到hello-world镜像,就会自动到Docker Hub上找到相应镜像下载回来,再根据此镜像来新建并启动容器。

1.6 查看中间层镜像:
代码语言:javascript
复制
docker images -a

如果不同镜像之间有复用的中间层,这里就会看见一些没有镜像名和标签的镜像,很多镜像依赖这些中间层,所以中间层镜像是不能随意删除的。

1.7 删除镜像

当我们想删除一些不需要的镜像时,比如hello-world镜像,可以执行:

代码语言:javascript
复制
docker rmi hello-world

file

1.8 强制删除镜像

如果此时有基于此镜像的容器,则需要先删除相应的容器才能删除此镜像,如果想强制删除镜像,加上-f参数即可:

代码语言:javascript
复制
docker rmi -f <image name>
1.9 清除所有虚悬镜像

在使用docker images查看本地镜像时(不加-a参数时),我们也可能会发现一些没有镜像名和标签的镜像:

不同于上面提到的中间层镜像,我们称这种镜像为虚悬镜像(dangling image),有几种情况会产生虚悬镜像,比如上述强制删除一个已经运行容器的镜像,或者使用docker pull命令更新镜像时,镜像的名称和标签会转移到新镜像中,旧的镜像就会变成虚悬镜像,另外,在使用docker build构建镜像的时候,如果构建失败也会产生虚悬镜像。一般来说虚悬镜像已经没有实际用处,可以随意删除,一条命令就能清除所有虚悬镜像:

代码语言:javascript
复制
docker image prune
1.10 导出镜像

我们用docker pull命令将镜像从Docker Hub下载到本地,如果目标环境不能访问外网时无法下载,我们就可以直接导出镜像文件:

代码语言:javascript
复制
docker save -o centos_demo.tar centos
  • -o参数后面接着输出文件名。
  • centos是需要导出的镜像名。
1.11 导入镜像

然后拷贝此镜像文件到目标环境中,并导入镜像:

代码语言:javascript
复制
docker load -i centos_demo.tar

导入后可以即可通过docker images查看镜像。

1.12 修改镜像名称及标签

如果我们想把镜像名称改为centos:1.0,则执行:

代码语言:javascript
复制
docker tag centos:latest centos:1.0

file

大家可能看到怎么是两个了因为同一仓库源可以有多个 TAG,代表这个仓库源的不同个版本,如 centos 仓库源里,有 laster、1.0 等多个不同的版本,我们使用 REPOSITORY:TAG 来定义不同的镜像。

二. 容器操作

2.1 启动容器
代码语言:javascript
复制
docker run -it centos

file

参数说明:

  • -i: 交互式操作。
  • -t: 终端。
  • centos: centos 镜像。

要退出终端,直接输入 exit:

代码语言:javascript
复制
exit

file

2.2 查看容器

执行以下命令可以查看所有容器及其状态:

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

file

代表容器运行情况,什么时候创建的,已经运行多久和停止多久了

启动已停止运行的容器

在上图中发现centos已经停止的了

2.3 启动容器

使用 docker start 启动一个已停止的容器:

代码语言:javascript
复制
docker start 8cfd1216226e

file

2.4 后台运行

在大部分的场景下,我们希望 docker 的服务是在后台运行的,我们可以过 -d 指定容器的运行模式。

file

注:加了 -d 参数默认不会进入容器,想要进入容器需要使用指令 docker exec(下面会介绍到)。

2.5 停止一个容器

停止容器的命令如下:

代码语言:javascript
复制
docker stop <容器 ID>

file

停止的容器可以通过 docker restart 重启:

代码语言:javascript
复制
docker restart <容器 ID>

file

2.6 进入容器

在使用 -d 参数时,容器启动后会进入后台。此时想要进入容器,可以通过以下指令进入:

  • docker attach
  • docker exec:推荐大家使用 docker exec 命令,因为此退出容器终端,不会导致容器的停止。
2.6.1 attach 命令

下面演示了使用 docker attach 命令。

代码语言:javascript
复制
docker attach 602237bcc6d6

file

注意:如果从这个容器退出,会导致容器的停止。

file

2.6.2 exec 命令

下面演示了使用 docker exec 命令。

代码语言:javascript
复制
docker exec -it 602237bcc6d6 /bin/bash

file

可以看到我使用进入命令进入容器,报错提示这个容器未运行,验证了之前的说法,我重启后再次进入即可

注意:如果从这个容器退出,不会导致容器的停止,这就是为什么推荐大家使用 docker exec 的原因。

更多参数说明请使用docker exec --help命令查看。

2.7 导出和导入容器
2.7.1 导出容器

如果要导出本地某个容器,可以使用 docker export 命令。

代码语言:javascript
复制
docker export 602237bcc6d6 > centos.tar

file

2.7.2 导入容器快照
代码语言:javascript
复制
docker import centos.tar my_centos:1.0

file

2.8 删除容器

删除容器使用 docker rm 命令:

代码语言:javascript
复制
docker rm 602237bcc6d6

file

看到使用docker rm删除容器会报错,提示不能删除一个正在运行的容器

2.9 强制删除容器
代码语言:javascript
复制
docker rm -f 602237bcc6d6
2.10 清理掉所有处于终止状态的容器。
代码语言:javascript
复制
docker container prune

三. 模拟实战运行web应用

3.1 运行一个 web 应用

前面我们运行的容器并没有一些什么特别的用处。接下来让我们尝试使用 docker 构建一个 web 应用程序。我们将在docker容器中运行一个 Python Flask 应用来运行一个web应用。

3.2 载入web镜像
代码语言:javascript
复制
docker pull training/webapp
3.3 后台启动容器
代码语言:javascript
复制
docker run -d -P training/webapp python app.py

参数说明:

  • -d:让容器在后台运行
  • -P:将容器内部使用的网络端口映射到我们使用的宿主机上
3.4 查看WEB容器:
代码语言:javascript
复制
docker ps

file

Docker 开放了 5000 端口(默认 Python Flask 端口)映射到主机端口 32768 上。

如果在云服务器安全组需要开放端口和防火墙放行 再通过浏览器访问WEB应用:

file

3.5 参数设置端口

也可以通过 -p 参数来设置不一样的端口:

代码语言:javascript
复制
docker run -d -p 5000:5000 training/webapp python app.py

file

file

3.6 查看WEB应用程序日志

docker logs [ID或者名字] 可以查看容器内部的标准输出:

代码语言:javascript
复制
docker logs 970dc67458f6

代码语言:javascript
复制
docker logs wizardly_nightingale
3.6.1 命令介绍

docker logs命令可以查看容器的日志

3.6.2 命令格式
代码语言:javascript
复制
$ docker logs [OPTIONS] CONTAINER
  Options:
        --details        显示更多的信息
    -f, --follow         跟踪实时日志
        --since string   显示自某个timestamp之后的日志,或相对时间,如42m(即42分钟)
        --tail string    从日志末尾显示多少行日志, 默认是all
    -t, --timestamps     显示时间戳
        --until string   显示自某个timestamp之前的日志,或相对时间,如42m(即42分钟)
3.7 跟踪实时日志
代码语言:javascript
复制
docker logs -f 970dc67458f6

file

3.7.1 查看最近30分钟的日志:
代码语言:javascript
复制
docker logs --since 30m 970dc67458f6

file

3.7.2 查看某时间之后的日志:
代码语言:javascript
复制
docker logs -t --since="2020-03-08T13:23:37" 970dc67458f6

file

3.8 查看WEB应用程序容器的进程

docker top 来查看容器内部运行的进程:

代码语言:javascript
复制
docker top 970dc67458f6

file

3.9 检查WEB应用程序

使用 docker inspect 来查看Docker的底层信息,返回一个 JSON 文件记录着 Docker 容器的配置和状态信息:

代码语言:javascript
复制
docker inspect 970dc67458f6

file

3.10 停止WEB应用容器:
代码语言:javascript
复制
docker stop 970dc67458f6

file

3.11 重启WEB应用容器:

已经停止的容器,我们可以使用命令 docker start 来启动。

代码语言:javascript
复制
docker start 970dc67458f6

file

3.12 查询最后一次创建的容器

docker ps -l 查询最后一次创建的容器:

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

正在运行的容器,我们可以使用docker restart命令来重启。

3.13 移除WEB应用容器

使用 docker rm 命令来删除不需要的容器(删除容器时,容器必须是停止状态):

代码语言:javascript
复制
docker rm 970dc67458f6

移除正在运行的容器可以强制移除 docker rm -f

代码语言:javascript
复制
docker rm -f 970dc67458f6

file

参考资料: http://iii30.cn/Ig8w9u

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-03-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 小东IT技术分享 微信公众号,前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一. 镜像操作
    • 1.1 查看docker所有命令
      • 1.2 获取命令更多使用
        • 1.3 搜索镜像
          • 1.4 拉取镜像
            • 1.5 查看所有的镜像
              • 1.6 查看中间层镜像:
                • 1.7 删除镜像
                  • 1.8 强制删除镜像
                    • 1.9 清除所有虚悬镜像
                      • 1.10 导出镜像
                        • 1.11 导入镜像
                          • 1.12 修改镜像名称及标签
                          • 二. 容器操作
                            • 2.1 启动容器
                              • 2.2 查看容器
                                • 2.3 启动容器
                                  • 2.4 后台运行
                                    • 2.5 停止一个容器
                                      • 2.6 进入容器
                                        • 2.6.1 attach 命令
                                        • 2.6.2 exec 命令
                                      • 2.7 导出和导入容器
                                        • 2.7.1 导出容器
                                        • 2.7.2 导入容器快照
                                      • 2.8 删除容器
                                        • 2.9 强制删除容器
                                          • 2.10 清理掉所有处于终止状态的容器。
                                          • 三. 模拟实战运行web应用
                                            • 3.1 运行一个 web 应用
                                              • 3.2 载入web镜像
                                                • 3.3 后台启动容器
                                                  • 3.4 查看WEB容器:
                                                    • 3.5 参数设置端口
                                                      • 3.6 查看WEB应用程序日志
                                                        • 3.6.1 命令介绍
                                                        • 3.6.2 命令格式
                                                      • 3.7 跟踪实时日志
                                                        • 3.7.1 查看最近30分钟的日志:
                                                        • 3.7.2 查看某时间之后的日志:
                                                      • 3.8 查看WEB应用程序容器的进程
                                                        • 3.9 检查WEB应用程序
                                                          • 3.10 停止WEB应用容器:
                                                            • 3.11 重启WEB应用容器:
                                                              • 3.12 查询最后一次创建的容器
                                                                • 3.13 移除WEB应用容器
                                                                相关产品与服务
                                                                容器服务
                                                                腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
                                                                领券
                                                                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档