Creating a custom container is where things get truly exciting. There’s actually a ton of work and knowledge around this. To start with, I’m going to keep it simple. I’m going to create a container with a database & some data and a couple of general customizations. From that, we’ll create our own container.

To understand why I’ve got a series on containers, read here.

Setting Up a Custom Container

To start with, I’m going to spin up a container with nothing fancy:

docker run -e 'ACCEPT_EULA=Y' ` -e 'SA_PASSWORD=$cthulhu1988' ` -p 1433:1433 ` --name DockerDemoTemplate ` -d mcr.microsoft.com/mssql/server:2019-CTP2.5-ubuntu 1 2 3 4 5 docker run - e 'ACCEPT_EULA=Y' ` - e 'SA_PASSWORD=$cthulhu1988' ` - p 1433 : 1433 ` --name DockerDemoTemplate ` - d mcr . microsoft . com / mssql / server : 2019 - CTP2 . 5 - ubuntu

With this running, let’s connect up and make some changes:

USE master; GO CREATE DATABASE CustomContainer; GO USE CustomContainer GO CREATE TABLE dbo.CustomTable (ID INT IDENTITY (1,1) NOT NULL PRIMARY KEY, CustomValue varchar(50) NOT NULL); GO INSERT dbo.CustomTable (CustomValue) VALUES ('Move '), ('this '), ('to '), ('a '), ('new '), ('server.'); GO EXEC sp_configure 'show advanced options', 1 ; GO RECONFIGURE GO EXEC sp_configure 'cost threshold for parallelism', 50 ; GO RECONFIGURE GO 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 USE master ; GO CREATE DATABASE CustomContainer ; GO USE CustomContainer GO CREATE TABLE dbo . CustomTable ( ID INT IDENTITY ( 1 , 1 ) NOT NULL PRIMARY KEY , CustomValue varchar ( 50 ) NOT NULL ) ; GO INSERT dbo . CustomTable ( CustomValue ) VALUES ( 'Move ' ) , ( 'this ' ) , ( 'to ' ) , ( 'a ' ) , ( 'new ' ) , ( 'server.' ) ; GO EXEC sp_configure 'show advanced options' , 1 ; GO RECONFIGURE GO EXEC sp_configure 'cost threshold for parallelism' , 50 ; GO RECONFIGURE GO

With that in place, let’s shut down the container and create an image:

docker stop DockerDemoTemplate ## create an image docker commit DockerDemoTemplate dockerdemoimage 1 2 3 4 docker stop DockerDemoTemplate # # create an image docker commit DockerDemoTemplate dockerdemoimage

That’s it. Now it’s time to test it.

Consuming a Custom Container

Now, it’s just a question of treating it like a regular image, but, remembering that it’s local. The call looks like this:

docker run -e 'ACCEPT_EULA=Y' ` -e 'SA_PASSWORD=$cthulhu1988' ` -p 1433:1433 ` --name DockerDemoCustomContainer ` -d dockerdemoimage 1 2 3 4 5 docker run - e 'ACCEPT_EULA=Y' ` - e 'SA_PASSWORD=$cthulhu1988' ` - p 1433 : 1433 ` --name DockerDemoCustomContainer ` - d dockerdemoimage

That will fire up the image and you’ll find that the server settings, databases, and everything have migrated with it. This makes the image bigger, so it’s not something you’d want to do with large amounts of data.

Conclusion

There are much more sophisticated ways to get this done using Docker Files. However, this illustrates the point quite simply. You can customize your servers and then use those customizations. You don’t have to re-customize every time. Again, this is just a small slice of why containers are so powerful.

I hope the week of introductory posts on containers gave you enough information to get started on your own. There’s so much more to learn here. I think you, and I, have to spend some time understanding this technology better in order to appropriately use it. I plan to spend the time.

Want some precons? I’ve got ’em coming up. Query Tuning and DevOps both. Check it out:

SQLSaturday Columbus Precon, June 7 2019, Columbus OH

SQLSaturday Indianapolis Precon, Friday August 16th, 2019. Click here now to register.

SQLSaturday Oslos Precon, Friday August 30th, 2019. Click here to register.

Share this: Twitter

Facebook

Reddit

LinkedIn

Tumblr

WhatsApp

Pocket

Email

