2

Я создал Dockerfile для создания собственного образа MySQL. Используя его, я могу запустить MySQL на своем ноутбуке Ubuntu 16.04. Но не на моей капле DigitalOcean Ubuntu 16.04. На этой удаленной системе я не могу запустить MySQL.

В целях отладки само изображение не запускает MySQL, а только поддерживает работу контейнера:

FROM ubuntu:16.04

RUN apt-get update \
  && apt-get install -y libncurses-dev \
  && apt-get install -y build-essential \
  && apt-get install -y cmake

COPY mysql-5.6.30.tar.gz /usr/bin/
WORKDIR /usr/bin/
RUN gzip -d mysql-5.6.30.tar.gz \
  && tar -xvf mysql-5.6.30.tar \
  && ln -s mysql-5.6.30 mysql

WORKDIR /usr/bin/mysql/
RUN mkdir install && mkdir install/data && mkdir install/var && mkdir install/etc && mkdir install/tmp

RUN cd /usr/bin/mysql/ \
  && cmake \
  -DCMAKE_INSTALL_PREFIX=/usr/bin/mysql/install \
  -DWITH_INNOBASE_STORAGE_ENGINE=1 \
  -DMYSQL_DATADIR=/usr/bin/mysql/install/data \
  -DDOWNLOAD_BOOST=1 \
  -DWITH_BOOST=/usr/bin/mysql/install/boost \
  -DMYSQL_UNIX_ADDR=/usr/bin/mysql/install/tmp/mysql.sock \
  && make \
  && make install \
  && make clean

COPY my.cnf install/my.cnf
RUN ln -s /usr/bin/mysql/install/my.cnf ~/.my.cnf

ENTRYPOINT ["/usr/bin/tail", "-f", "/dev/null"]

В удаленной системе я набираю команды:

cd ~/dev/docker/projects/learnintouch
sudo rm -fr mysql/data/
sudo docker run -d -p 3307:3306 -v /home/stephane/dev/docker/projects/learnintouch/mysql/data:/usr/bin/mysql/install/data --name mysql thalasoft.com:5000/mysql:5.6.30
sudo docker exec -it mysql bash

Затем в работающем контейнере я набираю команду:

root@4d0028607aeb:/usr/bin/mysql-5.6.30# /usr/bin/mysql/install/scripts/mysql_install_db \
  --no-defaults \
  --explicit_defaults_for_timestamp \
  --basedir=/usr/bin/mysql/install \
  --datadir=/usr/bin/mysql/install/data \
  --tmpdir=/usr/bin/mysql/install/tmp \
  --lc-messages-dir=/usr/bin/mysql/install/share
Installing MySQL system tables...2017-10-25 10:22:26 0 [Note] /usr/bin/mysql/install/bin/mysqld (mysqld 5.6.30) starting as process 28 ...
2017-10-25 10:22:26 28 [Note] InnoDB: Using atomics to ref count buffer pool pages
2017-10-25 10:22:26 28 [Note] InnoDB: The InnoDB memory heap is disabled
2017-10-25 10:22:26 28 [Note] InnoDB: Mutexes and rw_locks use GCC atomic builtins
2017-10-25 10:22:26 28 [Note] InnoDB: Memory barrier is not used
2017-10-25 10:22:26 28 [Note] InnoDB: Compressed tables use zlib 1.2.3
2017-10-25 10:22:26 28 [Note] InnoDB: Using CPU crc32 instructions
2017-10-25 10:22:26 28 [Note] InnoDB: Initializing buffer pool, size = 128.0M
2017-10-25 10:22:26 28 [Note] InnoDB: Completed initialization of buffer pool
2017-10-25 10:22:26 28 [Note] InnoDB: The first specified data file ./ibdata1 did not exist: a new database to be created!
2017-10-25 10:22:26 28 [Note] InnoDB: Setting file ./ibdata1 size to 12 MB
2017-10-25 10:22:26 28 [Note] InnoDB: Database physically writes the file full: wait...
2017-10-25 10:22:26 28 [Note] InnoDB: Setting log file ./ib_logfile101 size to 48 MB
2017-10-25 10:22:26 28 [Note] InnoDB: Setting log file ./ib_logfile1 size to 48 MB
2017-10-25 10:22:26 28 [Note] InnoDB: Renaming log file ./ib_logfile101 to ./ib_logfile0
2017-10-25 10:22:26 28 [Warning] InnoDB: New log files created, LSN=45781
2017-10-25 10:22:26 28 [Note] InnoDB: Doublewrite buffer not found: creating new
2017-10-25 10:22:26 28 [Note] InnoDB: Doublewrite buffer created
2017-10-25 10:22:26 28 [Note] InnoDB: 128 rollback segment(s) are active.
2017-10-25 10:22:26 28 [Warning] InnoDB: Creating foreign key constraint system tables.
2017-10-25 10:22:26 28 [Note] InnoDB: Foreign key constraint system tables created
2017-10-25 10:22:26 28 [Note] InnoDB: Creating tablespace and datafile system tables.
2017-10-25 10:22:26 28 [Note] InnoDB: Tablespace and datafile system tables created.
2017-10-25 10:22:26 28 [Note] InnoDB: Waiting for purge to start
2017-10-25 10:22:26 28 [Note] InnoDB: 5.6.30 started; log sequence number 0
2017-10-25 10:22:26 28 [Note] Binlog end
2017-10-25 10:22:26 28 [Note] InnoDB: FTS optimize thread exiting.
2017-10-25 10:22:26 28 [Note] InnoDB: Starting shutdown...
2017-10-25 10:22:28 28 [Note] InnoDB: Shutdown completed; log sequence number 1625977
OK

Filling help tables...2017-10-25 10:22:28 0 [Note] /usr/bin/mysql/install/bin/mysqld (mysqld 5.6.30) starting as process 51 ...
2017-10-25 10:22:28 51 [Note] InnoDB: Using atomics to ref count buffer pool pages
2017-10-25 10:22:28 51 [Note] InnoDB: The InnoDB memory heap is disabled
2017-10-25 10:22:28 51 [Note] InnoDB: Mutexes and rw_locks use GCC atomic builtins
2017-10-25 10:22:28 51 [Note] InnoDB: Memory barrier is not used
2017-10-25 10:22:28 51 [Note] InnoDB: Compressed tables use zlib 1.2.3
2017-10-25 10:22:28 51 [Note] InnoDB: Using CPU crc32 instructions
2017-10-25 10:22:28 51 [Note] InnoDB: Initializing buffer pool, size = 128.0M
2017-10-25 10:22:28 51 [Note] InnoDB: Completed initialization of buffer pool
2017-10-25 10:22:28 51 [Note] InnoDB: Highest supported file format is Barracuda.
2017-10-25 10:22:28 51 [Note] InnoDB: 128 rollback segment(s) are active.
2017-10-25 10:22:28 51 [Note] InnoDB: Waiting for purge to start
2017-10-25 10:22:28 51 [Note] InnoDB: 5.6.30 started; log sequence number 1625977
2017-10-25 10:22:28 51 [Note] Binlog end
2017-10-25 10:22:28 51 [Note] InnoDB: FTS optimize thread exiting.
2017-10-25 10:22:28 51 [Note] InnoDB: Starting shutdown...
2017-10-25 10:22:29 51 [Note] InnoDB: Shutdown completed; log sequence number 1625987
OK

To start mysqld at boot time you have to copy
support-files/mysql.server to the right place for your system

PLEASE REMEMBER TO SET A PASSWORD FOR THE MySQL root USER !
To do so, start the server, then issue the following commands:

  /usr/bin/mysql/install/bin/mysqladmin -u root password 'new-password'
  /usr/bin/mysql/install/bin/mysqladmin -u root -h 4d0028607aeb password 'new-password'

Alternatively you can run:

  /usr/bin/mysql/install/bin/mysql_secure_installation

which will also give you the option of removing the test
databases and anonymous user created by default.  This is
strongly recommended for production servers.

See the manual for more instructions.

You can start the MySQL daemon with:

  cd . ; /usr/bin/mysql/install/bin/mysqld_safe &

You can test the MySQL daemon with mysql-test-run.pl

  cd mysql-test ; perl mysql-test-run.pl

Please report any problems at http://bugs.mysql.com/

The latest information about MySQL is available on the web at

  http://www.mysql.com

Support MySQL by buying support/licenses at http://shop.mysql.com

WARNING: Found existing config file /usr/bin/mysql/install/my.cnf on the system.
Because this file might be in use, it was not replaced,
but was used in bootstrap (unless you used --defaults-file)
and when you later start the server.
The new default config file was created as /usr/bin/mysql/install/my-new.cnf,
please compare it with your file and take the changes you need.

При запуске MySQL отображается следующий вывод:

root@4d0028607aeb:/usr/bin/mysql-5.6.30# /usr/bin/mysql/install/bin/mysqld_safe --defaults-file=/usr/bin/mysql/install/my.cnf
171025 10:37:32 mysqld_safe Logging to '/usr/bin/mysql/install/mysql.error.log'.
171025 10:37:32 mysqld_safe Starting mysqld daemon with databases from /usr/bin/mysql/install/data
171025 10:37:32 mysqld_safe mysqld from pid file /usr/bin/mysql/install/data/4d0028607aeb.pid ended

root@4d0028607aeb:/usr/bin/mysql-5.6.30# /usr/bin/mysql/install/bin/mysqld_safe  
171025 10:23:33 mysqld_safe Logging to '/usr/bin/mysql/install/mysql.error.log'.
171025 10:23:33 mysqld_safe Starting mysqld daemon with databases from /usr/bin/mysql/install/data
171025 10:23:34 mysqld_safe mysqld from pid file /usr/bin/mysql/install/data/4d0028607aeb.pid ended

И в журнале много не сказано

root@4d0028607aeb:/usr/bin/mysql-5.6.30# cat /usr/bin/mysql/install/mysql.error.log
171025 10:23:33 mysqld_safe Starting mysqld daemon with databases from /usr/bin/mysql/install/data
Killed
171025 10:23:34 mysqld_safe mysqld from pid file /usr/bin/mysql/install/data/4d0028607aeb.pid ended
171025 10:37:32 mysqld_safe Starting mysqld daemon with databases from /usr/bin/mysql/install/data
Killed
171025 10:37:32 mysqld_safe mysqld from pid file /usr/bin/mysql/install/data/4d0028607aeb.pid ended

Файл my.cnf содержит:

root@4d0028607aeb:/usr/bin/mysql-5.6.30# cat /usr/bin/mysql/install/my.cnf 
[mysqld]
bind-address    = 0.0.0.0 # Allow client binding from any IP address instead of just 127.0.0.1
port            = 3306
sql_mode        = NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION # This is strict mode: NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
socket          = /usr/bin/mysql/install/tmp/mysql.sock
user            = root
basedir         = /usr/bin/mysql/install
datadir         = /usr/bin/mysql/install/data
log-bin         = /usr/bin/mysql/install/mysql.bin.log
log-error       = /usr/bin/mysql/install/mysql.error.log
general-log-file     = /usr/bin/mysql/install/mysql.log
slow-query-log-file  = /usr/bin/mysql/install/mysql.slow.queries.log
innodb_file_per_table = 1
innodb_flush_log_at_trx_commit = 1
sync_binlog = 1
innodb_flush_method = O_DIRECT
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
init-connect = 'SET NAMES utf8mb4'
character-set-client-handshake = FALSE
wait_timeout = 28800 # amount of seconds during inactivity that MySQL will wait before it will close a connection on a non-interactive connection
interactive_timeout = 28800 # same, but for interactive sessions
[client]
socket = /usr/bin/mysql/install/tmp/mysql.sock
default-character-set = utf8mb4
[mysql]
default-character-set = utf8mb4

На него есть ссылка:

root@4d0028607aeb:/usr/bin/mysql-5.6.30# cd
root@4d0028607aeb:~# ll
total 16
drwx------  2 root root 4096 Oct 25 08:06 ./
drwxr-xr-x 50 root root 4096 Oct 25 10:21 ../
-rw-r--r--  1 root root 3106 Oct 22  2015 .bashrc
lrwxrwxrwx  1 root root   29 Oct 25 08:06 .my.cnf -> /usr/bin/mysql/install/my.cnf
-rw-r--r--  1 root root  148 Aug 17  2015 .profile

Так что это можно найти:

root@4d0028607aeb:~# /usr/bin/mysql/install/bin/mysqladmin | grep my.cnf                                 
                      order of preference, my.cnf, $MYSQL_TCP_PORT,
/etc/my.cnf /etc/mysql/my.cnf /usr/bin/mysql/install/etc/my.cnf ~/.my.cnf 

Доступ к каталогам хоста из контейнера:

stephane@ubuntu-512mb-fra1-01:~/dev/docker/projects/learnintouch$ ll
total 24K
drwxr-xr-x 8 stephane 4.0K Oct 24 16:52 engine/
drwxrwxr-x 2 stephane 4.0K Oct 24 16:22 learnintouch/
drwxrwxr-x 2 stephane 4.0K Oct 24 16:22 learnintouch.com/
drwxrwxr-x 2 stephane 4.0K Oct 24 13:11 learnintouch.com-startup/
drwxrwxrwx 3 stephane 4.0K Oct 25 10:20 mysql/
drwxr-xr-x 3 root     4.0K Oct 24 16:36 website/
stephane@ubuntu-512mb-fra1-01:~/dev/docker/projects/learnintouch$ ll mysql/
total 4.0K
drwxr-xr-x 5 root 4.0K Oct 25 10:22 data/
stephane@ubuntu-512mb-fra1-01:~/dev/docker/projects/learnintouch$ ll mysql/data/
total 109M
-rw-rw---- 1 root  12M Oct 25 10:22 ibdata1
-rw-rw---- 1 root  48M Oct 25 10:22 ib_logfile0
-rw-rw---- 1 root  48M Oct 25 10:22 ib_logfile1
drwx------ 2 root 4.0K Oct 25 10:22 mysql/
drwx------ 2 root 4.0K Oct 25 10:22 performance_schema/
drwx------ 2 root 4.0K Oct 25 10:22 test/
-rw-r--r-- 1 root    0 Oct 25 10:21 created-from-within-the-container

Я также добавил файл подкачки 2G и попытался снова, но он все равно не запускается таким же образом.

0