{"id":5423,"date":"2021-03-18T09:58:00","date_gmt":"2021-03-18T02:58:00","guid":{"rendered":"https:\/\/briswell-vn.com\/?p=5423"},"modified":"2021-03-18T10:02:32","modified_gmt":"2021-03-18T03:02:32","slug":"launch-with-docker","status":"publish","type":"post","link":"https:\/\/www.briswell-vn.com\/en\/news\/launch-with-docker\/","title":{"rendered":"Launch Web with Docker"},"content":{"rendered":"<p><\/p>\n<h2><strong>I. WHAT IS DOCKER?<\/strong><\/h2>\n<p><span style=\"font-weight: 400\">Docker is an open platform for developing, deploying, shipping, and running applications. Docker enables you to separate your applications from your infrastructure so you can deliver software quickly. With Docker, you can manage your infrastructure in the same ways you manage your applications. By taking advantage of Docker\u2019s methodologies for shipping, testing, and deploying code quickly, you can significantly reduce the delay between writing code and running it in production.<\/span><\/p>\n<h2><strong>II. BENEFITS OF DOCKER<\/strong><\/h2>\n<p><span style=\"font-weight: 400\">Unlike virtual machines, Docker starts and stops in seconds.<\/span><\/p>\n<p><span style=\"font-weight: 400\">You can launch the container on each system that you want.<\/span><\/p>\n<p><span style=\"font-weight: 400\">Containers can be built and removed faster than virtual machines.<\/span><\/p>\n<p><span style=\"font-weight: 400\">Easy to set up working environment. Just config once only and never have to reinstall dependencies.<\/span><\/p>\n<p><span style=\"font-weight: 400\">It keeps your work-space cleaner when you delete the environment that affects other parts.<\/span><\/p>\n<h2><strong>III. INSTALL<\/strong><\/h2>\n<p><span style=\"font-weight: 400\">See the instructions: <\/span><span style=\"font-weight: 400\"><a href=\"https:\/\/docs.docker.com\/get-docker\/\">https:\/\/docs.docker.com\/get-docker\/<\/a><\/span><\/p>\n<h2><strong>IV. IMAGE<\/strong><\/h2>\n<p><span style=\"font-weight: 400\">Docker Image is a read-only template used to create containers. Image is structured of layers and all layers are read-only. Create an image can be based on another image with some additional customization. In short, Docker Image is a place to store environment settings such as OS, packages, software to run\u2026<\/span><\/p>\n<h2><strong>V. CONTAINER<\/strong><\/h2>\n<p><span style=\"font-weight: 400\">Docker Container is created from Docker Image, which contains everything needed to be able to run an application. As virtualization but the Container is very light, can be considered as a system process. It only takes a few seconds to start, stop or restart a Container. With a physical server, instead of running a few traditional virtual machines, we can run several dozen, even several hundred Docker Containers.<\/span><\/p>\n<h2><strong>VI. COMPARE CONTAINER AND VIRTUAL MACHINE<\/strong><\/h2>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-5435 size-full\" src=\"https:\/\/briswell-vn.com\/wp-content\/uploads\/2021\/01\/compare.jpg\" alt=\"\" width=\"760\" height=\"435\" srcset=\"https:\/\/s3-ap-southeast-1.amazonaws.com\/homepage-media\/wp-content\/uploads\/2021\/01\/28100010\/compare.jpg 760w, https:\/\/s3-ap-southeast-1.amazonaws.com\/homepage-media\/wp-content\/uploads\/2021\/01\/28100010\/compare-300x172.jpg 300w\" sizes=\"auto, (max-width: 760px) 100vw, 760px\" \/><\/p>\n<table style=\"border: 1px solid #000\" width=\"789\">\n<tbody>\n<tr>\n<td style=\"border: 1px solid #000\" width=\"108\"><\/td>\n<td style=\"text-align: center;border: 1px solid #000\" width=\"246\"><strong>CONTAINER<\/strong><\/td>\n<td style=\"text-align: center;border: 1px solid #000\" width=\"252\"><strong>VIRTUAL MACHINE<\/strong><\/td>\n<\/tr>\n<tr>\n<td style=\"border: 1px solid #000\" width=\"108\"><span style=\"font-weight: 400\">Resource<\/span><\/td>\n<td style=\"border: 1px solid #000\" width=\"246\"><span style=\"font-weight: 400\">The process in the container directly uses real resources, but the operating system can stipulate each process a different resource limit\u00a0 (or unlimited).<\/span><\/td>\n<td style=\"border: 1px solid #000\" width=\"252\"><span style=\"font-weight: 400\">Everything is limited by virtual hardware.<\/span><\/td>\n<\/tr>\n<tr>\n<td style=\"border: 1px solid #000\" width=\"108\"><span style=\"font-weight: 400\">Execution<\/span><\/td>\n<td style=\"border: 1px solid #000\" width=\"246\"><span style=\"font-weight: 400\">The real OS runs the software.<\/span><\/td>\n<td style=\"border: 1px solid #000\" width=\"252\"><span style=\"font-weight: 400\">Real OS \u2192 Virtual OS \u2192 Virtual OS running the software. (For VPS, Hypervisor type 1 replaces the real OS)<\/span><\/td>\n<\/tr>\n<tr>\n<td style=\"border: 1px solid #000\" width=\"108\"><span style=\"font-weight: 400\">Performance<\/span><\/td>\n<td style=\"border: 1px solid #000\" width=\"246\"><span style=\"font-weight: 400\">Real software runs on real hardware. Starting speed is almost a normal software.<\/span><\/td>\n<td style=\"border: 1px solid #000\" width=\"252\"><span style=\"font-weight: 400\">Real hardware has to carry a virtual OS. Since the computer was booted up, it took time until the software was used.<\/span><\/td>\n<\/tr>\n<tr>\n<td style=\"border: 1px solid #000\" width=\"108\"><span style=\"font-weight: 400\">Security<\/span><\/td>\n<td style=\"border: 1px solid #000\" width=\"246\"><span style=\"font-weight: 400\">Processes in the same container can still affect each other. But normally each container should only run one process. Processes of different containers cannot affect each other.<\/span><\/td>\n<td style=\"border: 1px solid #000\" width=\"252\"><span style=\"font-weight: 400\">Software has malicious code can affect other process resources in the same VM<\/span><span style=\"font-weight: 400\">.<\/span><\/td>\n<\/tr>\n<tr>\n<td style=\"border: 1px solid #000\" width=\"108\"><span style=\"font-weight: 400\">Support software<\/span><\/td>\n<td style=\"border: 1px solid #000\" width=\"246\"><span style=\"font-weight: 400\">Docker Engine, LXC Linux Container, Apache Mesos, CRI-O (Kubernetes)\u2026<\/span><\/td>\n<td style=\"border: 1px solid #000\" width=\"252\"><span style=\"font-weight: 400\">VirtualBox, VMWare, Microsoft Hyper-V, Parallels, Linux KVM, Docker Machine\u2026<\/span><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>&nbsp;<\/p>\n<h2><strong>VII. DOCKERFILE<\/strong><\/h2>\n<p><span style=\"font-weight: 400\">\u2013 Dockerfile is a config file for Docker to build the image. It uses a basic image to build the initial image class. Some basic images: python, ubuntu and alpine. Then if there are additional layers then it is stacked on top of the base layer.<\/span><\/p>\n<p><span style=\"font-weight: 400\">\u2013 The config :<\/span><\/p>\n<ul>\n<li><span style=\"font-weight: 400\">FROM \u2014 <\/span><span style=\"font-weight: 400\">Specifies the original image: python, ubuntu, alpine\u2026<\/span><\/li>\n<li><span style=\"font-weight: 400\">LABEL \u2014 <\/span><span style=\"font-weight: 400\">Provide metadata for the image. Can be used to add maintainer information. To see the labels for the images, use the docker inspect command.<\/span><\/li>\n<li><span style=\"font-weight: 400\">ENV \u2014 S<\/span><span style=\"font-weight: 400\">et an environment variable.<\/span><\/li>\n<li><span style=\"font-weight: 400\">RUN \u2014 <\/span><span style=\"font-weight: 400\">Can create a command when building image. Used to install packages into containers.<\/span><\/li>\n<li><span style=\"font-weight: 400\">COPY \u2014 <\/span><span style=\"font-weight: 400\">Copy files and folders into the container<\/span><span style=\"font-weight: 400\">.<\/span><\/li>\n<li><span style=\"font-weight: 400\">\u00a0<\/span><span style=\"font-weight: 400\">ADD \u2014 <\/span><span style=\"font-weight: 400\">Copy files and folders into the container<\/span><span style=\"font-weight: 400\">.<\/span><\/li>\n<li><span style=\"font-weight: 400\">CMD \u2014 <\/span><span style=\"font-weight: 400\">Provide a command and argument for the executable container. Parameters can be overridden and only a CMD.<\/span><\/li>\n<li><span style=\"font-weight: 400\">WORKDIR \u2014 <\/span><span style=\"font-weight: 400\">Set up working directory for other directives such as: RUN, CMD, ENTRYPOINT, COPY, ADD, &#8230;<\/span><\/li>\n<li><span style=\"font-weight: 400\">ARG \u2014 <\/span><span style=\"font-weight: 400\">Define the variables value to be used during image build.<\/span><\/li>\n<li><span style=\"font-weight: 400\">ENTRYPOINT \u2014 <\/span><span style=\"font-weight: 400\">Provide a command and argument for the executable container.<\/span><\/li>\n<li><span style=\"font-weight: 400\">EXPOSE \u2014 <\/span><span style=\"font-weight: 400\">Declares the port of the image.<\/span><\/li>\n<li><span style=\"font-weight: 400\">VOLUME \u2014 <\/span><span style=\"font-weight: 400\">Create a directory mount point for accessing and storing data.<\/span><\/li>\n<\/ul>\n<p>Example:<\/p>\n<pre>FROM node:12-alpine\r\nRUN apk add git\r\nRUN mkdir -p \/home\/node\/app\r\nWORKDIR \/home\/node\/app\r\nCOPY package*.json .\/\r\nRUN npm install\r\nCOPY . .\r\nENV HOST=0.0.0.0 PORT=3334\r\nEXPOSE $PORT\r\nCMD [ \"node\", \".\" ]\r\n\r\n<\/pre>\n<h2><strong>VIII. THE OTHER CONCEPTS<\/strong><\/h2>\n<p><span style=\"font-weight: 400\"><strong>Docker Client<\/strong>: <\/span><span style=\"font-weight: 400\">Interacts with docker via command in terminal. Docker Client will use the API to send commands to Docker Daemon.<\/span><\/p>\n<p><span style=\"font-weight: 400\"><strong>Docker Daemon<\/strong>: <\/span><span style=\"font-weight: 400\">Docker server for requests from the Docker API. It manages images, containers, networks and volumes.<\/span><\/p>\n<p><span style=\"font-weight: 400\"><strong>Docker Volumes<\/strong>: <\/span><span style=\"font-weight: 400\">A place that stores data continuously for using and creating apps.<\/span><\/p>\n<p><span style=\"font-weight: 400\"><strong>Docker Registry<\/strong>: <\/span><span style=\"font-weight: 400\">Docker Images&#8217;s private storage. Images are pushed into the registry and the client pulls images from the registry. You can use your own registry or the registry of your provider such as: AWS, Google Cloud, Microsoft Azure.<\/span><\/p>\n<p><span style=\"font-weight: 400\"><strong>Docker Hub<\/strong>:\u00a0 <\/span><span style=\"font-weight: 400\">Docker Images largest registry (default). Can find images and store your own images on Docker Hub (free).<\/span><\/p>\n<p><span style=\"font-weight: 400\"><strong>Docker Repository<\/strong>: <\/span><span style=\"font-weight: 400\">set of Docker Images with the same name but different tags. Example: node: 12-alpine.<\/span><\/p>\n<p><span style=\"font-weight: 400\"><strong>Docker Networking<\/strong>: <\/span><span style=\"font-weight: 400\">allows to connect containers together. This connection can be on a host or more hosts.<\/span><\/p>\n<p><span style=\"font-weight: 400\"><strong>Docker Compose<\/strong>: <\/span><span style=\"font-weight: 400\">The tool allows to run apps with multiple Docker containers easily. Docker Compose allows you to configure commands in the <\/span><i><span style=\"font-weight: 400\">docker-compose.yml<\/span><\/i><span style=\"font-weight: 400\"> file for reuse. Available with Docker installed.<\/span><\/p>\n<p><span style=\"font-weight: 400\"><strong>Docker Swarm<\/strong>: <\/span><span style=\"font-weight: 400\">coordinate container deployment.<\/span><\/p>\n<p><span style=\"font-weight: 400\"><strong>Docker Services<\/strong>: The\u00a0 <\/span><span style=\"font-weight: 400\">containers in production. A service only runs an image but it encrypts the way to run the image &#8211; which port to use, how many copies of the container to run the service has the necessary and immediate performance.<\/span><\/p>\n<h2><strong>IX. BASIC COMMANDS IN DOCKER<\/strong><\/h2>\n<p><span style=\"font-weight: 400\">List image\/container:<\/span><\/p>\n<pre><span style=\"font-weight: 400\">docker image\/container ls<\/span><\/pre>\n<p><span style=\"font-weight: 400\">List all containers:<\/span><\/p>\n<pre><span style=\"font-weight: 400\">docker ps \u2013a<\/span><\/pre>\n<p><span style=\"font-weight: 400\">Stop a container:<\/span><\/p>\n<pre><span style=\"font-weight: 400\">docker stop &lt;container name&gt;<\/span><\/pre>\n<p><span style=\"font-weight: 400\">Run the container from the image and change the container name:<\/span><\/p>\n<pre><span style=\"font-weight: 400\">docker run \u2013name &lt;container name&gt; &lt;image name&gt;<\/span><\/pre>\n<p><span style=\"font-weight: 400\">Stop all container:<\/span><\/p>\n<pre><span style=\"font-weight: 400\">docker stop $(docker ps \u2013a \u2013q)<\/span><\/pre>\n<p><span style=\"font-weight: 400\">Show log a container:<\/span><\/p>\n<pre><span style=\"font-weight: 400\">docker logs &lt;container name&gt;<\/span><\/pre>\n<p><span style=\"font-weight: 400\">Build an image from container:<\/span><\/p>\n<pre><span style=\"font-weight: 400\">docker build -t &lt;container name&gt; .<\/span><\/pre>\n<p><span style=\"font-weight: 400\">Create a container running in the background:<\/span><\/p>\n<pre><span style=\"font-weight: 400\">docker run -d &lt;image name&gt;<\/span><\/pre>\n<p><span style=\"font-weight: 400\">Start a container:<\/span><\/p>\n<pre><span style=\"font-weight: 400\">docker start &lt;container name&gt;<\/span><\/pre>\n<p>See more: <a href=\"https:\/\/docs.docker.com\/reference\/\">https:\/\/docs.docker.com\/reference\/<\/a><\/p>\n<h2><strong>X. INITIAL INSTALL<\/strong><\/h2>\n<p>Step 1: Access to EC2 of AWS.<\/p>\n<ul>\n<li>Open Tera Term application to access.<\/li>\n<li>Enter host server into Host textbox.<\/li>\n<\/ul>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-5592 size-full\" src=\"https:\/\/briswell-vn.com\/wp-content\/uploads\/2021\/01\/host-teraterm.png\" alt=\"\" width=\"658\" height=\"339\" srcset=\"https:\/\/s3-ap-southeast-1.amazonaws.com\/homepage-media\/wp-content\/uploads\/2021\/01\/04163035\/host-teraterm.png 658w, https:\/\/s3-ap-southeast-1.amazonaws.com\/homepage-media\/wp-content\/uploads\/2021\/01\/04163035\/host-teraterm-300x155.png 300w\" sizes=\"auto, (max-width: 658px) 100vw, 658px\" \/><\/p>\n<ul>\n<li>Enter username and key, then OK press.<\/li>\n<\/ul>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-5593 size-full\" src=\"https:\/\/briswell-vn.com\/wp-content\/uploads\/2021\/01\/key-teraterm.png\" alt=\"\" width=\"462\" height=\"429\" srcset=\"https:\/\/s3-ap-southeast-1.amazonaws.com\/homepage-media\/wp-content\/uploads\/2021\/01\/04163312\/key-teraterm.png 462w, https:\/\/s3-ap-southeast-1.amazonaws.com\/homepage-media\/wp-content\/uploads\/2021\/01\/04163312\/key-teraterm-300x279.png 300w, https:\/\/s3-ap-southeast-1.amazonaws.com\/homepage-media\/wp-content\/uploads\/2021\/01\/04163312\/key-teraterm-269x250.png 269w\" sizes=\"auto, (max-width: 462px) 100vw, 462px\" \/><\/p>\n<ul>\n<li>Screen after access.<\/li>\n<\/ul>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-5594 size-full\" src=\"https:\/\/briswell-vn.com\/wp-content\/uploads\/2021\/01\/Terminal.png\" alt=\"\" width=\"659\" height=\"343\" srcset=\"https:\/\/s3-ap-southeast-1.amazonaws.com\/homepage-media\/wp-content\/uploads\/2021\/01\/04163531\/Terminal.png 659w, https:\/\/s3-ap-southeast-1.amazonaws.com\/homepage-media\/wp-content\/uploads\/2021\/01\/04163531\/Terminal-300x156.png 300w\" sizes=\"auto, (max-width: 659px) 100vw, 659px\" \/><\/p>\n<p><span style=\"font-weight: 400\">Step 2: Install docker.<\/span><\/p>\n<ol>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Update the packages on your instance<\/span>\n<pre><span style=\"font-weight: 400\">sudo yum update -y<\/span><\/pre>\n<\/li>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Install Docker<\/span>\n<pre><span style=\"font-weight: 400\">sudo yum install docker -y<\/span><\/pre>\n<\/li>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Start the Docker Service<\/span>\n<pre><span style=\"font-weight: 400\">sudo service docker start<\/span><\/pre>\n<\/li>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Add the ec2-user to the docker group so you can execute Docker commands without using sudo.<\/span>\n<pre><span style=\"font-weight: 400\">sudo usermod -a -G docker ec2-user<\/span><\/pre>\n<\/li>\n<\/ol>\n<p><span style=\"font-weight: 400\">Step 3: Install git and clone\/pull source code.<\/span><\/p>\n<ol>\n<li><span style=\"font-weight: 400\"> Install git<\/span>\n<pre><span style=\"font-family: Consolas, Monaco, monospace\">sudo yum install git\r\n<\/span><\/pre>\n<\/li>\n<li><span style=\"font-weight: 400\"> Clone\/pull source code.<\/span>\n<pre><span style=\"font-weight: 400\">git clone https:\/\/usernameToken:passwordToken@gitlab.com\/&lt;project name&gt;\/&lt;git name&gt;.git\r\nor\r\ngit pull origin develop<\/span><\/pre>\n<\/li>\n<\/ol>\n<p>** With usernameToken is name&#8217;s deploy token and passwordToken is a random string of characters.(See more <a href=\"https:\/\/docs.gitlab.com\/ee\/user\/project\/deploy_tokens\/\">here<\/a>).<\/p>\n<h2>XI. DEPLOY<\/h2>\n<p><span style=\"font-weight: 400\">Step 1: Go to the directory containing the source code<\/span><\/p>\n<pre><span style=\"font-family: Consolas, Monaco, monospace\">cd &lt;project folder&gt;\r\n<\/span><\/pre>\n<p>Dockerfile-dev file in source is configured as follows:<\/p>\n<div>\n<pre># Check out https:\/\/hub.docker.com\/_\/node to select a new base image\r\nFROM node:12-alpine\r\nRUN apk add git\r\n\r\n# Set to a non-root built-in user `node`\r\nUSER node\r\n\r\n# Create app directory (with user `node`)\r\nRUN mkdir -p \/home\/node\/app\r\nWORKDIR \/home\/node\/app\r\n\r\nENV NODE_ENV=\"&lt;Environment name&gt;\"\r\nENV PORT=\"3334\" ENV DEBUG=\"front:*\"\r\nENV SESSION_SECRET=\"session-secret\"\r\n\r\n# Install app dependencies\r\n# A wildcard is used to ensure both package.json AND package-lock.json are copied\r\n# where available (npm@5+)\r\nCOPY package*.json .\/\r\nRUN npm install\r\n\r\n# Bundle app source code\r\nCOPY . .\r\n\r\n# Bind to all network interfaces so that it can be mapped to the host OS\r\nENV HOST=0.0.0.0 PORT=3334\r\nEXPOSE $PORT\r\nCMD [ \"node\", \".\" ]<\/pre>\n<\/div>\n<p><span style=\"font-weight: 400\">Step 2: Build images source<\/span><\/p>\n<pre><span style=\"font-family: Consolas, Monaco, monospace\">docker build --no-cache -t &lt;Image name&gt; -f Dockerfile.dev . (Using for development)<\/span><\/pre>\n<p><span style=\"font-weight: 400\">* -t: option tags of image.<br \/>\n* . : source folder<br \/>\n* &#8211;no-cache: not save cache.<\/span><\/p>\n<p><span style=\"font-weight: 400\">Step 3: Run container from image source.<\/span><\/p>\n<pre><span style=\"font-family: Consolas, Monaco, monospace\">docker run -dp &lt;Host port&gt;:&lt;Container port&gt; --name &lt;container name&gt; &lt;Image name&gt;<\/span><\/pre>\n<p><span style=\"font-weight: 400\">* &#8211;name:\u00a0set name for container, this is\u00a0 evaluate-system. Name is unique, If not, docker generate.<br \/>\n* -p: open port container.<br \/>\n* -d: turn on background mode<\/span><\/p>\n<p><span style=\"font-weight: 400\">Step 4: Go to nginx folder in source.<\/span><\/p>\n<pre><span style=\"font-family: Consolas, Monaco, monospace\">cd nginx<\/span><\/pre>\n<p>In nginx folder include 2 file are default.conf and Dockerfile<br \/>\n&#8211; File default.conf<\/p>\n<div>\n<pre>server {\r\n \u00a0\u00a0\u00a0location\u00a0\/\u00a0{\r\n \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0proxy_set_header\u00a0Host\u00a0$host;\r\n \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0proxy_set_header\u00a0X-Real-IP\u00a0$remote_addr;\r\n \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0proxy_set_header\u00a0X-Forwarded-For\u00a0$proxy_add_x_forwarded_for;\r\n \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0proxy_set_header\u00a0X-Forwarded-Proto\u00a0$scheme;\r\n \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0proxy_pass\u00a0http:\/\/app:3334;\r\n \u00a0\u00a0\u00a0}\r\n}<\/pre>\n<p>&#8211; File Dockerfile<\/p>\n<\/div>\n<pre>FROM nginx\r\nRUN rm \/etc\/nginx\/conf.d\/* \r\nCOPY default.conf \/etc\/nginx\/conf.d\/<\/pre>\n<p><span style=\"font-weight: 400\">Build image nginx for source<\/span><\/p>\n<pre><span style=\"font-family: Consolas, Monaco, monospace\">docker build -t es\/nginx .<\/span><\/pre>\n<p><span style=\"font-weight: 400\">Run container es\/nginx<\/span><\/p>\n<pre><span style=\"font-weight: 400\">docker run -dp 80:80 --link &lt;container name&gt;:app --name nginx-proxy es\/nginx<\/span><\/pre>\n<p><span style=\"font-weight: 400\">Step 5: Show images and containers.<\/span><\/p>\n<ul>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">List image<\/span><\/li>\n<\/ul>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-5448 size-full\" src=\"https:\/\/briswell-vn.com\/wp-content\/uploads\/2021\/01\/images-ec2.png\" alt=\"\" width=\"789\" height=\"124\" srcset=\"https:\/\/s3-ap-southeast-1.amazonaws.com\/homepage-media\/wp-content\/uploads\/2021\/01\/28122425\/images-ec2.png 789w, https:\/\/s3-ap-southeast-1.amazonaws.com\/homepage-media\/wp-content\/uploads\/2021\/01\/28122425\/images-ec2-300x47.png 300w, https:\/\/s3-ap-southeast-1.amazonaws.com\/homepage-media\/wp-content\/uploads\/2021\/01\/28122425\/images-ec2-768x121.png 768w\" sizes=\"auto, (max-width: 789px) 100vw, 789px\" \/><\/p>\n<ul>\n<li>\u00a0List container.<\/li>\n<\/ul>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-5449 \" src=\"https:\/\/briswell-vn.com\/wp-content\/uploads\/2021\/01\/container-ec2-1024x87.png\" alt=\"\" width=\"789\" height=\"67\" srcset=\"https:\/\/s3-ap-southeast-1.amazonaws.com\/homepage-media\/wp-content\/uploads\/2021\/01\/28122548\/container-ec2-1024x87.png 1024w, https:\/\/s3-ap-southeast-1.amazonaws.com\/homepage-media\/wp-content\/uploads\/2021\/01\/28122548\/container-ec2-300x25.png 300w, https:\/\/s3-ap-southeast-1.amazonaws.com\/homepage-media\/wp-content\/uploads\/2021\/01\/28122548\/container-ec2-768x65.png 768w, https:\/\/s3-ap-southeast-1.amazonaws.com\/homepage-media\/wp-content\/uploads\/2021\/01\/28122548\/container-ec2.png 1348w\" sizes=\"auto, (max-width: 789px) 100vw, 789px\" \/><\/p>\n<p><span style=\"font-weight: 400\"> Step 6: Access to web<\/span><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-5450 size-large\" src=\"https:\/\/briswell-vn.com\/wp-content\/uploads\/2021\/01\/login-ec2-1024x490.jpg\" alt=\"\" width=\"1024\" height=\"490\" srcset=\"https:\/\/s3-ap-southeast-1.amazonaws.com\/homepage-media\/wp-content\/uploads\/2021\/01\/28122802\/login-ec2-1024x490.jpg 1024w, https:\/\/s3-ap-southeast-1.amazonaws.com\/homepage-media\/wp-content\/uploads\/2021\/01\/28122802\/login-ec2-300x144.jpg 300w, https:\/\/s3-ap-southeast-1.amazonaws.com\/homepage-media\/wp-content\/uploads\/2021\/01\/28122802\/login-ec2-768x368.jpg 768w, https:\/\/s3-ap-southeast-1.amazonaws.com\/homepage-media\/wp-content\/uploads\/2021\/01\/28122802\/login-ec2.jpg 1372w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/p>\n<h2>XII. REFERENCES<\/h2>\n<p><a href=\"https:\/\/docs.docker.com\/get-docker\/\">https:\/\/docs.docker.com\/get-docker\/<\/a><\/p>\n<p><a href=\"https:\/\/docs.docker.com\/reference\/\">https:\/\/docs.docker.com\/reference\/<\/a><\/p>\n<p><a href=\"https:\/\/docs.docker.com\/\">https:\/\/docs.docker.com\/<\/a><\/p>\n<p><a href=\"https:\/\/egghead.io\/lessons\/node-js-setup-an-nginx-proxy-for-a-node-js-app-with-docker\">https:\/\/egghead.io\/lessons\/node-js-setup-an-nginx-proxy-for-a-node-js-app-with-docker<\/a><\/p>","protected":false},"excerpt":{"rendered":"<p>I. WHAT IS DOCKER? Docker is an open platform for developing, deploying, shipping, and running applications. Docker enables you to separate your applications from your infrastructure so you can deliver software quickly. With Docker, you can manage your infrastructure in the same ways you manage your applications. By taking advantage of Docker\u2019s methodologies for shipping, testing, and deploying code quickly, you can significantly reduce the [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":5460,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_mi_skip_tracking":false,"footnotes":""},"categories":[4,71],"tags":[],"class_list":["post-5423","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-news","category-it-tec"],"_links":{"self":[{"href":"https:\/\/www.briswell-vn.com\/en\/wp-json\/wp\/v2\/posts\/5423","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.briswell-vn.com\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.briswell-vn.com\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.briswell-vn.com\/en\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.briswell-vn.com\/en\/wp-json\/wp\/v2\/comments?post=5423"}],"version-history":[{"count":0,"href":"https:\/\/www.briswell-vn.com\/en\/wp-json\/wp\/v2\/posts\/5423\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.briswell-vn.com\/en\/wp-json\/wp\/v2\/media\/5460"}],"wp:attachment":[{"href":"https:\/\/www.briswell-vn.com\/en\/wp-json\/wp\/v2\/media?parent=5423"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.briswell-vn.com\/en\/wp-json\/wp\/v2\/categories?post=5423"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.briswell-vn.com\/en\/wp-json\/wp\/v2\/tags?post=5423"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}