移动docker在主机之间合成图像

移动docker在主机之间合成图像,docker,docker-compose,Docker,Docker Compose,基于 我已加载图像: $ docker images -a REPOSITORY TAG IMAGE ID CREATED SIZE br/irc latest 3203cf074c6b 23 hours ago 377MB openjdk 8u131-jdk-alpine a2a00e606

基于

我已加载图像:

$ 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注册表中的图像

谢谢@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 !!!!

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

docker-compose up -d
然后,要查看容器是否正在运行,您必须运行:

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

然后,您可以运行exec命令,该命令将允许您在正在运行的容器中输入:

docker-compose exec irc 

更多关于docker compose的信息:

你的问题是关于
docker compose
,但是你也问了一些关于
运行
构建
附加
的问题,这让我觉得我应该试着帮你了解一些基本信息(几个月前我还不太容易处理:-)

图像
图像是创建
容器的基础。Docker从中提取图像并将其存储在主机中,以便在每次创建新容器时使用。容器中的更改不会影响基础图像

要从docker hub提取图像,请使用
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注册表中,这样你就可以轻松地从任何其他机器获得<代码>拉< /代码>。在处理Raspberry Pi时,我必须这样做(编译耗时数小时,我需要

pull
已经创建的图像,而不是
在每个Raspberry中从头开始构建它)

容器
容器基于图像,您可以在同一主机上拥有来自同一图像的多个不同容器<代码>docker run[图像]
基于该图像创建一个新容器并启动它。这里的许多人开始认为容器就像迷你虚拟机。他们不是

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

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 log-f
)。当命令退出时,所有容器都将停止。运行
docker compose up-d
将在后台启动容器并使其保持运行


如何确保正在使用本地图像?由于docker compose up确实在运行,但在这个主机上,它会给我带来编译问题,因此我在另一个主机上构建docker映像,并将它们复制到这个主机上。@Togos现在我已经有了所有三个容器,如何确保grails web应用程序正在运行以及在哪个端口上?
docker container ls-a
列出了所有容器(即使是那些停下来的人)。您可以使用
docker inspect…
查看容器详细信息。我在回答中添加了一些关于
docker compose
的额外信息。说实话,我不太确定您的问题是什么,但如果您需要,我会在这里提供帮助。实际上,您询问的是
docker compose
,这是一种在后台执行许多操作的工具(例如,
docker compose-up
构建
图像
,(re)创建/启动/附加到
容器
,然后更新您的问题,说明您正在寻找简单的docker命令,如
docker run
docker ps
@tgogos。我非常感谢您的解释,它们很有帮助。我只是回到docker命令,因为我在docker compos中找不到类似的命令e、 谢谢你的帮助。