【问题标题】:Docker process for creating image, installing software (while creating image) and starting container用于创建镜像、安装软件(同时创建镜像)和启动容器的 Docker 进程
【发布时间】:2018-03-25 23:03:34
【问题描述】:

我有一个简单的 Dockerfile:

FROM ubuntu CMD apt-get update; apt-get upgrade; apt-get install -y openjdk-8-jdk python2.7 python-pip unzip libaio1 nano tree curl wget alien

在我的主机 (Mac) 上,从上面 Dockerfile 所在的同一文件夹运行此命令以创建映像:
docker build . -t my-linux

这需要一两分钟,然后检查使用docker images 创建的图像:
REPOSITORY TAG IMAGE ID CREATED SIZE my-linux latest f9061de79d89 34 seconds ago 112MB ubuntu latest f975c5035748 2 weeks ago 112MB

接下来,我根据图像运行(创建容器): docker run -it my-linux bash

试过安装的软件:
root@79a49eab5342:/# nano bash: nano: command not found root@79a49eab5342:/#

为什么没有安装“nano”? (以及其他软件)

【问题讨论】:

    标签: linux docker containers


    【解决方案1】:

    通过Docker Docs

    CMD 的主要目的是为正在执行的容器提供默认值。

    通过Docker Docs

    RUN 指令将在当前图像之上的新层中执行任何命令并提交结果。生成的提交图像将用于 Dockerfile 中的下一步。

    所以你应该使用RUN 而不是CMD

    另外,在你的 Dockerfile 中你可以这样做:

    CMD ["bash"]
    

    这将自动执行 bash 并将您带入 shell,因此您在执行 docker run 时不必执行 -it。它会直接带你进入 shell。

    【讨论】:

    • 谢谢,你明白了 :) 我想我是从示例 Dockerfile 中复制的,但“RUN”工作正常。感谢您指出 CMD 和 bash 的例子!
    猜你喜欢
    • 1970-01-01
    • 2019-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-16
    • 2020-10-06
    • 1970-01-01
    相关资源
    最近更新 更多