我有一个应用程序,可以与ansible安装。否,我想创建包含已安装应用程序的docker镜像。
我的想法是从一些基础镜像创建docker容器,然后从外部机器开始安装到这个docker容器。之后,从这个容器中创建镜像。
我刚刚开始使用dockers,你能告诉我这是不是一个好主意,我该怎么做?
发布于 2019-04-18 13:41:13
这不是创建Docker镜像的标准方法,也不是我会做的,但它可以工作。考虑一下像Hashicorp的Packer这样的工具,它可以使这个过程自动化。
忽略这些工具的具体细节,关于Docker序列的重要一点是,您有一些文件签入到源代码控制中,自动化过程可以使用这些文件来构建docker build
映像。一个Ansible playbook加上一个Packer JSON模板就可以满足同样的基本需求。
不过,重要的是,Docker运行时环境与通常使用Ansible配置的裸机系统或VM之间存在一些关键差异:您不太可能在不修改的情况下使用现有的剧本。例如,如果您的攻略试图配置系统守护进程、安装systemd单元文件、添加ssh用户或其他标准系统管理任务,这些在Docker中通常是不相关或不有用的。
我建议至少尝试一次使用标准Dockerfile打包您的应用程序,以便真正了解生态系统。不要期望能够在Docker环境中使用未经修改的Ansible攻略;但如果您的组织具有大量Ansible经验,并且您可以很容易地将“安装应用程序”与“配置服务器”分开,那么您建议的路径在技术上是可以接受的。
发布于 2019-04-18 13:26:42
你可以在Docker中使用multi-stage builds,这可能是一个很好的解决方案:
FROM ansible/centos7-ansible:stable as builder
COPY playbook.yaml .
RUN ansible-playbook playbook.yaml
FROM alpine:latest # Include whatever image you need for your application
# Add required setup for your app
COPY --from=builder . . # Copy files build in the ansible image, aka your app
CMD ["<command to run your app>"]
希望这个示例足够清晰,让您能够创建Dockerfile
https://stackoverflow.com/questions/55745727
复制相似问题