gpt4 book ai didi

php - Docker 与 amazonlinux

转载 作者:行者123 更新时间:2023-12-04 22:16:42 25 4
gpt4 key购买 nike

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

目标

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

方法

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

问题

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

FROM amazonlinux:2017.03

RUN yum update -y

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

最佳答案

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

有趣的是,当您在 google 上搜索“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 run 中的主机获得特权。通过 --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 实例。 (然而,缺少 sudo 、实际 ec2-user 以及我们在 Dockerfile 中跳过的其他内容,以保持此解决方案的简单性。)

    无论如何,现在你可以 安装 docker按照 AWS Docs 的指示.也就是说,一旦您进入容器,请执行以下操作:
    amazon-linux-extras install -y docker;

    然后 重启 docker 服务一次:
    service docker restart;

    现在, docker ps 应该工作!

    关于php - Docker 与 amazonlinux,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45374071/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com