{"id":35035,"date":"2024-10-08T14:45:41","date_gmt":"2024-10-08T07:45:41","guid":{"rendered":"http:\/\/jupitek.maudemo.vip\/index.php\/2024\/10\/08\/connect-docker-containers\/"},"modified":"2024-10-08T14:45:41","modified_gmt":"2024-10-08T07:45:41","slug":"connect-docker-containers","status":"publish","type":"post","link":"https:\/\/jupitek.maudemo.vip\/index.php\/2024\/10\/08\/connect-docker-containers\/","title":{"rendered":"K\u1ebft n\u1ed1i Docker Containers"},"content":{"rendered":"<p>Khi s\u1eed d\u1ee5ng&nbsp;<a href=\"https:\/\/www.docker.com\/\" target=\"_blank\" rel=\"noreferrer noopener\">Docker<\/a>&nbsp;\u0111\u1ec3 ch\u1ee9a c\u00e1c \u1ee9ng d\u1ee5ng c\u1ee7a b\u1ea1n, th\u00f4ng l\u1ec7 chung l\u00e0 ch\u1ea1y t\u1eebng th\u00e0nh ph\u1ea7n c\u1ee7a \u1ee9ng d\u1ee5ng trong m\u1ed9t v\u00f9ng ch\u1ee9a ri\u00eang bi\u1ec7t. V\u00ed d\u1ee5: m\u1ed9t trang web c\u00f3 th\u1ec3 c\u00f3 m\u00e1y ch\u1ee7 web, \u1ee9ng d\u1ee5ng v\u00e0 c\u01a1 s\u1edf d\u1eef li\u1ec7u, m\u1ed7i th\u00e0nh ph\u1ea7n ch\u1ea1y trong v\u00f9ng ch\u1ee9a ri\u00eang c\u1ee7a n\u00f3.<\/p>\n<p>C\u1ea5u h\u00ecnh c\u00e1c container \u0111\u1ec3 giao ti\u1ebfp v\u1edbi nhau v\u00e0 m\u00e1y ch\u1ee7 c\u00f3 th\u1ec3 l\u00e0 m\u1ed9t th\u00e1ch th\u1ee9c. H\u01b0\u1edbng d\u1eabn n\u00e0y s\u1ebd s\u1eed d\u1ee5ng m\u1ed9t \u1ee9ng d\u1ee5ng v\u00ed d\u1ee5 \u0111\u01a1n gi\u1ea3n \u0111\u1ec3 ch\u1ee9ng minh nh\u1eefng \u0111i\u1ec1u c\u01a1 b\u1ea3n v\u1ec1 giao ti\u1ebfp container Docker. \u1ee8ng d\u1ee5ng s\u1ebd bao g\u1ed3m m\u1ed9t \u1ee9ng d\u1ee5ng Node.js \u0111\u1ecdc d\u1eef li\u1ec7u t\u1eeb c\u01a1 s\u1edf d\u1eef li\u1ec7u PostgreSQL.<\/p>\n<h2 id=\"before-you-begin\">Tr\u01b0\u1edbc khi b\u1ea1n b\u1eaft \u0111\u1ea7u<a href=\"https:\/\/www.linode.com\/docs\/guides\/docker-container-communication\/#before-you-begin\"><\/a><\/h2>\n<h3 id=\"install-docker-ce\">C\u00e0i \u0111\u1eb7t Docker CE<a href=\"https:\/\/www.linode.com\/docs\/guides\/docker-container-communication\/#install-docker-ce\"><\/a><\/h3>\n<p>B\u1ea1n s\u1ebd c\u1ea7n m\u1ed9t Linode \u0111\u00e3 c\u00e0i \u0111\u1eb7t Docker CE \u0111\u1ec3 l\u00e0m theo c\u00e1c b\u01b0\u1edbc trong h\u01b0\u1edbng d\u1eabn n\u00e0y.<\/p>\n<p>\u0110\u1ec3 c\u00e0i \u0111\u1eb7t Docker CE (Phi\u00ean b\u1ea3n c\u1ed9ng \u0111\u1ed3ng), h\u00e3y l\u00e0m theo h\u01b0\u1edbng d\u1eabn trong m\u1ed9t trong c\u00e1c h\u01b0\u1edbng d\u1eabn d\u01b0\u1edbi \u0111\u00e2y:<\/p>\n<ul>\n<li><a href=\"https:\/\/www.linode.com\/docs\/guides\/installing-and-using-docker-on-ubuntu-and-debian\/\">C\u00e0i \u0111\u1eb7t v\u00e0 s\u1eed d\u1ee5ng Docker tr\u00ean Ubuntu v\u00e0 Debian<\/a><\/li>\n<li><a href=\"https:\/\/www.linode.com\/docs\/guides\/installing-and-using-docker-on-centos-and-fedora\/\">C\u00e0i \u0111\u1eb7t v\u00e0 s\u1eed d\u1ee5ng Docker tr\u00ean CentOS v\u00e0 Fedora<\/a><\/li>\n<\/ul>\n<p>\u0110\u1ec3 xem h\u01b0\u1edbng d\u1eabn c\u00e0i \u0111\u1eb7t cho c\u00e1c b\u1ea3n ph\u00e2n ph\u1ed1i Linux ho\u1eb7c h\u1ec7 \u0111i\u1ec1u h\u00e0nh kh\u00e1c nh\u01b0 Mac ho\u1eb7c Windows, h\u00e3y tham kh\u1ea3o t\u00e0i li\u1ec7u ch\u00ednh th\u1ee9c c\u1ee7a Docker t\u1ea1i \u0111\u00e2y:&nbsp;<a href=\"https:\/\/docs.docker.com\/engine\/install\/\" target=\"_blank\" rel=\"noreferrer noopener\">C\u00e0i \u0111\u1eb7t Docker Engine<\/a><\/p>\n<h2 id=\"example-nodejs-application\">V\u00ed d\u1ee5 v\u1ec1 \u1ee9ng d\u1ee5ng Node.js<a href=\"https:\/\/www.linode.com\/docs\/guides\/docker-container-communication\/#example-nodejs-application\"><\/a><\/h2>\n<p>\u1ee8ng d\u1ee5ng v\u00ed d\u1ee5 \u0111\u01b0\u1ee3c s\u1eed d\u1ee5ng trong h\u01b0\u1edbng d\u1eabn n\u00e0y s\u1ebd l\u00e0 m\u1ed9t \u1ee9ng d\u1ee5ng Node.js \u0111\u01a1n gi\u1ea3n s\u1ebd \u0111\u1ecdc &#8220;Hello world&#8221; t\u1eeb c\u01a1 s\u1edf d\u1eef li\u1ec7u PostgreSQL v\u00e0 in ra b\u1ea3ng \u0111i\u1ec1u khi\u1ec3n. Trong ph\u1ea7n n\u00e0y, b\u1ea1n s\u1ebd x\u00e2y d\u1ef1ng v\u00e0 ki\u1ec3m tra \u1ee9ng d\u1ee5ng tr\u00ean Linode c\u1ee7a m\u00ecnh m\u00e0 kh\u00f4ng s\u1eed d\u1ee5ng container.<\/p>\n<h3 id=\"install-and-configure-postgresql\">C\u00e0i \u0111\u1eb7t v\u00e0 c\u1ea5u h\u00ecnh PostgreSQL<a href=\"https:\/\/www.linode.com\/docs\/guides\/docker-container-communication\/#install-and-configure-postgresql\"><\/a><\/h3>\n<p>1.C\u1eadp nh\u1eadt h\u1ec7 th\u1ed1ng c\u1ee7a b\u1ea1n:<\/p>\n<pre class=\"wp-block-code\"><code>sudo apt update &amp;&amp; sudo apt upgrade\n<\/code><\/pre>\n<p>2.C\u00e0i \u0111\u1eb7t PostGreSQL:<\/p>\n<pre class=\"wp-block-code\"><code>sudo apt install postgresql postgresql-contrib<\/code><\/pre>\n<p>3.Thay \u0111\u1ed5i&nbsp;<code>postgres<\/code>m\u1eadt kh\u1ea9u ng\u01b0\u1eddi d\u00f9ng:<\/p>\n<pre class=\"wp-block-code\"><code>sudo passwd postgres<\/code><\/pre>\n<p>4.\u0110\u1eb7t m\u1eadt kh\u1ea9u cho&nbsp;<code>postgres<\/code>ng\u01b0\u1eddi d\u00f9ng c\u01a1 s\u1edf d\u1eef li\u1ec7u:<\/p>\n<pre class=\"wp-block-code\"><code>su - postgres\npsql -d template1 -c \"ALTER USER postgres WITH PASSWORD 'newpassword';\"<\/code><\/pre>\n<p>5.T\u1ea1o c\u01a1 s\u1edf d\u1eef li\u1ec7u cho \u1ee9ng d\u1ee5ng v\u00ed d\u1ee5 v\u00e0 k\u1ebft n\u1ed1i v\u1edbi n\u00f3:<\/p>\n<pre class=\"wp-block-code\"><code>createdb nodejs\npsql nodejs<\/code><\/pre>\n<p>6.Th\u00eam \u201cHello world\u201d v\u00e0o c\u01a1 s\u1edf d\u1eef li\u1ec7u:<\/p>\n<pre class=\"wp-block-code\"><code>nodejs=# CREATE TABLE hello (message varchar);\nnodejs=# INSERT INTO hello VALUES ('Hello world');\nnodejs=# \\q<\/code><\/pre>\n<p>7.T\u1ea1o b\u1ea3n sao l\u01b0u c\u01a1 s\u1edf d\u1eef li\u1ec7u \u0111\u1ec3 s\u1eed d\u1ee5ng sau:<\/p>\n<pre class=\"wp-block-code\"><code>pg_dumpall &gt; backup.sql<\/code><\/pre>\n<p>8.\u0110\u0103ng xu\u1ea5t v\u1edbi t\u01b0 c\u00e1ch l\u00e0&nbsp;<code>postgres<\/code>ng\u01b0\u1eddi d\u00f9ng Linux:<\/p>\n<pre class=\"wp-block-code\"><code>exit\n<\/code><\/pre>\n<p>9.Sao ch\u00e9p d\u1eef li\u1ec7u dump v\u00e0o th\u01b0 m\u1ee5c g\u1ed1c c\u1ee7a b\u1ea1n:<\/p>\n<pre class=\"wp-block-code\"><code>sudo cp \/var\/lib\/postgresql\/backup.sql ~\/.<\/code><\/pre>\n<p>10.V\u00ec b\u1ea1n s\u1ebd k\u1ebft n\u1ed1i \u0111\u1ebfn c\u01a1 s\u1edf d\u1eef li\u1ec7u n\u00e0y t\u1eeb m\u1ed9t container (s\u1ebd c\u00f3 \u0111\u1ecba ch\u1ec9 IP kh\u00e1c&nbsp;<code>locahost<\/code>), b\u1ea1n s\u1ebd c\u1ea7n ch\u1ec9nh s\u1eeda t\u1ec7p c\u1ea5u h\u00ecnh PostgreSQL \u0111\u1ec3 cho ph\u00e9p k\u1ebft n\u1ed1i t\u1eeb c\u00e1c \u0111\u1ecba ch\u1ec9 t\u1eeb xa. M\u1edf&nbsp;<code>\/etc\/postgresql\/9.5\/main\/postgresql.conf<\/code>trong tr\u00ecnh so\u1ea1n th\u1ea3o v\u0103n b\u1ea3n. B\u1ecf ch\u00fa th\u00edch&nbsp;<code>listen_addresses<\/code>d\u00f2ng v\u00e0 \u0111\u1eb7t th\u00e0nh &#8216;*&#8217;:<\/p>\n<pre class=\"wp-block-code\"><code>#------------------------------------------------------------------------------\n# CONNECTIONS AND AUTHENTICATION\n#------------------------------------------------------------------------------\n\n# - Connection Settings -\n\nlisten_addresses = '*'                  # what IP address(es) to listen on;<\/code><\/pre>\n<p>11.K\u00edch ho\u1ea1t v\u00e0 kh\u1edfi \u0111\u1ed9ng&nbsp;<code>postgresql<\/code>d\u1ecbch v\u1ee5:<\/p>\n<pre class=\"wp-block-code\"><code>sudo systemctl enable postgresql\nsudo systemctl start postgresql<\/code><\/pre>\n<h3 id=\"create-a-hello-world-app\">T\u1ea1o \u1ee9ng d\u1ee5ng Hello World<a href=\"https:\/\/www.linode.com\/docs\/guides\/docker-container-communication\/#create-a-hello-world-app\"><\/a><\/h3>\n<p>1.C\u00e0i \u0111\u1eb7t Node v\u00e0 NPM:<\/p>\n<pre class=\"wp-block-code\"><code>curl -sL https:\/\/deb.nodesource.com\/setup_8.x | sudo -E bash -\nsudo apt-get install nodejs<\/code><\/pre>\n<p>2.\u0110i\u1ec1u h\u01b0\u1edbng \u0111\u1ebfn th\u01b0 m\u1ee5c ch\u00ednh v\u00e0 t\u1ea1o m\u1ed9t th\u01b0 m\u1ee5c:<\/p>\n<pre class=\"wp-block-code\"><code>cd\nmkdir app &amp;&amp; cd app<\/code><\/pre>\n<p>3.S\u1eed d\u1ee5ng tr\u00ecnh so\u1ea1n th\u1ea3o v\u0103n b\u1ea3n, t\u1ea1o&nbsp;<code>app.js<\/code>v\u00e0 th\u00eam n\u1ed9i dung sau:<\/p>\n<pre class=\"wp-block-code\"><code>const { Client } = require('pg')\n\nconst client = new Client({\n  user: 'postgres',\n  host: 'localhost',\n  database: 'nodejs',\n  password: 'newpassword',\n  port: 5432\n})\n\nclient.connect()\n\nclient.query('SELECT * FROM hello', (err, res) =&gt; {\n  console.log(res.rows&#91;0].message)\n  client.end()\n})<\/code><\/pre>\n<p>\u1ee8ng d\u1ee5ng n\u00e0y s\u1eed d\u1ee5ng&nbsp;<code>pg<\/code>m\u00f4-\u0111un NPM (node-postgres) \u0111\u1ec3 k\u1ebft n\u1ed1i v\u1edbi c\u01a1 s\u1edf d\u1eef li\u1ec7u \u0111\u01b0\u1ee3c t\u1ea1o trong ph\u1ea7n tr\u01b0\u1edbc. Sau \u0111\u00f3, n\u00f3 truy v\u1ea5n b\u1ea3ng &#8216;hello&#8217; (tr\u1ea3 v\u1ec1 th\u00f4ng b\u00e1o &#8220;Hello world&#8221;) v\u00e0 ghi l\u1ea1i ph\u1ea3n h\u1ed3i v\u00e0o b\u1ea3ng \u0111i\u1ec1u khi\u1ec3n. Thay th\u1ebf&nbsp;<code>'newpassword'<\/code>b\u1eb1ng&nbsp;<code>postgres<\/code>m\u1eadt kh\u1ea9u ng\u01b0\u1eddi d\u00f9ng c\u01a1 s\u1edf d\u1eef li\u1ec7u m\u00e0 b\u1ea1n \u0111\u00e3 \u0111\u1eb7t trong ph\u1ea7n tr\u01b0\u1edbc.<\/p>\n<p class=\"has-background\" style=\"background-color:#74f78c33\">Ghi ch\u00fa: M\u00f4&nbsp;<code>pg<\/code>-\u0111un c\u0169ng c\u00f3 th\u1ec3 s\u1eed d\u1ee5ng c\u00e1c bi\u1ebfn m\u00f4i tr\u01b0\u1eddng \u0111\u1ec3 c\u1ea5u h\u00ecnh k\u1ebft n\u1ed1i m\u00e1y kh\u00e1ch. \u0110\u00e2y l\u00e0 t\u00f9y ch\u1ecdn \u0111\u01b0\u1ee3c khuy\u1ebfn ngh\u1ecb cho c\u00e1c \u1ee9ng d\u1ee5ng s\u1ea3n xu\u1ea5t. \u0110\u1ecdc th\u00eam v\u1ec1 c\u00e1c bi\u1ebfn m\u00f4i tr\u01b0\u1eddng trong&nbsp;<a href=\"https:\/\/node-postgres.com\/features\/connecting\" target=\"_blank\" rel=\"noreferrer noopener\">t\u00e0i li\u1ec7u node-postgres<\/a>&nbsp;.<\/p>\n<p>4.C\u00e0i \u0111\u1eb7t&nbsp;<code>pg<\/code>m\u00f4-\u0111un:<\/p>\n<pre class=\"wp-block-code\"><code>npm install pg<\/code><\/pre>\n<p>5.Ki\u1ec3m tra \u1ee9ng d\u1ee5ng:<\/p>\n<pre class=\"wp-block-code\"><code>node app.js\n<\/code><\/pre>\n<p>N\u1ebfu c\u01a1 s\u1edf d\u1eef li\u1ec7u \u0111\u01b0\u1ee3c c\u1ea5u h\u00ecnh \u0111\u00fang, \u201cHello world\u201d s\u1ebd hi\u1ec3n th\u1ecb tr\u00ean b\u1ea3ng \u0111i\u1ec1u khi\u1ec3n.<\/p>\n<h2 id=\"connect-container-to-docker-host\">K\u1ebft n\u1ed1i Container v\u1edbi Docker Host<a href=\"https:\/\/www.linode.com\/docs\/guides\/docker-container-communication\/#connect-container-to-docker-host\"><\/a><\/h2>\n<p>Ph\u1ea7n n\u00e0y minh h\u1ecda tr\u01b0\u1eddng h\u1ee3p s\u1eed d\u1ee5ng trong \u0111\u00f3 \u1ee9ng d\u1ee5ng Node.js \u0111\u01b0\u1ee3c ch\u1ea1y t\u1eeb v\u00f9ng ch\u1ee9a Docker v\u00e0 k\u1ebft n\u1ed1i v\u1edbi c\u01a1 s\u1edf d\u1eef li\u1ec7u \u0111ang ch\u1ea1y tr\u00ean m\u00e1y ch\u1ee7 Docker.<\/p>\n<h3 id=\"set-up-docker-container\">Thi\u1ebft l\u1eadp Docker Container<a href=\"https:\/\/www.linode.com\/docs\/guides\/docker-container-communication\/#set-up-docker-container\"><\/a><\/h3>\n<p>1.Tr\u1edf v\u1ec1 th\u01b0 m\u1ee5c g\u1ed1c c\u1ee7a b\u1ea1n:<\/p>\n<pre class=\"wp-block-code\"><code>cd<\/code><\/pre>\n<p>2.T\u1ea1o Dockerfile \u0111\u1ec3 ch\u1ea1y \u1ee9ng d\u1ee5ng Node.js:<\/p>\n<pre class=\"wp-block-code\"><code>FROM debian\n\nRUN apt update -y &amp;&amp; apt install -y gnupg curl\nRUN curl -sL https:\/\/deb.nodesource.com\/setup_8.x | bash - &amp;&amp; apt install -y nodejs\nCOPY app\/ \/home\/\n\nENTRYPOINT tail -F \/dev\/null<\/code><\/pre>\n<p>3.H\u00ecnh \u1ea3nh \u0111\u01b0\u1ee3c x\u00e2y d\u1ef1ng t\u1eeb Dockerfile n\u00e0y s\u1ebd sao ch\u00e9p&nbsp;<code>app\/<\/code>th\u01b0 m\u1ee5c v\u00e0o h\u00ecnh \u1ea3nh m\u1edbi. Ch\u1ec9nh s\u1eeda&nbsp;<code>app.js<\/code>\u0111\u1ec3 cho ph\u00e9p \u1ee9ng d\u1ee5ng k\u1ebft n\u1ed1i v\u1edbi&nbsp;<code>database<\/code>m\u00e1y ch\u1ee7 thay v\u00ec&nbsp;<code>localhost<\/code>:<\/p>\n<pre class=\"wp-block-code\"><code>const client = new Client({\n  user: 'postgres',\n  host: 'database',\n  database: 'nodejs',\n  password: 'newpassword',\n  port: 5432\n})<\/code><\/pre>\n<p>4.X\u00e2y d\u1ef1ng m\u1ed9t h\u00ecnh \u1ea3nh t\u1eeb Dockerfile:<\/p>\n<pre class=\"wp-block-code\"><code>docker build -t node_image .\n<\/code><\/pre>\n<h3 id=\"connect-container-to-database\">K\u1ebft n\u1ed1i Container v\u1edbi C\u01a1 s\u1edf d\u1eef li\u1ec7u<a href=\"https:\/\/www.linode.com\/docs\/guides\/docker-container-communication\/#connect-container-to-database\"><\/a><\/h3>\n<p>1.Docker t\u1ef1 \u0111\u1ed9ng thi\u1ebft l\u1eadp&nbsp;<strong>m\u1ea1ng c\u1ea7u n\u1ed1i<\/strong>&nbsp;m\u1eb7c \u0111\u1ecbnh , \u0111\u01b0\u1ee3c truy c\u1eadp th\u00f4ng qua&nbsp;<code>docker0<\/code>giao di\u1ec7n m\u1ea1ng. S\u1eed d\u1ee5ng&nbsp;<code>ifconfig<\/code>ho\u1eb7c&nbsp;<code>ip<\/code>\u0111\u1ec3 xem giao di\u1ec7n n\u00e0y:<\/p>\n<pre class=\"wp-block-code\"><code>ifconfig docker0\n<\/code><\/pre>\n<p>\u0110\u1ea7u ra s\u1ebd gi\u1ed1ng nh\u01b0 sau:<\/p>\n<pre class=\"wp-block-code\"><code>docker0   Link encap:Ethernet  HWaddr 02:42:1e:e8:39:54\n  inet addr:172.17.0.1  Bcast:0.0.0.0  Mask:255.255.0.0\n  inet6 addr: fe80::42:1eff:fee8:3954\/64 Scope:Link\n  UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1\n  RX packets:3848 errors:0 dropped:0 overruns:0 frame:0\n  TX packets:5084 errors:0 dropped:0 overruns:0 carrier:0\n  collisions:0 txqueuelen:0\n  RX bytes:246416 (246.4 KB)  TX bytes:94809688 (94.8 MB)<\/code><\/pre>\n<p>\u0110\u1ecba ch\u1ec9 IP n\u1ed9i b\u1ed9 c\u1ee7a m\u00e1y ch\u1ee7 Docker (Linode c\u1ee7a b\u1ea1n) l\u00e0 172.17.0.1.<\/p>\n<p>2.Cho ph\u00e9p PostgreSQL ch\u1ea5p nh\u1eadn k\u1ebft n\u1ed1i t\u1eeb giao di\u1ec7n Docker. M\u1edf&nbsp;<code>\/etc\/postgresql\/9.5\/main\/pg_hba.conf<\/code>trong tr\u00ecnh so\u1ea1n th\u1ea3o v\u0103n b\u1ea3n v\u00e0 th\u00eam d\u00f2ng sau:<\/p>\n<pre class=\"wp-block-code\"><code>host    all             postgres        172.17.0.0\/16           password<\/code><\/pre>\n<p>V\u00ec 172.17.0.1 l\u00e0 IP c\u1ee7a m\u00e1y ch\u1ee7 Docker n\u00ean t\u1ea5t c\u1ea3 c\u00e1c container tr\u00ean m\u00e1y ch\u1ee7 s\u1ebd c\u00f3 \u0111\u1ecba ch\u1ec9 IP trong ph\u1ea1m vi 172.17.0.0\/16.<\/p>\n<p>3.Kh\u1edfi \u0111\u1ed9ng l\u1ea1i c\u01a1 s\u1edf d\u1eef li\u1ec7u:<\/p>\n<pre class=\"wp-block-code\"><code>sudo systemctl restart postgresql<\/code><\/pre>\n<p>4.B\u1eaft \u0111\u1ea7u container:<\/p>\n<pre class=\"wp-block-code\"><code>docker run -d --add-host=database:172.17.0.1 --name node_container node_image<\/code><\/pre>\n<p>T\u00f9y ch\u1ecdn n\u00e0y&nbsp;<code>--add-host<\/code>\u0111\u1ecbnh ngh\u0129a m\u1ed9t&nbsp;<code>database<\/code>m\u00e1y ch\u1ee7, tr\u1ecf \u0111\u1ebfn \u0111\u1ecba ch\u1ec9 IP c\u1ee7a m\u00e1y ch\u1ee7 Docker. Khai b\u00e1o m\u00e1y&nbsp;<code>database<\/code>ch\u1ee7 khi ch\u1ea1y, thay v\u00ec m\u00e3 h\u00f3a c\u1ee9ng \u0111\u1ecba ch\u1ec9 IP trong \u1ee9ng d\u1ee5ng, gi\u00fap gi\u1eef cho v\u00f9ng ch\u1ee9a c\u00f3 th\u1ec3 t\u00e1i s\u1eed d\u1ee5ng.<\/p>\n<p>5.T\u1eeb b\u00ean trong v\u00f9ng ch\u1ee9a, s\u1eed d\u1ee5ng&nbsp;<code>ping<\/code>\u0111\u1ec3 ki\u1ec3m tra k\u1ebft n\u1ed1i v\u1edbi&nbsp;<code>database<\/code>m\u00e1y ch\u1ee7:<\/p>\n<pre class=\"wp-block-code\"><code>docker exec -it node_container ping database<\/code><\/pre>\n<p>6.M\u1ed7i container Docker c\u0169ng \u0111\u01b0\u1ee3c g\u00e1n \u0111\u1ecba ch\u1ec9 IP ri\u00eang t\u1eeb b\u00ean trong kh\u1ed1i 172.17.0.0\/16. T\u00ecm \u0111\u1ecba ch\u1ec9 IP c\u1ee7a container n\u00e0y b\u1eb1ng&nbsp;<code>ip<\/code>:<\/p>\n<pre class=\"wp-block-code\"><code>docker exec -it node_container ip addr show eth0\n<\/code><\/pre>\n<p>B\u1ea1n c\u00f3 th\u1ec3 ki\u1ec3m tra k\u1ebft n\u1ed1i n\u00e0y b\u1eb1ng c\u00e1ch ping \u0111\u1ecba ch\u1ec9 n\u00e0y t\u1eeb m\u00e1y ch\u1ee7 Docker.<\/p>\n<p>7.Ch\u1ea1y \u1ee9ng d\u1ee5ng:<\/p>\n<pre class=\"wp-block-code\"><code><code>docker exec -it node_container node home\/app.js<\/code><\/code><\/pre>\n<p>N\u1ebfu c\u1ea5u h\u00ecnh th\u00e0nh c\u00f4ng, ch\u01b0\u01a1ng tr\u00ecnh s\u1ebd hi\u1ec3n th\u1ecb \u0111\u1ea7u ra b\u1ea3ng \u0111i\u1ec1u khi\u1ec3n \u201cHello world\u201d nh\u01b0 tr\u01b0\u1edbc.<\/p>\n<h2 id=\"connect-two-containers\">K\u1ebft n\u1ed1i hai container<a href=\"https:\/\/www.linode.com\/docs\/guides\/docker-container-communication\/#connect-two-containers\"><\/a><\/h2>\n<p>Trong ph\u1ea7n n\u00e0y, c\u1ea3 \u1ee9ng d\u1ee5ng v\u00e0 c\u01a1 s\u1edf d\u1eef li\u1ec7u s\u1ebd ch\u1ea1y trong c\u00e1c container ri\u00eang bi\u1ec7t. B\u1ea1n c\u00f3 th\u1ec3 s\u1eed d\u1ee5ng&nbsp;<a href=\"https:\/\/hub.docker.com\/_\/postgres\/\" target=\"_blank\" rel=\"noreferrer noopener\">h\u00ecnh \u1ea3nh postgres ch\u00ednh th\u1ee9c<\/a>&nbsp;t\u1eeb Docker Hub v\u00e0 t\u1ea3i b\u1ea3n dump SQL \u0111\u00e3 t\u1ea1o tr\u01b0\u1edbc \u0111\u00f3.<\/p>\n<p class=\"has-background\" style=\"background-color:#f32a2a33\">Quan tr\u1ecdng: B\u1ea1n kh\u00f4ng n\u00ean l\u01b0u tr\u1eef d\u1eef li\u1ec7u c\u01a1 s\u1edf d\u1eef li\u1ec7u s\u1ea3n xu\u1ea5t b\u00ean trong m\u1ed9t container Docker. Container ph\u1ea3i \u0111\u01b0\u1ee3c coi l\u00e0 c\u00e1c th\u1ef1c th\u1ec3 t\u1ea1m th\u1eddi: n\u1ebfu m\u1ed9t container b\u1ea5t ng\u1edd b\u1ecb s\u1eadp ho\u1eb7c \u0111\u01b0\u1ee3c kh\u1edfi \u0111\u1ed9ng l\u1ea1i, t\u1ea5t c\u1ea3 d\u1eef li\u1ec7u trong c\u01a1 s\u1edf d\u1eef li\u1ec7u s\u1ebd b\u1ecb m\u1ea5t.<\/p>\n<p>1.D\u1eebng v\u00e0 x\u00f3a v\u00f9ng ch\u1ee9a Node.js:<\/p>\n<pre class=\"wp-block-code\"><code>docker stop node_container\ndocker rm node_container<\/code><\/pre>\n<p>2.K\u00e9o&nbsp;<code>postgres<\/code>h\u00ecnh \u1ea3nh:<\/p>\n<pre class=\"wp-block-code\"><code><code>docker pull postgres<\/code><\/code><\/pre>\n<p>3.\u0110\u1ea3m b\u1ea3o r\u1eb1ng&nbsp;<code>backup.sql<\/code>t\u1ec7p c\u1ee7a b\u1ea1n n\u1eb1m trong th\u01b0 m\u1ee5c l\u00e0m vi\u1ec7c hi\u1ec7n t\u1ea1i, sau \u0111\u00f3 ch\u1ea1y&nbsp;<code>postgres<\/code>h\u00ecnh \u1ea3nh:<\/p>\n<pre class=\"wp-block-code\"><code><code>docker run -d -v `pwd`:\/backup\/ --name pg_container postgres <\/code><\/code><\/pre>\n<p>T\u00f9y ch\u1ecdn n\u00e0y&nbsp;<code>-v<\/code>g\u1eafn th\u01b0 m\u1ee5c l\u00e0m vi\u1ec7c hi\u1ec7n t\u1ea1i c\u1ee7a b\u1ea1n v\u00e0o&nbsp;<code>\/backup\/<\/code>th\u01b0 m\u1ee5c tr\u00ean v\u00f9ng ch\u1ee9a m\u1edbi.<\/p>\n<p>4.Container m\u1edbi s\u1ebd t\u1ef1 \u0111\u1ed9ng kh\u1edfi \u0111\u1ed9ng c\u01a1 s\u1edf d\u1eef li\u1ec7u postgres v\u00e0 t\u1ea1o ng\u01b0\u1eddi d\u00f9ng postgres. Nh\u1eadp container v\u00e0 t\u1ea3i b\u1ea3n dump SQL:<\/p>\n<pre class=\"wp-block-code\"><code>docker exec -it pg_container bash\ncd backup\npsql -U postgres -f backup.sql postgres\nexit<\/code><\/pre>\n<p>5.Ch\u1ea1y l\u1ea1i h\u00ecnh \u1ea3nh n\u00fat. L\u1ea7n n\u00e0y, thay v\u00ec&nbsp;<code>--add-host<\/code>, h\u00e3y s\u1eed d\u1ee5ng&nbsp;<code>--link<\/code>t\u00f9y ch\u1ecdn \u0111\u1ec3 k\u1ebft n\u1ed1i v\u00f9ng ch\u1ee9a v\u1edbi&nbsp;<code>pg_container<\/code>:<\/p>\n<pre class=\"wp-block-code\"><code><code>docker run -d --name node_container --link=pg_container:database node_image <\/code><\/code><\/pre>\n<p>Thao t\u00e1c n\u00e0y s\u1ebd li\u00ean k\u1ebft&nbsp;<code>pg_container<\/code>d\u01b0\u1edbi t\u00ean m\u00e1y ch\u1ee7&nbsp;<code>database<\/code>.<\/p>\n<p>6.M\u1edf&nbsp;<code>\/etc\/hosts<\/code>v\u00e0o&nbsp;<code>node_container<\/code>\u0111\u1ec3 x\u00e1c nh\u1eadn li\u00ean k\u1ebft \u0111\u00e3 \u0111\u01b0\u1ee3c t\u1ea1o:<\/p>\n<pre class=\"wp-block-code\"><code><code>docker exec -it node_container cat \/etc\/hosts <\/code><\/code><\/pre>\n<p>S\u1ebd c\u00f3 m\u1ed9t d\u00f2ng t\u01b0\u01a1ng t\u1ef1 nh\u01b0 sau:<\/p>\n<pre class=\"wp-block-code\"><code>172.17.0.2  database  pg_container<\/code><\/pre>\n<p>\u0110i\u1ec1u n\u00e0y cho th\u1ea5y&nbsp;<code>pg_container<\/code>\u0111\u1ecba ch\u1ec9 IP 172.17.0.2 \u0111\u00e3 \u0111\u01b0\u1ee3c g\u00e1n v\u00e0 \u0111\u01b0\u1ee3c li\u00ean k\u1ebft \u0111\u1ebfn v\u00f9ng ch\u1ee9a n\u00e0y th\u00f4ng qua t\u00ean m\u00e1y ch\u1ee7&nbsp;<code>database<\/code>nh\u01b0 mong \u0111\u1ee3i.<\/p>\n<p>7.V\u00ec \u1ee9ng d\u1ee5ng Node.js v\u1eabn \u0111ang mong \u0111\u1ee3i k\u1ebft n\u1ed1i v\u1edbi c\u01a1 s\u1edf d\u1eef li\u1ec7u PostgreSQL tr\u00ean&nbsp;<code>database<\/code>m\u00e1y ch\u1ee7 n\u00ean kh\u00f4ng c\u1ea7n thay \u0111\u1ed5i th\u00eam n\u1eefa. B\u1ea1n s\u1ebd c\u00f3 th\u1ec3 ch\u1ea1y \u1ee9ng d\u1ee5ng nh\u01b0 tr\u01b0\u1edbc:<\/p>\n<pre class=\"wp-block-code\"><code><code>docker exec -it node_container node home\/app.js<\/code><\/code><\/pre>\n<h2 id=\"using-docker-compose\">S\u1eed d\u1ee5ng Docker Compose<a href=\"https:\/\/www.linode.com\/docs\/guides\/docker-container-communication\/#using-docker-compose\"><\/a><\/h2>\n<p>S\u1eed d\u1ee5ng t\u00f9y ch\u1ecdn&nbsp;<code>--link<\/code>or&nbsp;<code>--host<\/code>m\u1ed7i l\u1ea7n b\u1ea1n kh\u1edfi ch\u1ea1y container c\u00f3 th\u1ec3 r\u1ea5t c\u1ed3ng k\u1ec1nh. N\u1ebfu m\u00e1y ch\u1ee7 ho\u1eb7c b\u1ea5t k\u1ef3 container n\u00e0o c\u1ee7a b\u1ea1n b\u1ecb s\u1eadp, ch\u00fang ph\u1ea3i \u0111\u01b0\u1ee3c k\u1ebft n\u1ed1i l\u1ea1i th\u1ee7 c\u00f4ng. \u0110\u00e2y kh\u00f4ng ph\u1ea3i l\u00e0 t\u00ecnh hu\u1ed1ng l\u00fd t\u01b0\u1edfng cho b\u1ea5t k\u1ef3 \u1ee9ng d\u1ee5ng n\u00e0o y\u00eau c\u1ea7u kh\u1ea3 n\u0103ng s\u1eb5n s\u00e0ng li\u00ean t\u1ee5c. May m\u1eafn thay, Docker cung c\u1ea5p&nbsp;<strong>Docker Compose<\/strong>&nbsp;\u0111\u1ec3 qu\u1ea3n l\u00fd nhi\u1ec1u container v\u00e0 t\u1ef1 \u0111\u1ed9ng li\u00ean k\u1ebft ch\u00fang v\u1edbi nhau khi ch\u00fang \u0111\u01b0\u1ee3c kh\u1edfi ch\u1ea1y. Ph\u1ea7n n\u00e0y s\u1ebd s\u1eed d\u1ee5ng Docker Compose \u0111\u1ec3 t\u00e1i t\u1ea1o k\u1ebft qu\u1ea3 c\u1ee7a ph\u1ea7n tr\u01b0\u1edbc.<\/p>\n<p class=\"has-background\" style=\"background-color:#74f78c33\">Ghi ch\u00fa: \u0110\u1ec3 bi\u1ebft gi\u1ea3i th\u00edch to\u00e0n di\u1ec7n h\u01a1n v\u1ec1 Docker Compose v\u00e0 c\u00e1ch vi\u1ebft&nbsp;<code>docker-compose.yml<\/code>t\u1ec7p c\u1ea5u h\u00ecnh, h\u00e3y xem h\u01b0\u1edbng d\u1eabn&nbsp;<a href=\"https:\/\/www.linode.com\/docs\/guides\/how-to-use-docker-compose\/\">Docker Compose<\/a>&nbsp;\u0111\u1ea7y \u0111\u1ee7 c\u1ee7a ch\u00fang t\u00f4i .<\/p>\n<p>1.C\u00e0i \u0111\u1eb7t Docker Compose:<\/p>\n<pre class=\"wp-block-code\"><code>sudo curl -L https:\/\/github.com\/docker\/compose\/releases\/download\/1.17.0\/docker-compose-`uname -s`-`uname -m` -o \/usr\/local\/bin\/docker-compose\nsudo chmod +x \/usr\/local\/bin\/docker-compose<\/code><\/pre>\n<p>2.Trong c\u00f9ng th\u01b0 m\u1ee5c v\u1edbi Dockerfile c\u1ee7a b\u1ea1n, h\u00e3y t\u1ea1o m\u1ed9t&nbsp;<code>docker-compose.yml<\/code>t\u1ec7p c\u00f3 n\u1ed9i dung sau:<\/p>\n<pre class=\"wp-block-code\"><code>version: '3'\n\nservices:\n  database:\n    image: postgres\n    container_name: pg_container\n    volumes:\n       - pgdata:\/var\/lib\/postgresql\/data\n\n  app:\n    build: .\n    container_name: node_container\n    links:\n     - database\n    environment:\n      - PGPASSWORD=newpassword\n      - PGUSER=postgres\n      - PGDATABASE=nodejs\n      - PGHOST=database\n      - PGPORT=5432\n    depends_on:\n      - database\n\nvolumes:\n  pgdata: {}<\/code><\/pre>\n<p>Khi b\u1ea1n ch\u1ea1y Docker Compose v\u1edbi t\u1ec7p n\u00e0y, n\u00f3 s\u1ebd t\u1ea1o&nbsp;<code>pg_container<\/code>v\u00e0&nbsp;<code>node_container<\/code>t\u1eeb ph\u1ea7n tr\u01b0\u1edbc. Nh\u01b0 tr\u01b0\u1edbc, v\u00f9ng ch\u1ee9a c\u01a1 s\u1edf d\u1eef li\u1ec7u s\u1ebd s\u1eed d\u1ee5ng h\u00ecnh \u1ea3nh PostgreSQL ch\u00ednh th\u1ee9c, trong khi v\u00f9ng ch\u1ee9a \u1ee9ng d\u1ee5ng s\u1ebd \u0111\u01b0\u1ee3c x\u00e2y d\u1ef1ng t\u1eeb Dockerfile c\u1ee7a b\u1ea1n.&nbsp;<code>links<\/code>M\u1ee5c nh\u1eadp n\u00e0y c\u00f3 c\u00f9ng ch\u1ee9c n\u0103ng nh\u01b0&nbsp;<code>--link<\/code>t\u00f9y ch\u1ecdn trong&nbsp;<code>run<\/code>l\u1ec7nh \u0111\u00e3 s\u1eed d\u1ee5ng tr\u01b0\u1edbc \u0111\u00f3.<\/p>\n<p>3.Docker Compose c\u0169ng cho ph\u00e9p b\u1ea1n thi\u1ebft l\u1eadp c\u00e1c gi\u00e1 tr\u1ecb m\u00f4i tr\u01b0\u1eddng, do \u0111\u00f3 b\u1ea1n c\u00f3 th\u1ec3 \u0111\u01a1n gi\u1ea3n h\u00f3a \u1ee9ng d\u1ee5ng \u0111\u1ec3 s\u1eed d\u1ee5ng c\u00e1c gi\u00e1 tr\u1ecb n\u00e0y thay v\u00ec ph\u1ea3i m\u00e3 h\u00f3a c\u1ee9ng c\u00e1c gi\u00e1 tr\u1ecb. Ch\u1ec9nh s\u1eeda&nbsp;<code>app.js<\/code>\u0111\u1ec3 x\u00f3a c\u00e1c gi\u00e1 tr\u1ecb n\u00e0y:<\/p>\n<pre class=\"wp-block-code\"><code>const express = require('express')\nconst { Client } = require('pg')\n\nconst client = new Client()\n\nclient.connect()\n\nclient.query('SELECT * FROM hello', (err, res) =&gt; {\n  console.log(res.rows&#91;0].message)\n  client.end()\n})<\/code><\/pre>\n<p>4.X\u00f3a c\u00e1c th\u00f9ng ch\u1ee9a tr\u01b0\u1edbc \u0111\u00f3:<\/p>\n<pre class=\"wp-block-code\"><code>docker rm -f node_container pg_container\n<\/code><\/pre>\n<p>5.S\u1eed d\u1ee5ng Docker Compose \u0111\u1ec3 \u0111\u01b0a c\u00e1c container l\u00ean:<\/p>\n<pre class=\"wp-block-code\"><code>docker-compose up -d<\/code><\/pre>\n<p>6.T\u1ea3i d\u1eef li\u1ec7u v\u00ed d\u1ee5 v\u00e0o v\u00f9ng ch\u1ee9a m\u1edbi:<\/p>\n<pre class=\"wp-block-code\"><code>docker cp backup.sql pg_container:\/\ndocker exec -it pg_container psql -U postgres -f backup.sql postgres<\/code><\/pre>\n<p>7.Ch\u1ea1y&nbsp;<code>app.js<\/code>t\u1eeb v\u00f9ng ch\u1ee9a \u1ee9ng d\u1ee5ng:<\/p>\n<pre class=\"wp-block-code\"><code>docker exec -it node_container node home\/app.js\n<\/code><\/pre>\n<p>\u1ee8ng d\u1ee5ng s\u1ebd ch\u1ea1y nh\u01b0 tr\u01b0\u1edbc.<\/p>\n<h2 id=\"conclusion\">Ph\u1ea7n k\u1ebft lu\u1eadn<a href=\"https:\/\/www.linode.com\/docs\/guides\/docker-container-communication\/#conclusion\"><\/a><\/h2>\n<p>Theo m\u1eb7c \u0111\u1ecbnh, Docker t\u1ef1 \u0111\u1ed9ng g\u00e1n m\u1ed9t \u0111\u1ecba ch\u1ec9 IP cho m\u1ed7i container v\u00e0 cho m\u00e1y ch\u1ee7 Docker. B\u1ea1n c\u00f3 th\u1ec3 k\u1ebft n\u1ed1i th\u1ee7 c\u00f4ng c\u00e1c d\u1ecbch v\u1ee5 gi\u1eefa c\u00e1c container b\u1eb1ng c\u00e1ch s\u1eed d\u1ee5ng c\u00e1c \u0111\u1ecba ch\u1ec9 n\u00e0y (gi\u1ea3 s\u1eed t\u01b0\u1eddng l\u1eeda c\u1ee7a b\u1ea1n cho ph\u00e9p k\u1ebft n\u1ed1i).<\/p>\n<p>Tuy nhi\u00ean, Docker c\u0169ng cung c\u1ea5p m\u1ed9t s\u1ed1 wrapper ti\u1ec7n l\u1ee3i xung quanh c\u00e1c k\u1ebft n\u1ed1i n\u00e0y \u0111\u1ec3 gi\u00fap b\u1ea1n t\u0103ng t\u1ed1c v\u00e0 \u0111\u01a1n gi\u1ea3n h\u00f3a qu\u00e1 tr\u00ecnh k\u1ebft n\u1ed1i. B\u1ea1n c\u00f3 th\u1ec3 k\u1ebft n\u1ed1i m\u00e1y ch\u1ee7 Docker c\u1ee7a m\u00ecnh v\u1edbi m\u1ed9t container c\u00f3 t\u00ean m\u00e1y ch\u1ee7 duy nh\u1ea5t ho\u1eb7c li\u00ean k\u1ebft tr\u1ef1c ti\u1ebfp hai container. S\u1eed d\u1ee5ng Docker Compose c\u00f3 th\u1ec3 \u0111\u01a1n gi\u1ea3n h\u00f3a qu\u00e1 tr\u00ecnh n\u00e0y h\u01a1n n\u1eefa b\u1eb1ng c\u00e1ch cho ph\u00e9p b\u1ea1n khai b\u00e1o c\u00e1c k\u1ebft n\u1ed1i trong&nbsp;<code>docker-compose.yml<\/code>t\u1ec7p \u0111\u1ec3 ch\u00fang \u0111\u01b0\u1ee3c thi\u1ebft l\u1eadp t\u1ef1 \u0111\u1ed9ng khi c\u00e1c container \u0111\u01b0\u1ee3c \u0111\u01b0a l\u00ean.<\/p>\n<p>C\u00f3 nh\u1eefng t\u00f9y ch\u1ecdn k\u1ebft n\u1ed1i kh\u00e1c kh\u00f4ng \u0111\u01b0\u1ee3c \u0111\u1ec1 c\u1eadp trong h\u01b0\u1edbng d\u1eabn n\u00e0y. V\u00ed d\u1ee5, b\u1ea1n c\u00f3 th\u1ec3 ch\u1ea1y m\u1ed9t container b\u1eb1ng c\u00e1ch s\u1eed d\u1ee5ng&nbsp;<code>--net=\"host\"<\/code>, s\u1ebd chia s\u1ebb ng\u0103n x\u1ebfp m\u1ea1ng c\u1ee7a container \u0111\u00f3 v\u1edbi m\u00e1y ch\u1ee7 Docker:&nbsp;<code>localhost<\/code>tr\u00ean container s\u1ebd tr\u1ecf \u0111\u1ebfn&nbsp;<code>localhost<\/code>tr\u00ean m\u00e1y ch\u1ee7 Docker. B\u1ea1n c\u0169ng c\u00f3 th\u1ec3 hi\u1ec3n th\u1ecb c\u00e1c c\u1ed5ng tr\u00ean m\u1ed7i container Docker ho\u1eb7c c\u1ea5u h\u00ecnh m\u1ea1ng c\u1ea7u n\u1ed1i m\u1eb7c \u0111\u1ecbnh \u0111\u1ec3 linh ho\u1ea1t h\u01a1n. \u0110\u1ec3 th\u1ea3o lu\u1eadn s\u00e2u h\u01a1n v\u1ec1 c\u00e1c t\u00f9y ch\u1ecdn n\u00e0y, h\u00e3y xem c\u00e1c li\u00ean k\u1ebft trong ph\u1ea7n Th\u00f4ng tin th\u00eam b\u00ean d\u01b0\u1edbi.<\/p>\n<h2 id=\"more-information\">Th\u00f4ng tin th\u00eam<\/h2>\n<p>B\u1ea1n c\u00f3 th\u1ec3 mu\u1ed1n tham kh\u1ea3o c\u00e1c ngu\u1ed3n sau \u0111\u1ec3 bi\u1ebft th\u00eam th\u00f4ng tin v\u1ec1 ch\u1ee7 \u0111\u1ec1 n\u00e0y. M\u1eb7c d\u00f9 ch\u00fang t\u00f4i cung c\u1ea5p v\u1edbi hy v\u1ecdng r\u1eb1ng ch\u00fang s\u1ebd h\u1eefu \u00edch, nh\u01b0ng xin l\u01b0u \u00fd r\u1eb1ng ch\u00fang t\u00f4i kh\u00f4ng th\u1ec3 \u0111\u1ea3m b\u1ea3o t\u00ednh ch\u00ednh x\u00e1c ho\u1eb7c t\u00ednh k\u1ecbp th\u1eddi c\u1ee7a c\u00e1c t\u00e0i li\u1ec7u \u0111\u01b0\u1ee3c l\u01b0u tr\u1eef b\u00ean ngo\u00e0i.<\/p>\n<ul>\n<li><a href=\"https:\/\/docs.docker.com\/engine\/userguide\/networking\/default_network\/container-communication\/\" target=\"_blank\" rel=\"noreferrer noopener\">Docker: Hi\u1ec3u v\u1ec1 giao ti\u1ebfp container<\/a><\/li>\n<li><a href=\"https:\/\/rominirani.com\/docker-tutorial-series-part-8-linking-containers-69a4e5bf50fb\" target=\"_blank\" rel=\"noreferrer noopener\">Li\u00ean k\u1ebft c\u00e1c Container<\/a><\/li>\n<li><a href=\"https:\/\/deis.com\/blog\/2016\/connecting-docker-containers-1\/\" target=\"_blank\" rel=\"noreferrer noopener\">K\u1ebft n\u1ed1i Container<\/a><\/li>\n<\/ul>\n<p>Ngu\u1ed3n: https:\/\/www.linode.com\/docs\/guides\/docker-container-communication\/<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Khi s\u1eed d\u1ee5ng&nbsp;Docker&nbsp;\u0111\u1ec3 ch\u1ee9a c\u00e1c \u1ee9ng d\u1ee5ng c\u1ee7a b\u1ea1n, th\u00f4ng l\u1ec7 chung l\u00e0 ch\u1ea1y t\u1eebng th\u00e0nh ph\u1ea7n c\u1ee7a \u1ee9ng d\u1ee5ng trong m\u1ed9t v\u00f9ng ch\u1ee9a ri\u00eang bi\u1ec7t. V\u00ed d\u1ee5: m\u1ed9t trang web c\u00f3 th\u1ec3 c\u00f3 m\u00e1y ch\u1ee7 web, \u1ee9ng d\u1ee5ng v\u00e0 c\u01a1 s\u1edf d\u1eef li\u1ec7u, m\u1ed7i th\u00e0nh ph\u1ea7n ch\u1ea1y trong v\u00f9ng ch\u1ee9a ri\u00eang c\u1ee7a n\u00f3. C\u1ea5u<\/p>\n","protected":false},"author":1,"featured_media":36264,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[108],"tags":[],"class_list":["post-35035","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-containers"],"_links":{"self":[{"href":"https:\/\/jupitek.maudemo.vip\/index.php\/wp-json\/wp\/v2\/posts\/35035","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/jupitek.maudemo.vip\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/jupitek.maudemo.vip\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/jupitek.maudemo.vip\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/jupitek.maudemo.vip\/index.php\/wp-json\/wp\/v2\/comments?post=35035"}],"version-history":[{"count":0,"href":"https:\/\/jupitek.maudemo.vip\/index.php\/wp-json\/wp\/v2\/posts\/35035\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/jupitek.maudemo.vip\/index.php\/wp-json\/wp\/v2\/media\/36264"}],"wp:attachment":[{"href":"https:\/\/jupitek.maudemo.vip\/index.php\/wp-json\/wp\/v2\/media?parent=35035"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/jupitek.maudemo.vip\/index.php\/wp-json\/wp\/v2\/categories?post=35035"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/jupitek.maudemo.vip\/index.php\/wp-json\/wp\/v2\/tags?post=35035"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}