如何从亚马逊上正在运行的容器创建新的docker镜像?

时间:2017-05-17 14:35:38

标签: amazon-web-services docker amazon-ecs

这是我的问题:

我有一个在亚马逊ECS上运行docker镜像的任务,但我想从容器的运行实例中创建一个新的docker镜像。

我在Amazon Ecs上看到了实例的ID,我已经制作了一个AMI,但我想制作一个可以从亚马逊拉出来的新码头图像。

有什么想法吗?

问候并感谢

4 个答案:

答案 0 :(得分:10)

要从容器创建图像,请执行以下命令:

  

d = Application.Match(Worksheets("Cleanse").Cells(a, c), Worksheets("MAddress").Rows("1:1"), 0) If Not IsError(d) Then Cells(h - 1, b + 1) = d Else d = Application.Match(Worksheets("Cleanse").Cells(a, c), Worksheets("Member_Details").Rows(1), 0) If Not IsError(d) Then Cells(h - 1, b + 1) = "M" & d end if End If ...

答案 1 :(得分:3)

您可以运行docker commitdocs)将容器保存到图像,然后将带有新标记的图像推送到注册表。

答案 2 :(得分:2)

除了@Ben Whaley提供的答案之外,我个人建议您使用Docker API。要使用Docker API,您需要配置docker守护程序端口并且过程是这里解释 configuring docker daemon port

让我们使用基础Ubuntu Image运行容器并在容器内创建一个文件夹

#docker run -it ubuntu:14.04 /bin/bash
root@58246867493d:/# 
root@58246867493d:/# cd /root
root@58246867493d:~# ls
root@58246867493d:~# mkdir TEST_DIR
root@58246867493d:~# exit

退出容器的状态:

# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                        PORTS               NAMES
58246867493d        ubuntu:14.04        "/bin/bash"         2 minutes ago       Exited (127) 57 seconds ago                       hungry_turing

JSON文件,它是用于提交容器的输入:

#cat container_create.json 
{
  "AttachStdin": true,
  "AttachStdout": true,
  "AttachStderr": true,
  "ExposedPorts": {
    "property1": {},
    "property2": {}
  },
  "Tty": true,
  "OpenStdin": true,
  "StdinOnce": true,
  "Cmd": null,
  "Image": "ubuntu:14.04",
  "Volumes": {
    "additionalProperties": {}
  },
  "Labels": {
    "property1": "string",
    "property2": "string"
  }
}

提交容器的API

# curl -X POST http://127.0.0.1:6000/commit?container=58246867493d\&repo=ubuntu\&tag=15.0 -d @container_create.json --header "Content-Type: application/json" | jq .
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   593  100    81  100   512    175   1106 --:--:-- --:--:-- --:--:--  1108
{
  "Id": "sha256:acac1f3733b2240b01e335642d2867585e5933b18de2264315f9b07814de113a"
}

生成的Id是新的Image Id,它是通过提交容器构建的。

获取泊坞窗图片

# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
**ubuntu              15.0                acac1f3733b2        10 seconds ago      188MB**
ubuntu              14.04               132b7427a3b4        10 hours ago        188MB

运行新构建的Image以查看上一个容器中提交的更改。

# docker run -it ubuntu:15.0 /bin/bash
root@3a48af5eaec9:/# cd /root/
root@3a48af5eaec9:~# ls
TEST_DIR
root@3a48af5eaec9:~# exit

从Docker文件how to build an image using docker API

构建图像

有关docker API的更多信息,请参阅here.

答案 3 :(得分:1)

这可以通过使用“ docker commit”轻松完成。

假设您需要一个图像,该图像基于NGINX的最新图像,并装有PHP,build-essential和nano。我将引导您完成以下过程:拉取映像,运行容器,访问容器,添加软件以及将更改提交到新图像,然后可以轻松地将其用作开发容器的基础。

拉出图像并运行容器:

sudo docker pull nginx
sudo docker run  -it --name nginx-template-base -p 8080:80 nginx

修改容器:

apt-get install nano
​apt-get install php5

提交更改:

sudo docker commit CONTAINER_ID nginx-template

新创建的模板已准备就绪,您可以使用以下命令运行:

sudo docker run -it --name nginx-dev -p 8080:80 nginx-template