leon
leon

Reputation: 11

how to extend docker mysql image

I pull the mysql/mysql-server image, then I execute the following commands below:

docker run --name myapp -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql/mysql-server
docker exec -it myapp bash

After this, I install jdk and tomcat in the newly created myapp container, then I exit the shell and run:

docker commit myapp myappwithjdk

Then I run the following, but the container exits immediately:

docker run -e MYSQL_ROOT_PASSWORD=my-secret-pw -d myappwithjdk

I don't know why it does this.

Upvotes: 1

Views: 2447

Answers (2)

msangel
msangel

Reputation: 10362

The mysql image have the way to execute init scripts (both bash and sql) once on container creation. Simply put them to /docker-entrypoint-initdb.d/ folder:

FROM mysql:latest
ENV MYSQL_ROOT_PASSWORD=root

COPY 00-extra_env_setup.sh /docker-entrypoint-initdb.d/00-extra_env_setup.sh
COPY 01-user_setup.sql /docker-entrypoint-initdb.d/01-user_setup.sql

build:

docker build -t mymysql .

and run(note port exposing):

docker run -p 3306:3306 mymysql

now you able connect to it outside(change the ip to the ip of your docker server):

mysql --host 127.0.0.1 --port 3306 --user root --password

That's it!

Upvotes: 1

ISanych
ISanych

Reputation: 22680

It could be leftovers from running mysql (like pid file). It is bad approach to use exec & commit for creating own container based on different one. Much better to create own image via Dockerfile:

FROM mysql/mysql-server
RUN <your commands here>

and then

docker build -t myappwithjdk .

Upvotes: 3

Related Questions