8

完整的 Docker 新手,但概念仍然存在。

目标

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

方法

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

问题

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

FROM amazonlinux:2017.03

RUN yum update -y

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

4

4 回答 4

12

我有在开发环境中测试实例的相同目标,最初我认为它应该像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"]

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;

然后重启一次docker服务:

service docker restart;

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

于 2019-06-04T22:54:27.387 回答
4

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

你可以做一个sleep infinity,或者sleep 99999如果你真的没有任何进程要运行。

FROM amazonlinux:2017.03

RUN yum update -y

CMD [“sleep”, “infinity”]
于 2017-07-28T12:53:53.517 回答
2

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

于 2017-07-28T12:57:04.117 回答
0

最后我找到了替代解决方案。通过启动 BASH,我能够保持容器运行。

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

于 2017-08-25T06:44:48.197 回答