Docker 与 amazonlinux

suf*_*boy 8 php amazon-ec2 docker amazon-linux

Docker 的完全新手,但概念是坚持的。

目标

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

方法

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

问题

我构建了盒子并运行 yum update -Y 并查看更新。但是,当我运行docker ps 时,没有列出图像?所以我无法安装它。我的作曲家文件如下...

FROM amazonlinux:2017.03

RUN yum update -y
Run Code Online (Sandbox Code Playgroud)

为什么盒子没有保持打开状态?

Aid*_*din 11

我有在开发环境中测试实例的相同目标,最初我认为它应该像docker run amazonlinux:2 -it. 但是我错了,我花了将近一整天的时间才让它工作!

有趣的是,当你谷歌“ amazonlinux Docker ”时,经常有人试图安装“ Docker in amazonlinux ”,但这里我们想安装“ amazonlinux in Docker ”!

我们也想在那个amazonlinux中安装Docker,所以基本上“ Docker in amazonlinux in Docker ”最终就是“ Docker in Docker ”!;D*

我的发现:

  • Docker 中的 Amazonlinux(通过创建FROM amazonlinux:2)是如此的空虚,以至于它甚至没有像sudo或 之类的基本东西passwd。)新的 AWS EC2 实例有。
  • 为了让你的serviced正常工作(启动任何守护进程,包括 Docker 守护进程),你需要/usr/sbin/init在那里(通过yum install initscripts并实际调用。但是,你想要玩的肉需要你的 shell 从/bin/bash.
  • 您正在 Docker 中运行 Docker。这需要从您的docker runvia 中的主机获得特权--priviledged
  • 您需要/sys/fs/cgroup从您的主机(它可以是只读的)共享它才能正确初始化 docker 守护进程。

我的解决方案:

1)为了解决上面的前两个问题,你的Dockerfile可以是:

FROM amazonlinux:2

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

CMD ["/usr/sbin/init"]
Run Code Online (Sandbox Code Playgroud)

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 实例。(然而,我们在 Dockerfile 中跳过了缺失的sudo、实际的ec2-user和其他内容,以保持这个解决方案的简单。)

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

amazon-linux-extras install -y docker;
Run Code Online (Sandbox Code Playgroud)

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

service docker restart;
Run Code Online (Sandbox Code Playgroud)

现在,docker ps 应该可以工作了!


Was*_*hif 4

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

\n\n

如果您确实没有任何流程要运行,您可以执行sleep infinityor操作。sleep 99999

\n\n
FROM amazonlinux:2017.03\n\nRUN yum update -y\n\nCMD [\xe2\x80\x9csleep\xe2\x80\x9d, \xe2\x80\x9cinfinity\xe2\x80\x9d]\n
Run Code Online (Sandbox Code Playgroud)\n