<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>STUNE</title>
    <link>https://stune.tistory.com/</link>
    <description>오픈소스 전문 기업 (주)에스튠</description>
    <language>ko</language>
    <pubDate>Mon, 22 Jun 2026 15:53:12 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>stuner</managingEditor>
    <image>
      <title>STUNE</title>
      <url>https://tistory1.daumcdn.net/tistory/3639604/attach/7ea4eff19bf6493cad3ad820358d38e5</url>
      <link>https://stune.tistory.com</link>
    </image>
    <item>
      <title>Docker. Installation on RHEL 8 / CentOS 8</title>
      <link>https://stune.tistory.com/12</link>
      <description>&lt;p&gt;The latest release of the&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://linuxconfig.org/how-to-install-rhel-8&quot;&gt;RHEL 8&lt;/a&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;/ CentOS 8. Red Hat has built its own tools,&lt;span&gt;&amp;nbsp;&lt;/span&gt;buildah&lt;span&gt;&amp;nbsp;&lt;/span&gt;and&lt;span&gt;&amp;nbsp;&lt;/span&gt;podman, which aim to be compatible with existing docker images and work without relying on a daemon, allowing the creation of containers as normal users, without the need of special permissions (with some limitations: e.g. at the moment of writing, it's still not possible to map host ports to the container without privileges).&lt;br /&gt;&lt;br /&gt;Some specific tools, however, are still missing: an equivalent of&lt;span&gt;&amp;nbsp;&lt;/span&gt;docker-compose, for example does not exists yet. In this tutorial we will see how to install and run the original Docker CE on Rhel8 by using the official Docker repository for CentOS7.&lt;b&gt;In this tutorial you will learn:&lt;/b&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;How to enable the docker-ce repository on RHEL 8 / CentOS 8&lt;/li&gt;
&lt;li&gt;How to install docker and docker-compose on RHEL 8 / CentOS 8&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-src=&quot;https://linuxconfig.org/images/docker_installed_rhel8.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/uQC77/btqCVDf7yaB/Y2X97m6mkMJjt3XJlhw6fk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/uQC77/btqCVDf7yaB/Y2X97m6mkMJjt3XJlhw6fk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/uQC77/btqCVDf7yaB/Y2X97m6mkMJjt3XJlhw6fk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FuQC77%2FbtqCVDf7yaB%2FY2X97m6mkMJjt3XJlhw6fk%2Fimg.png&quot; data-src=&quot;https://linuxconfig.org/images/docker_installed_rhel8.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;Docker installed on RHEL 8 / CentOS 8&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 id=&quot;h1-software-requirements-and-conventions-used&quot;&gt;Software Requirements and Conventions Used&lt;/h2&gt;
&lt;p&gt;Software Requirements and Linux Command Line ConventionsCategoryRequirements, Conventions or Software Version Used&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 160px;&quot; border=&quot;1&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 49.8837%; height: 20px;&quot;&gt;System&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;RHEL 8 / CentOS 8&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 49.8837%; height: 20px;&quot;&gt;Software&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;Docker version 18.09.2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 49.8837%; height: 20px;&quot;&gt;Other&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;Permission to run command with root privileges.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 100px;&quot;&gt;
&lt;td style=&quot;width: 49.8837%; height: 100px;&quot;&gt;Conventions&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 100px;&quot;&gt;&lt;b&gt;#&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;- requires given&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://linuxconfig.org/linux-commands&quot;&gt;linux commands&lt;/a&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;to be executed with root privileges either directly as a root user or by use of&lt;span&gt;&amp;nbsp;&lt;/span&gt;sudo&lt;span&gt;&amp;nbsp;&lt;/span&gt;command&lt;br /&gt;&lt;b&gt;$&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;- requires given&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://linuxconfig.org/linux-commands&quot;&gt;linux commands&lt;/a&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;to be executed as a regular non-privileged user&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&quot;h2-what-is-docker&quot;&gt;What is Docker?&lt;/h2&gt;
&lt;p&gt;Docker is an open source project which allows the creation and distribution of applications inside&lt;span&gt;&amp;nbsp;&lt;/span&gt;containers, which are standardized environments that can be easily replicated, independently from the host system. While in Red Hat Enterprise Linux 7 Docker was officially supported, on the new release of this open source operating system, it has been replaced by a series of other tools developed by Red Hat itself:&lt;span&gt;&amp;nbsp;&lt;/span&gt;buildah&lt;span&gt;&amp;nbsp;&lt;/span&gt;and&lt;span&gt;&amp;nbsp;&lt;/span&gt;podman.&lt;br /&gt;&lt;br /&gt;By the use of an external repository, however, it's still possible to install Docker CE (Community Edition). In this tutorial we will see how to install this repository; notice however, that it was originally meant for&lt;span&gt;&amp;nbsp;&lt;/span&gt;CentOS 7&lt;span&gt;&amp;nbsp;&lt;/span&gt;(a RHEL clone), and the community version of Docker has no official support for Red Hat Enterprise Linux. Because of this, issues exist - we discuss them below.&lt;/p&gt;
&lt;h2 id=&quot;h3-adding-the-external-repository&quot;&gt;Adding the external repository&lt;/h2&gt;
&lt;p&gt;Since Docker is not available on RHEL 8 / CentOS 8, we need to add an external repository to obtain the software. In this case we will use the official Docker CE CentOS repository: this is, at the moment of writing, the only way to install Docker CE on RHEL 8 / CentOS 8.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;The&lt;span&gt;&amp;nbsp;&lt;/span&gt;dnf config-manager&lt;span&gt;&amp;nbsp;&lt;/span&gt;utility let us, among the other things, easily enable or disable a repository in our distribution. By default, only the&lt;span&gt;&amp;nbsp;&lt;/span&gt;appstream&lt;span&gt;&amp;nbsp;&lt;/span&gt;and&lt;span&gt;&amp;nbsp;&lt;/span&gt;baseos&lt;span&gt;&amp;nbsp;&lt;/span&gt;repositories are enabled on Rhel8; we need to add and enable also the&lt;span&gt;&amp;nbsp;&lt;/span&gt;docker-ce&lt;span&gt;&amp;nbsp;&lt;/span&gt;repo. All we need to do to accomplish this task, is to run the following command:&lt;/p&gt;
&lt;pre id=&quot;code_1585025582720&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ sudo dnf config-manager --add-repo=https://download.docker.com/linux/centos/docker-ce.repo&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;We can verify that the repository has been enabled, by looking at the output of the following command:&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1585025589414&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ sudo dnf repolist -v&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;The command above will return detailed information about all the enabled repositories. This is what you should see at this point:&lt;/p&gt;
&lt;pre id=&quot;code_1585027977604&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Repo-id : docker-ce-stable
Repo-name : Docker CE Stable - x86_64
Repo-revision: 1549905809
Repo-updated : Mon 11 Feb 2019 06:23:29 PM CET
Repo-pkgs : 30 Repo-size : 618 M
Repo-baseurl : https://download.docker.com/linux/centos/7/x86_64/stable
Repo-expire : 172,800 second(s) (last: Mon 18 Feb 2019 10:23:54 AM CET)
Repo-filename: /etc/yum.repos.d/docker-ce.repo

Repo-id : rhel-8-for-x86_64-appstream-rpms
Repo-name : Red Hat Enterprise Linux 8 for x86_64 - AppStream Beta (RPMs)
Repo-revision: 1542158694
Repo-updated : Wed 14 Nov 2018 02:24:54 AM CET
Repo-pkgs : 4,594
Repo-size : 4.9 G 
Repo-baseurl : https://cdn.redhat.com/content/beta/rhel8/8/x86_64/appstream/os
Repo-expire : 86,400 second(s) (last: Mon 18 Feb 2019 10:23:55 AM CET)
Repo-filename: /etc/yum.repos.d/redhat.repo

Repo-id : rhel-8-for-x86_64-baseos-rpms
Repo-name : Red Hat Enterprise Linux 8 for x86_64 - BaseOS Beta (RPMs)
Repo-revision: 1542158719 Repo-updated : Wed 14 Nov 2018 02:25:19 AM CET
Repo-pkgs : 1,686 Repo-size : 925 M 
Repo-baseurl : https://cdn.redhat.com/content/beta/rhel8/8/x86_64/baseos/os 
Repo-expire : 86,400 second(s) (last: Mon 18 Feb 2019 10:23:56 AM CET)
Repo-filename: /etc/yum.repos.d/redhat.repo Total packages: 6,310&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;h3-1-installing-docker-ce&quot;&gt;Installing docker-ce&lt;/h3&gt;
&lt;p&gt;The&lt;span&gt;&amp;nbsp;&lt;/span&gt;docker-ce-stable&lt;span&gt;&amp;nbsp;&lt;/span&gt;repository is now enabled on our system. The repository contains several versions of the&lt;span&gt;&amp;nbsp;&lt;/span&gt;docker-ce&lt;span&gt;&amp;nbsp;&lt;/span&gt;package, to display all of them, we can run:&lt;/p&gt;
&lt;pre id=&quot;code_1585028123256&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ dnf list docker-ce --showduplicates | sort -r
docker-ce.x86_64 3:19.03.2-3.el7 docker-ce-stable 
docker-ce.x86_64 3:19.03.1-3.el7 docker-ce-stable 
docker-ce.x86_64 3:19.03.0-3.el7 docker-ce-stable 
docker-ce.x86_64 3:18.09.9-3.el7 docker-ce-stable 
docker-ce.x86_64 3:18.09.8-3.el7 docker-ce-stable 
docker-ce.x86_64 3:18.09.7-3.el7 docker-ce-stable 
docker-ce.x86_64 3:18.09.6-3.el7 docker-ce-stable 
docker-ce.x86_64 3:18.09.5-3.el7 docker-ce-stable 
docker-ce.x86_64 3:18.09.4-3.el7 docker-ce-stable 
docker-ce.x86_64 3:18.09.3-3.el7 docker-ce-stable 
docker-ce.x86_64 3:18.09.2-3.el7 docker-ce-stable 
docker-ce.x86_64 3:18.09.1-3.el7 docker-ce-stable 
docker-ce.x86_64 3:18.09.0-3.el7 docker-ce-stable 
docker-ce.x86_64 18.06.3.ce-3.el7 docker-ce-stable 
docker-ce.x86_64 18.06.2.ce-3.el7 docker-ce-stable 
docker-ce.x86_64 18.06.1.ce-3.el7 docker-ce-stable 
docker-ce.x86_64 18.06.0.ce-3.el7 docker-ce-stable 
docker-ce.x86_64 18.03.1.ce-1.el7.centos 
docker-ce-stable docker-ce.x86_64 18.03.0.ce-1.el7.centos 
docker-ce-stable docker-ce.x86_64 17.12.1.ce-1.el7.centos 
docker-ce-stable docker-ce.x86_64 17.12.0.ce-1.el7.centos 
docker-ce-stable docker-ce.x86_64 17.09.1.ce-1.el7.centos 
docker-ce-stable docker-ce.x86_64 17.09.0.ce-1.el7.centos 
docker-ce-stable docker-ce.x86_64 17.06.2.ce-1.el7.centos 
docker-ce-stable docker-ce.x86_64 17.06.1.ce-1.el7.centos 
docker-ce-stable docker-ce.x86_64 17.06.0.ce-1.el7.centos 
docker-ce-stable docker-ce.x86_64 17.03.3.ce-1.el7 docker-ce-stable 
docker-ce.x86_64 17.03.2.ce-1.el7.centos docker-ce-stable 
docker-ce.x86_64 17.03.1.ce-1.el7.centos docker-ce-stable 
docker-ce.x86_64 17.03.0.ce-1.el7.centos docker-ce-stable&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;What version to install? Well, Red Hat seems to have somehow blocked the installation of&lt;span&gt;&amp;nbsp;&lt;/span&gt;containerd.io&lt;span&gt;&amp;nbsp;&lt;/span&gt;&amp;gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;1.2.0-3.el7, which is a dependency of&lt;span&gt;&amp;nbsp;&lt;/span&gt;docker-ce. Because of this, simply running the&lt;span&gt;&amp;nbsp;&lt;/span&gt;sudo dnf install docker-ce&lt;span&gt;&amp;nbsp;&lt;/span&gt;command, won't work. As we will see in a minute, it's still possibile to workaround this problem; once&lt;span&gt;&amp;nbsp;&lt;/span&gt;docker-ce&lt;span&gt;&amp;nbsp;&lt;/span&gt;is installed, however, another problem becomes evident: as long as&lt;span&gt;&amp;nbsp;&lt;/span&gt;firewalld, the system firewall manager is enabled,&lt;span&gt;&amp;nbsp;&lt;/span&gt;DNS resolution&lt;span&gt;&amp;nbsp;&lt;/span&gt;inside docker containers does not work.&lt;br /&gt;&lt;br /&gt;This is, of course a critical problem. However, if you still want to proceed with the installation, here are the possible methods that can be used to avoid the dependencies issues:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Install a specific version of&lt;span&gt;&amp;nbsp;&lt;/span&gt;docker-ce&lt;span&gt;&amp;nbsp;&lt;/span&gt;which requires an installable version of the&lt;span&gt;&amp;nbsp;&lt;/span&gt;containerd.io&lt;span&gt;&amp;nbsp;&lt;/span&gt;package;&lt;/li&gt;
&lt;li&gt;Force the installation providing the&lt;span&gt;&amp;nbsp;&lt;/span&gt;--nobest&lt;span&gt;&amp;nbsp;&lt;/span&gt;option&lt;/li&gt;
&lt;li&gt;Install the latest available&lt;span&gt;&amp;nbsp;&lt;/span&gt;containerd.io&lt;span&gt;&amp;nbsp;&lt;/span&gt;rpm manually;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Install a specific version of docker-ce&lt;/h3&gt;
&lt;p&gt;At the moment of writing the versions of&lt;span&gt;&amp;nbsp;&lt;/span&gt;docker-ce&lt;span&gt;&amp;nbsp;&lt;/span&gt;that are installed without problems are:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;docker-ce-3:18.09.1-3.el7&lt;/li&gt;
&lt;li&gt;docker-ce-18.06.3.ce-3.el7;&lt;/li&gt;
&lt;li&gt;docker-ce-17.12.1.ce-1.el7.centos&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;To install a specific version, all we have to do is to provide the fully qualified package name, for example:&lt;/p&gt;
&lt;pre id=&quot;code_1585028201649&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ sudo dnf install docker-ce-3:18.09.1-3.el7Force the installation of docker-ce with the --nobest option&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Force the installation of docker-ce with the --nobest option&lt;/h3&gt;
&lt;p&gt;Normally, when installing a package, the best available candidate is selected from a repository. In this case, for example, the installation of the latest version of&lt;span&gt;&amp;nbsp;&lt;/span&gt;docker-ce&lt;span&gt;&amp;nbsp;&lt;/span&gt;is attempted (and fails). By using the&lt;span&gt;&amp;nbsp;&lt;/span&gt;--nobest&lt;span&gt;&amp;nbsp;&lt;/span&gt;option, we can change this behavior so that the first version of&lt;span&gt;&amp;nbsp;&lt;/span&gt;docker-ce&lt;span&gt;&amp;nbsp;&lt;/span&gt;with satisfiable dependencies is selected as &quot;fallback&quot;, in this case&lt;span&gt;&amp;nbsp;&lt;/span&gt;3:18.09.1-3.el7.&lt;/p&gt;
&lt;pre id=&quot;code_1585028261656&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ sudo dnf install --nobest docker-ce
Dependencies resolved.

Problem: package docker-ce-3:19.03.2-3.el7.x86_64 requires containerd.io &amp;gt;= 1.2.2-3, but none of the providers can be installed
  - cannot install the best candidate for the job
  - package containerd.io-1.2.2-3.3.el7.x86_64 is excluded
  - package containerd.io-1.2.2-3.el7.x86_64 is excluded
  - package containerd.io-1.2.4-3.1.el7.x86_64 is excluded
  - package containerd.io-1.2.5-3.1.el7.x86_64 is excluded
  - package containerd.io-1.2.6-3.3.el7.x86_64 is excluded
=======================================================================================================================================================
 Package                            Arch         Version                                                  Repository                              Size
=======================================================================================================================================================
Installing:
 docker-ce                          x86_64       3:18.09.1-3.el7                                          docker-ce-stable                        19 M
Installing dependencies:
 containerd.io                      x86_64       1.2.0-3.el7                                              docker-ce-stable                        22 M
 docker-ce-cli                      x86_64       1:19.03.2-3.el7                                          docker-ce-stable                        39 M
 container-selinux                  noarch       2:2.94-1.git1e99f1d.module+el8.0.0+4017+bbba319f         rhel-8-for-x86_64-appstream-rpms        43 k
 tar                                x86_64       2:1.30-4.el8                                             rhel-8-for-x86_64-baseos-rpms          838 k
 libcgroup                          x86_64       0.41-19.el8                                              rhel-8-for-x86_64-baseos-rpms           70 k
 python3-policycoreutils            noarch       2.8-16.1.el8                                             rhel-8-for-x86_64-baseos-rpms          2.2 M
 python3-libsemanage                x86_64       2.8-5.el8                                                rhel-8-for-x86_64-baseos-rpms          127 k
 python3-setools                    x86_64       4.2.0-2.el8                                              rhel-8-for-x86_64-baseos-rpms          598 k
 checkpolicy                        x86_64       2.8-2.el8                                                rhel-8-for-x86_64-baseos-rpms          338 k
 python3-audit                      x86_64       3.0-0.10.20180831git0047a6c.el8                          rhel-8-for-x86_64-baseos-rpms           85 k
 policycoreutils-python-utils       noarch       2.8-16.1.el8                                             rhel-8-for-x86_64-baseos-rpms          228 k
Skipping packages with broken dependencies:
 docker-ce                          x86_64       3:19.03.2-3.el7                                          docker-ce-stable                        24 M

Transaction Summary
=======================================================================================================================================================
Install  12 Packages
Skip      1 Package

Total download size: 85 M
Installed size: 351 M
Is this ok [y/N]: &lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Install the latest available containerd.io package manually&lt;/h3&gt;
&lt;p&gt;If we stricly need to install the latest version of&lt;span&gt;&amp;nbsp;&lt;/span&gt;docker-ce, we can install the required version of&lt;span&gt;&amp;nbsp;&lt;/span&gt;containerd.io&lt;span&gt;&amp;nbsp;&lt;/span&gt;manually, by running:&lt;/p&gt;
&lt;pre id=&quot;code_1585028352289&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ sudo dnf install https://download.docker.com/linux/centos/7/x86_64/stable/Packages/containerd.io-1.2.6-3.3.el7.x86_64.rpm&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;After the package is installed, we can simply install the latest&lt;span&gt;&amp;nbsp;&lt;/span&gt;docker-ce:&lt;/p&gt;
&lt;pre id=&quot;code_1585028366114&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ sudo dnf install docker-ce 
Dependencies resolved. 
=======================================================================================================================================================
  Package                          Arch                      Version                             Repository                                        Size
=======================================================================================================================================================
Installing:
  docker-ce                        x86_64                    3:19.03.2-3.el7                     docker-ce-stable                                  24 M
Installing dependencies:
  docker-ce-cli                    x86_64                    1:19.03.2-3.el7                     docker-ce-stable                                  39 M
  tar                              x86_64                    2:1.30-4.el8                        rhel-8-for-x86_64-baseos-rpms                    838 k
  libcgroup                        x86_64                    0.41-19.el8                         rhel-8-for-x86_64-baseos-rpms                     70 k

Transaction Summary
=======================================================================================================================================================
Install  4 Packages

Total download size: 65 M
Installed size: 275 M
Is this ok [y/N]:&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This option is less convenient since the&lt;span&gt;&amp;nbsp;&lt;/span&gt;containerd.io&lt;span&gt;&amp;nbsp;&lt;/span&gt;package is not installed as a dependency of&lt;span&gt;&amp;nbsp;&lt;/span&gt;docker-ce, therefore it will not be removed automatically when the latter is uninstalled from the system.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Whatever method we use to install&lt;span&gt;&amp;nbsp;&lt;/span&gt;docker-ce, as said before, in order to make&lt;span&gt;&amp;nbsp;&lt;/span&gt;DNS resolution&lt;span&gt;&amp;nbsp;&lt;/span&gt;work inside Docker containers, we must disable firewalld (a system reboot may be also needed):&lt;/p&gt;
&lt;pre id=&quot;code_1585028420817&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ sudo systemctl disable firewalld&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 id=&quot;h4-start-and-enable-the-docker-daemon&quot;&gt;Start and enable the docker daemon&lt;/h2&gt;
&lt;p&gt;Once&lt;span&gt;&amp;nbsp;&lt;/span&gt;docker-ce&lt;span&gt;&amp;nbsp;&lt;/span&gt;is installed, we must start and enable the docker daemon, so that it will be also launched automatically at boot. The command we need to run is the following:&lt;/p&gt;
&lt;pre id=&quot;code_1585028441369&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ sudo systemctl enable --now docker&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;At this point, we can confirm that the daemon is active by running:&lt;/p&gt;
&lt;pre id=&quot;code_1585028454166&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ systemctl is-active docker 
active&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Similarly, we can check that it is enabled at boot, by running:&lt;/p&gt;
&lt;pre id=&quot;code_1585028490525&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ systemctl is-enabled docker enabled&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 id=&quot;h5-installing-docker-compose&quot;&gt;Installing docker-compose&lt;/h2&gt;
&lt;p&gt;Docker compose is a very useful package which let us manage multi-container applications, like for example those based on the&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://linuxconfig.org/how-to-install-lamp-on-redhat-8&quot;&gt;LAMP&lt;/a&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;stack, where each part of the environment (PHP, Apache, MariaDB) is provided by a dedicated container (if you are interested in the subject, take a look at our tutorial about&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://linuxconfig.org/how-to-create-a-docker-based-lamp-stack-using-docker-compose-on-ubuntu-18-04-bionic-beaver-linux&quot;&gt;creating a docker-based lamp stack&lt;/a&gt;). The package is not available on Rhel8, nor an equivalent exists to be used with the Rhel tools. It's, however, possible to install it in many ways: just keep on reading and decide what suits you best.&lt;/p&gt;
&lt;h3 id=&quot;h5-1-global-installation&quot;&gt;Global installation&lt;/h3&gt;
&lt;p&gt;The way we should install&lt;span&gt;&amp;nbsp;&lt;/span&gt;docker-compose&lt;span&gt;&amp;nbsp;&lt;/span&gt;varies depending on whether we want to install it globally or just for a single user. At the moment of writing, the only way to install it globally is to download the binary from the github page of the project:&lt;/p&gt;
&lt;pre id=&quot;code_1585028514267&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ curl -L &quot;https://github.com/docker/compose/releases/download/1.23.2/docker-compose-$(uname -s)-$(uname -m)&quot; -o docker-compose&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Once the binary is downloaded, we move it into&lt;span&gt;&amp;nbsp;&lt;/span&gt;/usr/local/bin&lt;span&gt;&amp;nbsp;&lt;/span&gt;and we make it executable:&lt;/p&gt;
&lt;pre id=&quot;code_1585028526715&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ sudo mv docker-compose /usr/local/bin &amp;amp;&amp;amp; sudo chmod +x /usr/local/bin/docker-compose&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;The&lt;span&gt;&amp;nbsp;&lt;/span&gt;/usr/local&lt;span&gt;&amp;nbsp;&lt;/span&gt;hierarchy is not chosen randomly. This directory structure is made to be used for files installed by the local administrator manually (for software compiled from source, for example), in order to ensure separation from the software installed with the system package manager.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Although it's possible for a normal user to run docker-related commands if he is part of the&lt;span&gt;&amp;nbsp;&lt;/span&gt;docker&lt;span&gt;&amp;nbsp;&lt;/span&gt;group (the group is automatically created when we install docker-ce), by default they must be executed with root privileges for security reasons. When we need to do the latter, since the&lt;span&gt;&amp;nbsp;&lt;/span&gt;/usr/local/bin&lt;span&gt;&amp;nbsp;&lt;/span&gt;directory is not in the root user's&lt;span&gt;&amp;nbsp;&lt;/span&gt;PATH, we either need to call the binary specifying its location or add&lt;span&gt;&amp;nbsp;&lt;/span&gt;/usr/local/bin&lt;span&gt;&amp;nbsp;&lt;/span&gt;to the&lt;span&gt;&amp;nbsp;&lt;/span&gt;PATH&lt;span&gt;&amp;nbsp;&lt;/span&gt;itself. The first option is the one which I recommend in this case.&lt;/p&gt;
&lt;h3 id=&quot;h5-2-per-user-installation&quot;&gt;Per-user installation&lt;/h3&gt;
&lt;p&gt;If our user is part of the&lt;span&gt;&amp;nbsp;&lt;/span&gt;docker&lt;span&gt;&amp;nbsp;&lt;/span&gt;group, and thus it is allowed to run docker commands, and since&lt;span&gt;&amp;nbsp;&lt;/span&gt;docker-compose&lt;span&gt;&amp;nbsp;&lt;/span&gt;is available as a python package, we can also install it using&lt;span&gt;&amp;nbsp;&lt;/span&gt;pip, the python package manager. First, make sure&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://linuxconfig.org/how-to-install-pip-in-redhat-8&quot;&gt;pip itself is installed&lt;/a&gt;:&lt;/p&gt;
&lt;pre id=&quot;code_1585028547172&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ sudo dnf install python3-pip&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;To obtain docker-compose we run:&lt;/p&gt;
&lt;pre id=&quot;code_1585028556327&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ pip3.6 install docker-compose --user&lt;/code&gt;&lt;/pre&gt;
&lt;hr style=&quot;box-sizing: inherit; border-bottom: 1px solid #efefef; height: 0px; border-left: none; border-right: none; border-top: none; margin: 1.5rem 0px;&quot; /&gt;
&lt;p&gt;Please notice that even if would be possible to run pip as root to install a package globally, this is not recommended and highly discouraged.&lt;/p&gt;
&lt;h2 id=&quot;h6-testing-docker&quot;&gt;Testing docker&lt;/h2&gt;
&lt;p&gt;We installed docker and docker-compose, now to check that everything works as expected, we can try to build an image and run a container: in this case we will use the official&lt;span&gt;&amp;nbsp;&lt;/span&gt;httpd&lt;span&gt;&amp;nbsp;&lt;/span&gt;one. All we have to do is to launch the following command:&lt;/p&gt;
&lt;pre id=&quot;code_1585028584790&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo docker run --rm --name=linuxconfig-test -p 80:80 httpd&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Since the&lt;span&gt;&amp;nbsp;&lt;/span&gt;httpd&lt;span&gt;&amp;nbsp;&lt;/span&gt;image does not exists locally it will be automatically fetched and built. Finally, a container based on it will be launched in the foreground (it will be automatically removed when stopped). We should be able to see the&lt;span&gt;&amp;nbsp;&lt;/span&gt;It works!&lt;span&gt;&amp;nbsp;&lt;/span&gt;message when we reach our machine ip via browser.&lt;/p&gt;
&lt;h2 id=&quot;h7-conclusions&quot;&gt;Conclusions&lt;/h2&gt;
&lt;p&gt;Red Hat Enterprise Linux 8 does not support Docker: on this distribution it has been replaced by Red Hat own tools like&lt;span&gt;&amp;nbsp;&lt;/span&gt;buildah&lt;span&gt;&amp;nbsp;&lt;/span&gt;and&lt;span&gt;&amp;nbsp;&lt;/span&gt;podman, which are compatible with Docker but don't need a server/client architecture to run. Using native tools, where possibile, is always the recommended way to go, but for a reason or another you may still want to install the original Docker. In this tutorial, we saw how it is possible to install&lt;span&gt;&amp;nbsp;&lt;/span&gt;Docker CE&lt;span&gt;&amp;nbsp;&lt;/span&gt;on Rhel8, by using the official Docker repository for CentOS7, which is a 100% compatible clone.&lt;br /&gt;&lt;br /&gt;This is not an ideal solution, and as we saw, at the moment, some workarounds are needed to make Docker work on RHEL8. If some new issues arises, or better solutions to the problems mentioned above are found, this article will be updated accordingly. Stay tuned&lt;/p&gt;</description>
      <category>TechBlog</category>
      <author>stuner</author>
      <guid isPermaLink="true">https://stune.tistory.com/12</guid>
      <comments>https://stune.tistory.com/12#entry12comment</comments>
      <pubDate>Tue, 24 Mar 2020 13:55:44 +0900</pubDate>
    </item>
    <item>
      <title>Docker. Installation on Ubuntu</title>
      <link>https://stune.tistory.com/11</link>
      <description>&lt;h2 id=&quot;prerequisites&quot;&gt;Prerequisites&lt;/h2&gt;
&lt;h3 id=&quot;docker-ee-customers&quot;&gt;Docker EE customers&lt;/h3&gt;
&lt;p&gt;To install Docker Enterprise Edition (Docker EE), go to&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://docs.docker.com/install/linux/docker-ee/ubuntu/&quot;&gt;Get Docker EE for Ubuntu&lt;/a&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;instead of this topic&lt;/b&gt;.&lt;/p&gt;
&lt;p&gt;To learn more about Docker EE, see&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://www.docker.com/enterprise-edition/&quot;&gt;Docker Enterprise Edition&lt;/a&gt;.&lt;/p&gt;
&lt;h3 id=&quot;os-requirements&quot;&gt;OS requirements&lt;/h3&gt;
&lt;p&gt;To install Docker Engine - Community, you need the 64-bit version of one of these Ubuntu versions:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Eoan 19.10&lt;/li&gt;
&lt;li&gt;Bionic 18.04 (LTS)&lt;/li&gt;
&lt;li&gt;Xenial 16.04 (LTS)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Docker Engine - Community is supported on&lt;span&gt;&amp;nbsp;&lt;/span&gt;x86_64&lt;span&gt;&amp;nbsp;&lt;/span&gt;(or&lt;span&gt;&amp;nbsp;&lt;/span&gt;amd64),&lt;span&gt;&amp;nbsp;&lt;/span&gt;armhf,&lt;span&gt;&amp;nbsp;&lt;/span&gt;arm64,&lt;span&gt;&amp;nbsp;&lt;/span&gt;s390x&lt;span&gt;&amp;nbsp;&lt;/span&gt;(IBM Z), and&lt;span&gt;&amp;nbsp;&lt;/span&gt;ppc64le&lt;span&gt;&amp;nbsp;&lt;/span&gt;(IBM Power) architectures.&lt;/p&gt;
&lt;h3 id=&quot;uninstall-old-versions&quot;&gt;Uninstall old versions&lt;/h3&gt;
&lt;p&gt;Older versions of Docker were called&lt;span&gt;&amp;nbsp;&lt;/span&gt;docker,&lt;span&gt;&amp;nbsp;&lt;/span&gt;docker.io, or&lt;span&gt;&amp;nbsp;&lt;/span&gt;docker-engine. If these are installed, uninstall them:&lt;/p&gt;
&lt;p&gt;&lt;span&gt;$ &lt;/span&gt;&lt;span&gt;sudo &lt;/span&gt;apt-get remove docker docker-engine docker.io containerd runc&lt;/p&gt;
&lt;p&gt;It&amp;rsquo;s OK if&lt;span&gt;&amp;nbsp;&lt;/span&gt;apt-get&lt;span&gt;&amp;nbsp;&lt;/span&gt;reports that none of these packages are installed.&lt;/p&gt;
&lt;p&gt;The contents of&lt;span&gt;&amp;nbsp;&lt;/span&gt;/var/lib/docker/, including images, containers, volumes, and networks, are preserved. The Docker Engine - Community package is now called&lt;span&gt;&amp;nbsp;&lt;/span&gt;docker-ce.&lt;/p&gt;
&lt;h3 id=&quot;supported-storage-drivers&quot;&gt;Supported storage drivers&lt;/h3&gt;
&lt;p&gt;Docker Engine - Community on Ubuntu supports&lt;span&gt;&amp;nbsp;&lt;/span&gt;overlay2,&lt;span&gt;&amp;nbsp;&lt;/span&gt;aufs&lt;span&gt;&amp;nbsp;&lt;/span&gt;and&lt;span&gt;&amp;nbsp;&lt;/span&gt;btrfs&lt;span&gt;&amp;nbsp;&lt;/span&gt;storage drivers.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;b&gt;Note&lt;/b&gt;: In Docker Engine - Enterprise,&lt;span&gt;&amp;nbsp;&lt;/span&gt;btrfs&lt;span&gt;&amp;nbsp;&lt;/span&gt;is only supported on SLES. See the documentation on&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://docs.docker.com/engine/userguide/storagedriver/btrfs-driver/&quot;&gt;btrfs&lt;/a&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;for more details.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;For new installations on version 4 and higher of the Linux kernel,&lt;span&gt;&amp;nbsp;&lt;/span&gt;overlay2&lt;span&gt;&amp;nbsp;&lt;/span&gt;is supported and preferred over&lt;span&gt;&amp;nbsp;&lt;/span&gt;aufs. Docker Engine - Community uses the&lt;span&gt;&amp;nbsp;&lt;/span&gt;overlay2&lt;span&gt;&amp;nbsp;&lt;/span&gt;storage driver by default. If you need to use&lt;span&gt;&amp;nbsp;&lt;/span&gt;aufs&lt;span&gt;&amp;nbsp;&lt;/span&gt;instead, you need to configure it manually. See&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://docs.docker.com/engine/userguide/storagedriver/aufs-driver/&quot;&gt;aufs&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&quot;install-docker-engine---community&quot;&gt;Install Docker Engine - Community&lt;/h2&gt;
&lt;p&gt;You can install Docker Engine - Community in different ways, depending on your needs:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Most users&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://docs.docker.com/install/linux/docker-ce/ubuntu/#install-using-the-repository&quot;&gt;set up Docker&amp;rsquo;s repositories&lt;/a&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;and install from them, for ease of installation and upgrade tasks. This is the recommended approach.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Some users download the DEB package and&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://docs.docker.com/install/linux/docker-ce/ubuntu/#install-from-a-package&quot;&gt;install it manually&lt;/a&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;and manage upgrades completely manually. This is useful in situations such as installing Docker on air-gapped systems with no access to the internet.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;In testing and development environments, some users choose to use automated&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://docs.docker.com/install/linux/docker-ce/ubuntu/#install-using-the-convenience-script&quot;&gt;convenience scripts&lt;/a&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;to install Docker.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;install-using-the-repository&quot;&gt;Install using the repository&lt;/h3&gt;
&lt;p&gt;Before you install Docker Engine - Community for the first time on a new host machine, you need to set up the Docker repository. Afterward, you can install and update Docker from the repository.&lt;/p&gt;
&lt;p&gt;SET UP THE REPOSITORY&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Update the&lt;span&gt;&amp;nbsp;&lt;/span&gt;apt&lt;span&gt;&amp;nbsp;&lt;/span&gt;package index:&lt;/p&gt;
&lt;p&gt;&lt;span&gt;$ &lt;/span&gt;&lt;span&gt;sudo &lt;/span&gt;apt-get update&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Install packages to allow&lt;span&gt;&amp;nbsp;&lt;/span&gt;apt&lt;span&gt;&amp;nbsp;&lt;/span&gt;to use a repository over HTTPS:&lt;/p&gt;
&lt;p&gt;&lt;span&gt;$ &lt;/span&gt;&lt;span&gt;sudo &lt;/span&gt;apt-get install &lt;span&gt;\&lt;/span&gt; apt-transport-https &lt;span&gt;\&lt;/span&gt; ca-certificates &lt;span&gt;\&lt;/span&gt; curl &lt;span&gt;\&lt;/span&gt; gnupg-agent &lt;span&gt;\&lt;/span&gt; software-properties-common&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Add Docker&amp;rsquo;s official GPG key:&lt;/p&gt;
&lt;p&gt;&lt;span&gt;$ &lt;/span&gt;curl &lt;span&gt;-fsSL&lt;/span&gt; &lt;a href=&quot;https://download.docker.com/linux/ubuntu/gpg&quot;&gt;https://download.docker.com/linux/ubuntu/gpg&lt;/a&gt; | &lt;span&gt;sudo &lt;/span&gt;apt-key add -&lt;/p&gt;
&lt;p&gt;Verify that you now have the key with the fingerprint&lt;span&gt;&amp;nbsp;&lt;/span&gt;9DC8 5822 9FC7 DD38 854A E2D8 8D81 803C 0EBF CD88, by searching for the last 8 characters of the fingerprint.&lt;/p&gt;
&lt;p&gt;&lt;span&gt;$ &lt;/span&gt;&lt;span&gt;sudo &lt;/span&gt;apt-key fingerprint 0EBFCD88 pub rsa4096 2017-02-22 &lt;span&gt;[&lt;/span&gt;SCEA] 9DC8 5822 9FC7 DD38 854A E2D8 8D81 803C 0EBF CD88 uid &lt;span&gt;[&lt;/span&gt; unknown] Docker Release &lt;span&gt;(&lt;/span&gt;CE deb&lt;span&gt;)&lt;/span&gt; &amp;lt;docker@docker.com&amp;gt; sub rsa4096 2017-02-22 &lt;span&gt;[&lt;/span&gt;S]&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Use the following command to set up the&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;stable&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;repository. To add the&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;nightly&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;or&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;test&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;repository, add the word&lt;span&gt;&amp;nbsp;&lt;/span&gt;nightly&lt;span&gt;&amp;nbsp;&lt;/span&gt;or&lt;span&gt;&amp;nbsp;&lt;/span&gt;test&lt;span&gt;&amp;nbsp;&lt;/span&gt;(or both) after the word&lt;span&gt;&amp;nbsp;&lt;/span&gt;stable&lt;span&gt;&amp;nbsp;&lt;/span&gt;in the commands below.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://docs.docker.com/install/&quot;&gt;Learn about&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;nightly&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;and&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;test&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;channels&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Note&lt;/b&gt;: The&lt;span&gt;&amp;nbsp;&lt;/span&gt;lsb_release -cs&lt;span&gt;&amp;nbsp;&lt;/span&gt;sub-command below returns the name of your Ubuntu distribution, such as&lt;span&gt;&amp;nbsp;&lt;/span&gt;xenial. Sometimes, in a distribution like Linux Mint, you might need to change&lt;span&gt;&amp;nbsp;&lt;/span&gt;$(lsb_release -cs)&lt;span&gt;&amp;nbsp;&lt;/span&gt;to your parent Ubuntu distribution. For example, if you are using&lt;span&gt;&amp;nbsp;&lt;/span&gt;Linux Mint Tessa, you could use&lt;span&gt;&amp;nbsp;&lt;/span&gt;bionic. Docker does not offer any guarantees on untested and unsupported Ubuntu distributions.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a&gt;x86_64 / amd64&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a&gt;armhf&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a&gt;arm64&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a&gt;ppc64le (IBM Power)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a&gt;s390x (IBM Z)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;span&gt;$ &lt;/span&gt;&lt;span&gt;sudo &lt;/span&gt;add-apt-repository &lt;span&gt;\&lt;/span&gt; &lt;span&gt;&quot;deb [arch=amd64] &lt;a href=&quot;https://download.docker.com/linux/ubuntu&quot;&gt;https://download.docker.com/linux/ubuntu&lt;/a&gt; &lt;/span&gt;&lt;span&gt;\&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;$(&lt;/span&gt;lsb_release &lt;span&gt;-cs&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;\&lt;/span&gt;&lt;span&gt; stable&quot;&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;INSTALL DOCKER ENGINE - COMMUNITY&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Update the&lt;span&gt;&amp;nbsp;&lt;/span&gt;apt&lt;span&gt;&amp;nbsp;&lt;/span&gt;package index.&lt;/p&gt;
&lt;p&gt;&lt;span&gt;$ &lt;/span&gt;&lt;span&gt;sudo &lt;/span&gt;apt-get update&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Install the&lt;span&gt;&amp;nbsp;&lt;/span&gt;latest version&lt;span&gt;&amp;nbsp;&lt;/span&gt;of Docker Engine - Community and containerd, or go to the next step to install a specific version:&lt;/p&gt;
&lt;p&gt;&lt;span&gt;$ &lt;/span&gt;&lt;span&gt;sudo &lt;/span&gt;apt-get install docker-ce docker-ce-cli containerd.io&lt;/p&gt;
&lt;p&gt;Got multiple Docker repositories?&lt;/p&gt;
&lt;p&gt;If you have multiple Docker repositories enabled, installing or updating without specifying a version in the&lt;span&gt;&amp;nbsp;&lt;/span&gt;apt-get install&lt;span&gt;&amp;nbsp;&lt;/span&gt;or&lt;span&gt;&amp;nbsp;&lt;/span&gt;apt-get update&lt;span&gt;&amp;nbsp;&lt;/span&gt;command always installs the highest possible version, which may not be appropriate for your stability needs.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;To install a&lt;span&gt;&amp;nbsp;&lt;/span&gt;specific version&lt;span&gt;&amp;nbsp;&lt;/span&gt;of Docker Engine - Community, list the available versions in the repo, then select and install:&lt;/p&gt;
&lt;p&gt;a. List the versions available in your repo:&lt;/p&gt;
&lt;p&gt;&lt;span&gt;$ &lt;/span&gt;apt-cache madison docker-ce docker-ce | 5:18.09.1~3-0~ubuntu-xenial | &lt;a href=&quot;https://download.docker.com/linux/ubuntu&quot;&gt;https://download.docker.com/linux/ubuntu&lt;/a&gt; xenial/stable amd64 Packages docker-ce | 5:18.09.0~3-0~ubuntu-xenial | &lt;a href=&quot;https://download.docker.com/linux/ubuntu&quot;&gt;https://download.docker.com/linux/ubuntu&lt;/a&gt; xenial/stable amd64 Packages docker-ce | 18.06.1~ce~3-0~ubuntu | &lt;a href=&quot;https://download.docker.com/linux/ubuntu&quot;&gt;https://download.docker.com/linux/ubuntu&lt;/a&gt; xenial/stable amd64 Packages docker-ce | 18.06.0~ce~3-0~ubuntu | &lt;a href=&quot;https://download.docker.com/linux/ubuntu&quot;&gt;https://download.docker.com/linux/ubuntu&lt;/a&gt; xenial/stable amd64 Packages ...&lt;/p&gt;
&lt;p&gt;b. Install a specific version using the version string from the second column, for example,&lt;span&gt;&amp;nbsp;&lt;/span&gt;5:18.09.1~3-0~ubuntu-xenial.&lt;/p&gt;
&lt;p&gt;&lt;span&gt;$ &lt;/span&gt;&lt;span&gt;sudo &lt;/span&gt;apt-get install docker-ce&lt;span&gt;=&lt;/span&gt;&amp;lt;VERSION_STRING&amp;gt; docker-ce-cli&lt;span&gt;=&lt;/span&gt;&amp;lt;VERSION_STRING&amp;gt; containerd.io&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Verify that Docker Engine - Community is installed correctly by running the&lt;span&gt;&amp;nbsp;&lt;/span&gt;hello-world&lt;span&gt;&amp;nbsp;&lt;/span&gt;image.&lt;/p&gt;
&lt;p&gt;&lt;span&gt;$ &lt;/span&gt;&lt;span&gt;sudo &lt;/span&gt;docker run hello-world&lt;/p&gt;
&lt;p&gt;This command downloads a test image and runs it in a container. When the container runs, it prints an informational message and exits.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Docker Engine - Community is installed and running. The&lt;span&gt;&amp;nbsp;&lt;/span&gt;docker&lt;span&gt;&amp;nbsp;&lt;/span&gt;group is created but no users are added to it. You need to use&lt;span&gt;&amp;nbsp;&lt;/span&gt;sudo&lt;span&gt;&amp;nbsp;&lt;/span&gt;to run Docker commands. Continue to&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://docs.docker.com/install/linux/linux-postinstall/&quot;&gt;Linux postinstall&lt;/a&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;to allow non-privileged users to run Docker commands and for other optional configuration steps.&lt;/p&gt;
&lt;p&gt;UPGRADE DOCKER ENGINE - COMMUNITY&lt;/p&gt;
&lt;p&gt;To upgrade Docker Engine - Community, first run&lt;span&gt;&amp;nbsp;&lt;/span&gt;sudo apt-get update, then follow the&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://docs.docker.com/install/linux/docker-ce/ubuntu/#install-docker-ce&quot;&gt;installation instructions&lt;/a&gt;, choosing the new version you want to install.&lt;/p&gt;
&lt;h3 id=&quot;install-from-a-package&quot;&gt;Install from a package&lt;/h3&gt;
&lt;p&gt;If you cannot use Docker&amp;rsquo;s repository to install Docker Engine - Community, you can download the&lt;span&gt;&amp;nbsp;&lt;/span&gt;.deb&lt;span&gt;&amp;nbsp;&lt;/span&gt;file for your release and install it manually. You need to download a new file each time you want to upgrade Docker.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Go to&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://download.docker.com/linux/ubuntu/dists/&quot;&gt;https://download.docker.com/linux/ubuntu/dists/&lt;/a&gt;, choose your Ubuntu version, browse to&lt;span&gt;&amp;nbsp;&lt;/span&gt;pool/stable/, choose&lt;span&gt;&amp;nbsp;&lt;/span&gt;amd64,&lt;span&gt;&amp;nbsp;&lt;/span&gt;armhf,&lt;span&gt;&amp;nbsp;&lt;/span&gt;arm64,&lt;span&gt;&amp;nbsp;&lt;/span&gt;ppc64el, or&lt;span&gt;&amp;nbsp;&lt;/span&gt;s390x, and download the&lt;span&gt;&amp;nbsp;&lt;/span&gt;.deb&lt;span&gt;&amp;nbsp;&lt;/span&gt;file for the Docker Engine - Community version you want to install.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Note&lt;/b&gt;: To install a&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;nightly&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;package, change the word&lt;span&gt;&amp;nbsp;&lt;/span&gt;stable&lt;span&gt;&amp;nbsp;&lt;/span&gt;in the URL to&lt;span&gt;&amp;nbsp;&lt;/span&gt;nightly.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://docs.docker.com/install/&quot;&gt;Learn about&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;nightly&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;and&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;test&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;channels&lt;/a&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Install Docker Engine - Community, changing the path below to the path where you downloaded the Docker package.&lt;/p&gt;
&lt;p&gt;&lt;span&gt;$ &lt;/span&gt;&lt;span&gt;sudo &lt;/span&gt;dpkg &lt;span&gt;-i&lt;/span&gt; /path/to/package.deb&lt;/p&gt;
&lt;p&gt;The Docker daemon starts automatically.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Verify that Docker Engine - Community is installed correctly by running the&lt;span&gt;&amp;nbsp;&lt;/span&gt;hello-world&lt;span&gt;&amp;nbsp;&lt;/span&gt;image.&lt;/p&gt;
&lt;p&gt;&lt;span&gt;$ &lt;/span&gt;&lt;span&gt;sudo &lt;/span&gt;docker run hello-world&lt;/p&gt;
&lt;p&gt;This command downloads a test image and runs it in a container. When the container runs, it prints an informational message and exits.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Docker Engine - Community is installed and running. The&lt;span&gt;&amp;nbsp;&lt;/span&gt;docker&lt;span&gt;&amp;nbsp;&lt;/span&gt;group is created but no users are added to it. You need to use&lt;span&gt;&amp;nbsp;&lt;/span&gt;sudo&lt;span&gt;&amp;nbsp;&lt;/span&gt;to run Docker commands. Continue to&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://docs.docker.com/install/linux/linux-postinstall/&quot;&gt;Post-installation steps for Linux&lt;/a&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;to allow non-privileged users to run Docker commands and for other optional configuration steps.&lt;/p&gt;
&lt;p&gt;UPGRADE DOCKER ENGINE - COMMUNITY&lt;/p&gt;
&lt;p&gt;To upgrade Docker Engine - Community, download the newer package file and repeat the&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://docs.docker.com/install/linux/docker-ce/ubuntu/#install-from-a-package&quot;&gt;installation procedure&lt;/a&gt;, pointing to the new file.&lt;/p&gt;
&lt;h3 id=&quot;install-using-the-convenience-script&quot;&gt;Install using the convenience script&lt;/h3&gt;
&lt;p&gt;Docker provides convenience scripts at&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://get.docker.com/&quot;&gt;get.docker.com&lt;/a&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;and&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://test.docker.com/&quot;&gt;test.docker.com&lt;/a&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;for installing edge and testing versions of Docker Engine - Community into development environments quickly and non-interactively. The source code for the scripts is in the&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://github.com/docker/docker-install&quot;&gt;docker-install&lt;span&gt;&amp;nbsp;&lt;/span&gt;repository&lt;/a&gt;.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;Using these scripts is not recommended for production environments&lt;/b&gt;, and you should understand the potential risks before you use them:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The scripts require&lt;span&gt;&amp;nbsp;&lt;/span&gt;root&lt;span&gt;&amp;nbsp;&lt;/span&gt;or&lt;span&gt;&amp;nbsp;&lt;/span&gt;sudo&lt;span&gt;&amp;nbsp;&lt;/span&gt;privileges to run. Therefore, you should carefully examine and audit the scripts before running them.&lt;/li&gt;
&lt;li&gt;The scripts attempt to detect your Linux distribution and version and configure your package management system for you. In addition, the scripts do not allow you to customize any installation parameters. This may lead to an unsupported configuration, either from Docker&amp;rsquo;s point of view or from your own organization&amp;rsquo;s guidelines and standards.&lt;/li&gt;
&lt;li&gt;The scripts install all dependencies and recommendations of the package manager without asking for confirmation. This may install a large number of packages, depending on the current configuration of your host machine.&lt;/li&gt;
&lt;li&gt;The script does not provide options to specify which version of Docker to install, and installs the latest version that is released in the &amp;ldquo;edge&amp;rdquo; channel.&lt;/li&gt;
&lt;li&gt;Do not use the convenience script if Docker has already been installed on the host machine using another mechanism.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This example uses the script at&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://get.docker.com/&quot;&gt;get.docker.com&lt;/a&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;to install the latest release of Docker Engine - Community on Linux. To install the latest testing version, use&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://test.docker.com/&quot;&gt;test.docker.com&lt;/a&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;instead. In each of the commands below, replace each occurrence of&lt;span&gt;&amp;nbsp;&lt;/span&gt;get&lt;span&gt;&amp;nbsp;&lt;/span&gt;with&lt;span&gt;&amp;nbsp;&lt;/span&gt;test.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;b&gt;Warning&lt;/b&gt;:&lt;/p&gt;
&lt;p&gt;Always examine scripts downloaded from the internet before running them locally.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;span&gt;$ &lt;/span&gt;curl &lt;span&gt;-fsSL&lt;/span&gt; &lt;a href=&quot;https://get.docker.com&quot;&gt;https://get.docker.com&lt;/a&gt; &lt;span&gt;-o&lt;/span&gt; get-docker.sh &lt;span&gt;$ &lt;/span&gt;&lt;span&gt;sudo &lt;/span&gt;sh get-docker.sh &amp;lt;output truncated&amp;gt;&lt;/p&gt;
&lt;p&gt;If you would like to use Docker as a non-root user, you should now consider adding your user to the &amp;ldquo;docker&amp;rdquo; group with something like:&lt;/p&gt;
&lt;p&gt;&lt;span&gt;sudo &lt;/span&gt;usermod &lt;span&gt;-aG&lt;/span&gt; docker your-user&lt;/p&gt;
&lt;p&gt;Remember to log out and back in for this to take effect!&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;b&gt;Warning&lt;/b&gt;:&lt;/p&gt;
&lt;p&gt;Adding a user to the &amp;ldquo;docker&amp;rdquo; group grants them the ability to run containers which can be used to obtain root privileges on the Docker host. Refer to&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://docs.docker.com/engine/security/security/#docker-daemon-attack-surface&quot;&gt;Docker Daemon Attack Surface&lt;/a&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;for more information.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Docker Engine - Community is installed. It starts automatically on&lt;span&gt;&amp;nbsp;&lt;/span&gt;DEB-based distributions. On&lt;span&gt;&amp;nbsp;&lt;/span&gt;RPM-based distributions, you need to start it manually using the appropriate&lt;span&gt;&amp;nbsp;&lt;/span&gt;systemctl&lt;span&gt;&amp;nbsp;&lt;/span&gt;or&lt;span&gt;&amp;nbsp;&lt;/span&gt;service&lt;span&gt;&amp;nbsp;&lt;/span&gt;command. As the message indicates, non-root users can&amp;rsquo;t run Docker commands by default.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;b&gt;Note&lt;/b&gt;:&lt;/p&gt;
&lt;p&gt;To install Docker without root privileges, see&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://docs.docker.com/engine/security/rootless/&quot;&gt;Run the Docker daemon as a non-root user (Rootless mode)&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Rootless mode is currently available as an experimental feature.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;UPGRADE DOCKER AFTER USING THE CONVENIENCE SCRIPT&lt;/p&gt;
&lt;p&gt;If you installed Docker using the convenience script, you should upgrade Docker using your package manager directly. There is no advantage to re-running the convenience script, and it can cause issues if it attempts to re-add repositories which have already been added to the host machine.&lt;/p&gt;
&lt;h2 id=&quot;uninstall-docker-engine---community&quot;&gt;Uninstall Docker Engine - Community&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Uninstall the Docker Engine - Community package:&lt;/p&gt;
&lt;p&gt;&lt;span&gt;$ &lt;/span&gt;&lt;span&gt;sudo &lt;/span&gt;apt-get purge docker-ce&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Images, containers, volumes, or customized configuration files on your host are not automatically removed. To delete all images, containers, and volumes:&lt;/p&gt;
&lt;p&gt;&lt;span&gt;$ &lt;/span&gt;&lt;span&gt;sudo &lt;/span&gt;rm &lt;span&gt;-rf&lt;/span&gt; /var/lib/docker&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;You must delete any edited configuration files manually.&lt;/p&gt;</description>
      <category>TechBlog</category>
      <author>stuner</author>
      <guid isPermaLink="true">https://stune.tistory.com/11</guid>
      <comments>https://stune.tistory.com/11#entry11comment</comments>
      <pubDate>Tue, 24 Mar 2020 09:54:29 +0900</pubDate>
    </item>
    <item>
      <title>Docker. 컨테이너 관리</title>
      <link>https://stune.tistory.com/10</link>
      <description>&lt;h1 id=&quot;id-운영.Docker컨테이너관리-1.컨테이너확인&quot;&gt;&lt;b&gt;1. 컨테이너 확인&lt;/b&gt;&lt;/h1&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;컨테이너 목록 확인&lt;/b&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;span&gt;# docker ps &lt;/span&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;1.png&quot; data-origin-width=&quot;949&quot; data-origin-height=&quot;169&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/tcnMz/btqCoRNbtg1/CKCI51YbvJm2CEuxpi7tk1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/tcnMz/btqCoRNbtg1/CKCI51YbvJm2CEuxpi7tk1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/tcnMz/btqCoRNbtg1/CKCI51YbvJm2CEuxpi7tk1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FtcnMz%2FbtqCoRNbtg1%2FCKCI51YbvJm2CEuxpi7tk1%2Fimg.png&quot; data-filename=&quot;1.png&quot; data-origin-width=&quot;949&quot; data-origin-height=&quot;169&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;docker ps 명령만 사용하면 실행 중인 컨테이너만 출력하게 된다.&lt;/p&gt;
&lt;p&gt;아래는 각 필드의 설명이다.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;CONTAINER ID : 컨테이너의 기반이 되는 이미지&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;COMMAND : 컨테이너에서 실행 중인 애플리케이션&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;CREATED : 컨테이너가 생성된 시간&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;STATUS : 컨테이너의 상태 (UP은 실행중, exited는 중지)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;PORTS : 컨테이너에서 사용 중인 포트 (포트포워딩 포함)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;NAMES : 컨테이너의 이름&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;docker ps -a 명령을 실행하면 실행 중이지 않은 모든 컨테이터 목록이 출력 된다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;컨테이너 세부 사항 확인&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;docker inspect 명령을 이용하여 실행된 컨테이너의 상세 내용을 확인 할 수 있다.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;span&gt;# docker inspect CONTAINER_ID(또는 NAMES)&lt;/span&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;컨테이너가 실행되면서 실행되는 애플리케이션, 볼률, 네트워크 등을 확인 할 수 있다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h1 id=&quot;id-운영.Docker컨테이너관리-2.컨테이너생성및실행&quot;&gt;&lt;b&gt;2. 컨테이너 생성 및 실행&lt;/b&gt;&lt;/h1&gt;
&lt;p&gt;&lt;b&gt;컨테이너 생성&lt;/b&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;span&gt;# docker create --help&lt;/span&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;docker create 의 주요 옵션은 아래와 같다.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;-i (--interactive) : 표준 입력을 사용할 수 있게 함&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;-t (--tty) : 표준 출력 및 표준 에러를 터미널로 출력함&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;--name : 컨테이너의 이름 지정&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;컨테이너를 생성할 때 -i 와 -t 옵션을 같이 사용하여 표준 입출력이 가능한 컨테이너는 생성할 수 있다.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;span&gt;# docker create -it --name c1 centos&lt;/span&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;2.png&quot; data-origin-width=&quot;904&quot; data-origin-height=&quot;154&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/RK7Ep/btqCqMEBVwV/2zIAuJFkVpuzAIf9yKpkn0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/RK7Ep/btqCqMEBVwV/2zIAuJFkVpuzAIf9yKpkn0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/RK7Ep/btqCqMEBVwV/2zIAuJFkVpuzAIf9yKpkn0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FRK7Ep%2FbtqCqMEBVwV%2F2zIAuJFkVpuzAIf9yKpkn0%2Fimg.png&quot; data-filename=&quot;2.png&quot; data-origin-width=&quot;904&quot; data-origin-height=&quot;154&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;docker create 명령으로 컨테이너를 생성하면 실행 상태가 아니기 때문에 docker ps 명령으로 확인할 수 없으며 docker ps -a 명령을 실행하면 STATUS가 Created 인 상태를 확인할 수 있다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;컨테이너 시작 및 중지&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;이전에 생성했던 c1 컨테이너를 아래와 같이 실행할 수 있다.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;span&gt;# docker start c1&lt;/span&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;컨테이너를 중지하려면 docker stop 명령을 이용한다.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;span&gt;# docker stop c1&lt;/span&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;컨테이너 실행&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;컨테이너를 생성하면서 바로 시작하려면 docker run 명령을 사용한다. 이는 docker create 와 docker start 를 연속해서 실행하는 것과 같다.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;span&gt;# docker run -it --name c2 centos&lt;/span&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;컨테이너를 실행하면 바로 접근이 되는데 이때 프롬프트의 호스트네임을 확인하면 컨테이너의 ID와 일치한다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;3.png&quot; data-origin-width=&quot;896&quot; data-origin-height=&quot;128&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/NbapF/btqCpQtIQUj/bbYQ1UFJ2frEer4WHS6pAk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/NbapF/btqCpQtIQUj/bbYQ1UFJ2frEer4WHS6pAk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/NbapF/btqCpQtIQUj/bbYQ1UFJ2frEer4WHS6pAk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FNbapF%2FbtqCpQtIQUj%2FbbYQ1UFJ2frEer4WHS6pAk%2Fimg.png&quot; data-filename=&quot;3.png&quot; data-origin-width=&quot;896&quot; data-origin-height=&quot;128&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;이 상태에서 exit 명령을 사용하면 컨테이너가 종료되며 중지 상태로 돌아간다. 컨테이너를 실행 중인 상태에서 빠져 나오려면 &amp;ldquo;Ctrl + P + Q&amp;rdquo;를 입력한다.&lt;/p&gt;
&lt;p&gt;컨테이너를 백그라운드로 실행하는 방법은 아래와 같다.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;span&gt;# docker run -d --name c3 centos&lt;/span&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;c3 컨테이너의 상태를 보면 실행되자마자 종료된다. 이는 컨테이너의 기반이 되는 이미지에 지정된 애플리케이션의 종류에 따라 달라지게 된다. 일반적으로 컨테이가 실행되면서 실행되는 애플리케이션이 데몬 종류이면 포그라운드로 실행했을 때(-it) 바로 종료되며, 백그라운드에서 동작하지 않은 명령이나 애플리케이션을 백그라운드로 실행하면(-d) 바로 종료된다.&lt;/p&gt;
&lt;p&gt;아래는 httpd 이미지를 백그라운드에서 실행한 방법이다.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;span&gt;# docker run -d --name web1 httpd&lt;/span&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;컨테이너를 실행할 때 지정된 이미지가 존재하지 않으면 다운로드 받고 실행한다.&lt;/p&gt;
&lt;p&gt;아래는 httpd 이미지를 포그라운드로 실행한 방법이다.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;span&gt;# docker run -it --name web2 httpd&lt;/span&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;STATUS 필드를 보면 Exited 상태로 표시된다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;컨테이너 삭제&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;컨테이너를 삭제하려면 docker rm 명령을 사용한다.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;span&gt;# docker rm c1 c2 c3&lt;/span&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;컨테이너를 삭제하려면 컨테이너가 중지되어야 한다. 실행 중인 상타의 컨테이너를 삭제하려면 -f 옵션을 사용한다.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;span&gt;# docker rm -f web1&lt;/span&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h1 id=&quot;id-운영.Docker컨테이너관리-.1&quot;&gt;&amp;nbsp;&lt;/h1&gt;
&lt;h1 id=&quot;id-운영.Docker컨테이너관리-3.컨테이너관리&quot;&gt;&lt;b&gt;3. 컨테이너 관리&lt;/b&gt;&lt;/h1&gt;
&lt;p&gt;&lt;b&gt;컨테이너 접근&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;백그라운드에서 실행 중인 컨테이너에 접근하려면 docker attach 명령을 사용하며 docker attach 명령은 백그라운드에서 실행 중인 컨테이너에 접근할 수 있다.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;span&gt;# docker run -itd --name c1 centos&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;# docker attach c1&lt;/span&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;-itd 옵션을 함께 사용하면 표준 입출력을 사용할 수 있는 상태에서 백그라운드로 동작한다. 이때 attach 명령으로 접근할 수 있으며 다시 실행 중인 상태로 빠져 나오려면 &amp;ldquo;Ctrl + P + Q&amp;rdquo; 를 입력한다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;컨테이너에서 애플리케이션 실행&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;docker exec 명령을 이용하여 실행 중인 컨테이너에 추가로 애플리케이션을 실행할 수 있다.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;span&gt;# docker exec --help&lt;/span&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;COMMAND 에는 실행할 애플리케이션의 경로를 지정하며 경우에 따라 argument를 지정한다.&lt;/p&gt;
&lt;p&gt;아래는 apache 웹서버가 실행 중인 web1 컨테이너에 추가로 bash shell 을 실행하는 방법이다.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;span&gt;# docker run -d --name web1 httpd&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;# docker exec -it web1 bash&lt;/span&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;docker exec 를 실행할 때 포그라운드에서 동작하게 하려면 run 명령과 마찬가지로 -it 옵션을 사용해야 한다. 이때 exit 명령으로 빠져 나와도 web1 컨테이너는 종료되지 않는다. 이는 exec 명령으로 실행한 애플리케이션은 bash 이기 때문에 단순히 bash 만 종료한 것이기 때문이다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;컨테이너 내의 실행 중인 프로세스 확인&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;컨테이너에서 실행 중인 프로세스를 확인 하려면 docker top 명령을 사용한다.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;span&gt;# docker top web1&lt;/span&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;컨테이너 이름 변경&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;docker rename 명령을 사용하면 컨테이너의 이름을 변경할 수 있으며 컨테이너를 생성하거나 실행할 때 --name 옵션을 사용하지 않으면 임의의 이름이 부여된다. 이때 관리의 편의성을 위해서 컨테이너 이름을 변경할 수 있다.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;span&gt;# docker rename 임의이름 변경할이름&lt;/span&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;컨테이너 일시 중지 및 재개&lt;/p&gt;
&lt;p&gt;docker pause 명령을 사용하여 실행 중인 컨테이너를 일시적으로 중지할 수 있다.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;span&gt;# docker pause web1&lt;/span&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;STATUS 필드에 Paused 가 표시되어 있으면 컨테이너가 일시 중지된 상태이며 일시 중지된 컨테이너를 다시 실행하려면 docker unpause 를 사용한다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;컨테이너에 파일 복사&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;docker cp 명령을 사용하여 호스트의 파일을 컨테이너로 복사하거나 컨테이너의 파일을 호스트로 복사할 수 있다.&lt;/p&gt;
&lt;p&gt;아래는 호스트의 파일을 컨테이너로 복사하는 방법이다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;아래는 컨테이너의 파일을 호스트로 복사하는 방법이다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;컨테이너의 파일 변경 확인&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;docker diff 명령을 사용하여 컨테이너가 실행된 이후에 변경된 사항을 추적할 수 있다.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;span&gt;# docker diff c1&lt;/span&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;diff 명령의 실행 결과의 첫 번째 글자는 파일의 변경 유무를 나타낸다.&lt;/p&gt;
&lt;p&gt;A는 추가, D는 삭제, C는 변경 된 것을 의미한다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h1 id=&quot;id-운영.Docker컨테이너관리-4.컨테이너및이미지저장&quot;&gt;&lt;b&gt;4. 컨테이너 및 이미지 저장&lt;/b&gt;&lt;/h1&gt;</description>
      <category>TechBlog</category>
      <author>stuner</author>
      <guid isPermaLink="true">https://stune.tistory.com/10</guid>
      <comments>https://stune.tistory.com/10#entry10comment</comments>
      <pubDate>Mon, 2 Mar 2020 16:49:12 +0900</pubDate>
    </item>
    <item>
      <title>Docker. 이미지 관리</title>
      <link>https://stune.tistory.com/9</link>
      <description>&lt;p&gt;Docker Hub 는 다양한 기능을 가진 이미지들을 모아 놓은 Docker 의 공식 이미지 리파지토리이며 사용자가 제작한 이미지 뿐만 아니라 Docker 제작사의 공식 이미지도 다운로드 할 수 있다.&lt;/p&gt;
&lt;h1 id=&quot;id-운영.Docker이미지관리-1.Docker이미지검색&quot;&gt;&lt;b&gt;1. Docker 이미지 검색&lt;/b&gt;&lt;/h1&gt;
&lt;p&gt;Docker Hub 에 공개된 이미지를 검색하려면 docker search 서브커맨드를 사용한다.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;span&gt;# docker search --help&lt;/span&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;TERM 부분에 원하는 기능을 가진 이미지를 검색하기 위한 키워드를 지정한다.&lt;/p&gt;
&lt;p&gt;아래는 hello-world 키워드를 포함하는 이미지를 검색한다.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;span&gt;# docker search hello-world&lt;/span&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;docker search의 실행 결과로 STARS 필드를 확인할 수 있는데 이는 사용자가 평가한 이미지 점수이다. OFFICIAL 필드는 도커 제작사에서 제공하는 공식 이미지의 여부를 나타내며 [OK] 표시가 없으면 사용자가 제작한 이미지 이다. AUTOMATED 필드는 자동화 빌드의 유무를 나타낸다.&lt;/p&gt;
&lt;p&gt;일정 개수 이상의 STAR를 부여 받은 이미지를 검색하려면 -s 옵션을 사용한다.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;span&gt;# docker search centos -s 1000&lt;/span&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h1 id=&quot;id-운영.Docker이미지관리-2.Docker이미지다운로드&quot;&gt;&lt;b&gt;2. Docker 이미지 다운로드&lt;/b&gt;&lt;/h1&gt;
&lt;p&gt;이미지를 다운로드 받으려면 docker pull 서브커맨드를 사용한다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;NAME 부분에 이미지의 이름을 지정한다. docker 의 모든 이미지에는 태그가 부여되어 있으며 태그는 각 이미지의 기능이나 버전을 나타낼 수 있다. 태그를 지정하지 않으면 자동으로 latest 태그가 지정되며 Docker Hub 에 업로드시에는 latest 태그가 부여된 이미지로 업로드 해야 한다.&lt;/p&gt;
&lt;p&gt;DIGEST는 각 이미지가 가지고 있는 해시값을 나타낸다.&lt;/p&gt;
&lt;p&gt;아래는 docker에서 공식으로 제공하는 centos:latest 이미지는 다운로드 받는 방법이다.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;span&gt;# docker pull centos&lt;/span&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h1 id=&quot;id-운영.Docker이미지관리-3.Docker이미지확인&quot;&gt;&lt;b&gt;3. Docker 이미지 확인&lt;/b&gt;&lt;/h1&gt;
&lt;p&gt;Docker Hub 에서 다운로드 하여 로컬에 저장되어 있는 이미지의 목록을 확인하려면 docker images 명령을 사용한다.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;span&gt;# docker images&lt;/span&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;REPOSITORY 필드가 이미지의 이름이며 IMAGE ID 는 이미지의 고유 ID이다. IMAGE ID가 같으면 동일한 이미지를 의미한다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h1 id=&quot;id-운영.Docker이미지관리-4.Docker이미지태그부여&quot;&gt;&lt;b&gt;4. Docker 이미지 태그 부여&lt;/b&gt;&lt;/h1&gt;
&lt;p&gt;다운로드한 이미지에 태그를 붙여 다른 이름으로 사용할 수 있다. 이미지에 태그를 부여하려면 tag 서브커맨드를 사용한다.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;span&gt;# docker tag --help&lt;/span&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;SOURCE_IMAGE[:TAG]는 태그를 부여할 이미지의 이름 및 태그를 지정하며 TARGET_IMAGE[:TAG]는 태그를 부여했을 때의 이미지 이름을 의미한다.&lt;/p&gt;
&lt;p&gt;사용자가 제작한 이미지를 Docker Hub 에 업로드 하려면 docker tag 를 사용하여 &amp;ldquo;사용자계정/리파지토리:태그&amp;rdquo; 형식으로 이미지 이름을 변경해야 한다.&lt;/p&gt;
&lt;p&gt;아래는 cenos:latest 이미지에 centos:ver7 태크를 부여하는 방법이다.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;# docker tag centos:latest centos:ver7&lt;/p&gt;
&lt;p&gt;# docker images&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h1 id=&quot;id-운영.Docker이미지관리-5.Docker이미지삭제&quot;&gt;&lt;b&gt;5. Docker 이미지 삭제&lt;/b&gt;&lt;/h1&gt;
&lt;p&gt;다운로드 했던 이미지를 삭제하려면 docker rmi 서브커맨드를 사용한다.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;# docker rmi hello-world&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h1 id=&quot;id-운영.Docker이미지관리-6.Docker이미지업로드&quot;&gt;&lt;b&gt;6. Docker 이미지 업로드&lt;/b&gt;&lt;/h1&gt;
&lt;p&gt;Docker Hub에 이미지를 업로드 하기 위해서는 Docker Hub 사이트(&lt;a href=&quot;https://hub.docker.com&quot;&gt;https://hub.docker.com&lt;/a&gt;) 에 가입해야 한다.&lt;/p&gt;
&lt;p&gt;가입 후에 shell 에서 docker login 명령을 사용하여 Dokcer Hub 에서 생성한 아이디와 패스워드로 로그인 한다.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;# docker login&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;이미지를 업로드하기 위해서는 이미지의 이름을 변경해야 한다. 이미지의 이름은 &amp;ldquo;아이디/리파지토리:태그&amp;rdquo; 형식을 사용한다.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;# docker tag centos:latest pudak77/:centos&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;pudak77 사용자가 Docker Hub 사이트에서 liam 이라는 이름의 리파지토리에 centos 라는 TAG로 이미지를 업로드 한다. 만약 liam 이라는 리파지토리가 존재하지 않으면 자동으로 생성한다.&lt;/p&gt;
&lt;p&gt;리파지토리는 Public과 Private 두 가지 종류가 있다. Public은 공개된 리파지토리이며 개수에 제한이 없고 무료이며 Private는 개인용 리파지토리이며 한개만 만들 수 있고 추가할 경우 사용 요금을 추가로 지불해야 한다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;개인용 요금&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;조직용 요금&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;이미지의 이름까지 변경했으면 docker push 명령으로 이미지를 업로드 한다.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;# &lt;span&gt;docker push pudak77/liam:centos&lt;/span&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Docker Hub 사이트에서 아래와 같이 실제 이미지가 업로드 된 내용을 확인 할 수 있다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Docker Hub 는 다양한 기능을 가진 이미지들을 모아 놓은 Docker 의 공식 이미지 리파지토리이며 사용자가 제작한 이미지 뿐만 아니라 Docker 제작사의 공식 이미지도 다운로드 할 수 있다.&lt;/p&gt;
&lt;h1 id=&quot;id-운영.Docker이미지관리-1.Docker이미지검색&quot;&gt;&lt;b&gt;1. Docker 이미지 검색&lt;/b&gt;&lt;/h1&gt;
&lt;p&gt;Docker Hub 에 공개된 이미지를 검색하려면 docker search 서브커맨드를 사용한다.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;span&gt;# docker search --help&lt;/span&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;TERM 부분에 원하는 기능을 가진 이미지를 검색하기 위한 키워드를 지정한다.&lt;/p&gt;
&lt;p&gt;아래는 hello-world 키워드를 포함하는 이미지를 검색한다.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;span&gt;# docker search hello-world&lt;/span&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;docker search의 실행 결과로 STARS 필드를 확인할 수 있는데 이는 사용자가 평가한 이미지 점수이다. OFFICIAL 필드는 도커 제작사에서 제공하는 공식 이미지의 여부를 나타내며 [OK] 표시가 없으면 사용자가 제작한 이미지 이다. AUTOMATED 필드는 자동화 빌드의 유무를 나타낸다.&lt;/p&gt;
&lt;p&gt;일정 개수 이상의 STAR를 부여 받은 이미지를 검색하려면 -s 옵션을 사용한다.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;span&gt;# docker search centos -s 1000&lt;/span&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h1 id=&quot;id-운영.Docker이미지관리-2.Docker이미지다운로드&quot;&gt;&lt;b&gt;2. Docker 이미지 다운로드&lt;/b&gt;&lt;/h1&gt;
&lt;p&gt;이미지를 다운로드 받으려면 docker pull 서브커맨드를 사용한다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;NAME 부분에 이미지의 이름을 지정한다. docker 의 모든 이미지에는 태그가 부여되어 있으며 태그는 각 이미지의 기능이나 버전을 나타낼 수 있다. 태그를 지정하지 않으면 자동으로 latest 태그가 지정되며 Docker Hub 에 업로드시에는 latest 태그가 부여된 이미지로 업로드 해야 한다.&lt;/p&gt;
&lt;p&gt;DIGEST는 각 이미지가 가지고 있는 해시값을 나타낸다.&lt;/p&gt;
&lt;p&gt;아래는 docker에서 공식으로 제공하는 centos:latest 이미지는 다운로드 받는 방법이다.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;span&gt;# docker pull centos&lt;/span&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h1 id=&quot;id-운영.Docker이미지관리-3.Docker이미지확인&quot;&gt;&lt;b&gt;3. Docker 이미지 확인&lt;/b&gt;&lt;/h1&gt;
&lt;p&gt;Docker Hub 에서 다운로드 하여 로컬에 저장되어 있는 이미지의 목록을 확인하려면 docker images 명령을 사용한다.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;span&gt;# docker images&lt;/span&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;REPOSITORY 필드가 이미지의 이름이며 IMAGE ID 는 이미지의 고유 ID이다. IMAGE ID가 같으면 동일한 이미지를 의미한다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h1 id=&quot;id-운영.Docker이미지관리-4.Docker이미지태그부여&quot;&gt;&lt;b&gt;4. Docker 이미지 태그 부여&lt;/b&gt;&lt;/h1&gt;
&lt;p&gt;다운로드한 이미지에 태그를 붙여 다른 이름으로 사용할 수 있다. 이미지에 태그를 부여하려면 tag 서브커맨드를 사용한다.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;span&gt;# docker tag --help&lt;/span&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;SOURCE_IMAGE[:TAG]는 태그를 부여할 이미지의 이름 및 태그를 지정하며 TARGET_IMAGE[:TAG]는 태그를 부여했을 때의 이미지 이름을 의미한다.&lt;/p&gt;
&lt;p&gt;사용자가 제작한 이미지를 Docker Hub 에 업로드 하려면 docker tag 를 사용하여 &amp;ldquo;사용자계정/리파지토리:태그&amp;rdquo; 형식으로 이미지 이름을 변경해야 한다.&lt;/p&gt;
&lt;p&gt;아래는 cenos:latest 이미지에 centos:ver7 태크를 부여하는 방법이다.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;# docker tag centos:latest centos:ver7&lt;/p&gt;
&lt;p&gt;# docker images&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h1 id=&quot;id-운영.Docker이미지관리-5.Docker이미지삭제&quot;&gt;&lt;b&gt;5. Docker 이미지 삭제&lt;/b&gt;&lt;/h1&gt;
&lt;p&gt;다운로드 했던 이미지를 삭제하려면 docker rmi 서브커맨드를 사용한다.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;# docker rmi hello-world&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h1 id=&quot;id-운영.Docker이미지관리-6.Docker이미지업로드&quot;&gt;&lt;b&gt;6. Docker 이미지 업로드&lt;/b&gt;&lt;/h1&gt;
&lt;p&gt;Docker Hub에 이미지를 업로드 하기 위해서는 Docker Hub 사이트(&lt;a href=&quot;https://hub.docker.com&quot;&gt;https://hub.docker.com&lt;/a&gt;) 에 가입해야 한다.&lt;/p&gt;
&lt;p&gt;가입 후에 shell 에서 docker login 명령을 사용하여 Dokcer Hub 에서 생성한 아이디와 패스워드로 로그인 한다.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;# docker login&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;이미지를 업로드하기 위해서는 이미지의 이름을 변경해야 한다. 이미지의 이름은 &amp;ldquo;아이디/리파지토리:태그&amp;rdquo; 형식을 사용한다.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;# docker tag centos:latest pudak77/:centos&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;pudak77 사용자가 Docker Hub 사이트에서 liam 이라는 이름의 리파지토리에 centos 라는 TAG로 이미지를 업로드 한다. 만약 liam 이라는 리파지토리가 존재하지 않으면 자동으로 생성한다.&lt;/p&gt;
&lt;p&gt;리파지토리는 Public과 Private 두 가지 종류가 있다. Public은 공개된 리파지토리이며 개수에 제한이 없고 무료이며 Private는 개인용 리파지토리이며 한개만 만들 수 있고 추가할 경우 사용 요금을 추가로 지불해야 한다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;개인용 요금&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;조직용 요금&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;이미지의 이름까지 변경했으면 docker push 명령으로 이미지를 업로드 한다.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;# &lt;span&gt;docker push pudak77/liam:centos&lt;/span&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Docker Hub 사이트에서 아래와 같이 실제 이미지가 업로드 된 내용을 확인 할 수 있다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;1.png&quot; data-origin-width=&quot;1268&quot; data-origin-height=&quot;607&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/OIoAR/btqCrk8WZMt/gEfTzJKJMZm1PsJqQIgQKK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/OIoAR/btqCrk8WZMt/gEfTzJKJMZm1PsJqQIgQKK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/OIoAR/btqCrk8WZMt/gEfTzJKJMZm1PsJqQIgQKK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FOIoAR%2FbtqCrk8WZMt%2FgEfTzJKJMZm1PsJqQIgQKK%2Fimg.png&quot; data-filename=&quot;1.png&quot; data-origin-width=&quot;1268&quot; data-origin-height=&quot;607&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>TechBlog</category>
      <author>stuner</author>
      <guid isPermaLink="true">https://stune.tistory.com/9</guid>
      <comments>https://stune.tistory.com/9#entry9comment</comments>
      <pubDate>Mon, 2 Mar 2020 16:45:14 +0900</pubDate>
    </item>
    <item>
      <title>Docker. Installation on CentOS (Amazon Linux)</title>
      <link>https://stune.tistory.com/8</link>
      <description>&lt;h1 id=&quot;id-설치.DockeronCentOS(AmazonLinux)-Uninstalloldversions&quot;&gt;&lt;b&gt;Uninstall old versions&lt;/b&gt;&lt;/h1&gt;
&lt;p&gt;CentOS의 경우 기본적인 yum repository 를 이용하여 설치하는 경우 아래와 같이 old 버전이 설치된다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;old 버전을 아래와 같이 삭제한다.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;span&gt;$ yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine&lt;/span&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h1 id=&quot;id-설치.DockeronCentOS(AmazonLinux)-InstallDockerEngine&quot;&gt;&lt;b&gt;Install Docker Engine&lt;/b&gt;&lt;/h1&gt;
&lt;h2 id=&quot;id-설치.DockeronCentOS(AmazonLinux)-SETUPTHEREPOSITORY&quot;&gt;SET UP THE REPOSITORY&lt;/h2&gt;
&lt;p&gt;최신 버전의 docker 를 다운로드 받기 위한 OS 패키지 및 리파지토리 설정을 아래와 같이 한다.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;span&gt;$ yum install -y yum-utils device-mapper-persistent-data lvm2 &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;$ yum-config-manager --add-repo &lt;a href=&quot;https://download.docker.com/linux/centos/docker-ce.repo&quot;&gt;https://download.docker.com/linux/centos/docker-ce.repo&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&quot;id-설치.DockeronCentOS(AmazonLinux)-INSTALLDOCKERENGINE-COMMUNITY&quot;&gt;INSTALL DOCKER ENGINE - COMMUNITY&lt;/h2&gt;
&lt;p&gt;특정 버전의 Docker 엔진을 설치해야 하는 경우 아래와 같이 리파지토리에 등록되어 있는 내용을 확인 할 수 있다.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;span&gt;$ yum list docker-ce --showduplicates | sort -r&lt;/span&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;특정 버전의 Docker 엔진을 설치하는 경우 아래와 같이 &amp;lt;VERSION_STRING&amp;gt; 지정 후 설치 한다.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;span&gt;$ yum install docker-ce-&amp;lt;VERSION_STRING&amp;gt; docker-ce-cli-&amp;lt;VERSION_STRING&amp;gt; &lt;a href=&quot;http://containerd.io&quot;&gt;containerd.io&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;최신 버전의 Docker 엔진을 설치하는 경우 아래와 같이 설치 한다.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;span&gt;$ yum install docker-ce docker-ce-cli &lt;a href=&quot;http://containerd.io&quot;&gt;containerd.io&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h1 id=&quot;id-설치.DockeronCentOS(AmazonLinux)-Docker엔진기동및hello-world컨테이너이미지구동&quot;&gt;&lt;b&gt;Docker 엔진 기동 및 hello-world 컨테이너 이미지 구동&lt;/b&gt;&lt;/h1&gt;
&lt;h2 id=&quot;id-설치.DockeronCentOS(AmazonLinux)-Docker엔진기동&quot;&gt;Docker 엔진 기동&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;span&gt;$ systemctl start docker(.service)&lt;/span&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&quot;id-설치.DockeronCentOS(AmazonLinux)-Docker엔진정지&quot;&gt;Docker 엔진 정지&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;span&gt;$ systemctl stop docker&lt;span style=&quot;color: #666666;&quot;&gt;(.service)&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;Docker 데몬 자동 시작 등록&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;span&gt;$ systemctl enable docker&lt;span style=&quot;color: #666666;&quot;&gt;(.service)&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&quot;id-설치.DockeronCentOS(AmazonLinux)-hello-world이미지실행&quot;&gt;hello-world 이미지 실행&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;span&gt;$ docker run hello-world&lt;/span&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;hello-world 라는 컨테이너 이미지가 정상적으로 실행되면 아래와 같이 출력된다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;docker 명령 확인&lt;/b&gt;&lt;/h3&gt;
&lt;p&gt;docker 명령어의 사용법의 COMMAND는 docker 명령의 서브커맨드이며 이 서브커맨드는 bash shell 의 자동완성 기능을 사용하여 확인 할 수 있다.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;span&gt;$ docker&lt;/span&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;docker 명령어의 서브커맨드 목록은 아래와 같다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;각 서브커맨드의 사용법은 help 서브커맨드 또는 --help 옵션으로 확인할 수 있다.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;span&gt;$ docker help pull&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;or&lt;/p&gt;
&lt;p&gt;&lt;span&gt;$ docker pull --help&lt;/span&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>TechBlog</category>
      <author>stuner</author>
      <guid isPermaLink="true">https://stune.tistory.com/8</guid>
      <comments>https://stune.tistory.com/8#entry8comment</comments>
      <pubDate>Mon, 2 Mar 2020 16:41:07 +0900</pubDate>
    </item>
    <item>
      <title>Docker. 특징 및 기능</title>
      <link>https://stune.tistory.com/7</link>
      <description>&lt;h1 id=&quot;id-개요.Docker기능및동작이해-Docker의특징&quot;&gt;&lt;b&gt;Docker 의 특징&lt;/b&gt;&lt;/h1&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;1. 가상의 운영체제 미설치&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;Docker는 OS를 설치하지 않기 때문에 이미지 용량 자체가 줄어들고 호스트와 자원을 공유한다. 또한 가상화 계층이 없기 때문에 실제 호스트에서 사용하는 것과 성능 차이가 거의 없다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;2. 이식성&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;개발환경, 테스트환경, 운영환경 등 모든 환경을 동일하게 컨테이너화 하여 각 환경에서 자체적으로 사용할 수 있기 때문에 별도의 수작업을 통해 통일 시킬 필요가 없다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;3. 상호운영성&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;Amazon, Google, Microsoft, IBM, Redhat 등 다양한 벤더에서 지원하고 있고 다양한 벤더의 시스템 및 오픈소스와 연계하여 사용 할 수 있다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr /&gt;
&lt;h1 id=&quot;id-개요.Docker기능및동작이해-Docker의기능&quot;&gt;&lt;b&gt;Docker 의 기능&lt;/b&gt;&lt;/h1&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;1.이미지 생성&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;애플리케이션을 실행하기 위한 소스코드, 라이브러리, 미들웨어, OS설정 등을 하나로 모아 이미지를 생성한다. 이 이미지가 실행되면 컨테이너가 되며 이미지를 생성할 때 지정했던 소스코드, 라이브러리, 미들웨어, OS설정 등이 컨테이너 안에서 실행되게 된다.&lt;/p&gt;
&lt;p&gt;이미지는 애플리케이션 실행에 필요한 파일들이 담긴 디렉토리라고 볼 수 있으며 docker 명령을 사용하여 이 이미지를 아카이브 파일로 생성할 수도 있으며 Dockerfile에 의해 자동으로 생성할 수도 있다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;2.이미지 공유&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;Docker 이미지는 Docker Hub라는 docker repository 에서 통합적으로 관리할 수 있다. Docker Hub에는 Ubuntu, CentOS 와 같은 리눅스 주요 배포판의 기본 기능을 제공하는 베이스 이미지 등이 저장되어 있다.&lt;/p&gt;
&lt;p&gt;베이스 이미지에 사용자가 생성한 이미지를 추가하여 새로운 독립적인 이미지를 생성 할 수 있으며 이 이미지를 다른 사용자도 사용할 수 있도록 Docker Hub 에 공유할 수 있다.&lt;/p&gt;
&lt;p&gt;이미지 업로드나 공유된 이미지의 다운로드는 모두 docker 명령어를 통해 쉽게 가능하다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;1.png&quot; data-origin-width=&quot;852&quot; data-origin-height=&quot;457&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bxqYt5/btqCsGXXeRm/eutIgWvxxagzCXwswU7uF0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bxqYt5/btqCsGXXeRm/eutIgWvxxagzCXwswU7uF0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bxqYt5/btqCsGXXeRm/eutIgWvxxagzCXwswU7uF0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbxqYt5%2FbtqCsGXXeRm%2FeutIgWvxxagzCXwswU7uF0%2Fimg.png&quot; data-filename=&quot;1.png&quot; data-origin-width=&quot;852&quot; data-origin-height=&quot;457&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;3.컨테이너 동작&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;docker는 리눅스에서 컨테이너 단위로 서버를 구동시기며 이 컨테이너의 기반이 되는 것이 바로 이미지이다.&lt;/p&gt;
&lt;p&gt;docker는 이미지만 존재하면 다수의 컨테이너를 구동할 수 있으며 컨테이너의 시작/정지/삭제 등의 운용은 docker 명령을 사용한다.&lt;/p&gt;
&lt;p&gt;컨테이너를 하나의 그룹으로 간주하여 호스트의 커널을 여러 개의 컨테이너가 공유하며 이때 컨테이너 간에 서로 접근할 수 없도록 서로를 고립시키는 기술을 사용하는데 이 때 사용되는 기술이 namespace와 cgrup 이다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr /&gt;
&lt;h1 id=&quot;id-개요.Docker기능및동작이해-Docker에서사용되는기술&quot;&gt;&lt;b&gt;Docker 에서 사용되는 기술&lt;/b&gt;&lt;/h1&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;1. namespace&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;dokcer 는 컨테이너라는 독립된 환경을 만들고 이 환경에서 애플리케이션을 실행하게 된다. namespace는 독립된 환경을 만들때 사용하는 기능 중 하나이다.&lt;/p&gt;
&lt;p&gt;docker 가 독립된 환경을 만들때 namespace 기능을 사용하여 각 환경에 이름을 부여하고 쉽게 참조될 수 있도록 하며 namespace의 종류는 아래와 같다.&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 173px;&quot; border=&quot;1&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 18px;&quot;&gt;
&lt;td style=&quot;width: 33.1395%; text-align: center; height: 18px;&quot;&gt;Namespace&lt;/td&gt;
&lt;td style=&quot;width: 66.8605%; text-align: center; height: 18px;&quot;&gt;설명&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 65px;&quot;&gt;
&lt;td style=&quot;width: 33.1395%; height: 65px;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;PID namespace&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 66.8605%; height: 65px;&quot;&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;PID와 프로세스를 분리&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;namespace 가 서로 다른 프로세스는 서로 접근 불가&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 18px;&quot;&gt;
&lt;td style=&quot;width: 33.1395%; height: 18px;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;Network namespace&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 66.8605%; height: 18px;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;namespace 별로 네트워크 장치, IP주소, 포트번호, 라우팅테이블, 필터링테이블을 사용&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 18px;&quot;&gt;
&lt;td style=&quot;width: 33.1395%; height: 18px;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;UID namespace&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 66.8605%; height: 18px;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;namespace 별로 독립적인 UID, GID를 사용&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 18px;&quot;&gt;
&lt;td style=&quot;width: 33.1395%; height: 18px;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;MOUNT namespace&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 66.8605%; height: 18px;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;namespace 별로 독립적인 마운트 포인트를 사용&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 18px;&quot;&gt;
&lt;td style=&quot;width: 33.1395%; height: 18px;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;UTS namespace&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 66.8605%; height: 18px;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;namespace 별로 독립적인 호스트네임 사용&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 18px;&quot;&gt;
&lt;td style=&quot;width: 33.1395%; height: 18px;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;IPC namespace&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 66.8605%; height: 18px;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;namespace 별로 독립적인 IPC 오브젝트 사용&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;2. cgroup&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;docker 는 호스트의 리소스를 공유하여 사용하는데 이 떄 사용되는 기능이 cgroup 이다. cgroup은 프로세스 또는 스레드를 그룹화하여 관리하는 기능이며 이를 통해 호스트의 CPU나 메모리를 그룹별로 제한할 수 있다. 또한 동일한 호스트에서 동작하는 서로 다른 컨테이너에 영향을 주지 않도록 보호해 주는 역할도 수행하게 된다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;3. 가상 브릿지와 가상 NIC&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;docker의 컨테이너는 각각 가상의 NIC 가 할당된다. 이 가상의 NIC 는 docker0 이라는 가상 브릿지에 연결되어 컨테이너 간의 통신이 가능하게 된다.&lt;/p&gt;
&lt;p&gt;위의 그림에서 호스트의 eht0(빨간색박스)은 물리적인 NIC 이며 docker0 은 eh0(빨간색박스)와 연결된 가상의 브릿지이다. veth1과 veth2 는 호스트의 가상의 NIC이며 이는 각 컨테이너의 eth0(검정색박스) 와 연결된다.&lt;/p&gt;
&lt;p&gt;일반적으로 docker0에는 172.17.0.0/16 의 네트워크가 할당되며 이 네트워크에 연결되어 있는 컨테이너 간에는 링크 기능을 이용하여 서로 통신할 수 있다. 또한 각 컨테이너의 /etc/hosts 파일을 수정하면 컨테이너의 이름으로도 통신할 수 있게 된다. 하지만 서로 다른 호스트에 있는 컨테이너 간에 통신을 위해서는 docker0 와 연결된 호스트의 eth0 을 통해야 한다. 이 때는 NAPT(Newort Address and Port Translation) 기능을 사용한다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;2.png&quot; data-origin-width=&quot;1060&quot; data-origin-height=&quot;662&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/btLcv3/btqCrkVmC2s/mZKfC19eJkMxtkSEjEDwuK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/btLcv3/btqCrkVmC2s/mZKfC19eJkMxtkSEjEDwuK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/btLcv3/btqCrkVmC2s/mZKfC19eJkMxtkSEjEDwuK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbtLcv3%2FbtqCrkVmC2s%2FmZKfC19eJkMxtkSEjEDwuK%2Fimg.png&quot; data-filename=&quot;2.png&quot; data-origin-width=&quot;1060&quot; data-origin-height=&quot;662&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;4. 이미지 데이터 관리 구조&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;docker 에서는 컨테이너 이미지가 변경될 때 COW(Copy On Write) 방식을 사용한다. 이는 Docker 의 이미지가 OS와 미들웨어 등을 포함하고 있어 사이즈가 크기 때문에 COW 는 부모 프로세스가 자식 프로세스를 생성할 때 전부를 복제하지 않고 쓰기가 발생했을 때 변경된 부분만 복제하는 방법으로 관리하게 된다.&lt;/p&gt;
&lt;p&gt;docker 이미지 관리에 사용되는 파일시스템 또는 라이브러리는 아래와 같다.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Btrfs(B-Tree File System)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;AUFS(Advanced multi-layered Unification File System)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Device Mapper&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Overlay&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>TechBlog</category>
      <author>stuner</author>
      <guid isPermaLink="true">https://stune.tistory.com/7</guid>
      <comments>https://stune.tistory.com/7#entry7comment</comments>
      <pubDate>Mon, 2 Mar 2020 16:33:27 +0900</pubDate>
    </item>
    <item>
      <title>(주)에스튠 홈페이지 오픈</title>
      <link>https://stune.tistory.com/notice/6</link>
      <description>&lt;p&gt;오픈소스 전문 기업 주식회사 에스튠의 홈페이지를 오픈 합니다.&lt;/p&gt;
&lt;p&gt;많은 애정과 관심 부탁드리겠습니다.&lt;/p&gt;</description>
      <author>stuner</author>
      <guid isPermaLink="true">https://stune.tistory.com/notice/6</guid>
      <pubDate>Fri, 14 Feb 2020 17:22:41 +0900</pubDate>
    </item>
    <item>
      <title>오시는 길</title>
      <link>https://stune.tistory.com/5</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;주소 : 서울특별시 중랑구 숙선옹주로 45&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;팩스 : 050-4494-7498&lt;/p&gt;
&lt;p&gt;&lt;iframe mapdata=&quot;addr=%EC%84%9C%EC%9A%B8%20%EC%A4%91%EB%9E%91%EA%B5%AC%20%EA%B3%B5%EB%A6%89%EB%A1%9C12%EA%B0%80%EA%B8%B8%2052-11&amp;amp;addtype=1&amp;amp;confirmid=&amp;amp;docid=&amp;amp;idx=1&amp;amp;ifrH=362px&amp;amp;ifrW=490px&amp;amp;mapHeight=362&amp;amp;mapInfo=%7B%22version%22%3A2%2C%22mapWidth%22%3A490%2C%22mapHeight%22%3A362%2C%22mapCenterX%22%3A518300%2C%22mapCenterY%22%3A1143868%2C%22mapLevel%22%3A4%2C%22coordinate%22%3A%22wcongnamul%22%2C%22markInfo%22%3A%5B%7B%22markerType%22%3A%22standPlace%22%2C%22coordinate%22%3A%22wcongnamul%22%2C%22x%22%3A518301%2C%22y%22%3A1143874%2C%22clickable%22%3Atrue%2C%22draggable%22%3Atrue%2C%22icon%22%3A%7B%22width%22%3A35%2C%22height%22%3A56%2C%22offsetX%22%3A17%2C%22offsetY%22%3A56%2C%22src%22%3A%22%2F%2Ft1.daumcdn.net%2Flocalimg%2Flocalimages%2F07%2F2012%2Fattach%2Fpc_img%2Fico_marker2_150331.png%22%7D%2C%22content%22%3A%22%EC%84%9C%EC%9A%B8%20%EC%A4%91%EB%9E%91%EA%B5%AC%20%EA%B3%B5%EB%A6%89%EB%A1%9C12%EA%B0%80%EA%B8%B8%2052-11%22%2C%22confirmid%22%3A%22%22%7D%5D%2C%22graphicInfo%22%3A%5B%5D%2C%22roadviewInfo%22%3A%5B%5D%7D&amp;amp;mapWidth=490&amp;amp;mapX=518300&amp;amp;mapY=1143868&amp;amp;map_hybrid=false&amp;amp;map_level=4&amp;amp;map_type=TYPE_MAP&amp;amp;rcode=1126062000&amp;amp;tel=&amp;amp;title=%EC%84%9C%EC%9A%B8%20%EC%A4%91%EB%9E%91%EA%B5%AC%20%EA%B3%B5%EB%A6%89%EB%A1%9C12%EA%B0%80%EA%B8%B8%2052-11&quot; src=&quot;/proxy/plusmapViewer.php?id=maps_1581667274878&quot; id=&quot;maps_1581667274878&quot; width=&quot;540px&quot; height=&quot;350px&quot; frameborder=&quot;0&quot; scrolling=&quot;no&quot; data-ke-type=&quot;map&quot; data-maps-data=&quot;addr=%EC%84%9C%EC%9A%B8%20%EC%A4%91%EB%9E%91%EA%B5%AC%20%EA%B3%B5%EB%A6%89%EB%A1%9C12%EA%B0%80%EA%B8%B8%2052-11&amp;amp;addtype=1&amp;amp;confirmid=&amp;amp;docid=&amp;amp;idx=1&amp;amp;ifrH=362px&amp;amp;ifrW=490px&amp;amp;mapHeight=362&amp;amp;mapInfo=%7B%22version%22%3A2%2C%22mapWidth%22%3A490%2C%22mapHeight%22%3A362%2C%22mapCenterX%22%3A518300%2C%22mapCenterY%22%3A1143868%2C%22mapLevel%22%3A4%2C%22coordinate%22%3A%22wcongnamul%22%2C%22markInfo%22%3A%5B%7B%22markerType%22%3A%22standPlace%22%2C%22coordinate%22%3A%22wcongnamul%22%2C%22x%22%3A518301%2C%22y%22%3A1143874%2C%22clickable%22%3Atrue%2C%22draggable%22%3Atrue%2C%22icon%22%3A%7B%22width%22%3A35%2C%22height%22%3A56%2C%22offsetX%22%3A17%2C%22offsetY%22%3A56%2C%22src%22%3A%22%2F%2Ft1.daumcdn.net%2Flocalimg%2Flocalimages%2F07%2F2012%2Fattach%2Fpc_img%2Fico_marker2_150331.png%22%7D%2C%22content%22%3A%22%EC%84%9C%EC%9A%B8%20%EC%A4%91%EB%9E%91%EA%B5%AC%20%EA%B3%B5%EB%A6%89%EB%A1%9C12%EA%B0%80%EA%B8%B8%2052-11%22%2C%22confirmid%22%3A%22%22%7D%5D%2C%22graphicInfo%22%3A%5B%5D%2C%22roadviewInfo%22%3A%5B%5D%7D&amp;amp;mapWidth=490&amp;amp;mapX=518300&amp;amp;mapY=1143868&amp;amp;map_hybrid=false&amp;amp;map_level=4&amp;amp;map_type=TYPE_MAP&amp;amp;rcode=1126062000&amp;amp;tel=&amp;amp;title=%EC%84%9C%EC%9A%B8%20%EC%A4%91%EB%9E%91%EA%B5%AC%20%EA%B3%B5%EB%A6%89%EB%A1%9C12%EA%B0%80%EA%B8%B8%2052-11&quot; data-maps-mapx=&quot;1143868&quot; data-maps-mapy=&quot;1143868&quot; data-maps-thumbnail=&quot;https://ssl.daumcdn.net/map3/staticmap/image?center=518300%2C1143868&amp;amp;lv=4&amp;amp;size=540x350&amp;amp;srs=WCONGNAMUL&amp;amp;markers=symbol%3Asc_marker%7Clocation%3A518301%2C1143874&quot;&gt;&lt;/iframe&gt;&lt;/p&gt;</description>
      <category>About</category>
      <category>stune</category>
      <category>에스튠</category>
      <category>오시는길</category>
      <author>stuner</author>
      <guid isPermaLink="true">https://stune.tistory.com/5</guid>
      <comments>https://stune.tistory.com/5#entry5comment</comments>
      <pubDate>Tue, 11 Feb 2020 23:10:17 +0900</pubDate>
    </item>
    <item>
      <title>DevOps로의 전환</title>
      <link>https://stune.tistory.com/4</link>
      <description>&lt;p&gt;&lt;span&gt;​&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-width=&quot;750&quot; data-height=&quot;750&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bcCY9O/btqBSOCSarG/0mfeMHJzkdKBVge6Mw91g0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bcCY9O/btqBSOCSarG/0mfeMHJzkdKBVge6Mw91g0/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bcCY9O/btqBSOCSarG/0mfeMHJzkdKBVge6Mw91g0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbcCY9O%2FbtqBSOCSarG%2F0mfeMHJzkdKBVge6Mw91g0%2Fimg.jpg&quot; data-width=&quot;750&quot; data-height=&quot;750&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p id=&quot;SE-deac0521-fde1-4357-a50b-a5fac19c583a&quot;&gt;&lt;span&gt;​&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-a34b7639-e1bc-49d6-b5d3-e7f71608a36b&quot;&gt;&lt;span&gt;​&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-e066f9bd-56ae-4920-a580-f62f0d9571ec&quot;&gt;&lt;span style=&quot;color: #ffffff;&quot;&gt;&lt;b&gt;성공적으로 DevOps로 전환하는 방법에 대한 케빈 존스(Kevin Jones) 조언&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-f7cdbf35-8f29-4d40-9db0-451d1a0685cb&quot;&gt;&lt;span&gt;&lt;b&gt;목표 설정&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-1352ec8c-c939-47db-a53a-d60104a2a315&quot;&gt;&lt;span&gt;&lt;i&gt;&amp;ldquo;무엇을 달성하려고 하는가? 애플리케이션을 현대화하려는 것인가? 인프라를 혁신해 애자일 (Agile) 개발을 달성하고자 하는 것인가?&amp;rdquo;&lt;/i&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-674a2160-2111-45c8-94f1-33eb507e65a8&quot;&gt;&lt;span&gt;​&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-48454f47-0ef1-47c2-99e8-b7f0f6033cf1&quot;&gt;&lt;span&gt;케빈은 DevOps로의 전환과 관련해 기업들은 이러한 질문을 해야 하며,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;b&gt;분명한 목표를 제시하는 것이 확신을 갖지 못한 조직의 첫 걸&lt;/b&gt;&lt;/span&gt;&lt;span&gt;음이라고 강조했습니다. 또한, 그는 기술적인 측면에서 조직이 실제로 지향하는 바를 파악하는 것이 중요하다고 생각하지만, 이는 비즈니스 측면에서 추구하는 것과 일치되도록 해야 한다고 우버(Uber)의 예를 들으면서 설명했습니다. 케빈은 &amp;lsquo;귀사가 우버(Uber)라면 이미 어느 정도 알아냈을 것입니다. 하지만, 항상 로드맵은 있고, 도달하려는 어떤 곳이 있기 마련입니다&amp;rsquo;라고 말했습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-eae522de-6798-4078-b184-435a5f8fa311&quot;&gt;&lt;span&gt;​&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-55ec54de-e055-45ed-96b8-0bfe71ab3f62&quot;&gt;&lt;span&gt;​&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-ec277fa0-de1b-4dd9-81ac-4df33c90898a&quot;&gt;&lt;span&gt;&lt;b&gt;적절한 DevOps 툴 선택&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-e1737eb1-9d8c-48ee-8782-edffa87755d6&quot;&gt;&lt;span&gt;DevOps 전환 과정에서 조직들이 해야 하는 첫 번째 의사 결정 중 하나는&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;b&gt;새로운 운영 프레임워크를 위해 어떤 툴을 채택하느냐&lt;/b&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;하는 것입니다. 이 단계에서 많은 조직들은 어떤 제품 또는 디바이스를 도입할 것인지 검토하는 것으로 시작합니다. 오늘날 IT 팀들이 이용할 수 있는 툴들은 거의 무한하기 때문에 기업은 자체 활용 사례에 가장 적합한 툴을 결정하는 것이 중요합니다.&lt;/span&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p id=&quot;SE-c03d329f-c042-4861-a042-56c455d94234&quot;&gt;&lt;span&gt;핵심은 선택한 툴이 여러분이 가진 목표와 관련한 문제를 &lt;/span&gt;&lt;span style=&quot;letter-spacing: 0px; font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;해결할 수 있도록 해야 한다는 것입니다&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-e6e833c1-f1e1-4bcf-8088-330ec8109112&quot;&gt;&lt;span&gt;케빈 존스(Kevin Jones)&lt;/span&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p id=&quot;SE-14fb7999-8d95-4155-b4c0-11b1c9ba1434&quot;&gt;&lt;span&gt;새로운 툴이나 플랫폼을 구입하기 앞서 해야 하는 일이 있는데요, 과연 무엇일까요? 바로 각 옵션들을 매우 세심하게 테스트하는 등 선제적으로 대응하는 것입니다. 예를 들어, 모니터링이 중요한 기능으로 지목된 경우, 선택한 툴이 여러분이 중요하게 평가하는 모든 요소들&amp;ndash; 응답 시간, 메모리 사용량, 초당 응답 등 &amp;ndash; 에 대해 보고하도록 해야 합니다. 시간을 갖고 새로운 툴의 성공 가능성에 대해 이러한 질문을 함으로써 채택한 디바이스들에 대해 보다 현명한 의사 결정을 할 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-9779ad6b-fd80-4da0-bfe6-439339484c70&quot;&gt;&lt;span&gt;​&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-859cd149-e9be-4a30-b6f7-ab95e04483db&quot;&gt;&lt;span&gt;&lt;b&gt;​&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-8c6b11be-6313-4b33-a4aa-54d59907efd2&quot;&gt;&lt;span&gt;&lt;b&gt;부서 간 커뮤니케이션 활성화&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-024accff-ce60-441d-a0bc-31c430bc0d82&quot;&gt;&lt;span&gt;DevOps로 전환할 때 대부분 조직들이 직면하게 되는 가장 까다로운 장애물은&lt;/span&gt;&lt;span&gt;&lt;b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;비즈니스 부문과 기술 부문 간의 커뮤니케이션을 활성화&lt;/b&gt;&lt;/span&gt;&lt;span&gt;하는 것입니다. 기업들은 빈번하게 DevOps 프로세스를 채택하지만, 업무 팀 간의 효과적인 협업에 필요한 non-siloed(사일로) 조직 구조를 채택하지 않는 경우가 흔히 발생합니다. 케빈은 한쪽에는 비즈니스 담당자들이 그리고 다른 쪽에는 인프라 및 기술 인력들이 있기 때문에 많은 조직에서 DevOps 팀들이 현재 진행되고 있는 일들에 대해 많은 부분을 통제할 필요는 없다고 이야기합니다. 이보다 조직 내 비즈니스 부문과 기술 부문 간의 커뮤니케이션을 활성화하는 것이 DevOps 철학의 핵심입니다.&lt;/span&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p id=&quot;SE-f261018b-9a90-465e-9586-e9817c4c46fd&quot;&gt;&lt;span&gt;한 부서 또는 담당자가 특정 툴을 채택하기를 원하는 경우 &lt;/span&gt;&lt;span style=&quot;letter-spacing: 0px; font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;DevOps 팀이 참여해 인프라에 가치를 추가하고 불필요한 복잡성을 가중시키지 않으면서, &lt;/span&gt;&lt;span style=&quot;letter-spacing: 0px; font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;환경을 향상시킬 수 있는지를 판단하도록 지원해야 합니다.&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;letter-spacing: 0px; font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;채택할 수 있는 많은 툴들이 나와 있지만, 이들 팀들은 하나의 공동체로서 &lt;/span&gt;&lt;span style=&quot;letter-spacing: 0px; font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;전반적인 목적을 달성하기 위한 현명한 의사 결정을 내릴 수 있습니다&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-3aa213ac-f0f7-435c-b3e3-430ff03526c8&quot;&gt;&lt;span&gt;케빈 존스(Kevin Jones)&lt;/span&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p id=&quot;SE-2ab50003-64cd-4919-a870-bd9ab89eee78&quot;&gt;&lt;span&gt;프로덕션 이관, 티켓 백로그 및 변경 관리 계획으로 인한 막대한 워크로드로 인해 대부분 DevOps 팀에게 내부 커뮤니케이션은 물론, 팀 간의 커뮤니케이션은 어려운 과제가 되고 있지만, 케빈은 이것이 백시트(backseat) 접근을 위한 변명이 될 수 없다고 지적했습니다. 그는 DevOps 팀들은 일반적으로 매우 바쁘지만, 이러한 유형의 논의에 시간을 내서 해당 업무에 가능한 참여해야 한다고 강조했습니다. 여러 부서 간의 대화는 운영상 변화는 물론, 문화적 변화를 이끌어 냅니다.&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-5313724d-52f1-45a6-9f16-75ecd4083c92&quot;&gt;&lt;span&gt;​&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-f68de63d-5574-43b6-9700-c8a00b829728&quot;&gt;&lt;span&gt;&lt;b&gt;DevOps의 성공 측정&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-18bacad2-d00c-4ac2-9cec-9ae3ad66bdd6&quot;&gt;&lt;span&gt;다른 운영 방법론과 마찬가지로 DevOps도 결과에 대한 것입니다. 성공과 실패를 식별하는 능력은 새로운 프로세스를 개발할 때 피드백을 수집하는 데 있어 필수적입니다. 하지만, 많은 기업들은 DevOps와 같은 새로운 프로세스를 효과적으로 측정하는 것이 어렵다는 것을 깨닫고 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-87b4873f-b09f-4952-8ade-08210a008551&quot;&gt;&lt;span&gt;​&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-c2dae2bc-ae33-46c4-96ff-71ee4174e299&quot;&gt;&lt;span&gt;케빈의 관점에서 비용, 현대화 및 성능 등 3가지 주요 측정 지표 예가 있습니다. 그는 &amp;ldquo;여러 다양한 유형의 결과가 있다고 생각합니다. 경제적인 결과에 대해 이야기할 수 있습니다. 재정적 관점에서 달성하려는 목표는 무엇입니까? 아마도 이는 돈과는 전혀 관련이 없을 수도 있습니다. 레거시 애플리케이션이나 레거시 인프라의 사용에서 보다 현대적인 인프라로의 마이그레이션을 추적하는 것일 수도 있습니다.&amp;rdquo;라고 덧붙였습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-aafdcc94-0a74-44e4-9ce6-b9bd58919071&quot;&gt;&lt;span&gt;​&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-0708ac59-faa8-4752-87b3-898dba3efc1a&quot;&gt;&lt;span&gt;시간 경과에 따른 애플리케이션 성능도 성공에 대한 측정 기준입니다. 이와 관련해 그는 몇 가지 기본적인 질문을 미리 해보도록 제안했습니다. &amp;ldquo;애플리케이션이 지난 달 또는 지난 주보다 우수한 성능으로 실행됩니까? 또한, 최종 사용자의 경험은 어떻습니까?&amp;rdquo;&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-9ecc58c9-25fc-4919-94ef-4ef40d0dcf53&quot;&gt;&lt;span&gt;​&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-a4d86b23-07dc-43e2-a9a5-64b6b2bc0e20&quot;&gt;&lt;span&gt;목표를 성공적으로 달성하는지 여부는&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;b&gt;비즈니스 부문과 기술 부문 간의 개방적인 의사 소통과 결속력&lt;/b&gt;&lt;/span&gt;&lt;span&gt;에 달려 있습니다. 추구하는 결과와 이를 실현하는 데 사용하려고 계획한 툴을 결정하기 위해서는&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;b&gt;협업&lt;/b&gt;&lt;/span&gt;&lt;span&gt;이 필요합니다. 비즈니스 팀과의 정기적인 논의를 통해 DevOps 팀은 전환 과정의 전반에 대한 전문가적 지침을 제공할 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-f106dc6e-4c24-48d0-89d1-830289232196&quot;&gt;&lt;span&gt;​&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-2a965ef3-d77d-4f66-ad7e-acd0ff226031&quot;&gt;&lt;span&gt;DevOps가 귀사에서 효율적으로 운영되도록 하기 위해서는&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;b&gt;명확한 최종 목표를 염두에 두고 시작&lt;/b&gt;&lt;/span&gt;&lt;span&gt;해야 합니다. 추구할 목표가 있다면, 올바른 질문을 하도록 돕는 기준을 갖게 됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p id=&quot;SE-0f403ce9-80b6-4c33-88e5-e91de5af08a5&quot;&gt;&lt;span&gt;DevOps가 문화적인 측면이 강하며,&lt;/span&gt;&lt;span style=&quot;letter-spacing: 0px; font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;가능한 모든 단계에서 참여해야 합니다&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-cf1c5fa7-523d-4e61-aebf-99b264603342&quot;&gt;&lt;span&gt;케빈 존스(Kevin Jones)&lt;/span&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;원문 : &lt;a href=&quot;https://www.nginx.com/blog/transitioning-to-devops-advice-from-nginx-expert/&quot;&gt;https://www.nginx.com/blog/transitioning-to-devops-advice-from-nginx-expert/&lt;/a&gt;&lt;/p&gt;</description>
      <category>TechBlog</category>
      <category>digital transformation</category>
      <category>stune</category>
      <category>에스튠</category>
      <author>stuner</author>
      <guid isPermaLink="true">https://stune.tistory.com/4</guid>
      <comments>https://stune.tistory.com/4#entry4comment</comments>
      <pubDate>Mon, 10 Feb 2020 12:32:05 +0900</pubDate>
    </item>
    <item>
      <title>Docker. Install (for CentOS)</title>
      <link>https://stune.tistory.com/2</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bCGqpX/btqBO6ELhP5/I8V00BYYxfeNeRk7D2wtY0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bCGqpX/btqBO6ELhP5/I8V00BYYxfeNeRk7D2wtY0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bCGqpX/btqBO6ELhP5/I8V00BYYxfeNeRk7D2wtY0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbCGqpX%2FbtqBO6ELhP5%2FI8V00BYYxfeNeRk7D2wtY0%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h1 id=&quot;title&quot;&gt;Get Docker Engine - Community for CentOS&lt;/h1&gt;
&lt;p&gt;&lt;span&gt;&lt;span&gt;Estimated reading time:&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;10 minutes&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;To get started with Docker Engine - Community on CentOS, make sure you&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://docs.docker.com/install/linux/docker-ce/centos/#prerequisites&quot;&gt;meet the prerequisites&lt;/a&gt;, then&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://docs.docker.com/install/linux/docker-ce/centos/#install-docker-ce&quot;&gt;install Docker&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&quot;prerequisites&quot;&gt;Prerequisites&lt;/h2&gt;
&lt;h3 id=&quot;os-requirements&quot;&gt;OS requirements&lt;/h3&gt;
&lt;p&gt;To install Docker Engine - Community, you need a maintained version of CentOS 7. Archived versions aren&amp;rsquo;t supported or tested.&lt;/p&gt;
&lt;p&gt;The&lt;span&gt;&amp;nbsp;&lt;/span&gt;centos-extras&lt;span&gt;&amp;nbsp;&lt;/span&gt;repository must be enabled. This repository is enabled by default, but if you have disabled it, you need to&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://wiki.centos.org/AdditionalResources/Repositories&quot;&gt;re-enable it&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The&lt;span&gt;&amp;nbsp;&lt;/span&gt;overlay2&lt;span&gt;&amp;nbsp;&lt;/span&gt;storage driver is recommended.&lt;/p&gt;
&lt;h3 id=&quot;uninstall-old-versions&quot;&gt;Uninstall old versions&lt;/h3&gt;
&lt;p&gt;Older versions of Docker were called&lt;span&gt;&amp;nbsp;&lt;/span&gt;docker&lt;span&gt;&amp;nbsp;&lt;/span&gt;or&lt;span&gt;&amp;nbsp;&lt;/span&gt;docker-engine. If these are installed, uninstall them, along with associated dependencies.&lt;/p&gt;
&lt;p&gt;&lt;span&gt;$ &lt;/span&gt;&lt;span&gt;sudo &lt;/span&gt;yum remove docker &lt;span&gt;\&lt;/span&gt; docker-client &lt;span&gt;\&lt;/span&gt; docker-client-latest &lt;span&gt;\&lt;/span&gt; docker-common &lt;span&gt;\&lt;/span&gt; docker-latest &lt;span&gt;\&lt;/span&gt; docker-latest-logrotate &lt;span&gt;\&lt;/span&gt; docker-logrotate &lt;span&gt;\&lt;/span&gt; docker-engine&lt;/p&gt;
&lt;p&gt;It&amp;rsquo;s OK if&lt;span&gt;&amp;nbsp;&lt;/span&gt;yum&lt;span&gt;&amp;nbsp;&lt;/span&gt;reports that none of these packages are installed.&lt;/p&gt;
&lt;p&gt;The contents of&lt;span&gt;&amp;nbsp;&lt;/span&gt;/var/lib/docker/, including images, containers, volumes, and networks, are preserved. The Docker Engine - Community package is now called&lt;span&gt;&amp;nbsp;&lt;/span&gt;docker-ce.&lt;/p&gt;
&lt;h2 id=&quot;install-docker-engine---community&quot;&gt;Install Docker Engine - Community&lt;/h2&gt;
&lt;p&gt;You can install Docker Engine - Community in different ways, depending on your needs:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Most users&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://docs.docker.com/install/linux/docker-ce/centos/#install-using-the-repository&quot;&gt;set up Docker&amp;rsquo;s repositories&lt;/a&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;and install from them, for ease of installation and upgrade tasks. This is the recommended approach.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Some users download the RPM package and&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://docs.docker.com/install/linux/docker-ce/centos/#install-from-a-package&quot;&gt;install it manually&lt;/a&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;and manage upgrades completely manually. This is useful in situations such as installing Docker on air-gapped systems with no access to the internet.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;In testing and development environments, some users choose to use automated&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://docs.docker.com/install/linux/docker-ce/centos/#install-using-the-convenience-script&quot;&gt;convenience scripts&lt;/a&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;to install Docker.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;install-using-the-repository&quot;&gt;Install using the repository&lt;/h3&gt;
&lt;p&gt;Before you install Docker Engine - Community for the first time on a new host machine, you need to set up the Docker repository. Afterward, you can install and update Docker from the repository.&lt;/p&gt;
&lt;p&gt;SET UP THE REPOSITORY&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Install required packages.&lt;span&gt;&amp;nbsp;&lt;/span&gt;yum-utils&lt;span&gt;&amp;nbsp;&lt;/span&gt;provides the&lt;span&gt;&amp;nbsp;&lt;/span&gt;yum-config-manager&lt;span&gt;&amp;nbsp;&lt;/span&gt;utility, and&lt;span&gt;&amp;nbsp;&lt;/span&gt;device-mapper-persistent-data&lt;span&gt;&amp;nbsp;&lt;/span&gt;and&lt;span&gt;&amp;nbsp;&lt;/span&gt;lvm2&lt;span&gt;&amp;nbsp;&lt;/span&gt;are required by the&lt;span&gt;&amp;nbsp;&lt;/span&gt;devicemapper&lt;span&gt;&amp;nbsp;&lt;/span&gt;storage driver.&lt;/p&gt;
&lt;p&gt;&lt;span&gt;$ &lt;/span&gt;&lt;span&gt;sudo &lt;/span&gt;yum install &lt;span&gt;-y&lt;/span&gt; yum-utils &lt;span&gt;\&lt;/span&gt; device-mapper-persistent-data &lt;span&gt;\&lt;/span&gt; lvm2&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Use the following command to set up the&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;stable&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;repository.&lt;/p&gt;
&lt;p&gt;&lt;span&gt;$ &lt;/span&gt;&lt;span&gt;sudo &lt;/span&gt;yum-config-manager &lt;span&gt;\&lt;/span&gt; &lt;span&gt;--add-repo&lt;/span&gt; &lt;span&gt;\&lt;/span&gt; &lt;a href=&quot;https://download.docker.com/linux/centos/docker-ce.repo&quot;&gt;https://download.docker.com/linux/centos/docker-ce.repo&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;b&gt;Optional&lt;/b&gt;: Enable the&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;nightly&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;or&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;test&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;repositories.&lt;/p&gt;
&lt;p&gt;These repositories are included in the&lt;span&gt;&amp;nbsp;&lt;/span&gt;docker.repo&lt;span&gt;&amp;nbsp;&lt;/span&gt;file above but are disabled by default. You can enable them alongside the stable repository. The following command enables the&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;nightly&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;repository.&lt;/p&gt;
&lt;p&gt;&lt;span&gt;$ &lt;/span&gt;&lt;span&gt;sudo &lt;/span&gt;yum-config-manager &lt;span&gt;--enable&lt;/span&gt; docker-ce-nightly&lt;/p&gt;
&lt;p&gt;To enable the&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;test&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;channel, run the following command:&lt;/p&gt;
&lt;p&gt;&lt;span&gt;$ &lt;/span&gt;&lt;span&gt;sudo &lt;/span&gt;yum-config-manager &lt;span&gt;--enable&lt;/span&gt; docker-ce-test&lt;/p&gt;
&lt;p&gt;You can disable the&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;nightly&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;or&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;test&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;repository by running the&lt;span&gt;&amp;nbsp;&lt;/span&gt;yum-config-manager&lt;span&gt;&amp;nbsp;&lt;/span&gt;command with the&lt;span&gt;&amp;nbsp;&lt;/span&gt;--disable&lt;span&gt;&amp;nbsp;&lt;/span&gt;flag. To re-enable it, use the&lt;span&gt;&amp;nbsp;&lt;/span&gt;--enable&lt;span&gt;&amp;nbsp;&lt;/span&gt;flag. The following command disables the&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;nightly&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;repository.&lt;/p&gt;
&lt;p&gt;&lt;span&gt;$ &lt;/span&gt;&lt;span&gt;sudo &lt;/span&gt;yum-config-manager &lt;span&gt;--disable&lt;/span&gt; docker-ce-nightly&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://docs.docker.com/install/&quot;&gt;Learn about&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;nightly&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;and&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;test&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;channels&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;INSTALL DOCKER ENGINE - COMMUNITY&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Install the&lt;span&gt;&amp;nbsp;&lt;/span&gt;latest version&lt;span&gt;&amp;nbsp;&lt;/span&gt;of Docker Engine - Community and containerd, or go to the next step to install a specific version:&lt;/p&gt;
&lt;p&gt;&lt;span&gt;$ &lt;/span&gt;&lt;span&gt;sudo &lt;/span&gt;yum install docker-ce docker-ce-cli containerd.io&lt;/p&gt;
&lt;p&gt;If prompted to accept the GPG key, verify that the fingerprint matches&lt;span&gt;&amp;nbsp;&lt;/span&gt;060A 61C5 1B55 8A7F 742B 77AA C52F EB6B 621E 9F35, and if so, accept it.&lt;/p&gt;
&lt;p&gt;Got multiple Docker repositories?&lt;/p&gt;
&lt;p&gt;If you have multiple Docker repositories enabled, installing or updating without specifying a version in the&lt;span&gt;&amp;nbsp;&lt;/span&gt;yum install&lt;span&gt;&amp;nbsp;&lt;/span&gt;or&lt;span&gt;&amp;nbsp;&lt;/span&gt;yum update&lt;span&gt;&amp;nbsp;&lt;/span&gt;command always installs the highest possible version, which may not be appropriate for your stability needs.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;Docker is installed but not started. The&lt;span&gt;&amp;nbsp;&lt;/span&gt;docker&lt;span&gt;&amp;nbsp;&lt;/span&gt;group is created, but no users are added to the group.&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;To install a&lt;span&gt;&amp;nbsp;&lt;/span&gt;specific version&lt;span&gt;&amp;nbsp;&lt;/span&gt;of Docker Engine - Community, list the available versions in the repo, then select and install:&lt;/p&gt;
&lt;p&gt;a. List and sort the versions available in your repo. This example sorts results by version number, highest to lowest, and is truncated:&lt;/p&gt;
&lt;p&gt;&lt;span&gt;$ &lt;/span&gt;yum list docker-ce &lt;span&gt;--showduplicates&lt;/span&gt; | sort &lt;span&gt;-r&lt;/span&gt; docker-ce.x86_64 3:18.09.1-3.el7 docker-ce-stable docker-ce.x86_64 3:18.09.0-3.el7 docker-ce-stable docker-ce.x86_64 18.06.1.ce-3.el7 docker-ce-stable docker-ce.x86_64 18.06.0.ce-3.el7 docker-ce-stable&lt;/p&gt;
&lt;p&gt;The list returned depends on which repositories are enabled, and is specific to your version of CentOS (indicated by the&lt;span&gt;&amp;nbsp;&lt;/span&gt;.el7&lt;span&gt;&amp;nbsp;&lt;/span&gt;suffix in this example).&lt;/p&gt;
&lt;p&gt;b. Install a specific version by its fully qualified package name, which is the package name (docker-ce) plus the version string (2nd column) starting at the first colon (:), up to the first hyphen, separated by a hyphen (-). For example,&lt;span&gt;&amp;nbsp;&lt;/span&gt;docker-ce-18.09.1.&lt;/p&gt;
&lt;p&gt;&lt;span&gt;$ &lt;/span&gt;&lt;span&gt;sudo &lt;/span&gt;yum install docker-ce-&amp;lt;VERSION_STRING&amp;gt; docker-ce-cli-&amp;lt;VERSION_STRING&amp;gt; containerd.io&lt;/p&gt;
&lt;p&gt;Docker is installed but not started. The&lt;span&gt;&amp;nbsp;&lt;/span&gt;docker&lt;span&gt;&amp;nbsp;&lt;/span&gt;group is created, but no users are added to the group.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Start Docker.&lt;/p&gt;
&lt;p&gt;&lt;span&gt;$ &lt;/span&gt;&lt;span&gt;sudo &lt;/span&gt;systemctl start docker&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Verify that Docker Engine - Community is installed correctly by running the&lt;span&gt;&amp;nbsp;&lt;/span&gt;hello-world&lt;span&gt;&amp;nbsp;&lt;/span&gt;image.&lt;/p&gt;
&lt;p&gt;&lt;span&gt;$ &lt;/span&gt;&lt;span&gt;sudo &lt;/span&gt;docker run hello-world&lt;/p&gt;
&lt;p&gt;This command downloads a test image and runs it in a container. When the container runs, it prints an informational message and exits.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Docker Engine - Community is installed and running. You need to use&lt;span&gt;&amp;nbsp;&lt;/span&gt;sudo&lt;span&gt;&amp;nbsp;&lt;/span&gt;to run Docker commands. Continue to&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://docs.docker.com/install/linux/linux-postinstall/&quot;&gt;Linux postinstall&lt;/a&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;to allow non-privileged users to run Docker commands and for other optional configuration steps.&lt;/p&gt;
&lt;p&gt;UPGRADE DOCKER ENGINE - COMMUNITY&lt;/p&gt;
&lt;p&gt;To upgrade Docker Engine - Community, follow the&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://docs.docker.com/install/linux/docker-ce/centos/#install-docker-ce&quot;&gt;installation instructions&lt;/a&gt;, choosing the new version you want to install.&lt;/p&gt;
&lt;h3 id=&quot;install-from-a-package&quot;&gt;Install from a package&lt;/h3&gt;
&lt;p&gt;If you cannot use Docker&amp;rsquo;s repository to install Docker, you can download the&lt;span&gt;&amp;nbsp;&lt;/span&gt;.rpm&lt;span&gt;&amp;nbsp;&lt;/span&gt;file for your release and install it manually. You need to download a new file each time you want to upgrade Docker Engine - Community.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Go to&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://download.docker.com/linux/centos/7/x86_64/stable/Packages/&quot;&gt;https://download.docker.com/linux/centos/7/x86_64/stable/Packages/&lt;/a&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;and download the&lt;span&gt;&amp;nbsp;&lt;/span&gt;.rpm&lt;span&gt;&amp;nbsp;&lt;/span&gt;file for the Docker version you want to install.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Note&lt;/b&gt;: To install a&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;nightly&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;or&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;test&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;(pre-release) package, change the word&lt;span&gt;&amp;nbsp;&lt;/span&gt;stable&lt;span&gt;&amp;nbsp;&lt;/span&gt;in the above URL to&lt;span&gt;&amp;nbsp;&lt;/span&gt;nightly&lt;span&gt;&amp;nbsp;&lt;/span&gt;or&lt;span&gt;&amp;nbsp;&lt;/span&gt;test.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://docs.docker.com/install/&quot;&gt;Learn about&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;nightly&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;and&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;test&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;channels&lt;/a&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Install Docker Engine - Community, changing the path below to the path where you downloaded the Docker package.&lt;/p&gt;
&lt;p&gt;&lt;span&gt;$ &lt;/span&gt;&lt;span&gt;sudo &lt;/span&gt;yum install /path/to/package.rpm&lt;/p&gt;
&lt;p&gt;Docker is installed but not started. The&lt;span&gt;&amp;nbsp;&lt;/span&gt;docker&lt;span&gt;&amp;nbsp;&lt;/span&gt;group is created, but no users are added to the group.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Start Docker.&lt;/p&gt;
&lt;p&gt;&lt;span&gt;$ &lt;/span&gt;&lt;span&gt;sudo &lt;/span&gt;systemctl start docker&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Verify that Docker Engine - Community is installed correctly by running the&lt;span&gt;&amp;nbsp;&lt;/span&gt;hello-world&lt;span&gt;&amp;nbsp;&lt;/span&gt;image.&lt;/p&gt;
&lt;p&gt;&lt;span&gt;$ &lt;/span&gt;&lt;span&gt;sudo &lt;/span&gt;docker run hello-world&lt;/p&gt;
&lt;p&gt;This command downloads a test image and runs it in a container. When the container runs, it prints an informational message and exits.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Docker Engine - Community is installed and running. You need to use&lt;span&gt;&amp;nbsp;&lt;/span&gt;sudo&lt;span&gt;&amp;nbsp;&lt;/span&gt;to run Docker commands. Continue to&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://docs.docker.com/install/linux/linux-postinstall/&quot;&gt;Post-installation steps for Linux&lt;/a&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;to allow non-privileged users to run Docker commands and for other optional configuration steps.&lt;/p&gt;
&lt;p&gt;UPGRADE DOCKER ENGINE - COMMUNITY&lt;/p&gt;
&lt;p&gt;To upgrade Docker Engine - Community, download the newer package file and repeat the&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://docs.docker.com/install/linux/docker-ce/centos/#install-from-a-package&quot;&gt;installation procedure&lt;/a&gt;, using&lt;span&gt;&amp;nbsp;&lt;/span&gt;yum -y upgrade&lt;span&gt;&amp;nbsp;&lt;/span&gt;instead of&lt;span&gt;&amp;nbsp;&lt;/span&gt;yum -y install, and pointing to the new file.&lt;/p&gt;
&lt;h3 id=&quot;install-using-the-convenience-script&quot;&gt;Install using the convenience script&lt;/h3&gt;
&lt;p&gt;Docker provides convenience scripts at&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://get.docker.com/&quot;&gt;get.docker.com&lt;/a&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;and&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://test.docker.com/&quot;&gt;test.docker.com&lt;/a&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;for installing edge and testing versions of Docker Engine - Community into development environments quickly and non-interactively. The source code for the scripts is in the&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://github.com/docker/docker-install&quot;&gt;docker-install&lt;span&gt;&amp;nbsp;&lt;/span&gt;repository&lt;/a&gt;.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;Using these scripts is not recommended for production environments&lt;/b&gt;, and you should understand the potential risks before you use them:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The scripts require&lt;span&gt;&amp;nbsp;&lt;/span&gt;root&lt;span&gt;&amp;nbsp;&lt;/span&gt;or&lt;span&gt;&amp;nbsp;&lt;/span&gt;sudo&lt;span&gt;&amp;nbsp;&lt;/span&gt;privileges to run. Therefore, you should carefully examine and audit the scripts before running them.&lt;/li&gt;
&lt;li&gt;The scripts attempt to detect your Linux distribution and version and configure your package management system for you. In addition, the scripts do not allow you to customize any installation parameters. This may lead to an unsupported configuration, either from Docker&amp;rsquo;s point of view or from your own organization&amp;rsquo;s guidelines and standards.&lt;/li&gt;
&lt;li&gt;The scripts install all dependencies and recommendations of the package manager without asking for confirmation. This may install a large number of packages, depending on the current configuration of your host machine.&lt;/li&gt;
&lt;li&gt;The script does not provide options to specify which version of Docker to install, and installs the latest version that is released in the &amp;ldquo;edge&amp;rdquo; channel.&lt;/li&gt;
&lt;li&gt;Do not use the convenience script if Docker has already been installed on the host machine using another mechanism.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This example uses the script at&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://get.docker.com/&quot;&gt;get.docker.com&lt;/a&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;to install the latest release of Docker Engine - Community on Linux. To install the latest testing version, use&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://test.docker.com/&quot;&gt;test.docker.com&lt;/a&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;instead. In each of the commands below, replace each occurrence of&lt;span&gt;&amp;nbsp;&lt;/span&gt;get&lt;span&gt;&amp;nbsp;&lt;/span&gt;with&lt;span&gt;&amp;nbsp;&lt;/span&gt;test.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;b&gt;Warning&lt;/b&gt;:&lt;/p&gt;
&lt;p&gt;Always examine scripts downloaded from the internet before running them locally.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;span&gt;$ &lt;/span&gt;curl &lt;span&gt;-fsSL&lt;/span&gt; &lt;a href=&quot;https://get.docker.com&quot;&gt;https://get.docker.com&lt;/a&gt; &lt;span&gt;-o&lt;/span&gt; get-docker.sh &lt;span&gt;$ &lt;/span&gt;&lt;span&gt;sudo &lt;/span&gt;sh get-docker.sh &amp;lt;output truncated&amp;gt;&lt;/p&gt;
&lt;p&gt;If you would like to use Docker as a non-root user, you should now consider adding your user to the &amp;ldquo;docker&amp;rdquo; group with something like:&lt;/p&gt;
&lt;p&gt;&lt;span&gt;sudo &lt;/span&gt;usermod &lt;span&gt;-aG&lt;/span&gt; docker your-user&lt;/p&gt;
&lt;p&gt;Remember to log out and back in for this to take effect!&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;b&gt;Warning&lt;/b&gt;:&lt;/p&gt;
&lt;p&gt;Adding a user to the &amp;ldquo;docker&amp;rdquo; group grants them the ability to run containers which can be used to obtain root privileges on the Docker host. Refer to&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://docs.docker.com/engine/security/security/#docker-daemon-attack-surface&quot;&gt;Docker Daemon Attack Surface&lt;/a&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;for more information.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Docker Engine - Community is installed. It starts automatically on&lt;span&gt;&amp;nbsp;&lt;/span&gt;DEB-based distributions. On&lt;span&gt;&amp;nbsp;&lt;/span&gt;RPM-based distributions, you need to start it manually using the appropriate&lt;span&gt;&amp;nbsp;&lt;/span&gt;systemctl&lt;span&gt;&amp;nbsp;&lt;/span&gt;or&lt;span&gt;&amp;nbsp;&lt;/span&gt;service&lt;span&gt;&amp;nbsp;&lt;/span&gt;command. As the message indicates, non-root users can&amp;rsquo;t run Docker commands by default.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;b&gt;Note&lt;/b&gt;:&lt;/p&gt;
&lt;p&gt;To install Docker without root privileges, see&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://docs.docker.com/engine/security/rootless/&quot;&gt;Run the Docker daemon as a non-root user (Rootless mode)&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Rootless mode is currently available as an experimental feature.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;UPGRADE DOCKER AFTER USING THE CONVENIENCE SCRIPT&lt;/p&gt;
&lt;p&gt;If you installed Docker using the convenience script, you should upgrade Docker using your package manager directly. There is no advantage to re-running the convenience script, and it can cause issues if it attempts to re-add repositories which have already been added to the host machine.&lt;/p&gt;
&lt;h2 id=&quot;uninstall-docker-engine---community&quot;&gt;Uninstall Docker Engine - Community&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Uninstall the Docker package:&lt;/p&gt;
&lt;p&gt;&lt;span&gt;$ &lt;/span&gt;&lt;span&gt;sudo &lt;/span&gt;yum remove docker-ce&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Images, containers, volumes, or customized configuration files on your host are not automatically removed. To delete all images, containers, and volumes:&lt;/p&gt;
&lt;p&gt;&lt;span&gt;$ &lt;/span&gt;&lt;span&gt;sudo &lt;/span&gt;rm &lt;span&gt;-rf&lt;/span&gt; /var/lib/docker&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;You must delete any edited configuration files manually.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>TechBlog</category>
      <category>docker</category>
      <category>install</category>
      <author>stuner</author>
      <guid isPermaLink="true">https://stune.tistory.com/2</guid>
      <comments>https://stune.tistory.com/2#entry2comment</comments>
      <pubDate>Mon, 3 Feb 2020 22:38:36 +0900</pubDate>
    </item>
  </channel>
</rss>