{"id":4497,"date":"2019-10-03T00:51:43","date_gmt":"2019-10-02T22:51:43","guid":{"rendered":"https:\/\/www.dontesta.it\/?p=4497"},"modified":"2019-10-03T00:51:43","modified_gmt":"2019-10-02T22:51:43","slug":"how-to-setup-docker-container-sql-server-2017-for-liferay-development-environment","status":"publish","type":"post","link":"https:\/\/www.dontesta.it\/en\/2019\/10\/03\/how-to-setup-docker-container-sql-server-2017-for-liferay-development-environment\/","title":{"rendered":"How to setup Docker container SQL Server 2017 for Liferay Development Environment"},"content":{"rendered":"<p><\/p>\n<p style=\"text-align: justify;\">When we start a new project using Liferay and the project involves the development of new entities, I suggest to set up your own local development environment as closely as possible to the customer\u2019s development environment, particularly as regards the database.<\/p>\n<p style=\"text-align: justify;\">In this article I will explain how to use Docker to setup the <a href=\"https:\/\/hub.docker.com\/_\/microsoft-mssql-server\" target=\"_blank\" rel=\"noopener noreferrer\">Microsoft SQL Server 2017<\/a> container for use with Liferay. I also recommend reading the article <a href=\"https:\/\/www.dontesta.it\/2019\/08\/21\/how-to-build-a-docker-liferay-7-2-image-with-the-oracle-database-support\/\" target=\"_blank\" rel=\"noopener noreferrer\">How to build a Docker Liferay 7.2 image with the Oracle Database support<\/a>.<\/p>\n<p style=\"text-align: justify;\">These instructions comprise the bare-minimum setup required for initialization of a Liferay instance. The instructions are targeted for an audience of experienced developers with little to medium experience of Docker and Liferay. The deployment described results in a per-developer SQL Server setup on your local development host that you can use for Liferay.<\/p>\n<p>&nbsp;<\/p>\n<h2>1. What are the requirements<\/h2>\n<p>Before proceeding with the Docker container setup, let\u2019s see what the requirements are:<\/p>\n<ul>\n<li>You need an account on Docker, which you can create from Docker \u2013 Signup;<\/li>\n<li>You need to install or update Docker on your PC. Refer to this\u00a0<a href=\"https:\/\/docs.docker.com\/docker-for-windows\/\" target=\"_blank\" rel=\"noopener noreferrer\">article<\/a>\u00a0for how to install Docker on Windows.<\/li>\n<\/ul>\n<p style=\"text-align: justify;\">The docker versions on which I have successfully run the SQL Server Docker container are: 17.x, 18.x and 19.x. The version of Docker Engine (Community Edition) that I will refer to in this article is <strong>19.03.1<\/strong>\u00a0(you can check version with command\u00a0<em>docker version<\/em>). For more information regards SQL Server requirements you can read <a href=\"https:\/\/docs.microsoft.com\/en-us\/sql\/linux\/quickstart-install-connect-docker?view=sql-server-2017&amp;pivots=cs1-bash#requirements\" target=\"_blank\" rel=\"noopener noreferrer\">Quick Start: Run SQL Server container images with Docker<\/a>.<\/p>\n<p style=\"text-align: justify;\">What is shown in this article can be performed on Windows, Unix-like operating systems. In my case I use macOS. However, always refer to the documentation of Docker and SQL Server for what concerns the minimal requirements that the target system must have.<\/p>\n<p>&nbsp;<\/p>\n<h2>2. SQL Server Database Docker Image<\/h2>\n<p style=\"text-align: justify;\">The latest version available is SQL Server 2017, this release is the version supported by Liferay (you can see <a href=\"https:\/\/web.liferay.com\/documents\/14\/21598941\/Liferay+DXP+7.2+Compatibility+Matrix\/b6e0f064-db31-49b4-8317-a29d1d76abf7?\" target=\"_blank\" rel=\"noopener noreferrer\">Liferay Digital Experience Platform 7.2 Compatibility Matrix<\/a>). Official images for Microsoft SQL Server on Linux for Docker Engine available on <a href=\"https:\/\/hub.docker.com\/_\/microsoft-mssql-server\" target=\"_blank\" rel=\"noopener noreferrer\">Docker Hub<\/a>.<\/p>\n<p>The version of our interest is the latest version: SQL Server 2017. We then perform the pull with the following command.<\/p>\n<p>&nbsp;<\/p>\n<pre class=\"theme:solarized-dark toolbar:1 lang:sh decode:true\" title=\"Console 1 - SQL Server 2017 Docker Pull\">docker pull mcr.microsoft.com\/mssql\/server:2017-latest<\/pre>\n<p>&nbsp;<\/p>\n<p style=\"text-align: justify;\">Once the pull is done we could get more information on the image using the command <em>docker images<\/em> and <em>docker inspect mcr.microsoft.com\/mssql\/server:2017-latest<\/em><\/p>\n<p>&nbsp;<\/p>\n<h2>3. How to starting SQL Server Database Server instance<\/h2>\n<p>To get a working SQL Server instance for use with Liferay, we need to:<\/p>\n<ul>\n<li>Creating a Docker container for SQL Server<\/li>\n<li>Setting up a database and login user specifically for Liferay<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<pre class=\"theme:solarized-dark toolbar:1 lang:sh decode:true\" title=\"Console 2 - Create the Docker Container\">docker run -d -p 1433:1433 \\\r\n\t-h sqlserver.local --name sqlserver.local \\\r\n\t-e 'ACCEPT_EULA=Y' \\\r\n\t-e 'SA_PASSWORD=yourStrong(!)Password'  \\\r\n\t-v mssql-data:\/var\/opt\/mssql \\\r\n\t-d mcr.microsoft.com\/mssql\/server:2017-latest<\/pre>\n<p style=\"text-align: justify;\">We start by deploying the Microsoft-supplied SQL Server image to a local developers host: It will take one or two minutes to initialize the database.<\/p>\n<p style=\"text-align: justify;\">Docker manages several kinds of objects the two we are interested in here are the so-called <strong>docker image <\/strong>(a minimal linux operating system with Microsoft's SQL Server installed); and a <strong>docker container<\/strong>, which is a virtual machine running an instance of that image.<\/p>\n<p style=\"text-align: justify;\">The above command accomplishes both of these functions, fetching the image from <a href=\"https:\/\/hub.docker.com\/publishers\/microsoftowner\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"broken_link\">Microsoft's Docker Hub<\/a> account to your local computer and starting that image it in a container.<\/p>\n<p style=\"text-align: justify;\">The argument\u00a0<em><strong>-p host-external-port:container-internal-port<\/strong><\/em>\u00a0makes the container's sql server port (which must be 1433) available on the specified host computer's port.<\/p>\n<p style=\"text-align: justify;\">Port 1433 is the default port for MS SQL Server. I explicitly specify the defaults in the commands below for those cases where you might want to expose several SQL Servers, each in their own container, each exposing a unique port on the host computer.<\/p>\n<p>The\u00a0<strong>-d<\/strong>\u00a0flag causes docker to run the container in the background as a daemon process.<\/p>\n<p style=\"text-align: justify;\">The<strong> --name sqlserver.local<\/strong>\u00a0argument provides an optional name for the container; it is arbitrary but must be unique across your containers. It is merely for convenience.<\/p>\n<p style=\"text-align: justify;\">The<strong> -h sqlserver.local<\/strong> argument provides an optional hostname for the container; it is arbitrary but must be unique across your containers. It is merely for convenience.<\/p>\n<p style=\"text-align: justify;\">The argument\u00a0<strong>-v mssql-data:\/var\/opt\/mssql\u00a0<\/strong>\u00a0creates an independent docker volume named\u00a0<strong>mssql-data<\/strong>\u00a0which associates the\u00a0<em>\/var\/opt\/mssql<\/em> \u00a0filesystem on the container to an external independent volume - think of it as a share that will be mounted. The Microsoft-supplied SQL Server image has been specifically configured to keep all its data in that filesystem.<\/p>\n<p style=\"text-align: justify;\">Docker images have a default startup command built-in; the\u00a0<strong>-e variable=value<\/strong>\u00a0arguments set environment variables and are a way to indicate to the start-up program that we are in the process of setting up the Microsoft SQL Server instance.\u00a0 They need only be run once\u00a0 when initially setting up a container.<\/p>\n<p style=\"text-align: justify;\">The <strong>SA_PASSWORD<\/strong> environment variable set the system administrator password. In this case the password set to: yourStrong(!)Password<\/p>\n<p style=\"text-align: justify;\">Note that by default the hosts 1433 port is available on both on the external interface (its TCP\/IP address) as well as the loop-back port (localhost). You can get information on our setup with the\u00a0<strong>docker ps<\/strong>, <strong>docker volumes<\/strong> and <strong>docker container inspect<\/strong> commands.<\/p>\n<p>&nbsp;<\/p>\n<pre class=\"theme:solarized-dark toolbar:1 lang:sh decode:true\" title=\"Console 3 - Docker ps output\">CONTAINER ID        IMAGE                                        COMMAND                  CREATED             STATUS              PORTS                    NAMES\r\n41b28847c78c        mcr.microsoft.com\/mssql\/server:2017-latest   \"\/opt\/mssql\/bin\/sqls\u2026\"   14 minutes ago      Up 14 minutes       0.0.0.0:1433-&gt;1433\/tcp   sqlserver.local<\/pre>\n<pre class=\"theme:solarized-dark toolbar:1 lang:js decode:true\" title=\"Console 4 - Docker volume inspect output\">[\r\n    {\r\n        \"CreatedAt\": \"2019-10-02T21:04:14Z\",\r\n        \"Driver\": \"local\",\r\n        \"Labels\": null,\r\n        \"Mountpoint\": \"\/var\/lib\/docker\/volumes\/mssql-data\/_data\",\r\n        \"Name\": \"mssql-data\",\r\n        \"Options\": null,\r\n        \"Scope\": \"local\"\r\n    }\r\n]<\/pre>\n<pre class=\"theme:solarized-dark toolbar:1 lang:js decode:true\" title=\"Console 5 - Docker container inspect output\">[\r\n    {\r\n        \"Id\": \"41b28847c78cf689f7e3016a98a8e9fdb7dcd0f9ce68e1efa013ecd4653cff13\",\r\n        \"Created\": \"2019-10-02T21:30:50.3077299Z\",\r\n        \"Path\": \"\/opt\/mssql\/bin\/sqlservr\",\r\n        \"Args\": [],\r\n        \"State\": {\r\n            \"Status\": \"running\",\r\n            \"Running\": true,\r\n            \"Paused\": false,\r\n            \"Restarting\": false,\r\n            \"OOMKilled\": false,\r\n            \"Dead\": false,\r\n            \"Pid\": 47844,\r\n            \"ExitCode\": 0,\r\n            \"Error\": \"\",\r\n            \"StartedAt\": \"2019-10-02T21:30:51.0129593Z\",\r\n            \"FinishedAt\": \"0001-01-01T00:00:00Z\"\r\n        },\r\n        \"Image\": \"sha256:d9b9b96627b758fa300f8392065a150f138bab08cb7b3fa885cd5528459bec59\",\r\n        \"ResolvConfPath\": \"\/var\/lib\/docker\/containers\/41b28847c78cf689f7e3016a98a8e9fdb7dcd0f9ce68e1efa013ecd4653cff13\/resolv.conf\",\r\n        \"HostnamePath\": \"\/var\/lib\/docker\/containers\/41b28847c78cf689f7e3016a98a8e9fdb7dcd0f9ce68e1efa013ecd4653cff13\/hostname\",\r\n        \"HostsPath\": \"\/var\/lib\/docker\/containers\/41b28847c78cf689f7e3016a98a8e9fdb7dcd0f9ce68e1efa013ecd4653cff13\/hosts\",\r\n        \"LogPath\": \"\/var\/lib\/docker\/containers\/41b28847c78cf689f7e3016a98a8e9fdb7dcd0f9ce68e1efa013ecd4653cff13\/41b28847c78cf689f7e3016a98a8e9fdb7dcd0f9ce68e1efa013ecd4653cff13-json.log\",\r\n        \"Name\": \"\/sqlserver.local\",\r\n        \"RestartCount\": 0,\r\n        \"Driver\": \"overlay2\",\r\n        \"Platform\": \"linux\",\r\n        \"MountLabel\": \"\",\r\n        \"ProcessLabel\": \"\",\r\n        \"AppArmorProfile\": \"\",\r\n        \"ExecIDs\": null,\r\n        \"HostConfig\": {\r\n            \"Binds\": [\r\n                \"mssql-data:\/var\/opt\/mssql\"\r\n            ],\r\n            \"ContainerIDFile\": \"\",\r\n            \"LogConfig\": {\r\n                \"Type\": \"json-file\",\r\n                \"Config\": {}\r\n            },\r\n            \"NetworkMode\": \"default\",\r\n            \"PortBindings\": {\r\n                \"1433\/tcp\": [\r\n                    {\r\n                        \"HostIp\": \"\",\r\n                        \"HostPort\": \"1433\"\r\n                    }\r\n                ]\r\n            },\r\n            \"RestartPolicy\": {\r\n                \"Name\": \"no\",\r\n                \"MaximumRetryCount\": 0\r\n            },\r\n            \"AutoRemove\": false,\r\n            \"VolumeDriver\": \"\",\r\n            \"VolumesFrom\": null,\r\n            \"CapAdd\": null,\r\n            \"CapDrop\": null,\r\n            \"Capabilities\": null,\r\n            \"Dns\": [],\r\n            \"DnsOptions\": [],\r\n            \"DnsSearch\": [],\r\n            \"ExtraHosts\": null,\r\n            \"GroupAdd\": null,\r\n            \"IpcMode\": \"private\",\r\n            \"Cgroup\": \"\",\r\n            \"Links\": null,\r\n            \"OomScoreAdj\": 0,\r\n            \"PidMode\": \"\",\r\n            \"Privileged\": false,\r\n            \"PublishAllPorts\": false,\r\n            \"ReadonlyRootfs\": false,\r\n            \"SecurityOpt\": null,\r\n            \"UTSMode\": \"\",\r\n            \"UsernsMode\": \"\",\r\n            \"ShmSize\": 67108864,\r\n            \"Runtime\": \"runc\",\r\n            \"ConsoleSize\": [\r\n                0,\r\n                0\r\n            ],\r\n            \"Isolation\": \"\",\r\n            \"CpuShares\": 0,\r\n            \"Memory\": 0,\r\n            \"NanoCpus\": 0,\r\n            \"CgroupParent\": \"\",\r\n            \"BlkioWeight\": 0,\r\n            \"BlkioWeightDevice\": [],\r\n            \"BlkioDeviceReadBps\": null,\r\n            \"BlkioDeviceWriteBps\": null,\r\n            \"BlkioDeviceReadIOps\": null,\r\n            \"BlkioDeviceWriteIOps\": null,\r\n            \"CpuPeriod\": 0,\r\n            \"CpuQuota\": 0,\r\n            \"CpuRealtimePeriod\": 0,\r\n            \"CpuRealtimeRuntime\": 0,\r\n            \"CpusetCpus\": \"\",\r\n            \"CpusetMems\": \"\",\r\n            \"Devices\": [],\r\n            \"DeviceCgroupRules\": null,\r\n            \"DeviceRequests\": null,\r\n            \"KernelMemory\": 0,\r\n            \"KernelMemoryTCP\": 0,\r\n            \"MemoryReservation\": 0,\r\n            \"MemorySwap\": 0,\r\n            \"MemorySwappiness\": null,\r\n            \"OomKillDisable\": false,\r\n            \"PidsLimit\": null,\r\n            \"Ulimits\": null,\r\n            \"CpuCount\": 0,\r\n            \"CpuPercent\": 0,\r\n            \"IOMaximumIOps\": 0,\r\n            \"IOMaximumBandwidth\": 0,\r\n            \"MaskedPaths\": [\r\n                \"\/proc\/asound\",\r\n                \"\/proc\/acpi\",\r\n                \"\/proc\/kcore\",\r\n                \"\/proc\/keys\",\r\n                \"\/proc\/latency_stats\",\r\n                \"\/proc\/timer_list\",\r\n                \"\/proc\/timer_stats\",\r\n                \"\/proc\/sched_debug\",\r\n                \"\/proc\/scsi\",\r\n                \"\/sys\/firmware\"\r\n            ],\r\n            \"ReadonlyPaths\": [\r\n                \"\/proc\/bus\",\r\n                \"\/proc\/fs\",\r\n                \"\/proc\/irq\",\r\n                \"\/proc\/sys\",\r\n                \"\/proc\/sysrq-trigger\"\r\n            ]\r\n        },\r\n        \"GraphDriver\": {\r\n            \"Data\": {\r\n                \"LowerDir\": \"\/var\/lib\/docker\/overlay2\/b69e33de59299005dc89d3d583321b5d52c8859ee5195a85a4369e753b6466a7-init\/diff:\/var\/lib\/docker\/overlay2\/b1c9478d0c72e7206ca529376d2426de28be50b4df0026cccc716e58dfd3febe\/diff:\/var\/lib\/docker\/overlay2\/6af2770e759c88593b0780bbccc2fea3e8cb86aefe40f2783deb7468130f48e0\/diff:\/var\/lib\/docker\/overlay2\/f4aa2ce0efb7dbab242407dfcb10820b49f863ee45de4fe3bfb3069d84d094a2\/diff:\/var\/lib\/docker\/overlay2\/fad7c1152f054c8637a489df05971117aa6960a7acc7ac45ab31755ba4fd8349\/diff:\/var\/lib\/docker\/overlay2\/4a7d0dddd251d90a364f84e9a8ad04cc25f89430cb64b3e57d752506f91692e1\/diff:\/var\/lib\/docker\/overlay2\/f7b31fabfd43e1a8898644c34bcbfbdc220c526e0172a1854582d7cc20363621\/diff:\/var\/lib\/docker\/overlay2\/1407e02d43ccaa2d00de404a542be107f2150b16009325020896ba586564e942\/diff:\/var\/lib\/docker\/overlay2\/88b0c4e78b75386aa570f552b7089676d776c6f5678be540fbc138cbce2cff81\/diff:\/var\/lib\/docker\/overlay2\/d2cbe30634c06fb0098b0d631d5d704c3e7dc43c74c4dfbcb54bebdfdd6023b4\/diff\",\r\n                \"MergedDir\": \"\/var\/lib\/docker\/overlay2\/b69e33de59299005dc89d3d583321b5d52c8859ee5195a85a4369e753b6466a7\/merged\",\r\n                \"UpperDir\": \"\/var\/lib\/docker\/overlay2\/b69e33de59299005dc89d3d583321b5d52c8859ee5195a85a4369e753b6466a7\/diff\",\r\n                \"WorkDir\": \"\/var\/lib\/docker\/overlay2\/b69e33de59299005dc89d3d583321b5d52c8859ee5195a85a4369e753b6466a7\/work\"\r\n            },\r\n            \"Name\": \"overlay2\"\r\n        },\r\n        \"Mounts\": [\r\n            {\r\n                \"Type\": \"volume\",\r\n                \"Name\": \"mssql-data\",\r\n                \"Source\": \"\/var\/lib\/docker\/volumes\/mssql-data\/_data\",\r\n                \"Destination\": \"\/var\/opt\/mssql\",\r\n                \"Driver\": \"local\",\r\n                \"Mode\": \"z\",\r\n                \"RW\": true,\r\n                \"Propagation\": \"\"\r\n            }\r\n        ],\r\n        \"Config\": {\r\n            \"Hostname\": \"sqlserver.local\",\r\n            \"Domainname\": \"\",\r\n            \"User\": \"\",\r\n            \"AttachStdin\": false,\r\n            \"AttachStdout\": false,\r\n            \"AttachStderr\": false,\r\n            \"ExposedPorts\": {\r\n                \"1433\/tcp\": {}\r\n            },\r\n            \"Tty\": false,\r\n            \"OpenStdin\": false,\r\n            \"StdinOnce\": false,\r\n            \"Env\": [\r\n                \"ACCEPT_EULA=Y\",\r\n                \"SA_PASSWORD=yourStrong(!)Password\",\r\n                \"PATH=\/usr\/local\/sbin:\/usr\/local\/bin:\/usr\/sbin:\/usr\/bin:\/sbin:\/bin\"\r\n            ],\r\n            \"Cmd\": [\r\n                \"\/opt\/mssql\/bin\/sqlservr\"\r\n            ],\r\n            \"Image\": \"mcr.microsoft.com\/mssql\/server:2017-latest\",\r\n            \"Volumes\": null,\r\n            \"WorkingDir\": \"\",\r\n            \"Entrypoint\": null,\r\n            \"OnBuild\": null,\r\n            \"Labels\": {\r\n                \"com.microsoft.product\": \"Microsoft SQL Server\",\r\n                \"com.microsoft.version\": \"14.0.3223.3\",\r\n                \"vendor\": \"Microsoft\"\r\n            }\r\n        },\r\n        \"NetworkSettings\": {\r\n            \"Bridge\": \"\",\r\n            \"SandboxID\": \"e93b62c6c1ebbc9e4c9e7feaa429b1c894a704bea86eebf98941c9fe76249a00\",\r\n            \"HairpinMode\": false,\r\n            \"LinkLocalIPv6Address\": \"\",\r\n            \"LinkLocalIPv6PrefixLen\": 0,\r\n            \"Ports\": {\r\n                \"1433\/tcp\": [\r\n                    {\r\n                        \"HostIp\": \"0.0.0.0\",\r\n                        \"HostPort\": \"1433\"\r\n                    }\r\n                ]\r\n            },\r\n            \"SandboxKey\": \"\/var\/run\/docker\/netns\/e93b62c6c1eb\",\r\n            \"SecondaryIPAddresses\": null,\r\n            \"SecondaryIPv6Addresses\": null,\r\n            \"EndpointID\": \"da6a6d19df60437c199f3980cd667d98e799773a91510a3f81766966e1661710\",\r\n            \"Gateway\": \"172.17.0.1\",\r\n            \"GlobalIPv6Address\": \"\",\r\n            \"GlobalIPv6PrefixLen\": 0,\r\n            \"IPAddress\": \"172.17.0.3\",\r\n            \"IPPrefixLen\": 16,\r\n            \"IPv6Gateway\": \"\",\r\n            \"MacAddress\": \"02:42:ac:11:00:03\",\r\n            \"Networks\": {\r\n                \"bridge\": {\r\n                    \"IPAMConfig\": null,\r\n                    \"Links\": null,\r\n                    \"Aliases\": null,\r\n                    \"NetworkID\": \"b0dc647384156d4bbd920ea297a330f3436e5b757972faff96e9aa5abd043a03\",\r\n                    \"EndpointID\": \"da6a6d19df60437c199f3980cd667d98e799773a91510a3f81766966e1661710\",\r\n                    \"Gateway\": \"172.17.0.1\",\r\n                    \"IPAddress\": \"172.17.0.3\",\r\n                    \"IPPrefixLen\": 16,\r\n                    \"IPv6Gateway\": \"\",\r\n                    \"GlobalIPv6Address\": \"\",\r\n                    \"GlobalIPv6PrefixLen\": 0,\r\n                    \"MacAddress\": \"02:42:ac:11:00:03\",\r\n                    \"DriverOpts\": null\r\n                }\r\n            }\r\n        }\r\n    }\r\n]<\/pre>\n<p style=\"text-align: justify;\">Great \ud83d\ude09 We are almost there. At this point we have to create the database, the login, the user and assign the correct permissions for the user who must access the Liferay database. The SQL script shown below performs the above description.<\/p>\n<p>&nbsp;<\/p>\n<pre class=\"theme:solarized-dark toolbar:1 lang:tsql decode:true \" title=\"SQL Script - Setup liferay database\">CREATE DATABASE lportal_dev\r\nGO\r\nUSE lportal_dev\r\nCREATE LOGIN liferay WITH PASSWORD = \"lportal@DEV@72\", DEFAULT_DATABASE = lportal_dev\r\nGO\r\nCREATE USER liferay FOR LOGIN liferay\r\nGO\r\nALTER ROLE db_ddladmin   ADD MEMBER liferay\r\nALTER ROLE db_datareader ADD MEMBER liferay\r\nALTER ROLE db_datawriter ADD MEMBER liferay\r\nGO<\/pre>\n<p style=\"text-align: justify;\">To execute the script we can use the following command <strong>docker exec<\/strong>.<\/p>\n<pre class=\"theme:solarized-dark toolbar:1 lang:sh decode:true\" title=\"Console 6 - Execute SQL script by docker exec command\">docker exec -it sqlserver.local \/opt\/mssql-tools\/bin\/sqlcmd \\\r\n   -S localhost -U SA -P 'yourStrong(!)Password' \\\r\n   -Q 'CREATE DATABASE lportal_dev\r\n\t\tGO\r\n\t\tUSE lportal_dev\r\n\t\tCREATE LOGIN liferay WITH PASSWORD = \"lportal@DEV@72\", DEFAULT_DATABASE = lportal_dev\r\n\t\tGO\r\n\t\tCREATE USER liferay FOR LOGIN liferay\r\n\t\tGO\r\n\t\tALTER ROLE db_ddladmin   ADD MEMBER liferay\r\n\t\tALTER ROLE db_datareader ADD MEMBER liferay\r\n\t\tALTER ROLE db_datawriter ADD MEMBER liferay\r\n\t\tGO'<\/pre>\n<p style=\"text-align: justify;\">Now you can connect, from the host computer, to the containers' SQL Server via\u00a0<strong>sqlcmd<\/strong>\u00a0as the\u00a0liferay\u00a0user as so:<\/p>\n<pre class=\"theme:solarized-dark toolbar:1 lang:sh decode:true \" title=\"Console 7 - Connect to Liferay Database and execute SQL Query\">$ docker exec -it sqlserver.local bash\r\n# \/opt\/mssql-tools\/bin\/sqlcmd -S localhost,1433 -d lportal_dev -U liferay -P 'lportal@DEV@72' -Q 'SELECT @@VERSION'<\/pre>\n<pre class=\"theme:solarized-dark toolbar:1 lang:sh decode:true \" title=\"Console 8 - Output of the SQL Query\">Microsoft SQL Server 2017 (RTM-CU16) (KB4508218) - 14.0.3223.3 (X64)\r\n\tJul 12 2019 17:43:08\r\n\tCopyright (C) 2017 Microsoft Corporation\r\n\tDeveloper Edition (64-bit) on Linux (Ubuntu 16.04.6 LTS)\r\n\r\n(1 rows affected)<\/pre>\n<p style=\"text-align: justify;\">Executing the query <strong>SELECT @@VERSION<\/strong> produces the output shown above. The query returns detail information about the SQL Server version. The images below show the setup of the connection to the Liferay database that we have just created. The tool used is <a href=\"https:\/\/github.com\/Microsoft\/azuredatastudio\" target=\"_blank\" rel=\"noopener noreferrer\">Azure Data Studio<\/a>.<\/p>\n<p>&nbsp;<\/p>\n<div id=\"attachment_4505\" style=\"width: 1016px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/www.dontesta.it\/wp-content\/uploads\/2019\/10\/AzureDataStudioConnectToLiferay.png\"><img aria-describedby=\"caption-attachment-4505\" decoding=\"async\" loading=\"lazy\" class=\"size-full wp-image-4505\" src=\"https:\/\/www.dontesta.it\/wp-content\/uploads\/2019\/10\/AzureDataStudioConnectToLiferay.png\" alt=\"Figure 1 - Setup connection to Liferay Database\" width=\"1006\" height=\"874\" srcset=\"https:\/\/www.dontesta.it\/wp-content\/uploads\/2019\/10\/AzureDataStudioConnectToLiferay.png 1006w, https:\/\/www.dontesta.it\/wp-content\/uploads\/2019\/10\/AzureDataStudioConnectToLiferay-300x261.png 300w, https:\/\/www.dontesta.it\/wp-content\/uploads\/2019\/10\/AzureDataStudioConnectToLiferay-768x667.png 768w\" sizes=\"auto, (max-width: 1006px) 100vw, 1006px\" \/><\/a><p id=\"caption-attachment-4505\" class=\"wp-caption-text\">Figure 1 - Setup connection to Liferay Database<\/p><\/div>\n<p>&nbsp;<\/p>\n<div id=\"attachment_4506\" style=\"width: 1034px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/www.dontesta.it\/wp-content\/uploads\/2019\/10\/AzureDataStudioConnectedToLiferay.png\"><img aria-describedby=\"caption-attachment-4506\" decoding=\"async\" loading=\"lazy\" class=\"size-large wp-image-4506\" src=\"https:\/\/www.dontesta.it\/wp-content\/uploads\/2019\/10\/AzureDataStudioConnectedToLiferay-1024x1071.png\" alt=\"Figure 2 - Database Workspace\" width=\"1024\" height=\"1071\" srcset=\"https:\/\/www.dontesta.it\/wp-content\/uploads\/2019\/10\/AzureDataStudioConnectedToLiferay-1024x1071.png 1024w, https:\/\/www.dontesta.it\/wp-content\/uploads\/2019\/10\/AzureDataStudioConnectedToLiferay-300x314.png 300w, https:\/\/www.dontesta.it\/wp-content\/uploads\/2019\/10\/AzureDataStudioConnectedToLiferay-768x803.png 768w, https:\/\/www.dontesta.it\/wp-content\/uploads\/2019\/10\/AzureDataStudioConnectedToLiferay.png 1584w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><p id=\"caption-attachment-4506\" class=\"wp-caption-text\">Figure 2 - Database Workspace<\/p><\/div>\n<p>&nbsp;<\/p>\n<h2>4. The next step<\/h2>\n<p style=\"text-align: justify;\">In the next article (which will come soon), we will see How to create a Docker Liferay 7.2 image with support for the SQL Server 2017 database.<\/p>\n<p><\/p>","protected":false},"excerpt":{"rendered":"<p>When we start a new project using Liferay and the project involves the development of new entities, I suggest to set up your own local development environment as closely as possible to the customer\u2019s&#46;&#46;&#46;<\/p>\n","protected":false},"author":3,"featured_media":4509,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_import_markdown_pro_load_document_selector":0,"_import_markdown_pro_submit_text_textarea":"","_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"footnotes":""},"categories":[490,15,23,566],"tags":[671,637,595],"class_list":["post-4497","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-blog-2","category-liferay","category-rdbms","category-sql-server","tag-docker","tag-liferay","tag-microsoft-sql-server"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v25.1 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>How to setup Docker container SQL Server 2017 for Liferay Development Environment<\/title>\n<meta name=\"description\" content=\"In this article I will explain how to use Docker to setup the SQL Server 2017 Database container for use with Liferay. A few step to get the result.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.dontesta.it\/2019\/10\/03\/how-to-setup-docker-container-sql-server-2017-for-liferay-development-environment\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"How to setup Docker container SQL Server 2017 for Liferay Development Environment\" \/>\n<meta property=\"og:description\" content=\"In this article I will explain how to use Docker to setup the SQL Server 2017 Database container for use with Liferay. A few step to get the result.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.dontesta.it\/2019\/10\/03\/how-to-setup-docker-container-sql-server-2017-for-liferay-development-environment\/\" \/>\n<meta property=\"og:site_name\" content=\"Antonio Musarra&#039;s Blog\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/antoniomusarrablog\" \/>\n<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/antoniomusarrablog\" \/>\n<meta property=\"article:published_time\" content=\"2019-10-02T22:51:43+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.dontesta.it\/wp-content\/uploads\/2019\/10\/HowToSetupDockerContainerSQLServer2017ForLiferay-DevelopmentEnvironment_FeatureImage.png\" \/>\n\t<meta property=\"og:image:width\" content=\"722\" \/>\n\t<meta property=\"og:image:height\" content=\"342\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Antonio Musarra\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@antonio_musarra\" \/>\n<meta name=\"twitter:site\" content=\"@antonio_musarra\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Antonio Musarra\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"10 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.dontesta.it\/2019\/10\/03\/how-to-setup-docker-container-sql-server-2017-for-liferay-development-environment\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.dontesta.it\/2019\/10\/03\/how-to-setup-docker-container-sql-server-2017-for-liferay-development-environment\/\"},\"author\":{\"name\":\"Antonio Musarra\",\"@id\":\"https:\/\/www.dontesta.it\/#\/schema\/person\/0c69ed36230e1477875d6171b48b9b24\"},\"headline\":\"How to setup Docker container SQL Server 2017 for Liferay Development Environment\",\"datePublished\":\"2019-10-02T22:51:43+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.dontesta.it\/2019\/10\/03\/how-to-setup-docker-container-sql-server-2017-for-liferay-development-environment\/\"},\"wordCount\":1025,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.dontesta.it\/#\/schema\/person\/0c69ed36230e1477875d6171b48b9b24\"},\"image\":{\"@id\":\"https:\/\/www.dontesta.it\/2019\/10\/03\/how-to-setup-docker-container-sql-server-2017-for-liferay-development-environment\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.dontesta.it\/wp-content\/uploads\/2019\/10\/HowToSetupDockerContainerSQLServer2017ForLiferay-DevelopmentEnvironment_FeatureImage.png\",\"keywords\":[\"Docker\",\"Liferay\",\"Microsoft SQL Server\"],\"articleSection\":[\"Blog\",\"Liferay\",\"RDBMS\",\"SQL Server\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.dontesta.it\/2019\/10\/03\/how-to-setup-docker-container-sql-server-2017-for-liferay-development-environment\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.dontesta.it\/2019\/10\/03\/how-to-setup-docker-container-sql-server-2017-for-liferay-development-environment\/\",\"url\":\"https:\/\/www.dontesta.it\/2019\/10\/03\/how-to-setup-docker-container-sql-server-2017-for-liferay-development-environment\/\",\"name\":\"How to setup Docker container SQL Server 2017 for Liferay Development Environment\",\"isPartOf\":{\"@id\":\"https:\/\/www.dontesta.it\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.dontesta.it\/2019\/10\/03\/how-to-setup-docker-container-sql-server-2017-for-liferay-development-environment\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.dontesta.it\/2019\/10\/03\/how-to-setup-docker-container-sql-server-2017-for-liferay-development-environment\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.dontesta.it\/wp-content\/uploads\/2019\/10\/HowToSetupDockerContainerSQLServer2017ForLiferay-DevelopmentEnvironment_FeatureImage.png\",\"datePublished\":\"2019-10-02T22:51:43+00:00\",\"description\":\"In this article I will explain how to use Docker to setup the SQL Server 2017 Database container for use with Liferay. A few step to get the result.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.dontesta.it\/2019\/10\/03\/how-to-setup-docker-container-sql-server-2017-for-liferay-development-environment\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.dontesta.it\/2019\/10\/03\/how-to-setup-docker-container-sql-server-2017-for-liferay-development-environment\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.dontesta.it\/2019\/10\/03\/how-to-setup-docker-container-sql-server-2017-for-liferay-development-environment\/#primaryimage\",\"url\":\"https:\/\/www.dontesta.it\/wp-content\/uploads\/2019\/10\/HowToSetupDockerContainerSQLServer2017ForLiferay-DevelopmentEnvironment_FeatureImage.png\",\"contentUrl\":\"https:\/\/www.dontesta.it\/wp-content\/uploads\/2019\/10\/HowToSetupDockerContainerSQLServer2017ForLiferay-DevelopmentEnvironment_FeatureImage.png\",\"width\":722,\"height\":342,\"caption\":\"How to setup Docker container SQL Server 2017 for Liferay Development Environment\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.dontesta.it\/2019\/10\/03\/how-to-setup-docker-container-sql-server-2017-for-liferay-development-environment\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.dontesta.it\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"(English) How to setup Docker container SQL Server 2017 for Liferay Development Environment\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.dontesta.it\/#website\",\"url\":\"https:\/\/www.dontesta.it\/\",\"name\":\"Antonio Musarra&#039;s Blog\",\"description\":\"The ideal solution for a problem\",\"publisher\":{\"@id\":\"https:\/\/www.dontesta.it\/#\/schema\/person\/0c69ed36230e1477875d6171b48b9b24\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.dontesta.it\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/www.dontesta.it\/#\/schema\/person\/0c69ed36230e1477875d6171b48b9b24\",\"name\":\"Antonio Musarra\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.dontesta.it\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/www.dontesta.it\/wp-content\/uploads\/2024\/06\/cropped-foto_profilo.png\",\"contentUrl\":\"https:\/\/www.dontesta.it\/wp-content\/uploads\/2024\/06\/cropped-foto_profilo.png\",\"width\":512,\"height\":512,\"caption\":\"Antonio Musarra\"},\"logo\":{\"@id\":\"https:\/\/www.dontesta.it\/#\/schema\/person\/image\/\"},\"description\":\"I began my journey into the world of computing from an Olivetti M24 PC (http:\/\/it.wikipedia.org\/wiki\/Olivetti_M24) bought by my father for his work. Day after day, quickly taking control until \u2026 Now doing business consulting for projects in the enterprise application development using web-oriented technologies such as J2EE, Web Services, ESB, TIBCO, PHP.\",\"sameAs\":[\"https:\/\/www.dontesta.it\",\"https:\/\/www.facebook.com\/antoniomusarrablog\",\"https:\/\/www.linkedin.com\/in\/amusarra\/\",\"https:\/\/x.com\/antonio_musarra\",\"https:\/\/www.youtube.com\/channel\/UC5D3_EtVPbZYUhrUcEK_THA\/\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"How to setup Docker container SQL Server 2017 for Liferay Development Environment","description":"In this article I will explain how to use Docker to setup the SQL Server 2017 Database container for use with Liferay. A few step to get the result.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.dontesta.it\/2019\/10\/03\/how-to-setup-docker-container-sql-server-2017-for-liferay-development-environment\/","og_locale":"en_US","og_type":"article","og_title":"How to setup Docker container SQL Server 2017 for Liferay Development Environment","og_description":"In this article I will explain how to use Docker to setup the SQL Server 2017 Database container for use with Liferay. A few step to get the result.","og_url":"https:\/\/www.dontesta.it\/2019\/10\/03\/how-to-setup-docker-container-sql-server-2017-for-liferay-development-environment\/","og_site_name":"Antonio Musarra&#039;s Blog","article_publisher":"https:\/\/www.facebook.com\/antoniomusarrablog","article_author":"https:\/\/www.facebook.com\/antoniomusarrablog","article_published_time":"2019-10-02T22:51:43+00:00","og_image":[{"width":722,"height":342,"url":"https:\/\/www.dontesta.it\/wp-content\/uploads\/2019\/10\/HowToSetupDockerContainerSQLServer2017ForLiferay-DevelopmentEnvironment_FeatureImage.png","type":"image\/png"}],"author":"Antonio Musarra","twitter_card":"summary_large_image","twitter_creator":"@antonio_musarra","twitter_site":"@antonio_musarra","twitter_misc":{"Written by":"Antonio Musarra","Est. reading time":"10 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.dontesta.it\/2019\/10\/03\/how-to-setup-docker-container-sql-server-2017-for-liferay-development-environment\/#article","isPartOf":{"@id":"https:\/\/www.dontesta.it\/2019\/10\/03\/how-to-setup-docker-container-sql-server-2017-for-liferay-development-environment\/"},"author":{"name":"Antonio Musarra","@id":"https:\/\/www.dontesta.it\/#\/schema\/person\/0c69ed36230e1477875d6171b48b9b24"},"headline":"How to setup Docker container SQL Server 2017 for Liferay Development Environment","datePublished":"2019-10-02T22:51:43+00:00","mainEntityOfPage":{"@id":"https:\/\/www.dontesta.it\/2019\/10\/03\/how-to-setup-docker-container-sql-server-2017-for-liferay-development-environment\/"},"wordCount":1025,"commentCount":0,"publisher":{"@id":"https:\/\/www.dontesta.it\/#\/schema\/person\/0c69ed36230e1477875d6171b48b9b24"},"image":{"@id":"https:\/\/www.dontesta.it\/2019\/10\/03\/how-to-setup-docker-container-sql-server-2017-for-liferay-development-environment\/#primaryimage"},"thumbnailUrl":"https:\/\/www.dontesta.it\/wp-content\/uploads\/2019\/10\/HowToSetupDockerContainerSQLServer2017ForLiferay-DevelopmentEnvironment_FeatureImage.png","keywords":["Docker","Liferay","Microsoft SQL Server"],"articleSection":["Blog","Liferay","RDBMS","SQL Server"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.dontesta.it\/2019\/10\/03\/how-to-setup-docker-container-sql-server-2017-for-liferay-development-environment\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.dontesta.it\/2019\/10\/03\/how-to-setup-docker-container-sql-server-2017-for-liferay-development-environment\/","url":"https:\/\/www.dontesta.it\/2019\/10\/03\/how-to-setup-docker-container-sql-server-2017-for-liferay-development-environment\/","name":"How to setup Docker container SQL Server 2017 for Liferay Development Environment","isPartOf":{"@id":"https:\/\/www.dontesta.it\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.dontesta.it\/2019\/10\/03\/how-to-setup-docker-container-sql-server-2017-for-liferay-development-environment\/#primaryimage"},"image":{"@id":"https:\/\/www.dontesta.it\/2019\/10\/03\/how-to-setup-docker-container-sql-server-2017-for-liferay-development-environment\/#primaryimage"},"thumbnailUrl":"https:\/\/www.dontesta.it\/wp-content\/uploads\/2019\/10\/HowToSetupDockerContainerSQLServer2017ForLiferay-DevelopmentEnvironment_FeatureImage.png","datePublished":"2019-10-02T22:51:43+00:00","description":"In this article I will explain how to use Docker to setup the SQL Server 2017 Database container for use with Liferay. A few step to get the result.","breadcrumb":{"@id":"https:\/\/www.dontesta.it\/2019\/10\/03\/how-to-setup-docker-container-sql-server-2017-for-liferay-development-environment\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.dontesta.it\/2019\/10\/03\/how-to-setup-docker-container-sql-server-2017-for-liferay-development-environment\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.dontesta.it\/2019\/10\/03\/how-to-setup-docker-container-sql-server-2017-for-liferay-development-environment\/#primaryimage","url":"https:\/\/www.dontesta.it\/wp-content\/uploads\/2019\/10\/HowToSetupDockerContainerSQLServer2017ForLiferay-DevelopmentEnvironment_FeatureImage.png","contentUrl":"https:\/\/www.dontesta.it\/wp-content\/uploads\/2019\/10\/HowToSetupDockerContainerSQLServer2017ForLiferay-DevelopmentEnvironment_FeatureImage.png","width":722,"height":342,"caption":"How to setup Docker container SQL Server 2017 for Liferay Development Environment"},{"@type":"BreadcrumbList","@id":"https:\/\/www.dontesta.it\/2019\/10\/03\/how-to-setup-docker-container-sql-server-2017-for-liferay-development-environment\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.dontesta.it\/"},{"@type":"ListItem","position":2,"name":"(English) How to setup Docker container SQL Server 2017 for Liferay Development Environment"}]},{"@type":"WebSite","@id":"https:\/\/www.dontesta.it\/#website","url":"https:\/\/www.dontesta.it\/","name":"Antonio Musarra&#039;s Blog","description":"The ideal solution for a problem","publisher":{"@id":"https:\/\/www.dontesta.it\/#\/schema\/person\/0c69ed36230e1477875d6171b48b9b24"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.dontesta.it\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":["Person","Organization"],"@id":"https:\/\/www.dontesta.it\/#\/schema\/person\/0c69ed36230e1477875d6171b48b9b24","name":"Antonio Musarra","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.dontesta.it\/#\/schema\/person\/image\/","url":"https:\/\/www.dontesta.it\/wp-content\/uploads\/2024\/06\/cropped-foto_profilo.png","contentUrl":"https:\/\/www.dontesta.it\/wp-content\/uploads\/2024\/06\/cropped-foto_profilo.png","width":512,"height":512,"caption":"Antonio Musarra"},"logo":{"@id":"https:\/\/www.dontesta.it\/#\/schema\/person\/image\/"},"description":"I began my journey into the world of computing from an Olivetti M24 PC (http:\/\/it.wikipedia.org\/wiki\/Olivetti_M24) bought by my father for his work. Day after day, quickly taking control until \u2026 Now doing business consulting for projects in the enterprise application development using web-oriented technologies such as J2EE, Web Services, ESB, TIBCO, PHP.","sameAs":["https:\/\/www.dontesta.it","https:\/\/www.facebook.com\/antoniomusarrablog","https:\/\/www.linkedin.com\/in\/amusarra\/","https:\/\/x.com\/antonio_musarra","https:\/\/www.youtube.com\/channel\/UC5D3_EtVPbZYUhrUcEK_THA\/"]}]}},"_links":{"self":[{"href":"https:\/\/www.dontesta.it\/en\/wp-json\/wp\/v2\/posts\/4497","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.dontesta.it\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.dontesta.it\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.dontesta.it\/en\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/www.dontesta.it\/en\/wp-json\/wp\/v2\/comments?post=4497"}],"version-history":[{"count":0,"href":"https:\/\/www.dontesta.it\/en\/wp-json\/wp\/v2\/posts\/4497\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.dontesta.it\/en\/wp-json\/wp\/v2\/media\/4509"}],"wp:attachment":[{"href":"https:\/\/www.dontesta.it\/en\/wp-json\/wp\/v2\/media?parent=4497"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.dontesta.it\/en\/wp-json\/wp\/v2\/categories?post=4497"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.dontesta.it\/en\/wp-json\/wp\/v2\/tags?post=4497"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}