我刚刚完成了初学者Docker教程,想知道如何清理.
我使用以下命令部署了一个堆栈并使用了一些不同的服务:
docker stack deploy --compose-file docker-stack.yml vote
Run Code Online (Sandbox Code Playgroud)
是否可以停止与此堆栈关联的所有容器,或者我是否必须单独停止它们?
谢谢!
我正在使用docker swarm并希望部署一个服务docker-compose.我的服务使用一个自定义映像,称为myuser/myrepo:mytag我成功部署到Docker-Hub到私有存储库.
我的docker-compose看起来像这样:
version: "3.3"
services:
myservice:
image: myuser/myrepo:mytag
ports:
- "8080:8080"
Run Code Online (Sandbox Code Playgroud)
在执行之前,我成功地将图像拉出: docker pull myuser/myrepo:mytag
当我跑步时,docker stack deploy -c docker-compose.yml myapp我总是收到错误:"No such image: myuser/myrepo:mytag".
有趣的是,仅运行相同的文件:( docker-compose up即没有swarm模式)一切正常,服务启动.
我真的不明白为什么会失败?我已经尝试过清理docker system prunedocker然后重新生成我的图像,但没有成功.
试图在docker stack上部署laravel应用程序。我感到困惑或无法弄清的是,我可以在哪里运行此php artisan migrate:fresh生成mysql中所需的表。
服务和任务运行良好
docker-compose.yml
version: '3.3'
networks:
smstake:
ipam:
config:
- subnet: 10.0.10.0/24
services:
db:
image: mysql:5.7
networks:
- smstake
ports:
- "3306:3306"
volumes:
- db_data:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD: password
MYSQL_DATABASE: smstake
MYSQL_USER: root
MYSQL_PASSWORD: password
deploy:
mode: replicated
placement:
constraints:
- node.role == manager
app:
image: smstake:latest
ports:
- 8000:80
networks:
- smstake
command: docker-compose exec app php artisan migrate --seed
deploy:
mode: replicated
replicas: 1
placement:
constraints:
- node.role == manager
volumes:
db_data:
Run Code Online (Sandbox Code Playgroud)
这是用于生成映像的dockerfile
FROM alpine
ENV …Run Code Online (Sandbox Code Playgroud) 我有一个群集群,其中部署了不同的技术码头工人.(Zookeeper,Kafka,Elastic,Storm和自定义Web应用程序)
Web应用程序发生了巨大的变化,每次web docker更改时都必须更新堆栈.偶尔会有Elasticsearch图像的更新.
当我运行docker stack deploy时,它会重新启动所有甚至没有更改的现有docker服务.这妨碍了整个堆栈,整个应用程序都有停机时间.Docker堆栈没有更新选项.
有人有解决方案吗?
我刚刚阅读了Docker出色的入门指南,只是想确认我是否了解Docker的基本说法,然后再继续。这些定义在文档中有所提供,但是其中许多文档都是基于示例的,没有为以下概念提供具体形式。
因此,我的理解是:
所以我问:我对这些基本术语的理解是正确的还是在某种程度上被误导了?提前致谢!
我在设置一个有两个工人和一个经理的Docker Swarm时遇到了困难.一切正常,直到我添加第二个工人.添加第二个worker后,第一个worker的守护进程会进入某种错误状态,其中一个简单的docker version收益
另外,我使用Stack YAML启动三个Redis服务.
Stack.yaml
version: '3.4'
services:
redis-master:
image: 'bitnami/redis:5.0.2'
ports:
- '6379:6379'
environment:
- REDIS_REPLICATION_MODE=master
- REDIS_PASSWORD=f7paul12-d571-4701-9c55-64vanacecDyK
deploy:
mode: global
restart_policy:
condition: any
volumes:
- 'redis:/opt/bitnami/redis/etc/'
redis-replica:
image: 'bitnami/redis:5.0.2'
ports:
- '6379'
depends_on:
- redis-master
environment:
- REDIS_REPLICATION_MODE=slave
- REDIS_MASTER_HOST=redis-master
- REDIS_MASTER_PORT_NUMBER=6379
- REDIS_MASTER_PASSWORD=f7paul12-d571-4701-9c55-64vanacecDyK
- REDIS_PASSWORD=f7paul12-d571-4701-9c55-64vanacecDyK
deploy:
mode: replicated
replicas: 6
update_config:
parallelism: 1
delay: 20s
restart_policy:
condition: any
redis-sentinel:
image: 'bitnami/redis:5.0.2'
ports:
- '16379'
depends_on:
- redis-master
- redis-replica
entrypoint: |
bash -c 'bash …Run Code Online (Sandbox Code Playgroud) docker docker-swarm docker-machine docker-swarm-mode docker-stack
我正在使用已推送到 Artifactory 存储库的自定义映像运行 Docker 堆栈。
docker-compose.yml:
version: "3"
services:
app:
image: repo.example.com/my_image:latest
Run Code Online (Sandbox Code Playgroud)
我可以很好地提取映像,并且可以很好地部署堆栈,但如果我尝试重新部署堆栈,则会收到错误。
$ docker stack deploy --with-registry-auth -c docker-compose.yml my_stack
Creating network my_stack_default
Creating service my_stack_app
$ docker stack deploy --with-registry-auth -c docker-compose.yml my_stack
Updating service my_stack_app (id: 8po6oepjdgo8kwsb7n4ig64dt)
unable to pin image repo.example.com/my_image:latest to digest: unauthorized: The client does not have permission for manifest
Run Code Online (Sandbox Code Playgroud)
我希望 Docker 在重新部署堆栈时更新映像,就像我使用 Docker Hub 中的映像一样。
我以前见过Docker说过unable to pin image,但那是当我没有指定存储库(例如docker.io)时。我知道我已经获得了许可,repo.example.com因为我将图像推到了那里,我仍然可以从中提取图像,并且可以启动堆栈。我只是无法更新它。
此错误意味着什么client does not have permission for manifest?如何解决此问题?
混合命名卷和绑定挂载如何工作?使用以下安装程序,绑定安装中的路径是否仍将存在于绑定安装中,就像绑定安装中存在的路径一样?
/var/www/html/wp-content/uploads
使用我附加到命名卷的单独容器,似乎表明情况并非如此,因为从单独容器的角度来看,这些路径是完全空的。有某种方法可以在某种意义上起作用吗?
volumes:
- "wordpress:/var/www/html"
- "./wordpress/uploads:/var/www/html/wp-content/uploads"
- "./wordpress/plugins:/var/www/html/wp-content/plugins"
- "./wordpress/themes:/var/www/html/wp-content/themes"
我正在尝试在堆栈部署后向堆栈添加服务。但是这个新服务在与堆栈内的服务(redis)通信时遇到了麻烦。
这是我目前对堆栈和服务的理解,如果有任何不准确之处,请告诉我。
堆栈是服务之上的抽象,它提供有用的实用程序,例如 DNS,因此堆栈中的服务可以相互通信。堆栈允许我们在逻辑上分离出可能运行在同一个群上的服务组(因此不同的开发团队可以共享同一个群)。
我想首先将一个堆栈部署到一个 swarm 中(通过 compose 文件),然后定期添加容器,就像这篇关于一次性容器的文章中描述的那样。这些容器是不同的,因为它们正在执行长时间的、有状态的操作。他们需要在一些初始状态下启动,完成他们的工作,然后离开。它们是不同的,因为它们不需要复制或负载平衡。
基本上我想做的是:
像这样启动一个“堆栈”:
docker stack deploy --with-registry-auth --compose-file docker-compose.yml my-stack
然后一段时间后,当满足某些条件时,添加一个这样的容器:
docker service create -name statefulservice reponame/imagename
这通常按预期运行,除了 statefulservice 无法与 my-stack 中的 redis 通信。
我相信 statefulservice 的设计是正确的,因为当它被添加到 docker-compose.yml 时,它会按预期运行。
可能相关也可能不相关的进一步细节是,创建新服务的命令是从 swarm 中的容器发出的。这是使用 go sdk for docker 发生的,我正在按照一次性容器文章描述的方式使用它
我怀疑这无关紧要的原因:当我仅通过 docker-cli 执行此操作时(并且不使用 docker sdk for go),我仍然遇到这个问题。
docker docker-compose docker-swarm docker-swarm-mode docker-stack
我尝试使用docker stack deploy命令部署堆栈(包含一个服务)并从我的swarm应用程序运行2个实例!这是我的docker-compose文件:
version: "3"
services:
server:
image: makbn/thumbnailer-server:v1
deploy:
replicas: 2
update_config:
parallelism: 2
resources:
limits:
cpus: "0.1"
memory: 1024M
restart_policy:
condition: on-failure
ports:
- 8080:8080
networks:
- server_network
networks:
server_network:
Run Code Online (Sandbox Code Playgroud)
运行sudo docker stack deploy -c ./docker-compose.yml ts命令后,My stack成功部署到swarm,但这是我的docker stack ps ts 输出:
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS
8zmjp6wt47ki ts_server.1 makbn/thumbnailer-server:v1 fanap9-lp Ready Rejected 2 seconds ago "mkdir /var/lib/docker: permis…"
88vizpnabbi8 \_ ts_server.1 makbn/thumbnailer-server:v1 fanap9-lp Shutdown Rejected 7 seconds …Run Code Online (Sandbox Code Playgroud)