docker构建后如何测试容器或镜像?

How to test the container or image after docker build?

我有以下 Dockerfile

############################################################
# Purpose   : Dockerize Django App to be used in AWS EC2
# Django    : 1.8.1
# OS        : Ubuntu 14.04
# WebServer : nginx
# Database  : Postgres inside RDS
# Python    : 2.7
# VERSION   : 0.1
############################################################

from ubuntu:14.04

maintainer Kim Stacks, kimcity@gmail.com

# make sure package repository is up to date
run echo "deb http://archive.ubuntu.com/ubuntu $(lsb_release -sc) main universe" > /etc/apt/sources.list

run apt-get update

# install python

# install nginx

在我的 VM 中,我执行了以下操作:

docker build -t ubuntu1404/djangoapp .

成功。

我该如何处理 运行 docker 图片? 镜像或容器在哪里?

我已经试过了运行宁

docker run ubuntu1404/djangoapp

没有任何反应。

当我运行docker images

时我看到了什么
root@vagrant-ubuntu-trusty-64:/var/virtual/Apps/DockerFiles/Django27InUbuntu# docker images
REPOSITORY             TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
ubuntu1404/djangoapp   latest              cfb161605c8e        10 minutes ago      198.3 MB
ubuntu                 14.04               07f8e8c5e660        10 days ago         188.3 MB
hello-world            latest              91c95931e552        3 weeks ago         910 B

当我运行docker ps时,没有任何显示

您必须给出容器必须处理的命令。

示例:sh

你可以试试 :

docker run -ti yourimage sh

(-ti 用于保持终端打开)

如果你想启动一个守护进程(比如服务器),你必须输入如下内容:

docker run -d yourimage daemontolaunch

使用 docker help run 以获得更多选项。

您还可以在 Dockerfile 中使用 CMD instruction 设置默认行为,这样您就不必在每次要 运行 时都向容器提供此命令。

编辑 - 关于容器删除:

容器和镜像不同。 容器是图像的实例。 您可以 运行 来自同一图像的多个容器。

容器在进程 运行 终止时自动停止。 但是容器并没有被删除(只是停止了,所以你可以重新启动它)。 但是如果你想删除它(删除容器不会删除图像)你有两种方法:

  • 通过在 docker run 中添加 --rm 选项在过程结束时自动删除它。

  • 使用docker rm命令手动删除它并给它容器ID或它的名称(容器必须在删除前停止,为此使用docker stop ).

一个有用的命令:

使用docker ps列出容器。 -q 仅显示容器 ID,-a 甚至显示已停止的容器。

更多here.

编辑 2:

This 也可以帮助你发现 docker 如果你没有尝试过。

How to test the container or image after docker build?

为了测试,您可以添加编写一个 bash 脚本来完成工作 https://blog.brazdeikis.io/posts/docker-image-tests

顺便说一句,从 post 来看,我发现它与标题中的问题不符。

所以,根据标题为到达这里的灵魂添加了link...

  1. https://github.com/dgroup/docker-unittests/releases下载最新的shaded dist:

    wget https://github.com/dgroup/docker-unittests/releases/download/s1.1.1/docker-unittests-app-1.1.1.jar
    
    
  2. 用测试定义 *.yml 文件。

    
    version: 1.1
    
    setup:
    - apt-get update
    - apt-get install -y tree
    
    tests:
    
    - assume: java version is 1.9, Debian build
     cmd:    java -version
     output:
       contains:
        - openjdk version "9.0.1"
        - build 9.0.1+11-Debian
    
    - assume: curl version is 7.xxx
     cmd:    curl --version
     output:
       startsWith: curl 7.
       matches:
        - "^curl\s7.*\n.*\nProtocols.+ftps.+https.+telnet.*\n.*\n$"
       contains:
        - AsynchDNS IDN IPv6 Largefile GSS-API
    
    - assume:  Setup section installed `tree`
     cmd:     tree --version
     output:
       contains: ["Steve Baker", "Florian Sesser"]
    
    
  3. 运行 图像测试
    java -jar docker-unittests.jar -f image-tests.yml -i openjdk:9.0.1-11
    
    https://i.stack.imgur.com/DSv72.png