In this Dockerfile, you've set the environment variable for the MySQL
database name. You can also use the `COPY` instruction to add custom
configuration files or scripts into the container. In this
example, files from your host's `./scripts/` directory are copied into the
container's `/docker-entrypoint-initdb.d/` directory. In this directory,
`.sh`, `.sql`, and `.sql.gz` scripts are executed when the container is
started for the first time. For more details about Dockerfiles, see the
[Dockerfile reference](/reference/dockerfile/).
3. Create a script file to initialize a table in the database. In the
directory where your `Dockerfile` is located, create a subdirectory named
`scripts`, and then create a file named `create_table.sql` with the
following content.
```text
CREATE TABLE IF NOT EXISTS mydb.myothertable (
column_name VARCHAR(255)
);
INSERT INTO mydb.myothertable (column_name) VALUES ('other_value');
```
You should now have the following directory structure.
```text
├── your-project-directory/
│ ├── scripts/
│ │ └── create_table.sql
│ └── Dockerfile
```
2. Build your image.
1. In a terminal, change directory to the directory where your `Dockerfile`
is located.
2. Run the following command to build the image.
```console
$ docker build -t my-custom-mysql .
```
In this command, `-t my-custom-mysql` tags (names) your new image as
`my-custom-mysql`. The period (.) at the end of the command specifies the
current directory as the context for the build, where Docker looks for the
Dockerfile and any other files needed for the build.
3. Run your image as you did in [Run a local containerized
database](#run-a-local-containerized-database). This time, specify your
image's name instead of `mysql:latest`. Also, you no longer need to specify
the `MYSQL_DATABASE` environment variable as it's now defined by your
Dockerfile.
```console
$ docker run --name my-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d my-custom-mysql
```
4. Verify that your container is running with the following command.
```console
$ docker ps
```
You should see output like the following.
```console
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f74dcfdb0e59 my-custom-mysql "docker-entrypoint.s…" 2 hours ago Up 51 minutes 3306/tcp, 33060/tcp my-mysql
```
5. Verify that your initialization script was ran. Run the following command in
a terminal to show the contents of the `myothertable` table.
```console
$ docker exec my-mysql mysql -u root -pmy-secret-pw -e "SELECT * FROM mydb.myothertable;"
```
You should see output like the following.
```console
column_name
other_value
```
Any container ran using your `my-custom-mysql` image will have the table
initialized when first started.
## Use Docker Compose to run a database
Docker Compose is a tool for defining and running multi-container Docker
applications. With a single command, you can configure all your application's
services (like databases, web apps, etc.) and manage them. In this example,
you'll create a Compose file and use it to run a MySQL database container and a phpMyAdmin container.
To run your containers with Docker Compose: