MySQL operations in Docker. Giuseppe Maxia QA Architect VMware, Inc

Similar documents
MySQL operations with Docker A quick guide for the uninitiated

MySQL and Docker Strategies Patrick Galbraith Giuseppe Maxia

dbdeployer the future of MySQL sandboxes Giuseppe Maxia Software explorer

MySQL Replication : advanced features in all flavours. Giuseppe Maxia Quality Assurance Architect at

Docker und IBM Digital Experience in Docker Container

Docker A FRAMEWORK FOR DATA INTENSIVE COMPUTING

Arup Nanda VP, Data Services Priceline.com

Deployment Patterns using Docker and Chef

docker & HEP: containerization of applications for development, distribution and preservation

MySQL Sandbox 3.0. I n s t a l l i n g a n d t e s t i n g M y S Q L s e r v e r s effortlessly.

Harbor Registry. VMware VMware Inc. All rights reserved.

MySQL Replication, the Community Sceptic Roundup. Giuseppe Maxia Quality Assurance Architect at

A quick tour of MySQL 8.0 roles

Think Small to Scale Big

Docker for Development: Getting Started

Getting Started With Containers

Red Hat Quay 2.9 Deploy Red Hat Quay - Basic

Be smart. Think open source.

Who is Docker and how he can help us? Heino Talvik

ovirt and Docker Integration

SQL Server inside a docker container. Christophe LAPORTE SQL Server MVP/MCM SQL Saturday 735 Helsinki 2018

MySQL Point-in-Time Recovery like a Rockstar

A Hands on Introduction to Docker

EE516: Embedded Software Project 1. Setting Up Environment for Projects

Operational DBA In a Nutshell - HandsOn Reference Guide

Using MySQL Containers

Introduction to Containers

Let s manage agents. Tom Sightler, Principal Solutions Architect Dmitry Popov, Product Management

Linux Essentials Objectives Topics:

Travis Cardwell Technical Meeting

Introduction to containers

Dockerfile Best Practices

Brainstorm K Containerization with Docker. Crown Palm 2:30-3:30. Adam W Zheng Nebraska Educational Service Unit 10

MySQL Test Framework for Troubleshooting. February, 04, 2018 Sveta Smirnova

Introduction To Linux. Rob Thomas - ACRC

System Requirements ENTERPRISE

Splunk N Box. Splunk Multi-Site Clusters In 20 Minutes or Less! Mohamad Hassan Sales Engineer. 9/25/2017 Washington, DC

Quick Prototyping+CI with LXC and Puppet

An introduction to Docker

Open Source Database Performance Optimization and Monitoring with PMM. Fernando Laudares, Vinicius Grippa, Michael Coburn Percona

/ Cloud Computing. Recitation 5 February 14th, 2017

Consistent Reads Using ProxySQL and GTID. Santa Clara, California April 23th 25th, 2018

Be smart. Think open source.

Spring 2017 :: CSE 506. Introduction to. Virtual Machines. Nima Honarmand

[Docker] Containerization

Oh.. You got this? Attack the modern web

CS197U: A Hands on Introduction to Unix

Advanced Continuous Delivery Strategies for Containerized Applications Using DC/OS

Infrastructure at your Service. Oracle over Docker. Oracle over Docker

CONTAINER AND MICROSERVICE SECURITY ADRIAN MOUAT

Ftp Command Line Commands Linux Example Windows Put

Logging, Monitoring, and Alerting

Kuber-what?! Learn about Kubernetes

Copyright Heraflux Technologies. Do not redistribute or copy as your own. 1

containerization: more than the new virtualization

Docker All The Things

The age of orchestration

SQL Server Administration on Linux 2017

Welcome to Linux Foundation E-Learning Training

Baremetal with Apache CloudStack

Network softwarization Lab session 2: OS Virtualization Networking

What's new in MySQL 5.5 and 5.6 replication

Monitoring MySQL Performance with Percona Monitoring and Management

Docker 101 Workshop. Eric Smalling - Solution Architect, Docker

CONTAINERIZING JOBS ON THE ACCRE CLUSTER WITH SINGULARITY

Docker for HPC? Yes, Singularity! Josef Hrabal

Going Journey to Docker Production. Add picture here. Bret Fisher. DevOps Consultant Docker Captain Author of Udemy's Docker Mastery

The Post-Cloud. Where Google, DevOps, and Docker Converge

Con$nuous Deployment with Docker Andrew Aslinger. Oct

Docker and Splunk Development

I'm Andy Glover and this is the Java Technical Series of. the developerworks podcasts. My guest is Brian Jakovich. He is the

Docker. Master the execution environment of your applications. Aurélien Dumez. Inria Bordeaux - Sud-Ouest. Tuesday, March 24th 2015

Docker II - Judgement Day

Engineering Robust Server Software

" Qué me estás container?" Docker for dummies

LENS Server Maintenance Guide JZ 2017/07/28

Developing and Testing Java Microservices on Docker. Todd Fasullo Dir. Engineering

Running Blockchain in Docker Containers Prerequisites Sign up for a LinuxONE Community Cloud trial account Deploy a virtual server instance

From the Beginning: Your First Node.js Web Service

VMware s (Open Source) Way of Container. Dr. Udo Seidel

How To Manually Install Driver Ubuntu Server On Virtualbox

BUILDING MICROSERVICES ON AZURE. ~ Vaibhav

Monitoring MySQL Performance with Percona Monitoring and Management

MySQL Group Replication in a nutshell

Midterm Presentation Schedule

Introduction: What is Unix?

swiftenv Documentation

RDO container registry Documentation

UP! TO DOCKER PAAS. Ming

The Blackhole and Federated Storage Engines: The Coolest Kids on the Block

Building Your First SQL Server Container Lab in Docker

If you had a freshly generated image from an LCI instructor, make sure to set the hostnames again:

CSE 374 Programming Concepts & Tools

Cloud Computing II. Exercises

Citrix CloudPlatform (powered by Apache CloudStack) Version Patch D Release Notes. Revised July 02, :15 pm Pacific

Docker and Security. September 28, 2017 VASCAN Michael Irwin

Red Hat Container Development Kit 3.0 Release Notes and Known Issues

What s Up Docker. Presented by Robert Sordillo Avada Software

Introduction to Linux (Part I) BUPT/QMUL 2018/03/14

Nexus Application Development - SDK

Transcription:

MySQL operations in Docker Giuseppe Maxia QA Architect VMware, Inc 1

About me Who's this guy? Giuseppe Maxia, a.k.a. "The Data Charmer" QA Architect at VMware 25+ years development and DB experience Long timer MySQL community member. Oracle ACE Director Blog: http://datacharmer.blogspot.com Twitter: @datacharmer A 2

Disclaimer Better be clear about this This is community work. Non affiliation: I don't work for Oracle. All I say here, good or bad, is my opinion. Not talking for my company: All I say is my own stuff. My company does not influence or censor what I say here. 3

Preamble How this tutorial evolved 4

Preamble How this tutorial evolved The aim of this tutorial is to show what you can do with MySQL on Docker 4

Preamble How this tutorial evolved The aim of this tutorial is to show what you can do with MySQL on Docker It wanted to be also advice on best practices 4

Preamble How this tutorial evolved The aim of this tutorial is to show what you can do with MySQL on Docker It wanted to be also advice on best practices I researched and tested over several months 4

Preamble How this tutorial evolved The aim of this tutorial is to show what you can do with MySQL on Docker It wanted to be also advice on best practices I researched and tested over several months I decided to stick to the how to, but without advice. 4

Preamble How this tutorial evolved The aim of this tutorial is to show what you can do with MySQL on Docker It wanted to be also advice on best practices I researched and tested over several months I decided to stick to the how to, but without advice. You will see why at the end. 4

Agenda Differences between containers and VMs Advantages of containers only deployments Immutable architecture vs build and update Deploying a single container Storage and customisation Networking and replication Security Orchestrators and database containers Cloud and containers (and VM with containers) MySQL group replication On-the-fly custom containers Making your own containers 5

Standalone app - standalone server 6

Sandboxes - apps on shared resources 7

Virtual machines 8

Containers 9

Containers 10

What is a container? Software distribution blocks Virtualization system NOT a virtual machine Works close to the host operating system Can only run in the same O.S. as the host Less secure than VM Extremely fast to deploy Almost as efficient as a standalone server 11

Mutable architecture How we work with virtual machines HW 12

Mutable architecture How we work with virtual machines Puppet / Chef HW 12

Mutable architecture How we work with virtual machines Operating system Puppet / Chef HW 12

Mutable architecture How we work with virtual machines Hypervisor Puppet / Chef Operating system HW 12

Mutable architecture How we work with virtual machines slow load Guest O.S. VM Hypervisor Puppet / Chef Operating system HW 12

Mutable architecture How we work with virtual machines slow load libraries Guest O.S. VM Hypervisor Puppet / Chef Operating system HW 12

Mutable architecture How we work with virtual machines service slow load libraries Guest O.S. VM Hypervisor Puppet / Chef Operating system HW 12

Mutable architecture How we work with virtual machines service slow load libraries Guest O.S. VM Hypervisor Operating system Puppet / Chef updates HW 12

Mutable architecture How we work with virtual machines service slow load libraries Guest O.S. VM Hypervisor Operating system Puppet / Chef updates libraries HW 12

Mutable architecture How we work with virtual machines slow load service libraries Guest O.S. VM Hypervisor Operating system Puppet / Chef updates service libraries HW 12

Immutable architecture How we work with containers HW 13

Immutable architecture How we work with containers Puppet / Chef HW 13

Immutable architecture How we work with containers Puppet / Chef operating system HW 13

Immutable architecture How we work with containers service instant load lib layer Kernel layer container operating system Puppet / Chef HW 13

Immutable architecture How we work with containers service instant load lib layer Kernel layer container operating system Puppet / Chef HW 13

Immutable architecture How we work with containers service service lib layer instant load container lib layer Kernel layer Puppet / Chef container Kernel layer operating system HW 13

From containers to micro-services Micro-services look like containers, but not quite micro services Micro-services: container operating system - no O.S. - no shell - no extra features - easy to compose HW - communicate 14

Two approaches to micro-systems 15

Two approaches to micro-systems py_app java_app container DB how micro-systems should work 15

Two approaches to micro-systems py_app java_app py_app java_app container container container DB how micro-systems should work DB container how containers (with Docker) work 15

Virtual Machines vs. Containers Deployment: speed! 16

Virtual Machines vs. Containers Deployment: speed! Start a VM: it takes minutes 16

Virtual Machines vs. Containers Deployment: speed! Start a VM: it takes minutes Start a container. It takes less than a second 16

Virtual Machines vs. Containers Usage: speed! 17

Virtual Machines vs. Containers Usage: speed! Use a VM: it runs on virtualised hardware 17

Virtual Machines vs. Containers Usage: speed! Use a VM: it runs on virtualised hardware Use a container. It runs on bare metal (shares host OS kernel space) 17

Requirements What you need (Preferred) Linux (any flavour) + Docker 1.12 or OSX + Docker 1.12 for Mac Windows + Docker 1.12 for Windows 18

Before you start You need to install Docker. Yeah On Linux apt-get install docker or yum install docker or curl -ssl https://get.docker.com/ sh On Mac/Windows get Docker for Mac/Windows 19

First step You need to download the image $ docker pull mysql/mysql-server Using default tag: latest latest: Pulling from mysql/mysql-server 5e7ce0e805ba: Pull complete 4b9736773855: Pull complete 4fb9c55b1f85: Pull complete 19452ca711c2: Pull complete 0c660f33db44: Pull complete b8e96405c8c7: Pull complete 9bdbb574fa66: Pull complete 24c2343e048d: Pull complete Digest: sha256:da24eddcb99cbeba979d7da8170991278ca59838401a7c7 bf17c66307acc641c Status: Downloaded newer image for mysql/mysqlserver:latest 20

Listing images Making sure you have the server $ docker images REPOSITORY TAG IMAGE ID CREATED SIZE ubuntu latest bd3d4369aebc 13 days ago 126.6 MB mysql/mysql-gr latest ab9ab0656fea 2 weeks ago 742.3 MB mysql/mysql-server latest 1b3bfc4cbb3e 3 weeks ago 369 MB mysql/shell latest 212642e2d5a7 4 months ago 239.1 MB 21

Get the right image The "official" image does not come from the MySQL team 22

Key points 23

#1 - containers are full systems If you were looking for just a brick, you need to review your assumptions Every container contains an executable layer It's a full O.S. 24

#2 containers are always Linux So far, there is no way around it Linux flavor in the container is independent from the host But they have a compatible kernel That's why containers are faster than VMs 25

#3 - the O.S. in the container is minimal Don't expect frills The container has only the bare minimum to run the service 26

#4 - installation requires a password You need to decide your security strategy beforehand 3 possibilities: You can pass a password on the command line You can tell the container to generate a random password (don't!) You can pass a password using a file (recommended) 27

#5 - Containers are isolated Don't expect the server to be accessible A MySQL server inside a container can only be accessed by other containers but You can expose ports to the outside 28

#6 - Data storage can be tricky The data directory is inside a container By default, the data directory is inside the container Containers are volatile by default You can use an external "volume" for persistence 29

# configuration is done by deploying files Forget puppet and Chef. Your container comes ready to use For Virtual machines: modifying with automated tools is good practice It takes time, but this is the way the game works For Containers NEVER modify a deployed container Always deploy with ready made components It gives you instantaneous containers! 30

Examples 31

Deploying a single container The basics, according to the documentation docker run... (example) 32

Getting started with MySQL on docker A Naive approach $ docker run -d mysql/mysql-server 3289f402378e45089e9f59ba0c2c3b93d5d34335a15c4a6bfe10be 2bd53e5549 $ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES $ docker logs 3289 error: database is uninitialized and MYSQL_ROOT_PASSWORD not set Did you forget to add -e MYSQL_ROOT_PASSWORD=...? 33

Simple MySQL deployment Here's the minimum command to deploy a MySQL container $ docker run \ --name mybox \ -e MYSQL_ROOT_PASSWORD=secret \ -d \ mysql/mysql-server 06d3392543500455adcfe6cba36736739c46688de8028647d38109 c0ec3cf250 # WILL RUN WITH DEFAULT VALUES 34

Storage and customisation The not-so-basics, to learn step-by-step docker run... --volume to define storage to change configuration instantly --env to pass variables [more options] 35

Volumes: case 1 36

Volumes: case 2 37

Volumes: case 3 38

MySQL with log-bin and server-id To deploy a customized container we have two options: ## OPTION 1 : on the command line docker run \ --name mybox \ -e MYSQL_ROOT_PASSWORD=secret \ -d \ mysql/mysql-server --log-bin --server-id=100 39

MySQL with log-bin and server-id To deploy a customized container we have two options: ## OPTION 2 : with a "volume" file $ cat minimal.cnf [mysqld] user=mysql log-bin=mysql-bin server-id=100 $ docker run \ --name mybox \ -e MYSQL_ROOT_PASSWORD=secret \ -d --hostname mybox \ -v $PWD/minimal.cnf:/etc/my.cnf mysql/mysql-server 40

Looking inside a container It's an operating system. We can peek inside docker exec -ti mybox bash [root@mybox /]# mysql -p Enter password: [...] Server version: 5.7.10-log MySQL Community Server (GPL) [...] mysql> select @@server_id; +-------------+ @@server_id +-------------+ 100 +-------------+ 1 row in set (0.00 sec) 41

Create a DB and dedicated user If you need a database with a user that can access it docker run \ --name mybox \ -e MYSQL_ROOT_PASSWORD=secret \ -d \ -e MYSQL_DATABASE=personnel \ -e MYSQL_USER=pers_user \ -e MYSQL_PASSWORD=pers_password \ mysql/mysql-server --log-bin --server-id=100 42

Single container DEMO 43

Security A dangerous mix of security defaults dangerous --env to set passwords useless ability of creating random passwords little used ability of passing passwords via file 44

Suggested approach by the MySQL team This is the official advice (not good for automated operations) $ docker run --name mybox \ -e MYSQL_RANDOM_ROOT_PASSWORD=yes \ -d mysql/mysql-server 31c8880bb7c25e44f2a413e0150c7c1ab732afe4a3b76531f9e4ea e763b34a51 $ docker logs mybox Initializing database Database initialized MySQL init process in progress... [...] GENERATED ROOT PASSWORD: ;3LEq^AGMUjDiN&EpYmYK*ij0KU 45

An alternate approach Here you won't see a password, but you can use it $ echo $RANDOM sh256sum cut -c 1-16 > pwd.txt $ docker run --name mybox --hostname mybox \ -v $PWD/pwd.txt:/root/pwd.txt \ -e MYSQL_ROOT_PASSWORD=/root/pwd.txt \ -d mysql/mysql-server $ docker exec -ti mybox bash [root@mybox /]# mysql -p$(cat /root/pwd.txt) # You can also save the password in an alternate file 46

An even better approach Here you won't see a password, but you can use it $ echo $RANDOM sh256sum cut -c 1-16 > pwd.txt $ cat my_safe.cnf [client] user=root password=changeme $ sed -i -e "s/changeme/$(cat pwd.txt)/" my_safe.cnf $ docker run --name mybox --hostname mybox \ -v $PWD/pwd.txt:/root/pwd.txt \ -v $PWD/my_safe.cnf:/etc/myuser.cnf -e MYSQL_ROOT_PASSWORD=/root/pwd.txt \ -d mysql/mysql-server $ docker exec -ti mybox mysql \ --defaults-extra-file=/etc/myuser.cnf 47

Safe password DEMO 48

Networking and replication Complex systems at your fingertips docker network docker run --net automatic hostnames 49

Inspecting a container Docker gives us some info on the container docker inspect mybox [...] large JSON object [...] $ docker inspect \ --format '{{.NetworkSettings.IPAddress}}' mybox 172.17.0.2 50

Container network How to communicate with containers port1 container1 172.17.0.2 host port1 container2 172.17.0.3 host network container default network 51

Container network How to communicate with containers port1 container1 172.17.0.2 host port1 container2 172.17.0.3 host network container default network 51

Container network How to communicate with containers port1 container1 172.17.0.2 host 127.0.0.1:port2 port2 port1 container2 172.17.0.3 host network container default network 51

Container network How to communicate with containers port1 container1 172.17.0.2 host 127.0.0.1:port2 port2 127.0.0.1:port3 port3 port1 container2 172.17.0.3 host network container default network 51

Container network How to communicate with containers port1 container1 172.17.0.2 host port1 container2 172.17.0.3 host network container dedicated network 52

Container network How to communicate with containers port1 container1 172.17.0.2 host port1 container2 172.17.0.3 host network container dedicated network 52

Replication Setting up asynchronous replication requires some effort 1. Create a dedicated network 2. Deploy the master container and slaves using the new network 3. Wait until the servers are up 4. create replication user in the master 5. run CHANGE MASTER TO in the slaves 53

Examples in GitHub All the examples are available for easy usage https://github.com/datacharmer/mysqlreplication-samples directory./docker-replication 54

Deploying a master Much configuration goes on # cat my_template.cnf [mysqld] user = mysql port = 3306 log-bin = mysql-bin relay-log = mysql-relay server-id = _SERVERID_ log-error=/var/log/mysqld.log pid-file=/var/run/mysqld/mysqld.pid master-info-repository=table relay-log-info-repository=table enforce-gtid-consistency gtid_mode=on 55

Deploying a master Much configuration goes on sed "s/_serverid_/100/" < my-template.cnf \ > $DOCKER_TMP/my_1.cnf docker run \ --net my_rep_net \ --name mysql-node1 --hostname master \ -v /opt/docker/tmp/my_1.cnf:/etc/my.cnf \ -v /opt/docker/tmp/home_my_1.cnf:/root/home_my.cnf \ -v /opt/docker/mysql/node_1:/var/lib/mysql \ -e MYSQL_ROOT_PASSWORD=secret \ -d mysql/mysql-server 56

Deploying a slave Much configuration goes on sed "s/_serverid_/200/" < my-template.cnf \ > $DOCKER_TMP/my_2.cnf docker run \ --net my_rep_net \ --name mysql-node2 --hostname node2 \ -v /opt/docker/tmp/my_2.cnf:/etc/my.cnf \ -v /opt/docker/tmp/home_my_2.cnf:/root/home_my.cnf \ -v /opt/docker/mysql/node_2:/var/lib/mysql \ -e MYSQL_ROOT_PASSWORD=secret \ -d mysql/mysql-server 57

Checking if the server is ready This requires some creativity function is_ready { NODE=$1 MYSQL="docker exec -it mysql-node$node mysql \ --defaults-file=/root/home_my.cnf " READY=$($MYSQL -BN -e 'select 12345' tr -d '\n' tr -d '\r') if [ "$READY" == "12345" ] then echo OK fi } # loop through nodes node_ready=$(is ready $NODE) 58

Setting the options file in root After we're sure that the server is fully up docker exec -it mysql-node$node \ cp /root/home_my.cnf /root/.my.cnf 59

Creating the replication user Now we can use mysql client without password MASTER="docker exec -it mysql-node1 mysql" $MASTER -e 'create user rdocker \ identified by "rdocker"' $MASTER -e 'grant replication slave on *.* to rdocker' 60

Executing CHANGE MASTER TO in slaves Also here we can use mysql client without password SLAVE="docker exec -it mysql-node$slave_node mysql " $SLAVE -e "change master to \ master_host='mysql-node1', \ master_port=$master_port, MASTER_AUTO_POSITION=1" $SLAVE -e 'START SLAVE user="rdocker" password="rdocker" ' 61

Replication DEMO 62

Orchestrators The way of containers is not (yet) the way of MySQL Docker orchestrators are easy to use But not for asynchronous database systems 63

Cloud and containers Also a wasteful mix of virtualising systems Docker is best used on bare metal Using containers with VMs is a waste of performance Docker on Mac or Windows does not work always as expected 64

Virtual machines + containers 65

MySQL Group Replication Synchronous database systems can be easy to set up Docker MySQL and Group Replication Works well when the system is fast It can have nasty side failures (when not used on Linux). 66

Using group replication Get the image $ docker pull mysql/mysql-gr Using default tag: latest latest: Pulling from mysql/mysql-gr deed2f14de27: Pull complete 87e819187015: Pull complete 383377483443: Pull complete ed703ed668c5: Pull complete 3a0716e5cd17: Pull complete ea6af449de9a: Pull complete 45b8d9ccdc34: Pull complete [...] Digest: sha256:0d690f3bd27075250be546ef91278c1b855fda2a0ab1bb2 231153eadb9e90485 Status: Downloaded newer image for mysql/mysqlgr:latest 67

Using group replication Starting nodes docker network create group1 SEEDS=( 'node2:6606,node3:6606' 'node1:6606,node3:6606' 'node1:6606,node2:6606' ) for N in 0 1 2 do NODE=$(($N+1)) docker run -d --name=node$node --net=group1 \ --hostname=node$node \ -e MYSQL_ROOT_PASSWORD=aTestPwd \ -e MYSQL_REPLICATION_USER=rpl_user \ -e MYSQL_REPLICATION_PASSWORD=rpl_pass \ mysql/mysql-gr \ --group_replication_group_seeds=${seeds[$n]} \ --server-id=$node done 68

Using group replication Checking nodes select MEMBER_HOST,MEMBER_STATE from performance_schema.replication_group_members *************************** 1. row MEMBER_HOST: node1 MEMBER_STATE: ONLINE *************************** 2. row MEMBER_HOST: node2 MEMBER_STATE: ONLINE *************************** 3. row MEMBER_HOST: node3 MEMBER_STATE: ONLINE 69

Using group replication Checking replication - create a table in each node -- node1 create table test.t1(id int not null primary key) -- node2 create table test.t2(id int not null primary key) -- node3 create table test.t3(id int not null primary key) 70

Using group replication Checking replication - checking tables in each node -- node1 (repeat for node2 and node3) show tables from test +----------------+ Tables_in_test +----------------+ t1 t2 t3 +----------------+ 71

Group Replication DEMO 72

On-the-fly custom containers Your choices are limited The "official" MySQL image => Debian MySQL image from Oracle => OracleLinux Percona server image => Centos None offers 5.0 or 5.1 What if you want MySQL 5.7 or 5.1 on CentOS, Debian, or Ubuntu? 73

mysql-docker-minimal A community project, offering building blocks for your containers https://github.com/datacharmer/mysql-dockerminimal There are reduced images for MySQL from 5.0 to 8.0 And customized images for Ubuntu, CentOS, Debian. 74

Reviewing volumes: case 2 75

Containers as application carriers 76

mysql-docker-minimal Build in two steps # Creates a volume, containing MySQL binaries $ docker create \ --name my_bin \ -v /opt/mysql \ datacharmer/mysql-minimal-5.7 # Uses that volume with your choice O.S. $ docker run -ti \ --volumes-from my_bin \ --name mybox \ datacharmer/my-ubuntu bash 77

Custom containers DEMO 78

MySQL Shell with Docker Instead of installing MySQL shell... Use a Docker image Shell ready to use No side effects on the O.S. 79

Testing the MySQL document store Easy and painless docker run --name mybox --net docnet \ -e MYSQL_ROOT_PASSWORD=secret -d \ -v $HOME/data:/data \ mysql/mysql-server \ --plugin-load=mysqlx:mysqlx.so docker exec -ti mybox mysql -psecret \ -e 'source /data/world_x-db/world_x.sql' docker run --name myshell --rm \ --net docnet -ti mysql/shell \ -h mybox -u root -psecret world_x 80

Make your own Docker images Not a difficult task Choose where to start from (bare image, or already made MySQL image) Add your own features repack 81

Creating containers DEMO 82

How I tested MySQL 8 On a Mac, having only Linux binaries I was traveling Without a Linux box With only my Mac and a Linux tarball 83

Cross-OS testing - part 1 setting the environment # I extracted the tarball in a directory on my Mac mkdir ~/opt/linux cd ~/opt linux tar -xzf mysql-8.0.0-dmr-linux-glibc2.12-x86_64.tar.gz mv mysql-8.0.0-dmr-linux-glibc2.12-x86_64 8.0.0 84

Cross-OS testing - part 2 setting the environment # I copied the latest MySQL Sandbox next to the tarball cd ~/opt linux tar -xzf ~/Downloads/MySQL-Sandbox-3-2-00.tar.gz 85

Cross-OS testing - part 3 Something went wrong # I tried running a simple container, but I found a problem docker run -ti \ -v $HOME/opt/linux/:/work \ -v $HOME/data/:/data \ --name mybox /datacharmer/my-centos bash cd /work/mysql-sandbox-3.2.00. env.sh make_sandbox /work/8.0.0 -- --no_show... Missing library libnuma.so.1 86

Cross-OS testing - Part 4 Volumes to the rescue # Percona server image has the needed library docker run \ -v $HOME/opt/linux/usr_transfer:/usr_transfer \ --name mybox -e MYSQL_ROOT_PASSWORD=secret \ -d percona/percona-server docker exec -ti mybox \ bash -c 'cp /usr/lib64/libnuma.so.1 /usr_transfer' ls -l ~/opt/linux/usr_transfer docker stop mybox docker rm -v mybox 87

Cross-OS testing - Part 5 Now we can use the volume docker run -ti \ -v $HOME/opt/linux/:/work \ -v $HOME/data/:/data \ -v $HOME/opt/linux/usr_transfer/libnuma.so.1:/usr/ lib64/libnuma.so.1 \ --name mybox /datacharmer/my-centos bash 88

Cross - OS testing demo 89

Summing up A few controversial thoughts to take home 90

Summing up A few controversial thoughts to take home Containers are a promising technology 90

Summing up A few controversial thoughts to take home Containers are a promising technology Current trend is aiming at micro-services 90

Summing up A few controversial thoughts to take home Containers are a promising technology Current trend is aiming at micro-services Most current offerings are a mix with cloud 90

Summing up A few controversial thoughts to take home Containers are a promising technology Current trend is aiming at micro-services Most current offerings are a mix with cloud MySQL (and databases) are not well integrated with containers 90

Summing up A few controversial thoughts to take home Containers are a promising technology Current trend is aiming at micro-services Most current offerings are a mix with cloud MySQL (and databases) are not well integrated with containers MySQL on Docker : 90

Summing up A few controversial thoughts to take home Containers are a promising technology Current trend is aiming at micro-services Most current offerings are a mix with cloud MySQL (and databases) are not well integrated with containers MySQL on Docker : is wonderful for development and testing 90

Summing up A few controversial thoughts to take home Containers are a promising technology Current trend is aiming at micro-services Most current offerings are a mix with cloud MySQL (and databases) are not well integrated with containers MySQL on Docker : is wonderful for development and testing You need extra care to use it in production 90

Q & A 91