lmiguelvargasf
lmiguelvargasf

Reputation: 69755

How to run a command after creating a container using yml file

I have very limited experience with Docker, and having an issue, so I have the following yml file:

version: '2'
services:
    python:
        restart: always
        build: .path/to/docker/file
        ports:
            - "5000:5000"
            - "8888:8888"
        links:
            - db
        depends_on:
            - db
        volumes:
            - ./path/to/file/:/app:z
        entrypoint:
            - python
            - -u
            - /app/run.py

    db:
        image: mysql:latest
        environment:
            MYSQL_ROOT_PASSWORD: xxyyzz
            MYSQL_DATABASE: database_name
            MYSQL_USER: user_name
            MYSQL_PASSWORD: xxyyzz
        volumes:
            - ./Dump.sql:/db/Dump.sql:z
            - ./Dump_Test.sql:/db/Dump_Test.sql:z
            - ./big_fc.sql:/db/big_fc.sql:z
        ports:
            - "3306:3306"

I need to run the following commands for the second container db:

echo '[mysqld]' >> /etc/mysql/conf.d/mysql.cnf 
echo 'sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION' >> /etc/mysql/conf.d/mysql.cnf 

The point is that I want to run these commands just once as when you provide a docker file for the first container python. How can I achieve this?

Upvotes: 0

Views: 395

Answers (1)

Kevin Kopf
Kevin Kopf

Reputation: 14210

My first advice is to build your own image with your own Dockerfile. In this case you will do it once and all the containers will have the same config.

Dockerfile should look like this:

FROM mysql:latest

COPY create_config.sh /tmp/create_config.sh
CMD ["/tmp/create_config.sh"]

Create create_config.sh in the same dir as your Dockerfile and put your required commands there:

#!/bin/bash

echo '[mysqld]' >> /etc/mysql/conf.d/mysql.cnf 
echo 'sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION' >> /etc/mysql/conf.d/mysql.cnf

Now you can use it in your docker-compose.yml:

db:
    context: .
    dockerfile: Dockerfile

Keep in mind, that context is the path to the dir where your new Dockerfile is.

Upvotes: 1

Related Questions