当前位置: 首页 > 知识库问答 >
问题:

移动Docker-在主机之间合成图像

卢锋
2023-03-14

我已加载图像:

$ 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-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 !!!!

共有1个答案

费锋
2023-03-14

您的问题是关于Docker-Compose的,但您也询问了关于RunBuildAttach的问题,这使我认为我应该尝试帮助您一些基本信息(几个月前我还不太容易处理这些信息:-)

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

若要从docker集线器中提取图像,请使用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,以便您可以轻松地从任何其他计算机中提取映像。在Raspberry Pi上处理FFMPEG时,我不得不这样做(编译花费了几个小时,我需要pull已经创建的映像,而不是在每个Raspberry中从头开始build)。

容器是基于映像的,您可以在同一主机上拥有来自同一映像的许多不同容器。Docker run[image]基于映像创建一个新容器并启动它。这里的许多人开始认为容器就像微型虚拟机。他们不是!

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

CMD ["nginx"]

如果要查看cmd中的日志,可以将Docker附加...到容器中。您还可以Docker stop...运行中的容器或Docker start...已经停止的容器。您可以通过以下方法“进入内部”键入命令:

docker exec -it [container_name] /bin/bash

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

>

  • 是否可以在运行的容器中启动shell会话(不使用ssh)

    Docker-输入带有新TTY的运行容器

    如何连接和分离Docker的进程?

    docker compose up
    

  •  类似资料:
    • 问题内容: 我想将我的应用程序堆栈(由3个docker映像组成)并由docker- compose管理,将其全部从开发机器移至生产机器。我知道几种直接使用docker的方法: 将图像推送到注册表,然后将其从生产环境中撤回 docker从开发中保存,然后在生产中加载docker 在生产中重建映像(宁愿保持对生产的依赖性,所以不是一个好的选择。) 我目前倾向于先保存docker然后再加载docker,

    • 我想把我的应用程序堆栈,由3个docker映像组成,由docker-compose管理,并把它从开发机器整体转移到生产机器上。我知道用直上Docker做这件事的几种方法: null 提前致谢

    • 问题内容: 我找不到将Docker运行容器从一台主机移动到另一台主机的方法。 有什么办法可以像将图像一样将容器推入存储库吗?当前,我不使用数据卷来存储与在容器内运行的应用程序关联的数据。因此,一些数据驻留在容器内,我想在重新设计设置之前将其保留。 问题答案: 您无法将正在运行的Docker容器从一台主机移动到另一台主机。 您可以使用将容器中的更改提交到映像,将映像移到新主机上,然后使用启动新容器。

    • Docker允许来自多个容器的服务器通过链接和服务发现相互连接。然而,据我所知,这个服务发现是主机本地的。我想实现一个使用其他托管在不同机器上的服务的服务。 在Docker中有几种方法可以解决这个问题,比如CoreOS的< code>jumpers,本质上代理其他机器的主机本地服务,以及一大堆用于管理Docker部署的github项目,这些项目似乎都试图支持这个用例。 鉴于发展速度,很难遵循当前的

    • 我一直在计算机上从事laravel5项目,但现在我想继续另一个项目,但不知道如何:( 我使用的是wampserver,项目位于“www”文件夹中,这是我在尝试打开项目时遇到的错误:“内部服务器错误” 服务器遇到内部错误或配置错误,无法完成您的请求“

    • 对主题之间的消息的特别移动有什么建议(除了一个接一个的复制和粘贴?) 具体地说,该用例用于将截止日期主题中的消息移回原始主题进行再处理。