移动docker-在主机之间组合图像

时间:2017-11-09 16:36:38

标签: docker docker-compose

基于Moving docker-compose containersets

我已加载图片:

$ docker images -a
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
br/irc              latest              3203cf074c6b        23 hours ago        377MB
openjdk             8u131-jdk-alpine    a2a00e606b82        5 days ago          101MB
nginx               1.13.3-alpine       ba60b24dbad5        4 months ago        15.5MB

但现在我想运行它们,因为它们可以使用docker-compose运行,但我找不到任何示例。

这里是docker-compose.yml

version: '3'
services:
  irc:
    build: irc
    hostname: irc
    image: br/irc:latest
    command: |
      -Djava.net.preferIPv4Stack=true
      -Djava.net.preferIPv4Addresses
      run-app
    volumes:
      - ./br/assets/br.properties:/opt/br/src/java/br.properties
  nginx:
    hostname: nginx
    image: nginx:1.13.3-alpine
    ports:
      - "80:80"
    links:
      - irc:irc
    volumes:
      - ./nginx/assets/default.conf:/etc/nginx/conf.d/default.conf

所以我怎么能运行容器,并附加到它,看看它是否正在运行,以及我以什么顺序运行这三个图像。刚开始使用docker,所以不确定典型的工作流程(构建,运行,附加等)

所以即使我有docker-compose yml文件,但由于我有来自其他主机的构建映像,我可以运行docker命令来运行和执行图像吗?确保引用本地映像,而不是docker registry中的映像。

谢谢@tgogos,这确实给了我一个概述,但具体来说我一直在寻找:

$ docker run -dit openjdk:8u131-jdk-alpine
then:
$ docker ps -a
CONTAINER ID        IMAGE                      COMMAND                  CREATED             STATUS                      PORTS               NAMES
cc6ceb8a82f8        openjdk:8u131-jdk-alpine   "/bin/sh"                52 seconds ago      Up 51 seconds                                   vibrant_hodgkin

shows its running

2nd:

$ docker run -dit nginx:1.13.3-alpine
3437cf295f1c7f1c27bc27e46fd46f5649eda460fc839d2d6a2a1367f190cedc


$ docker ps -a
CONTAINER ID        IMAGE                      COMMAND                  CREATED             STATUS                      PORTS               NAMES
3437cf295f1c        nginx:1.13.3-alpine        "nginx -g 'daemon ..."   20 seconds ago      Up 19 seconds               80/tcp              vigilant_kare
cc6ceb8a82f8        openjdk:8u131-jdk-alpine   "/bin/sh"                2 minutes ago       Up 2 minutes                                    vibrant_hodgkin


then: finally:

[ec2-user@ip-10-193-206-13 DOCKERLOCAL]$ docker run -dit br/irc
9f72d331beb8dc8ccccee3ff56156202eb548d0fb70c5b5b28629ccee6332bb0

$ docker ps -a
CONTAINER ID        IMAGE                      COMMAND                  CREATED             STATUS                      PORTS               NAMES
9f72d331beb8        br/irc              "/opt/irc/grailsw"       8 seconds ago       Up 7 seconds                8080/tcp            cocky_fermi
3437cf295f1c        nginx:1.13.3-alpine        "nginx -g 'daemon ..."   56 seconds ago      Up 55 seconds               80/tcp              vigilant_kare
cc6ceb8a82f8        openjdk:8u131-jdk-alpine   "/bin/sh"                2 minutes ago       Up 2 minutes                                    vibrant_hodgkin

All three UP !!!!

2 个答案:

答案 0 :(得分:1)

您的问题与docker-compose有关,但您也会询问有关runbuildattach的问题,这让我觉得我应该尝试为您提供一些基本信息(几个月前我没那么容易应对: - )

images

图像在某种程度上是创建containers的基础。 Docker从http://hub.docker.com中提取图像并将其存储在您的主机中,以便在每次创建新容器时使用。容器中的更改不会影响基本映像。

要从泊坞窗中心提取图像,请使用docker pull ...。要构建自己的图像,请先阅读Dockerfiles。一个简单的Dockerfile(以抽象的方式)看起来像这样:

FROM ubuntu                  # base image
ADD my_super_web_app_files   # adds files for your app
CMD run_my_app.sh            # starts serving requests

要向主机创建上述图片,请使用docker build ...这是构建图片的一种非常好的方法,因为您知道要创建的步骤。

如果此过程需要很长时间,您可能会稍后考虑将图像存储在docker registry http://hub.docker.com中,以便您可以轻松地pull来自任何其他计算机。我必须这样做,在Raspberry Pi上处理ffmpeg时(编译需要几个小时,我需要pull已经创建的图像,而不是build在每个Raspberry中从头开始)。

containers

容器基于图像,您可以在同一主机上的同一图像中拥有许多不同的容器。 docker run [image]根据该图像创建一个新容器并启动它。很多人开始认为容器就像迷你虚拟机。他们不是!

将容器视为流程。每个容器都有CMD,并在启动时执行它。如果此命令完成或失败,则容器停止,退出。一个很好的例子是nginx:去检查官方Dockerfile,命令是:

CMD ["nginx"]

如果您想查看CMD中的日志,可以docker attach ...到您的容器。您还可以docker stop ...正在运行的容器或docker start ...已经停止的容器。你可以进入内部"通过以下方式键入命令:

docker exec -it [container_name] /bin/bash

这将打开一个新的tty,供您键入命令,而CMD继续运行。

要了解有关上述主题的更多信息(我只是表面上看),我建议你也阅读:

docker-compose

在您对这些内容感到满意后,docker-compose将成为您的便利工具,可帮助您使用单行命令操作多个容器。例如:

docker compose up
  

构建(重新)创建启动附加到服务的容器。

     

除非它们已在运行,否则此命令也会启动所有链接服务。

     

docker-compose up命令聚合每个容器的输出(基本上运行docker-compose logs -f)。命令退出时,所有容器都将停止。运行docker-compose up -d在后​​台启动容器并使其保持运行

答案 1 :(得分:0)

要运行您的docker-compose文件,您必须执行:

JButton button = (JButton)event.getSource();

for (int i = buttons.length; i < buttons.length;i++)
{
    if (button = buttons[i];
    {
        button.setIcon( iconList.get(i) );
        break;
    }
}

然后,要查看您的容器是否正在运行,您必须运行:

docker-compose up -d

此命令将显示所有正在运行的容器

然后你可以运行 exec 命令,它允许你进入一个正在运行的容器:

docker ps

有关docker-compose的更多信息,请点击此处:https://docs.docker.com/compose/reference/up/