mirror of
https://github.com/minio/minio.git
synced 2025-01-13 16:03:21 -05:00
55dd017e62
There is no reliable way to handle fallbacks for MinIO deployments, due to various command line options and multiple locations which require access inside container. Parsing command line options is tricky to figure out which is the backend disk etc, we did try to fix this in implementations of check-user.go but it wasn't complete and introduced more bugs. This PR simplifies the entire approach to rather than running Docker container as non-root by default always, it allows users to opt-in. Such that they are aware that that is what they are planning to do. In-fact there are other ways docker containers can be run as regular users, without modifying our internal behavior and adding more complexities.
155 lines
6.5 KiB
Markdown
155 lines
6.5 KiB
Markdown
# MinIO Docker Quickstart Guide [![Slack](https://slack.min.io/slack?type=svg)](https://slack.min.io) [![Go Report Card](https://goreportcard.com/badge/minio/minio)](https://goreportcard.com/report/minio/minio) [![Docker Pulls](https://img.shields.io/docker/pulls/minio/minio.svg?maxAge=604800)](https://hub.docker.com/r/minio/minio/)
|
|
|
|
## Prerequisites
|
|
Docker installed on your machine. Download the relevant installer from [here](https://www.docker.com/community-edition#/download).
|
|
|
|
## Run Standalone MinIO on Docker.
|
|
MinIO needs a persistent volume to store configuration and application data. However, for testing purposes, you can launch MinIO by simply passing a directory (`/data` in the example below). This directory gets created in the container filesystem at the time of container start. But all the data is lost after container exits.
|
|
|
|
```sh
|
|
docker run -p 9000:9000 minio/minio server /data
|
|
```
|
|
|
|
To create a MinIO container with persistent storage, you need to map local persistent directories from the host OS to virtual config `~/.minio` and export `/data` directories. To do this, run the below commands
|
|
|
|
#### GNU/Linux and macOS
|
|
```sh
|
|
docker run -p 9000:9000 --name minio1 \
|
|
-v /mnt/data:/data \
|
|
-v /mnt/config:/root/.minio \
|
|
minio/minio server /data
|
|
```
|
|
|
|
#### Windows
|
|
```sh
|
|
docker run -p 9000:9000 --name minio1 \
|
|
-v D:\data:/data \
|
|
-v D:\minio\config:/root/.minio \
|
|
minio/minio server /data
|
|
```
|
|
|
|
## Run Distributed MinIO on Docker
|
|
Distributed MinIO can be deployed via [Docker Compose](https://docs.min.io/docs/deploy-minio-on-docker-compose) or [Swarm mode](https://docs.min.io/docs/deploy-minio-on-docker-swarm). The major difference between these two being, Docker Compose creates a single host, multi-container deployment, while Swarm mode creates a multi-host, multi-container deployment.
|
|
|
|
This means Docker Compose lets you quickly get started with Distributed MinIO on your computer - ideal for development, testing, staging environments. While deploying Distributed MinIO on Swarm offers a more robust, production level deployment.
|
|
|
|
## MinIO Docker Tips
|
|
|
|
### MinIO Custom Access and Secret Keys
|
|
To override MinIO's auto-generated keys, you may pass secret and access keys explicitly as environment variables. MinIO server also allows regular strings as access and secret keys.
|
|
|
|
#### GNU/Linux and macOS
|
|
```sh
|
|
docker run -p 9000:9000 --name minio1 \
|
|
-e "MINIO_ACCESS_KEY=AKIAIOSFODNN7EXAMPLE" \
|
|
-e "MINIO_SECRET_KEY=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY" \
|
|
-v /mnt/data:/data \
|
|
-v /mnt/config:/root/.minio \
|
|
minio/minio server /data
|
|
```
|
|
|
|
#### Windows
|
|
```powershell
|
|
docker run -p 9000:9000 --name minio1 \
|
|
-e "MINIO_ACCESS_KEY=AKIAIOSFODNN7EXAMPLE" \
|
|
-e "MINIO_SECRET_KEY=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY" \
|
|
-v D:\data:/data \
|
|
-v D:\minio\config:/root/.minio \
|
|
minio/minio server /data
|
|
```
|
|
|
|
### Run MinIO Docker as regular user
|
|
MinIO server doesn't run as a regular user by default in docker containers. To run MinIO container as regular user use environment variables `MINIO_USERNAME` and `MINIO_GROUPNAME`.
|
|
|
|
> NOTE: If you are upgrading from existing deployments, you need to make sure this user has write access to previous persistent volumes. MinIO will not migrate the content automatically.
|
|
|
|
#### GNU/Linux and macOS
|
|
```sh
|
|
docker run -p 9000:9000 --name minio1 \
|
|
-e "MINIO_ACCESS_KEY=AKIAIOSFODNN7EXAMPLE" \
|
|
-e "MINIO_SECRET_KEY=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY" \
|
|
-e "MINIO_USERNAME=minio-user" \
|
|
-e "MINIO_GROUPNAME=minio-user" \
|
|
-v /mnt/data:/data \
|
|
minio/minio server /data
|
|
```
|
|
|
|
#### Windows
|
|
```powershell
|
|
docker run -p 9000:9000 --name minio1 \
|
|
-e "MINIO_ACCESS_KEY=AKIAIOSFODNN7EXAMPLE" \
|
|
-e "MINIO_SECRET_KEY=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY" \
|
|
-e "MINIO_USERNAME=minio-user" \
|
|
-e "MINIO_GROUPNAME=minio-user" \
|
|
-v D:\data:/data \
|
|
minio/minio server /data
|
|
```
|
|
|
|
### MinIO Custom Access and Secret Keys using Docker secrets
|
|
To override MinIO's auto-generated keys, you may pass secret and access keys explicitly by creating access and secret keys as [Docker secrets](https://docs.docker.com/engine/swarm/secrets/). MinIO server also allows regular strings as access and secret keys.
|
|
|
|
```
|
|
echo "AKIAIOSFODNN7EXAMPLE" | docker secret create access_key -
|
|
echo "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY" | docker secret create secret_key -
|
|
```
|
|
|
|
Create a MinIO service using `docker service` to read from Docker secrets.
|
|
```
|
|
docker service create --name="minio-service" --secret="access_key" --secret="secret_key" minio/minio server /data
|
|
```
|
|
|
|
Read more about `docker service` [here](https://docs.docker.com/engine/swarm/how-swarm-mode-works/services/)
|
|
|
|
#### MinIO Custom Access and Secret Key files
|
|
To use other secret names follow the instructions above and replace `access_key` and `secret_key` with your custom names (e.g. `my_secret_key`,`my_custom_key`). Run your service with
|
|
```
|
|
docker service create --name="minio-service" \
|
|
--secret="my_access_key" \
|
|
--secret="my_secret_key" \
|
|
--env="MINIO_ACCESS_KEY_FILE=my_access_key" \
|
|
--env="MINIO_SECRET_KEY_FILE=my_secret_key" \
|
|
minio/minio server /data
|
|
```
|
|
|
|
### Retrieving Container ID
|
|
To use Docker commands on a specific container, you need to know the `Container ID` for that container. To get the `Container ID`, run
|
|
|
|
```sh
|
|
docker ps -a
|
|
```
|
|
|
|
`-a` flag makes sure you get all the containers (Created, Running, Exited). Then identify the `Container ID` from the output.
|
|
|
|
### Starting and Stopping Containers
|
|
To start a stopped container, you can use the [`docker start`](https://docs.docker.com/engine/reference/commandline/start/) command.
|
|
|
|
```sh
|
|
docker start <container_id>
|
|
```
|
|
|
|
To stop a running container, you can use the [`docker stop`](https://docs.docker.com/engine/reference/commandline/stop/) command.
|
|
```sh
|
|
docker stop <container_id>
|
|
```
|
|
|
|
### MinIO container logs
|
|
To access MinIO logs, you can use the [`docker logs`](https://docs.docker.com/engine/reference/commandline/logs/) command.
|
|
|
|
```sh
|
|
docker logs <container_id>
|
|
```
|
|
|
|
### Monitor MinIO Docker Container
|
|
To monitor the resources used by MinIO container, you can use the [`docker stats`](https://docs.docker.com/engine/reference/commandline/stats/) command.
|
|
|
|
```sh
|
|
docker stats <container_id>
|
|
```
|
|
|
|
## Explore Further
|
|
|
|
* [Deploy MinIO on Docker Compose](https://docs.min.io/docs/deploy-minio-on-docker-compose)
|
|
* [Deploy MinIO on Docker Swarm](https://docs.min.io/docs/deploy-minio-on-docker-swarm)
|
|
* [Distributed MinIO Quickstart Guide](https://docs.min.io/docs/distributed-minio-quickstart-guide)
|
|
* [MinIO Erasure Code QuickStart Guide](https://docs.min.io/docs/minio-erasure-code-quickstart-guide)
|