Setting up a Dynamics 365 Business Central development environment tenant using Docker
Articles,  Blog

Setting up a Dynamics 365 Business Central development environment tenant using Docker

>>Hello and welcome to this video in which I
will talk about setting up a sandbox environment
for Microsoft Dynamics 365 Business Central
using Docker containers. We’ll go into a brief
introduction about Docker itself, and then I’ll cover
how Docker is used to create containers for a variety of
different versions of Dynamics NAV and
Business Central. You will learn how
easy it is to deploy any available version
in a matter of minutes. I want to take a moment to give a shout out to
Freddy Kristiansen’s who pioneered this technology to be used for NAV and
Business Central. Next time you see him, shake his hand and tell him
thank you because his work with Docker has
made our lives a lot easier. My name is Daniel Rimmelzwaan, and I am a partner with
Cloud Ready Software, one of the ISV
development centers who can help you with
just about anything related to Microsoft Dynamics
365 Business Central. Our objectives for
this video are, first, I will talk about Docker
to introduce the concept. Next, we will look
at how Docker is used to provide
the ability to run a Business Central sandbox
environment in a matter of minutes in any version for which a Docker image
has been published. And finally, I’ll explain
how you can extend the Docker capabilities to
suit your specific needs, such as accessing
your own SQL server or importing some custom control add in
and many other capabilities. Let’s get started. Let’s get into the first section.
What is Docker? Docker is the leading cross platform software
container environment. Container technology
provides the ability to isolate applications and even groups of
applications within a virtualized space on
a physical or virtual machine. Some of the key features
of Docker are: containers can run multiple versions of
your apps at the same time, running those containers
side by side but isolated on shared
resources like CPU, and RAM, and operating system. Containers are disposable
and very easy to recreate. You can create configurations
that are locked down yet extendable
at the same time. You can share resources between the host
and the containers. So, this means that
developers can do development locally and share their
work through containers. Images in containers
are easy to deploy, and they are very
highly scalable. So, what’s the difference between a container and an image? Docker image is a template with a minimum amount of
operating system, and libraries, and application binaries needed, and a container is an instance of that image with an immutable base and it’s changes on top. A container is not
a virtual machine, so you don’t have
a user interface. You can’t RDP into a container. You can connect to a container through
PowerShell scripts, but not through RDP. In the Docker host, just in a virtual machine terminology is the physical or
the virtual machine where the containers are running. When we look at virtual machines
versus containers, let’s first talk about
virtual machines. Imagine the big boat
is your computer, and you’ve made sure to get a very large capacity hard drive and lots of other
system resources. You have your productivity tools, your development tools,
and of course not a single game since
this is your work computer. To be able to run different versions of
your development environment, you decide to run
virtual machines to separate those environments and to keep them from interfering
with the main machine, let’s called that host. The little boats represent the virtual machines
on the host computer, so we have six little boats
on the big boat. Very impressive by
any means because those virtual machines
take up a lot of space, and they use a lot
of system resources. In each of those little boats, you now install
separate copies of the OS, and the productivity tools, and your development tools. And maybe you get a bit fancier, you connect the little boats, and perhaps provide one of them as a shared database server. However you decide to
organize the little boats, there’s only so much room
on the big boat. You can only run so many at the same time before you run
out of system resources. What if it were possible to run the program somehow
without having to provide for an entire virtualized
environment including multiple copies of the OS and multiple copies of
common tools and services? What if you could get rid of the need for the little
boats and be able to install those things in some sort of
separated environment? You could run many more
of them because all of those programs which share
resources with each other. Fortunately, this
technology does exist, and it is called
Docker containers. Containers are kind of
like virtual machines, but they are also very different. Let’s go into some of
the differences between virtual machines and containers. When we talk about
the differences between virtual machines and containers, there are a few aspects that are important to distinguish. The first difference
is the image storage, and the difference
between virtual machines and containers is enormous. For virtual machines, you need a full image of
the machine at the very least the virtual
hard drive file that includes a full copy of
the operating system, all the installed additional
software that you need for those virtual
machines to function. Think of Office and
developer tools and any other applications
that you might need. For each virtual machine, you need to include a full copy of all those applications. A single virtual
machine file with just Windows 10 requires
more than 50 gigabytes, and when you add
full Visual Studio, that’s another 35
gigabytes or so. You can only store
a very limited number of virtual machines on a single laptop before you
run out of hard drive space. Containers are
built up in layers. The operating system
is one layer. Other binaries and libraries are layered up on top of the OS. The first image that you download does take up
quite a bit of space, but the second image only includes the layers that
you don’t already have. If you look at images
for NAV for instance, the first image includes
a layer for operating system, layers for other binaries, and then a layer for a NAV, lets say NAV 2018. When you then download
the image of NAV 2017, the system recognizes that you already have the layer
for the operating system, so it does not need to
download another copy. It also recognizes
the binaries layer, and then it only needs to download the layer
that is different. This saves a huge amount
of disk space, and it enables you to hold
many more container images. You could download
every single version of NAV on a single laptop, which you could never do
with virtual machines. The second difference is in the isolation levels
of the operating system. When you start a VM, it starts a separate instance of the operating system inside
the virtual machine. So, at that time, your laptop is
running two instances of an operating system
at the same time. Hyper-V isolation is
relevant when you are running containers directly
on a Windows 10 machine. Your containers are all built on top of a Windows Server core. So, in order to
run the container, your machine will need a base on top of which the container runs. Since you don’t need
the complete virtual machine, it only runs a very slim
[inaudible] process with operating system core
that is needed to run the programs that are part
of the container image. It’s kind of like a mini virtual machine that
enables the container to run. Your Windows 10 computer runs a “mini virtual machine
with Windows Server,” which in turn is necessary to run the programs
in the container itself. We talk about process isolation when the container is running a core OS that is compatible
with the host OS. So, the container can then share the OS resources with the host. It does not need to create
a separate instance of the OS because it can utilize the services
directly on your computer, because those are
already running anyway. For NAV specifically, this is an extremely efficient way
of running service tiers, starting a process
isolation container does not take up a lot
of extra resources. It is the same
workload as running a service tier directly
on the computer itself. What I personally do is I run my laptop on Windows 10 Pro, and I have a virtual machine
that runs on Windows Server. My container images are all in a single snapshot instance
of that virtual machine, so that is all isolated inside
that one virtual machine. If something goes wrong, or more likely, if I mess
up my virtual machine, then all I have to do is create a new snapshot of
my virtual machine, and I’m all reset to start. My initial plan was to
create a snapshot for each project of the virtual
machines themselves, but with the isolation that
comes with a container, even that is no longer necessary. You can run multiple containers
in multiple versions at the same time on the same
physical or virtual machine. The current most common
way of deploying a development environment is to create an Azure VM-based
on one of the templates, the Git NAV template, and the BC sandbox template, and that comes with
a Container already setup with a version that was
specified in the template. You are still running
a full virtual machine in Azure. The next step on Azure is to run container instances on Azure
as serverless instances, so they don’t run inside
a virtual machine. In this scenario, you create
a container in Azure, and you consume that
from your local laptop. The image is not downloaded
to your computer, but it remains in
the online repository. The container is then
created in Azure, and it works exactly the
same as though you’d created inside a virtual machine
or on your computer. The second section is titled Run Business Central sandbox
in a Docker container. Let’s talk about the
container image architecture. So, as mentioned before, the image is built
up out of layers. The base image layer is called
microsoft/windowsservercore. This provides the core
operating system pieces that you’re needed to
run that container. On top of that, for the Business Central sandbox
and for NAV containers, we install SQL Express plus Internet
Information Services, and then on top of that, we have a bunch of installation scripts. These two blocks together is called the
dynamics-nav:generic layer. On top, we have parts of the NAVDVD plus
some other install scripts, and that layer is called
the dynamics-NAV version. So, now we have
the server core base, we have the generic part
of the NAV installation, and then we have
the version-specific layer. On top of the
version-specific layer, we now have a country database. So, this is the localization
that we’re talking about. Together with those 1, 2, 3, 4, 5 boxes, we have a generic NAV layer and we
have a specific NAV layer. It’s not really an NAV layer, but the generic pieces
are the common ones, so the SQL Express is
used for all versions. Internet Information Services
is used for all versions. The installations scripts
are used for all versions, and then on top of that, we have parts of the NAVDVD that are going to be
the same and parts that are not going
to be the same, based on the version for
some installs script. Then, on top of that, is the country database, so the database
might be different, but the installation
piece is from the NAVDVD or from
Business Central, those are the same across
all of the localizations, and then you have a specific localized database that’s on top. Then finally, on top of all that, you can add application and change settings and
overwrite scripts. This layer is the partner image
or the partner instance or anybody that wants to extend or expand on
that architecture. So, it would even be possible to create an image that is based on a specific version and a specific localization
on top of which, you can provide your product
as a Docker image, which can then be deployed for test purposes and trial purpose
and that sort of thing. Let’s talk a little bit about how to get up and
running for Docker. As I’ve mentioned before, Docker is built on top
of Windows Server, so the operating system
prerequisite for Windows Server 2016 is to simply activate
the containers feature. So, go to “Turn Windows
features on or off”, and then you put a checkbox
under a containers, and from that point, it should work immediately. For Windows 10, it’s
a little bit more complicated. You need to be on Professional
or Enterprise edition. You have to activate Hyper-V
in containers as well. The easiest
implementation would be to be on Windows Server 2016, and I have that myself in
a virtualized environment. So, I have Hyper-V on
my Windows 10 installed. I have a virtual machine
with Windows Server 2016, and inside that virtual machine, I have installed my Docker, and that’s where I deploy
all of my Docker containers. So then, you need
to install Docker. You can go to
the official Docker pages on, and just read all about that. It’s easier to just
link to that page and read the latest information
because they change that, of course, when things change. Recommended is to use Freddy’s script for
navcontainerhelper. If you go to his blog about
the navcontainerhelper, he explains in there. I have a slide with more resources at
the end of this video, with more recommended reading. In those other links
are also links inside the links and so if you go
to the navcontainerhelper, GitHub repository, for instance. There are even links to
documents that help you step through the whole
scenario step by step. There is a difference
between Windows 10 and Windows Server in how
the operating system is impacted by different
editions of Docker. For the latest information, just go to the link
at the bottom of your screen and read
more details in there. I found that if I just
follow the instructions, make it work, that’s
all I need to know. But, if you want to know
more about the details, there are plenty of
technical tidbits that you can find in the link at the bottom
of your screen. This slide shows
a few basic Docker commands. To list existing image, you go “Docker images”. By the way, you can open
a regular command prompt. You can also open the
PowerShell prompt. These commands work
in both environments. In the Azure VM, you also get
navcontainerhelper window which I’ll show you in the demo
in just a few minutes. To download an image, use the pull command. There’s a slide later on in this video which I will explain, the Microsoft/dynamic-nav or vc sandbox with a tags and the localization tags
and the ACU tags. Docker rmi with image ID
is to remove an image. You can list
the running containers. You can list all containers. Run a new container. Start an existing container. Stop existing container and last of all remove a container
that is really quick. You issue that and
the containers, pfft, it’s gone. Once you have
an image downloaded, creating a new container
just takes a few minutes. It’s amazing how fast that is. So, like I said
with those layers, if you pull one
version of a layer, and that’s the first
image that you pull that it might
take quite a while, that might be like
a gigabytes of files, but when you download
another version of the image, it’ll go through
the layers and recognize that you already
have some of those. In one of the demos later on, I’ll show you what
that looks like. So, that’ll visualize
it a little bit better. There are two ways to
start an NAV Container. The standard Docker command, is docker run, and then
you specify the image. When you do that, it creates a docker instance for you with a number
of shortcuts and also auto-generates a name for the container and
username and password. The navcontainerhelper command
is little bit more elaborate and it is specific
for NAV containers. So, my recommendation would be to just forget about
docker run and to just use the new NAV container command and learn what the
particular parameters are. They have a small demo
in a few minutes. When you use Docker run, I took a screenshot
from when I tried this. As you can see at
the bottom of the screen, it took only two minutes to
create a container based on an image that was
already downloaded. You can see here a curated container hostname
with this funky number, a container DNS name
with that funky number, web client with
that funky number, the NAV Admin username, admin and then it
auto-generates a password. So, this is when
you do Docker run. The scripts that run, create those things using
the new NAV container command, gives you a little bit
more control over that, and I’ll show you them
on a few minutes. As mentioned, the PowerShell
module navcontainerhelper was created
specifically to provide you with a way to script
all these things with very handy dandy commandlets
especially for NAV containers and Business Central
containers, of course. There’s a PowerShell module
to manage NAV containers, to install by install-module
navcontainerhelper -force. If you’ve already
have it installed, use the update module to
get the latest version. For more info about
the navcontainerhelper, read Freddy Kristiansen’s blog and also the
navcontainerhelper GitHubs. So, the thing itself
is on GitHub. So, if you find some issues
that you can resolve, if you have some questions
about how it all works, you can submit issues. Freddy looks at this every single day and he’s very responsive and there’s a very
responsive community behind there as well. All right. Enough talk. Let’s go into my Azure VM and show you
some basic Docker commands. I’m in my Azure VM and some of these shortcuts were
placed there by the template. So, the NAV server shortcuts. We have a C-site
and a PowerShell, a web client in a Windows client, specifically for NAV server. NAV server is the
standard Docker container that runs in one of
those Azure VMs. Then, we have
a number of prompts. One is a regular command prompt and when I run the Docker PS Command, this runs from
the regular Command Prompt. You can run the
docker ps command in the Command Prompt at the bottom and get
the same results. Docker ps lists the currently
running containers, you can also list all containers
by running docker ps -a, and that lists all containers whether they are running or not. So, at the moment, the only container that I
have is called navserver, and that’s the one that’s
installed by default. Another familiar command
is docker images, and when you run this command, it’ll show you all the images that are on the current machine. So, whether this is
a virtual machine or a physical machine, it will show you
all the images that it has. So, you can see here that we have a server core,
windowsservercore. We have dynamics-nav, and
then we have two bcsandbox, one with a tag us, and one with a tag dk. So, when my Azure VM was created, I specified that I wanted to have a bcsandbox with a tag us. So, I am working off of
a North America database. That’s the localization part. Now, earlier today, when I was preparing to record this video, I ran a new container
command with a tag for dk, which is for Denmark. The result, I just wanted to
show you the result of that. In my window down here where here is my full script. So, in my script,
I am pointing to a license file that’s on
this virtual machine. I have an image name that I specify as the dk for Denmark, and I’m calling my
container bcdk. I have removed it in the
meantime because I want to rerun this script and show
you how quick it is when you already have
the image on the computer, how quick it is to
create a new container. So, because this container was based on the dk image
rather than the us image, it knew that it didn’t have
all the layers of that image. So, it said for a certain layers
that already exists, and then it says I had to pull some other layers,
verify the checksum, and downloads completes,
and then it starts creating the bcdk container. So, it ran through
all the steps, it says okay, I now have a bcdk hostname
and DNS name. This particular one took
quite a while 422 seconds. I think that that’s because
I’m on an Azure VM. On my local computer, this would have
been a lot faster. So, what we can do actually is run this same command again. Then we can go back
to the presentation, and talk about some things, and then we come
back to this screen, we should have a new
container that is based on the Danish version of
the bcsandbox image. So, lets run this, and so, now it’s running, and we go
back to the presentation. Docker image updates when
it’s for NAV 2016, 2017, and 2018 for the
On-premises version of NAV, there will be docker images for each and every
cumulative updates. So, for 2016 NAV, 2017 NAV, 2018, each and every cumulative update is available as a docker image. For Dynamics 365 Business
Central sandbox, you always need to be
on the latest version. So, it makes no sense to keep
the versions with a tag. There is a capability of if you know the specific build number, you can specify the build number, and I’ll show you what that
looks like in a later slide. But for the Dynamics
365 Business Central sandbox, you’re always supposed to
be on the same version as the Business Central
in production itself. So insider builds are available to partners in
the ready to go program, and this is for ISV partners, and some of our partners that are building products for
Business Central Online, and those will need to have access to the latest
insider builds. So, those are released quite frequently on an insider basis, and you have to get
access to that. So, you have to sign up for that. If you want to learn
more about that, you can read or watch
the introduction to add-on apps video also in
the Dynamics learning portal. I go into some of the details on how to sign up for
that sort of thing. It’s supported for test and development only
or on docker hub. So currently, there is
no support for production. I’m not sure if that’s going to ever come for Business Central, that doesn’t make sense. But for a test and development, you can find this all in docker. So, how did those
docker image tags work? Well, we have
two versions, right? One is the Dynamics NAV version, which is a format where you have
microsoft/dynamics-nav:tag. Then, the tag has the version, the release, and
the localization. So, the version is
either 2016, or 2017, or 2018, and I’m just talking about the left side of
the screen at this point. So, the version is
2018, 17 or 16. Then you have the release, which is either the cu
with the numbers or cu4. If you look at third bullet,
it says 2018-cu4-dk. That means that’s
2018 cumulative update four in the Danish localization. Another way to specify
the release is by build number. So, if you know the build number, if you know to
specify 11.0.21441.0, that specifies a certain
cumulative updates, and I know that there are
people out there that actually know those numbers. I’m not one of them.
I have to look it up, but the point here is
that it’s possible to specify at the release level
which one you want. So, the way that
you can do it is, you can leave out all of those. So, you can leave out the tag, you can just say dynamics-nav. If you leave everything out, it will get the latest available. So, it will get 2018 with the latest cumulative update
in the localization w1. So, that’s the worldwide version. If you say 2018, it will get 2018 or 17 or 16, and then the latest version
that is available for that. So, if you specify 2018-de, de means Germany, it’ll
get the latest cu. If you only specify the cu, but not the localization, it will get w1.
Crystal clear, right? So, on the right hand side, you have the Business
Central Sandbox. The Business Central Sandbox, the format of the image tag
is microsoft/bcsandbox:tag. The only thing that’s in the tag
because you’re always on the latest version for
BC Sandbox is the localization. If you leave out
the localization, it’ll get w1, which is
the worldwide version. This is where if you know the specific build because those builds are still
going to be available. I’m not quite sure
exactly what the policy is for how long
those versions are available, but there needs to be some sort of way to revert back
for development and test purposes so you
can specify going back a number of
those build numbers. So, the build numbers themselves, if you know which one is needed. So, if you have for instance, a technical issue on
a specific build, you can specify that and create a Business
Central Sandbox. By the way, they don’t just implement
these changes online, if you want to learn
a little bit more about that, I refer to this video before. But the introduction
to add-on apps, and how to publish them, I go into quite
some detail on how they approach modifications to
Business Central online. So, if that’s something
you’re curious about, please watch that video. So, what are these Azure Images
and Templates used for? Well, the first is
the Azure Demo Environments. So, this is the regular
demo environment. So, if you go to
the demo website, you sign up for a demo tenants, this is where that comes out of. Business Central Sandbox
Environments, those are the Azure VMs that you can create in
your Azure subscription, and then of course,
Workshops VMs. So, we do quite a few workshops, so if we go into a workshop, and we have 25 attendees, there’s a script that
you can specify I want 25 virtual machines based
on this particular image. I want these workshop
files downloaded. There’s a number of
things that you can do with those Workshop VMS, and that creates a bunch
of them at the same time. That Workshop VM script is also used by Microsoft
when they go to events like directions going
to have take days or wherever there’s a large group of people that are
doing workshops, those VMs are then
created in one batch. These Azure Images and
Templates are all combined to a number of Azure Templates. The NAV demo environment is
available at Business Central Sandbox, One thing I want to
mention is, currently, the Azure VMs has the entire docker image downloaded inside of
the virtual machine. So, it always takes a while
for it to complete. The standard time if you
include Windows updates and everything to create
a new virtual machine, a new Azure virtual machine
is around an hour. So, in about an hour and a whole virtual
machine is created. Currently, as I said,
the entire docker image is downloaded inside, and this will change
in the future to use Azure Container
Instances instead, and that will save a bunch
of space in the VM. It will also be faster
to create new containers because it has to download less, and then will also as a result, consume a lot less
Azure resources. All right. Let’s go back to the Azure VM and see if our
container has completed. As you can see, the NAV Container bcdk is successfully
created and I think I can report PowerShell right
here in the Web client. There we go. Now look at
this, it’s five shortcuts. So, let’s see, this
took 343 seconds. So, what is that? Five minutes? On my local computer, it usually takes two minutes. So, even five minutes,
if you think about it, to create an entire
new environment, you can target this Danish
container in Visual Studio. So, if you have a Visual
Studio code workspace, all you need to do is tease
the launch that JSON to point at your Danish
container right now hit “F5” and you can immediately
see whether your ISV or your extension works on the Danish version in
a matter of five minutes. Five minutes, I look at it and I feel like, wow
that’s really slow. But if you really think about it, when you have
developed an extension on W_1 to be able to create another container based on a Danish version of NAV and implement that
and just by hitting F5 immediately you know
whether that works on a different localization
is just mindboggling. Today, we think this is all possible because of containers
and we can do this. But just one or two years ago when you thought about this, I just get real giddy about it when I really
think about it. So, I think this is
really cool stuff. The last thing I
want to show you is, let’s do Docker PS. Let’s see what that does now. So now you can see I have
bcdk and also NAV server, if I do Docker images. Come on docker images, that shows, I had
already shown that one. So, DK and US. So, those things
all work as well. So, if I want to get rid of the Danish because I don’t have
a need for it anymore, there’s another command
which is “Remove NAVContainer bcdk”
watch how fast this is. I hit “Enter”, “Removing
container” and it’s done. There goes my shortcuts. So, you have to be
real careful with this two because you have full C side access and the database is
inside the container. So, if you’re doing
development on C side in here, and you have files in there, also there are
some resource that are shared between the host
and the container itself. So, if you’re doing some file, some exporting of objects, and some file exchange, make sure that they are moved out of those shared files because those shared files will also be deleted when those
containers are removed. So that’s the extent of my demo for the Docker container command. Let’s go to the next section. The final section is titled
Extending Docker Containers. Some of the most common
scenarios to extend the Docker Container
are for instance things like you want to use
your own developer license, so you want to create a container in which your own ISV
development license is loaded because you need to
have the granule loaded in your development
license to be able to develop those object numbers. You might want to point to your own database on a SQL Server that you’re
hosting yourself. Maybe you want to use
your own domain name or an SSL certificate inside
of your container itself, publish ports on the host
for public access. You want to tweak
some little things like set up additional users, make some changes to
config files and there’s a lot of capabilities in there. A lot of spots where you can
actually take a version of the install scripts and load your own custom
scripts instead. Mechanism is, there
are a number of installation scripts and
those installation scripts are all in the c:run folder. Like for instance, nav start, NAV starts runs
the setup configuration script and that is found in
a particular folder. Now, there’s also a folder
called runmy and those have the custom versions of
those configurations scripts. So, maybe what I can do is, I can just show you on the Azure VM when I go
into Windows Explorer, I go to the “C Drive”
under “Program Data”. So you might need to
make that available. There is a NavContainerHelper
folder and then extensions, and underneath
extensions, there’s a folder called navserver. That navserver folder is mapped two folders
inside the container. I’m going to show you how that works to go into the container. If you want to watch that, I use that mechanism in
the migration videos. If you watched the video “How to migrate your CAL code
to AL code”, I go into some detail on how to interact with
the shared folders. Actually, as you can see, the folder from migration
is still there. So, inside this “my” folder, if I open a PowerShell
ISE window, I can take, for instance, the setup
configuration script and I can look at
it and as you can see it runs the
c:runSetupConfiguration script. So, the custom script
runs the standard script first and then it executes
a bunch of different commands. You can also do a bunch of different XR commands before
running the standard script. So, you have a number of different choices on
how to deal with that. So, just like the setup
configuration PS1 script, there are a number of additional
installation script that also run as part of creating
one of those containers. You can hook into there and you can extend the functionality by adding your custom code to those installations scripts. Some examples are where you can change settings
with a simple parameter. CustomNavSettings where
you can set “Enable Debugging” maybe “Report
PDF Font Embedding”. You can change
the behavior by adding scripts to the “my” folder
through a volume. I just showed you
that on Azure VM. You can download
a zip file and put it anywhere in the container,
for instance, to add dlls or adding controls
for the workshop VMs. We can specify some files that should be loaded as part
of the workshop VM. So, when you create an Azure VM, you drop a zip file
on some dropbox, it downloads that when it creates the VM and now all of
the attendees of the workshop have access to
the files instead of providing a download link that might not be
available anymore. That’s it for extending
the Docker container process. I’m not going to go into too many details because there is just so much to
cover on that front. What I do want to do is show you a slide with
some Docker resources. First the communication about Docker and NAV and
Business Central are through the Microsoft Team blog and also Freddy is quite
active on his blog. The usage scenarios is link NAVOnDockerE2E. That is a PDF with an end to end. example on how that all works. Then there are
two GitHub repositories. One is the NAV Docker and one
is the NAVcontainerhelper. In those GitHub repositories
are also Hands-On Lab files. So, I just wanted to mention that because I showed you some of the commands that are
available for Docker. If you follow, if you go into those repositories on GitHub, there are HOL documents, Hands-On Lab documents
and in there is a long list of exercises
that you can do. So, what I would recommend
is go to, create yourself an Azure VM or install it on
your local computer. Start creating
containers, go through the Hands-On Lab and start
exercising how that all works. I know a little bit about
how this all works and I am loving how this makes
me more efficient. It’s really easy to get
more proficient at it. Freddy has made it real easy
to create these things. So, that’s it for the video. For more information about Business Central
apps please follow the link and that leaves me to say thank you so much
for watching this video, for taking some time with me. I hope that I have given
you some useful information and hope you have a fantastic and wonderful
rest of your day.

One Comment

Leave a Reply

Your email address will not be published. Required fields are marked *