基于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 !!!!
答案 0 :(得分:1)
您的问题与docker-compose
有关,但您也会询问有关run
,build
,attach
的问题,这让我觉得我应该尝试为您提供一些基本信息(几个月前我没那么容易应对: - )
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
继续运行。
要了解有关上述主题的更多信息(我只是表面上看),我建议你也阅读:
Is it possible to start a shell session in a running container (without ssh)
~jpetazzo: If you run SSHD in your Docker containers, you're doing it wrong!
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/