首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Docker迁移/部署到DigitalOcean

Docker迁移/部署到DigitalOcean
EN

Stack Overflow用户
提问于 2020-02-18 01:05:21
回答 1查看 237关注 0票数 0

警告:我对对接和云托管相当陌生,这可能是一个愚蠢的问题。

我有一个本地网络应用程序,它有3张与它相关的图像,应用本身,db和phpmyadmin图像。所有文件在本地都运行良好,如果我将所有文件传输到我的数字海洋液滴中,并将我的容器打开,它在那里也能正常工作,但这不是我想部署的方式,我不想让每个库中的每个文件都驻留在我的液滴中。

我一直在尝试在我的液滴上创建一台对接机,并将我的集装箱远程部署到它上。除了我的db映像不引用我的数据库,而且只是一个空的db之外,它似乎工作得很好。我试图以这样的方式迁移db,我在教程中看到了这一点:

代码语言:javascript
复制
docker-compose run --rm web db:create db:migrate

但是得到了下面的错误,我猜想这是因为我的dev机器运行的是Windows 10而不是Linux,但是我在任何地方都找不到Windows机器的等效命令。

代码语言:javascript
复制
Error response from daemon: OCI runtime create failed: container_linux.go:346: starting container process caused "exec: \"db:create\": executable file not found in $PATH": unknown

我知道我可能错过了一些非常愚蠢和容易的东西,但是我很难找到如何为我的db映像迁移数据。提前谢谢。

更新:根据要求,这里是我的对接者-撰写:

代码语言:javascript
复制
    version: "3.4"

services:
  phpmyadmin:
    image: phpmyadmin/phpmyadmin
    environment:
      - PMA_ARBITRARY=1
      - PMA_HOST=db
    restart: always
    ports:
      - 80:80
    volumes:
      - /sessions
    depends_on:
      - db
  db:
    image: mysql:latest
    environment: 
      MYSQL_ROOT_PASSWORD: mypass
      MYSQL_DATABASE: mydb
    ports:
      - "3306:3306"
    volumes:
      - ./data:/docker-entrypoint-initdb.d
    restart: always
  web:
    depends_on:
      - db
    build: .
    ports:
      - "8080:8080"
    restart: always
volumes:
  data:

更新2:将db文件传输到/docker-entrypoint-initdb.d (我昨天也尝试过,但无法使它工作),并创建了一个新的产品对接器-复合-prod.yml,但由于DB仍然是空的,我肯定还缺少了什么东西。下面是我的新船坞-合成-产品. new:

代码语言:javascript
复制
version: "3.4"

services:
  phpmyadmin:
    image: phpmyadmin/phpmyadmin
    environment:
      - PMA_ARBITRARY=1
      - PMA_HOST=db
    restart: always
    ports:
      - 80:80
    volumes:
      - /sessions
    depends_on:
      - db
  db:
    image: mysql:latest
    environment: 
      MYSQL_ROOT_PASSWORD: mypass
      MYSQL_DATABASE: mydb
    ports:
      - "3306:3306"
    volumes:
      - /docker-entrypoint-initdb.d
    restart: always
  web:
    depends_on:
      - db
    build: .
    ports:
      - "8080:8080"
    restart: always
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-02-18 04:27:07

你的策略很好。

实际上,您还可以进一步自动化液滴配置,例如使用面向容器的操作系统并访问您的撰写文件。但这不是个问题-)

我认为您使用Windows并不相关,而且可能没有什么不同;它可能需要一些解决方案,但仅此而已。

挑战是您需要在远程计算机上移动(或重新创建)数据库状态。可以持久化DB状态的方法有几种:容器内(不理想);使用卷挂载(很好)等。

每一个都是“可移动的”,但是如果您可以将您的撰写文件添加到您的问题中,那么我们就可以看到使用的是哪种方法。

坦白地说,我不熟悉你提到的方法,但这并不意味着它是不准确的,我只是不熟悉它。

更新:docker-entrypoint-initdb.d

参见:“初始化MySQL上的新实例”

因此,在从映像创建数据库容器时,将运行该目录中的任何文件来初始化数据库容器。

在撰写文件中,您将主机的./data目录加载到该文件中。该目录可能包含执行您预期初始化的>=1文件。

NB撰写文件末尾的节volumes: data:看起来是多余的。实际上,您使用的是一个主机挂载目录./data,而不是这个卷。

当您在液滴上运行撰写文件时,这些文件不存在,您需要复制它们。

最简单的方法是使用scp,这提供了两个备选方案:

或者保留data目录:

代码语言:javascript
复制
IP=[DROPLET-IP]
scp -r ./data root@${IP}:/data

NB远程目的地是/data而不是./data。您需要修改液滴上的撰写文件(!)也是:volumes: - /data:/docker-entrypoint-initdb.d

将文件直接移动到液滴的/docker-entrypoint-initdb.d

代码语言:javascript
复制
scp -r ./data root@${IP}/docker-entrypointy-initdb.d

NB现在没有必要进行卷映射。您可以删除:`volumes: - ./data:/docker-entrypoint-initdb.d`

最新资料: repro (works)

我使用了一个经过调整的docker-compose.yaml,但本质上是一样的:

代码语言:javascript
复制
version: "3.4"

services:
  db:
    image: mysql:latest
    environment:
      MYSQL_ROOT_PASSWORD: mypass
      MYSQL_DATABASE: mydb
    ports:
      - "3306:3306"
    volumes:
      - ${PWD}/docker-entrypoint-initdb.d:/docker-entrypoint-initdb.d
    restart: always

  adminer:
    image: adminer
    restart: always
    ports:
      - 8080:8080

然后mkdir ${PWD}/docker-entrypoint-initdb.d并在其中创建了一个名为freddie.sql的文件

代码语言:javascript
复制
create database if not exists frederik;

use frederik;

create table treats (
 TreatID INT NOT NULL AUTO_INCREMENT,
 TreatName VARCHAR(255) NOT NULL,
 PRIMARY KEY (TreatId));

insert into treats (TreatName)
values
 ("Dried Salmon"),
 ("Meatballs");

然后是docker-compose rm --force && docker-compose up

我能够浏览管理员UI (:8080)、登录(root\mypass)和浏览数据库frederik

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60272402

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档