Japanese translation of Docker Hub mysql Quick Reference.
MySQL is the most popular open source database in the world. With proven performance, reliability, and ease of use, MySQL has become the leading database choice for web-based applications covering the full range of personal projects and websites, e-commerce and information services. .. It is also used in web properties such as Facebook, Twitter, YouTube, and Yahoo !. For more information on MySQL Server and other MySQL products and related downloads, please visit www.mysql.com.
Starting a MySQL instance is easy.
$ docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag
Some-mysql is the name you assign to the container,
my-secret-pw is the password you set for the MySQL root user, and
tag is the tag that specifies the required MySQL version.
See the list above for related tags.
Connect to MySQL from the MySQL command line client.
The following command launches another mysql container instance and runs the mysql command line client against the original mysql container so that you can execute SQL statements against the database instance.
$ docker run -it --network some-network --rm mysql mysql -hsome-mysql -uexample-user -p
Some-mysql is the name of the original mysql container (
some-network attached to the Docker network).
This image can also be used as a client for non-Docker instances or remote instances.
$ docker run -it --rm mysql mysql -hsome.mysql.host -usome-mysql-user -p
See the MySQL documentation for more information on the MySQL command line client.
stack.yml description example
# Use root/example as user/password credentials version: '3.1' services: db: image: mysql command: --default-authentication-plugin=mysql_native_password restart: always environment: MYSQL_ROOT_PASSWORD: example adminer: image: adminer restart: always ports: - 8080:8080
docker stack deploy -c stack.yml mysql (or
docker-compose -f stack.yml up) and wait for it to be fully initialized http: // swarm-ip Go to: 8080, http: // localhost: 8080, or http: // host-ip: 8080.
You can use the
docker exec command to execute commands inside a Docker container.
The following command line provides a bash shell inside a mysql container.
$ docker exec -it some-mysql bash
Logs are available from Docker's container logs.
$ docker logs some-mysql
The default MySQL settings are in
This may include additional directories such as
Check the relevant files and directories in the mysql image for more information.
/ my / custom / config-file.cnf is the path and name of the custom configuration file, you can start the mysql container as follows (with this command, only the directory path of the custom configuration file Please note that it is used).
$ docker run --name some-mysql -v /my/custom:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag
This allows the MySQL instance to use a combination of the startup settings of
/ etc / mysql / my.cnf and
/etc/mysql/conf.d/config-file.cnf, the latter setting. Starts a new container, some-mysql, which takes precedence.
Many configuration options can be passed to mysqld as flags. This gives you the flexibility to customize the container without the need for a
For example, if you want to change the default encoding and collation of all tables to use UTF-8 (utf8mb4), just run the following command:
$ docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
If you want to see the complete list of available options, do the following:
$ docker run -it --rm mysql:tag --verbose --help
You can adjust the configuration of your MySQL instance by passing one or more environment variables on the
docker run command line when you start the mysql image.
Note that none of the following variables have any effect if you start the container in a data directory that already contains a database.
The existing database is not changed at all times when the container is started.
For documentation of environment variables that MySQL itself respects, especially variables like
MYSQL_HOST that are known to cause problems when used with this image, https://dev.mysql.com/ See also doc / refman / 5.7 / en / environment-variables.html.
This variable is required and specifies the password that will be set for the MySQL root superuser account.
In the above example, it is set to
This variable is optional.
You can specify the name of the database that will be created when the image boots.
If a user / password is specified (see below), that user will be granted superuser access to this database (corresponding to
These variables are optional. Used in combination to create a new user and set a password for that user. This user will be granted superuser privileges (see above) for the database specified by the MYSQL_DATABASE variable. Both variables are required to create a user. Note that you do not need to use this mechanism to create the root superuser. The root superuser is created by default with the password specified in the MYSQL_ROOT_PASSWORD variable.
This is an optional variable.
Setting it to a non-empty value, such as
yes, allows the container to be started as the root user without a password.
Note: Setting this variable to
yes is not recommended unless you really understand what you are doing.
This completely protects your MySQL instance and allows anyone to get full superuser access.
This is an optional variable.
Set to a non-empty value such as
yes to generate a random initial password for the root user (using
The generated root password is printed to stdout (
GENERATED ROOT PASSWORD: ......).
When the initialization is complete, it sets the root user (not the user specified by [MYSQL_USER](# mysql_user-mysql_password)) as expired and forces the password change on the first login. This setting becomes active if there is a non-empty value.
Note: This feature is only supported in MySQL 5.6 and later. If you use this option in MySQL 5.5, an error will be thrown during initialization.
By default, the entry point script automatically loads the time zone data needed for the
CONVERT_TZ () function.
If not needed, specifying a non-empty value will disable time zone loading.
Instead of passing sensitive information through environment variables, add
_FILE to the above environment variables so that the initialization script loads the values of those variables from a file that resides inside the container. I can.
In particular this can be used to load passwords from Docker secrets stored in the
/ run / secrets / <secret_name> file.
$ docker run --name some-mysql -e MYSQL_ROOT_PASSWORD_FILE=/run/secrets/mysql-root -d mysql:tag
Currently this is only supported for the following variables:
When the container is started for the first time, a new database with the specified name is created and initialized with the specified configuration variables.
It also runs files with the extensions
.sql.gz located in
The files are executed in alphabetical order.
You can easily populate the mysql service by mounting the SQL dump in that directory and providing a custom image with the data provided.
By default, SQL files are imported into the database specified by the MYSQL_DATABASE variable.
Important Note: There are several ways to store the data used by applications running in Docker containers. Users of the mysql image are encouraged to become familiar with the available options:
Let Docker manage the storage of database data by writing database files to disks on the host system using its own internal volume management. This is the default and is easy and fairly transparent to the user. The downside is that it can be difficult to find files outside the tools and applications that run directly on the host system, that is, outside the container. Create a data directory on the host system (outside the container) and mount it in a directory visible from inside the container. This puts the database files in a known location on the host system, making it easy for tools and applications on the host system to access the files. The downside is that the user needs to make sure that the directory exists and that the host system's directory permissions and other security mechanisms are set correctly.
The Docker documentation is a good starting point for understanding different storage options and variations, and there are several blog and forum posts that discuss and advise in this area. Here is a brief description of the basic steps for the latter option above.
Create a data directory such as
/ my / own / datadir on the appropriate volume on the host system.
Start the mysql container as follows:
$ docker run --name some-mysql -v /my/own/datadir:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag
-v / my / own / datadir: / var / lib / mysql part of the command will take the
/ my / own / datadir directory from the underlying host system to the
/ var in the container. Mount as / lib / mysql.
MySQL writes data files by default.
There will be no connection until MySQL initialization is complete.
If there is no database initialized when the container starts, a default database will be created.
This is expected behavior, but it means that it will not accept incoming connections until the initialization is complete.
This can cause problems when using automated tools such as docker-compose, which launches multiple containers at the same time.
If the application trying to connect to MySQL does not handle MySQL downtime, or is waiting for MySQL to start successfully, you need to set up a connection and retry loop before the service starts. ..
See WordPress or Bonita for an example of such an implementation in the official image.
If you want to start the mysql container instance in a data directory that already contains a database (specifically, a
mysql subdirectory), omit the
$ MYSQL_ROOT_PASSWORD variable from the execution command line.
Even if the above variable is specified, it will be ignored and the existing database will not be changed.
You need to run mysqld if you know that the directory permissions are already set properly (for example, if you are running against an existing database as described above), or if you want to run mysqld with a specific UID / GID. If so, you can use
--user to call this image.
Set to any value (other than root / 0) to achieve the desired connection / configuration.
$ mkdir data $ ls -lnd data drwxr-xr-x 2 1000 1000 4096 Aug 27 15:54 data $ docker run -v "$PWD/data":/var/lib/mysql --user 1000:1000 --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag
Most of the usual tools work, but their usage can be a bit complicated to give you access to the mysqld server.
An easy way to check this is to use
docker exec and run the tool from the same container as follows:
$ docker exec some-mysql sh -c 'exec mysqldump --all-databases -uroot -p"$MYSQL_ROOT_PASSWORD"' > /some/path/on/your/host/all-databases.sql
For data recovery.
You can use the
docker exec command with the
-i flag as follows:
$ docker exec -i some-mysql sh -c 'exec mysql -uroot -p"$MYSQL_ROOT_PASSWORD"' < /some/path/on/your/host/all-databases.sql
View license information for the software contained in this image.
Like all Docker images, these are direct or indirect dependencies of other software that may be under other licenses (such as Bash in the base distribution) included in the software. Relationship) may also be included.
Some additional license information that could be auto-discovered may be in the
mysql / directory of the repo-info repository.
With respect to the use of a pre-built image, it is the image user's responsibility to ensure that the use of this image complies with the relevant licenses of all software contained therein.