Docker与amazonlinux

时间:2017-07-28 12:51:57

标签: php docker amazon-ec2 amazon-linux

使用Docker完成新手,但概念仍然存在。

目标

在本地创建一个与我的prod EC2实例匹配的容器。升级PHP7并测试我的应用程序。

方法

我的第一步是创建一个基本的盒子亚马逊linux盒子。挂载它并从CLI运行命令。然后我可以慢慢构建命令以放入我的Dockerfile。

问题

我构建了精简版yum update -Y框并查看更新。但是,当我运行 docker ps 时,图片未列出?所以我无法装载它。我的composerfile如下......

FROM amazonlinux:2017.03

RUN yum update -y

为什么盒子没有处于打开状态?

4 个答案:

答案 0 :(得分:3)

Docker容器在没有进程运行时停止。在Dockerfile中添加一个入口点以保持机器运行。

如果您确实没有任何流程可以运行,则可以执行sleep infinitysleep 99999

FROM amazonlinux:2017.03

RUN yum update -y

CMD [“sleep”, “infinity”]

答案 1 :(得分:2)

在所有RUN命令完成后,docker容器停止运行。您需要CMDENTRYPOINT运行并且不会停止以保持容器的活动状态。对于Web服务,这可能是apache或nginx或您用于为PHP7应用程序提供服务的任何Web服务。

答案 2 :(得分:0)

我最终找到了另一种解决方案。通过启动BASH,我能够保持容器运行。

docker run -it -p 8080:80 --rm nbsite bash

答案 3 :(得分:0)

我在开发环境中测试实例的目标相同,起初我认为它应该像docker run amazonlinux:2 -it一样容易。但是我错了,我花了整整一天的时间才能使它正常工作!

有趣的是,当您在Google中搜索“ amazonlinux Docker ”时,经常有人尝试在“ amazonlinux中安装“ Docker ”,但是在这里我们要安装“ amazonlinux”在Docker中”!

我们还希望在该amazonlinux中安装Docker,因此最终基本上就是“ Docker在amazonlinux中的Docker ”,即最终是“ Docker在Docker ”! ; D *

我的发现:

  • Docker中的Amazonlinux(通过FROM amazonlinux:2创建)非常空旷,甚至没有sudopasswd之类的基本东西。)新的AWS EC2实例可以做到。 / li>
  • 为了使您的serviced正常工作(启动任何守护程序,包括Docker守护程序),您需要在/usr/sbin/init那里(通过yum install initscripts并被实际调用。)您想玩的肉需要您的贝壳从/bin/bash开始。
  • 您正在Docker中运行Docker。需要通过docker run从您--priviledged中的主机特权。
  • 您需要从主机共享/sys/fs/cgroup(它是只读的),以便它能够正确初始化docker daemon。

我的解决方案:

1)为解决上述前两个问题,您的 Dockerfile 可以是:

FROM amazonlinux:2

RUN yum update -y && yum install -y initscripts;

CMD ["/usr/sbin/init"]

2)从中创建图像,例如docker build . -t ax1

3)然后,要解决上面的后两个问题,请运行从其分离的(在后台运行)容器进行特权化,并与您的/sys/fs/cgroup共享卷。例如

docker run --name ac11 -d --privileged -v /sys/fs/cgroup:/sys/fs/cgroup:ro ax1

4)最后,您可以使用docker exec -it ac11 bash

扑向它

5)现在,它与新的EC2实例非常接近。 (但是,缺少sudo,实际的ec2-user以及我们在Dockerfile中跳过的其他内容,以使此解决方案保持简单。)

无论如何,现在您可以按照AWS Docs的说明安装 docker。也就是说,一旦进入容器,请执行以下操作:

amazon-linux-extras install -y docker;

然后重新启动一次docker服务:

service docker restart;

现在,docker ps 应该工作了!