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

基于移动docker-composose 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,所以不确定典型的工作stream程(构build,运行,附加等)

所以即使我有docker-compose yml文件,但由于我有从另一个主机的构build图像,我可以运行docker命令来运行和执行图像? 确保本地图像被引用,而不是从dockerregistry。

感谢@ 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但是你也会问一些关于runbuildattach ,这让我想我应该尝试用一些基本的信息来帮助你(几个月前我不太容易处理: – )

images

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

从docker中心拉图片,使用docker pull ... build立你自己的图像开始阅读关于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 

要创build上面的图像到您的主机,您使用docker build ...这是一个非常好的方式来build立你的图像,因为你知道的步骤被创build。

如果这个过程需要很长时间,那么稍后可以考虑将图像存储在像http://hub.docker.com这样的docker registry ,以便您可以轻松地从任何其他机器上获取该图像。 我必须这样做,在Raspberry Pi上处理ffmpeg (编译花费了几个小时,我需要pull已经创build的映像,而不是在每个树莓中重新build它)。

containers

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

考虑一个容器作为一个过程 。 每个容器都有一个CMD ,启动时执行它。 如果这个命令完成,或者失败,容器停止,退出。 一个很好的例子就是nginx :去检查官方的Dockerfile ,命令是:

 CMD ["nginx"] 

如果你想看到来自CMD的日志,你可以将docker attach ...到你的容器中。 您也可以docker stop ...正在运行的集装箱或docker start ...已经停止的一个。 你可以“进入”键入命令:

 docker exec -it [container_name] /bin/bash 

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


要阅读更多关于上述主题(我只是抓了表面),我build议你也读:

  • 是否有可能在正在运行的容器中启动一个shell会话(不使用ssh)

  • Docker – input新的TTY运行容器

  • 你如何附加和脱离Docker的过程?

  • 为什么docker集装箱立即退出

  • 〜jpetazzo:如果你在你的Docker容器中运行SSHD,你做错了!


docker-compose

当你感觉舒服的时候, docker-compose将会是你的方便的工具,它可以帮助你用单行命令操纵许多容器。 例如:

 docker compose up 

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

除非它们已经在运行,否则这个命令也会启动任何链接的服务。

docker-compose up命令聚合每个容器的输出(实质上运行docker-compose logs -f )。 当命令退出时,所有容器都停止。 运行docker-compose up -d在后台启动容器并让它们运行

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

 docker-compose up -d 

然后看看你的容器是否运行,你将不得不运行:

 docker ps 

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

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

 docker-compose exec irc 

更多关于docker的信息,请点击这里: https : //docs.docker.com/compose/reference/up/