docker - 在主机之间移动 docker-compose 图像

标签 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 !!!!

最佳答案

您的问题是关于 docker-compose但你也问了关于run的事情, build , attach这让我觉得我应该尝试帮助您了解一些基本信息(几个月前我还不太容易应付 :-)

images

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

要从 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 registry 中喜欢http://hub.docker.com ,这样你就可以pull它很容易从任何其他机器。在处理 ffmpeg 时,我必须这样做在 Raspberry Pi 上(编译需要几个小时,我需要 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

Builds, (re)creates, starts, and attaches to containers for a service.

Unless they are already running, this command also starts any linked services.

The docker-compose up command aggregates the output of each container (essentially running docker-compose logs -f). When the command exits, all containers are stopped. Running docker-compose up -d starts the containers in the background and leaves them running

关于docker - 在主机之间移动 docker-compose 图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47207123/

相关文章:

bash - 简单的 docker 部署策略

docker - 如何在travis-ci.com托管的Travis中运行Docker

laravel - Dockerize Laravel流明

docker - Kubeadm init 警告 - 没有可用的验证器

docker - 如何使用 Dockerfile 在启动 docker 容器上运行 jboss-cli

docker - 是否可以使用单个 docker compose 文件在多个主机中创建容器?

python - 在docker和psycopg2中使用Python中的unittest

java - 无法从本地 IDE 连接到 docker hbase

ruby-on-rails - Could not locate Gemfile 错误由 docker compose up

docker - 禁止docker使用特定网络