使用docker映像通过dockerfile构建其他docker映像

时间:2020-03-15 23:29:25

标签: docker flask docker-compose dockerfile datajoint

我正在尝试使用docker文件构建flask应用程序的docker映像。 flask应用程序使用特定sql版本datajoint / mysql的docker映像(使用docker-compose)。但出现以下错误:

/bin/sh: 1: docker: not found
The command '/bin/sh -c docker run -v /var/run/docker.sock:/var/run/docker.sock ...' returned a non-zero code: 127

我还将docker和docker-compose复制到了我的app /目录中。请您帮我如何安装Docker映像并从Docker文件调用Docker。我经历了以下link,但不能直接解决我的问题

Dockerfile

# this is an official Python runtime, used as the parent image
FROM python:3.6.5-slim

# set the working directory in the container to /app
WORKDIR /app



# add the current directory to the container as /app
ADD . /app
# execute everyone's favorite pip command, pip install -r
RUN docker run -v /var/run/docker.sock:/var/run/docker.sock ...
RUN ./docker-compose up -d
RUN ./docker run -p 3306:3306 -e MYSQL_ROOT_PASSWORD=simple datajoint/mysql

# add the current directory to the container as /app
ADD . /app


# execute everyone's favorite pip command, pip install -r
RUN pip install --trusted-host pypi.python.org -r requirements.txt
ADD /datajoint-python /datajoint-python
RUN pip install -e ../datajoint-python/
# unblock port 80 for the Flask app to run on
EXPOSE 1234

# execute the Flask app
CMD ["python", "run.py"]

以下是艾米应用程序目录的外观

enter image description here

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

@DavidMaze是正确的,因为docker-compose最有可能是在主机上并行运行多个Docker容器的最干净的方法。一旦习惯了它的声明,它实际上就是记录本地/原型设置的好方法。

看看heredocker-compose图像提供的参考datajoint/mysql。特别是在您要共享datajoint-python的地方共享设置中,如果您的Dockerfiledocker-compose.yml位于同一目录中,则可以像下面这样实现:

version: '2.4'
services:
  db:
    image: datajoint/mysql:5.7
    environment:
    - MYSQL_ROOT_PASSWORD=simple
    networks:
    - main
    #ports:
    #  - "3306:3306"
    #volumes:
    #  - ./data:/var/lib/mysql
  dj:
    build: .
    depends_on:
      db:
        condition: service_healthy
    environment:
    - DJ_HOST=db
    - DJ_USER=root
    - DJ_PASS=simple
    networks:
    - main
networks:
  main:

注意:我故意使用2.X docker-compose版本的唯一原因是3.X版本用于不需要此类检查的Docker Swarm部署。