<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>Code 048</title>
    <link>https://littlezero48.tistory.com/</link>
    <description>경험 저장소</description>
    <language>ko</language>
    <pubDate>Mon, 18 May 2026 06:25:29 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>littlezero48</managingEditor>
    <image>
      <title>Code 048</title>
      <url>https://tistory1.daumcdn.net/tistory/5569184/attach/cf04f36bc01942b18c18b712e5c3ca83</url>
      <link>https://littlezero48.tistory.com</link>
    </image>
    <item>
      <title>C#에서 @(at sign / 골뱅이) 심벌</title>
      <link>https://littlezero48.tistory.com/432</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt; &lt;span&gt;&amp;nbsp;&lt;span style=&quot;color: #ef5369;&quot;&gt;&lt;b&gt;공부&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #ef5369;&quot;&gt;&lt;b&gt;&amp;nbsp;계기&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;회사 프로젝트의 변수 이름에 @가 붙어있는 케이스를 발견&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;변수에 @사인이 들어가는 걸 처음봐서 찾아보니 C#에서는 여러 기능으로 @을 사용하고 있어 정리해본다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;사용 1 ) 문자 그래도 인식 방법&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;대입하고자 하는 문자열 앞에 @을 붙여주어 사용한다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Escape문자를 무시하고 문자를 그대로 문자열로 인식한다&lt;/p&gt;
&lt;pre id=&quot;code_1686189431946&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// 기본
string str = &quot;C:\\Test\\Test.txt&quot;;

// @ 사용
string str = @&quot;C:\Test\Test.txt&quot;;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;또한 문자열을 그대로 인식하기 때문에 Enter도 인식하여 \n Escape 문자 없이 복수행으로 작성된 문자열을 그대로 인식할 수 있다.&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1686189718522&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// 기본 
string str = &quot;기본 문자열은 Enter시 \\n 을 사용하여야 합니다. \n 줄바꿈이 되었습니다.&quot;;

// @ 사용
string str = @&quot;@을 사용한 문자열은 Enter시 \n 을 사용하지 않습니다.
줄바꿈이 되었습니다.&quot;;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;사용 2 ) C# 키워드를 변수명으로 사용&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;C# 키워드는 예약어로 원래 변수명으로 사용할 수 없지만 앞에 @을 붙여주게 되면 변수명으로 사용할 수 있다.&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;선언할 때도 대입하여 사용할때도 @을 붙여 사용해야 한다.&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;예약어를 변수명으로 사용하는 것은 기피되어야 하나, &lt;br /&gt;피치못하게 사용해야하는 케이스 등에 사용한다. ( ex. &lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;ASP.NET MVC의 Html Helper )&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1686190261907&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;string @object = &quot;객체&quot;;

@object = &quot;문자열&quot; + @object;
Console.WriteLine(@object);
// 문자열객체&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h4 style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #6164c6; text-align: start;&quot;&gt;  My Case&lt;/span&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;우리회사에서 발견한 변수는 코드비하인드가 아닌 aspx 파일에서 asp태그의 id를 fixed로 사용했는데&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;이게 C#에서 fixed키워드는 &quot;가비지 콜렉터에서 이동 가능한 변수를 재배치 할 수 없도록 &lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;포인터를&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;고정시키는 역할&quot;을 하는 키워드이다. &lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;따라서 키워드 변수를 사용할 수 밖에 없는 상황.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;근데 생각해보면 이런 상황을 피하기 위해 태그 쪽 id를 변경하여 키워드 변수를 사용하지 않도록 하는게&amp;nbsp; 더 좋을 거 같긴하다. &lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;해당 변수 사용된 걸 전체 파악해서 나중에 건의해보는 걸로..&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;참고 자료 :&lt;/p&gt;
&lt;figure id=&quot;og_1686190020844&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;C#에서 @을 사용할 때 - C# 프로그래밍 배우기 (Learn C# Programming)&quot; data-og-description=&quot;@ 심벌을 사용법 1 @ 심벌을 문자열 앞에 사용하면, 해당 문자열 안의 Escape 문자를 무시하고 문자 그대로 인식하도록 한다. 예를 들어, 파일 패스를 지정할 때, Backslash를 한번 지정하면 이는 Escape&quot; data-og-host=&quot;www.csharpstudy.com&quot; data-og-source-url=&quot;https://www.csharpstudy.com/Tip/Tip-at-symbol.aspx&quot; data-og-url=&quot;https://www.csharpstudy.com/Tip/Tip-at-symbol.aspx&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://www.csharpstudy.com/Tip/Tip-at-symbol.aspx&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.csharpstudy.com/Tip/Tip-at-symbol.aspx&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;C#에서 @을 사용할 때 - C# 프로그래밍 배우기 (Learn C# Programming)&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;@ 심벌을 사용법 1 @ 심벌을 문자열 앞에 사용하면, 해당 문자열 안의 Escape 문자를 무시하고 문자 그대로 인식하도록 한다. 예를 들어, 파일 패스를 지정할 때, Backslash를 한번 지정하면 이는 Escape&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.csharpstudy.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;figure id=&quot;og_1686191114138&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;c# 에서 checked, fixed, lock, params&quot; data-og-description=&quot;1. checked / unchecked checked는 키워드는 정수 형식 산술 연산 및 변환에 대한 오버플로 검사를 명시적으로 사용하도록 설정하는 데 사용됩니다. int ten = 10; int i2 = 2147483647 + ten; 상수 값만 포함된 식이&quot; data-og-host=&quot;moonpmj.tistory.com&quot; data-og-source-url=&quot;https://moonpmj.tistory.com/72&quot; data-og-url=&quot;https://moonpmj.tistory.com/72&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/b8ZHB8/hySVCRUSvR/ZL2vrBD4zilI5oYyyC5lP1/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/cFgEgR/hySVGfINML/HMNFlTBHQzHqmo7tdNPFhk/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800&quot;&gt;&lt;a href=&quot;https://moonpmj.tistory.com/72&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://moonpmj.tistory.com/72&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/b8ZHB8/hySVCRUSvR/ZL2vrBD4zilI5oYyyC5lP1/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/cFgEgR/hySVGfINML/HMNFlTBHQzHqmo7tdNPFhk/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;c# 에서 checked, fixed, lock, params&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;1. checked / unchecked checked는 키워드는 정수 형식 산술 연산 및 변환에 대한 오버플로 검사를 명시적으로 사용하도록 설정하는 데 사용됩니다. int ten = 10; int i2 = 2147483647 + ten; 상수 값만 포함된 식이&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;moonpmj.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Programming/C#</category>
      <category>ASP.NET</category>
      <category>C#</category>
      <author>littlezero48</author>
      <guid isPermaLink="true">https://littlezero48.tistory.com/432</guid>
      <comments>https://littlezero48.tistory.com/432#entry432comment</comments>
      <pubDate>Thu, 8 Jun 2023 11:26:24 +0900</pubDate>
    </item>
    <item>
      <title>Programmers] 상품을 구매한 회원 비율 구하기</title>
      <link>https://littlezero48.tistory.com/431</link>
      <description>&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span&gt;문제&lt;/span&gt;&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt; &lt;b&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt; MySQL &lt;/span&gt;&lt;/span&gt;로 풀이&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt; &lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;문제 링크&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;:&lt;/p&gt;
&lt;figure id=&quot;og_1682408826030&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;프로그래머스&quot; data-og-description=&quot;코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.&quot; data-og-host=&quot;programmers.co.kr&quot; data-og-source-url=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/131534&quot; data-og-url=&quot;https://programmers.co.kr/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/B0bO3/hySpJQVnpN/yeI0PaCMTWsgNEoKrvQ3j1/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630&quot;&gt;&lt;a href=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/131534&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/131534&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/B0bO3/hySpJQVnpN/yeI0PaCMTWsgNEoKrvQ3j1/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;프로그래머스&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;programmers.co.kr&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt; &lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;문제 설명&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;:&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;USER_INFO&lt;span style=&quot;text-align: left;&quot;&gt;&amp;nbsp;테이블과&amp;nbsp;&lt;/span&gt;ONLINE_SALE&lt;span style=&quot;text-align: left;&quot;&gt;&amp;nbsp;테이블에서 2021년에 가입한 전체 회원들 중 상품을 구매한 회원수와 상품을 구매한 회원의 비율(=2021년에 가입한 회원 중 상품을 구매한 회원수 / 2021년에 가입한 전체 회원 수)을 년, 월 별로 출력하는 SQL문을 작성해주세요. 상품을 구매한 회원의 비율은 소수점 두번째자리에서 반올림하고, 전체 결과는 년을 기준으로 오름차순 정렬해주시고 년이 같다면 월을 기준으로 오름차순 정렬해주세요.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;  &lt;b&gt;테이블&lt;/b&gt; :&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;다음은 어느 의류 쇼핑몰에 가입한 회원 정보를 담은&lt;span&gt;&amp;nbsp;&lt;/span&gt;USER_INFO&lt;span&gt;&amp;nbsp;&lt;/span&gt;테이블과 온라인 상품 판매 정보를 담은&lt;span&gt;&amp;nbsp;&lt;/span&gt;ONLINE_SALE&lt;span&gt;&amp;nbsp;&lt;/span&gt;테이블 입니다.&lt;span&gt;&amp;nbsp;&lt;/span&gt;USER_INFO&lt;span&gt;&amp;nbsp;&lt;/span&gt;테이블은 아래와 같은 구조로 되어있으며&lt;span&gt;&amp;nbsp;&lt;/span&gt;USER_ID,&lt;span&gt;&amp;nbsp;&lt;/span&gt;GENDER,&lt;span&gt;&amp;nbsp;&lt;/span&gt;AGE,&lt;span&gt;&amp;nbsp;&lt;/span&gt;JOINED는 각각 회원 ID, 성별, 나이, 가입일을 나타냅니다.&lt;/p&gt;
&lt;table style=&quot;background-color: #263747; color: #b2c0cc; text-align: left; border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody style=&quot;color: #000000;&quot;&gt;
&lt;tr style=&quot;color: #000000;&quot;&gt;
&lt;td style=&quot;background-color: #202b3d; color: #000000;&quot;&gt;&lt;span style=&quot;color: #ffffff;&quot;&gt;USER_ID&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #202b3d; color: #000000;&quot;&gt;&lt;span style=&quot;color: #ffffff;&quot;&gt;INTEGER&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #202b3d; color: #000000;&quot;&gt;&lt;span style=&quot;color: #ffffff;&quot;&gt;FALSE&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;color: #000000;&quot;&gt;
&lt;td style=&quot;background-color: #202b3d; color: #000000;&quot;&gt;&lt;span style=&quot;color: #ffffff;&quot;&gt;GENDER&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #202b3d; color: #000000;&quot;&gt;&lt;span style=&quot;color: #ffffff;&quot;&gt;TINYINT(1)&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #202b3d; color: #000000;&quot;&gt;&lt;span style=&quot;color: #ffffff;&quot;&gt;TRUE&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;color: #000000;&quot;&gt;
&lt;td style=&quot;background-color: #202b3d; color: #000000;&quot;&gt;&lt;span style=&quot;color: #ffffff;&quot;&gt;AGE&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #202b3d; color: #000000;&quot;&gt;&lt;span style=&quot;color: #ffffff;&quot;&gt;INTEGER&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #202b3d; color: #000000;&quot;&gt;&lt;span style=&quot;color: #ffffff;&quot;&gt;TRUE&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;color: #000000;&quot;&gt;
&lt;td style=&quot;background-color: #202b3d; color: #000000;&quot;&gt;&lt;span style=&quot;color: #ffffff;&quot;&gt;JOINED&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #202b3d; color: #000000;&quot;&gt;&lt;span style=&quot;color: #ffffff;&quot;&gt;DATE&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #202b3d; color: #000000;&quot;&gt;&lt;span style=&quot;color: #ffffff;&quot;&gt;FALSE&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;GENDER&lt;span&gt;&amp;nbsp;&lt;/span&gt;컬럼은 비어있거나 0 또는 1의 값을 가지며 0인 경우 남자를, 1인 경우는 여자를 나타냅니다.&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;ONLINE_SALE&lt;span&gt;&amp;nbsp;&lt;/span&gt;테이블은 아래와 같은 구조로 되어있으며&lt;span&gt;&amp;nbsp;&lt;/span&gt;ONLINE_SALE_ID,&lt;span&gt;&amp;nbsp;&lt;/span&gt;USER_ID,&lt;span&gt;&amp;nbsp;&lt;/span&gt;PRODUCT_ID,&lt;span&gt;&amp;nbsp;&lt;/span&gt;SALES_AMOUNT,&lt;span&gt;&amp;nbsp;&lt;/span&gt;SALES_DATE는 각각 온라인 상품 판매 ID, 회원 ID, 상품 ID, 판매량, 판매일을 나타냅니다.&lt;/p&gt;
&lt;table style=&quot;text-align: left; border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody style=&quot;color: #000000;&quot;&gt;
&lt;tr style=&quot;color: #000000;&quot;&gt;
&lt;td style=&quot;background-color: #202b3d; color: #000000; width: 34.186%;&quot;&gt;&lt;span style=&quot;color: #ffffff;&quot;&gt;ONLINE_SALE_ID&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #202b3d; color: #000000; width: 39.4186%;&quot;&gt;&lt;span style=&quot;color: #ffffff;&quot;&gt;INTEGER&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #202b3d; color: #000000; width: 26.3953%;&quot;&gt;&lt;span style=&quot;color: #ffffff;&quot;&gt;FALSE&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;color: #000000;&quot;&gt;
&lt;td style=&quot;background-color: #202b3d; color: #000000; width: 34.186%;&quot;&gt;&lt;span style=&quot;color: #ffffff;&quot;&gt;USER_ID&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #202b3d; color: #000000; width: 39.4186%;&quot;&gt;&lt;span style=&quot;color: #ffffff;&quot;&gt;INTEGER&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #202b3d; color: #000000; width: 26.3953%;&quot;&gt;&lt;span style=&quot;color: #ffffff;&quot;&gt;FALSE&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;color: #000000;&quot;&gt;
&lt;td style=&quot;background-color: #202b3d; color: #000000; width: 34.186%;&quot;&gt;&lt;span style=&quot;color: #ffffff;&quot;&gt;PRODUCT_ID&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #202b3d; color: #000000; width: 39.4186%;&quot;&gt;&lt;span style=&quot;color: #ffffff;&quot;&gt;INTEGER&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #202b3d; color: #000000; width: 26.3953%;&quot;&gt;&lt;span style=&quot;color: #ffffff;&quot;&gt;FALSE&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;color: #000000;&quot;&gt;
&lt;td style=&quot;background-color: #202b3d; color: #000000; width: 34.186%;&quot;&gt;&lt;span style=&quot;color: #ffffff;&quot;&gt;SALES_AMOUNT&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #202b3d; color: #000000; width: 39.4186%;&quot;&gt;&lt;span style=&quot;color: #ffffff;&quot;&gt;INTEGER&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #202b3d; color: #000000; width: 26.3953%;&quot;&gt;&lt;span style=&quot;color: #ffffff;&quot;&gt;FALSE&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;color: #000000;&quot;&gt;
&lt;td style=&quot;background-color: #202b3d; color: #000000; width: 34.186%;&quot;&gt;&lt;span style=&quot;color: #ffffff;&quot;&gt;SALES_DATE&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #202b3d; color: #000000; width: 39.4186%;&quot;&gt;&lt;span style=&quot;color: #ffffff;&quot;&gt;DATE&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #202b3d; color: #000000; width: 26.3953%;&quot;&gt;&lt;span style=&quot;color: #ffffff;&quot;&gt;FALSE&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;동일한 날짜, 회원 ID, 상품 ID 조합에 대해서는 하나의 판매 데이터만 존재합니다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;풀이&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffc1c8;&quot;&gt;추측)&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;2021년에 가입한 사람수를 변수로 먼저 대입.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;그리고 2021년에 가입한 사람들 리스트를 대상으로 온라인 주문을 join해서 일치하는 것을 조회.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;년, 월 기준으로 그룹화한 다음에 같은 달에 똑같은 사람이 주문했을 경우를 생각해서 중복제거로 DISTINCT 적용하고&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;count로 주문회원수, 2021가입자 수 변수에서 count 비율을 구해 출력하면 될 듯!&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;쿼리)&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;* 1차) 실패&lt;/p&gt;
&lt;pre id=&quot;code_1682351472261&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;SET @CNT = (SELECT COUNT(*) FROM USER_INFO WHERE YEAR(JOINED) = '2021');

SELECT DISTINCT
    YEAR(O.SALES_DATE) AS YEAR,
    MONTH(O.SALES_DATE) AS MONTH,
    COUNT(*) AS PUCHASED_USERS,
    ROUND(COUNT(*) / @CNT, 1) AS PUCHASED_RATIO
FROM ONLINE_SALE AS O
INNER JOIN (SELECT *
            FROM USER_INFO
            WHERE YEAR(JOINED) = '2021') AS U
ON O.USER_ID = U.USER_ID
GROUP BY YEAR, MONTH
ORDER BY YEAR ASC, MONTH ASC&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;* 2차) 성공&lt;/p&gt;
&lt;pre id=&quot;code_1682352077146&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;SET @CNT = (SELECT COUNT(*) FROM USER_INFO WHERE YEAR(JOINED) = '2021');

SELECT 
    YEAR, 
    MONTH, 
    COUNT(*) AS PUCHASED_USERS,
    ROUND(COUNT(*)/@CNT, 1) AS PUCHASED_RATIO
FROM (SELECT DISTINCT
        YEAR(SALES_DATE) AS YEAR,
        MONTH(SALES_DATE) AS MONTH,
        USER_ID
      FROM ONLINE_SALE) AS O                   # 년,달마다 구매한 회원 리스트  
INNER JOIN (SELECT USER_ID
            FROM USER_INFO
            WHERE YEAR(JOINED) = '2021') AS U  # 2021년에 가입한 회원 리스트
ON O.USER_ID = U.USER_ID
GROUP BY YEAR, MONTH
ORDER BY YEAR ASC, MONTH ASC&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #c1bef9;&quot;&gt;리뷰)&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;1차에서 중복제거랑 그룹화를 같이하면서 의도치 않은 결과가 나왔다.&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;DISTINCT가 실행되는 기준을 생각해보면&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;1차에서는 중복이 제거되지 않은 상태로 먼저 count과 비율이 다 계산되고난 이후에 중복을 제거하는 거라,&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;같은 달에 또 구매한 구매자를 거르지 못했다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;이 중복을 먼저 제거하기 위해&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;2차에서는 년과 달 기준으로 구매한 회원을 중복없이 리스트화 시킬 수 있게 질의해서 먼저 정리하고&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;이를 기준으로 count해서 정확한 결과가 나오게 했다!&lt;/p&gt;</description>
      <category>Coding Test/SQL</category>
      <category>SQL</category>
      <author>littlezero48</author>
      <guid isPermaLink="true">https://littlezero48.tistory.com/431</guid>
      <comments>https://littlezero48.tistory.com/431#entry431comment</comments>
      <pubDate>Tue, 25 Apr 2023 17:07:58 +0900</pubDate>
    </item>
    <item>
      <title>따배도 강의 - 도커 시리즈</title>
      <link>https://littlezero48.tistory.com/429</link>
      <description>&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #ef5369;&quot;&gt;&lt;b&gt;  이성미 님의 &quot;따라 배우는 도커 시리즈&quot; 강의 듣고 포스팅한 시리즈 모음 페이지&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt; &lt;b&gt;본 강의 링크 :&lt;/b&gt;&lt;/h4&gt;
&lt;figure id=&quot;og_1682273685796&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;[따배도] 도커 시리즈&quot; data-og-description=&quot; &quot; data-og-host=&quot;www.youtube.com&quot; data-og-source-url=&quot;https://www.youtube.com/playlist?list=PLApuRlvrZKogb78kKq1wRvrjg1VMwYrvi&quot; data-og-url=&quot;http://www.youtube.com/playlist?list=PLApuRlvrZKogb78kKq1wRvrjg1VMwYrvi&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/We3gg/hySoIkmAvr/jhkrRJ7gSk051Dhk3UhZsk/img.jpg?width=168&amp;amp;height=94&amp;amp;face=123_20_145_44,https://scrap.kakaocdn.net/dn/QsXud/hySmVZXDGf/SM14cW41PMFWmowzJDvE2K/img.jpg?width=196&amp;amp;height=110&amp;amp;face=144_23_167_48,https://scrap.kakaocdn.net/dn/clJ4Ui/hySmZnJq0E/g2UbMkgbGkIpA5KErkk6S0/img.jpg?width=246&amp;amp;height=138&amp;amp;face=182_31_208_59,https://scrap.kakaocdn.net/dn/7bzHE/hySouGpwjq/fUGNm0gJKVrooO5rxYH3q0/img.jpg?width=336&amp;amp;height=188&amp;amp;face=249_41_286_82&quot;&gt;&lt;a href=&quot;https://www.youtube.com/playlist?list=PLApuRlvrZKogb78kKq1wRvrjg1VMwYrvi&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.youtube.com/playlist?list=PLApuRlvrZKogb78kKq1wRvrjg1VMwYrvi&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/We3gg/hySoIkmAvr/jhkrRJ7gSk051Dhk3UhZsk/img.jpg?width=168&amp;amp;height=94&amp;amp;face=123_20_145_44,https://scrap.kakaocdn.net/dn/QsXud/hySmVZXDGf/SM14cW41PMFWmowzJDvE2K/img.jpg?width=196&amp;amp;height=110&amp;amp;face=144_23_167_48,https://scrap.kakaocdn.net/dn/clJ4Ui/hySmZnJq0E/g2UbMkgbGkIpA5KErkk6S0/img.jpg?width=246&amp;amp;height=138&amp;amp;face=182_31_208_59,https://scrap.kakaocdn.net/dn/7bzHE/hySouGpwjq/fUGNm0gJKVrooO5rxYH3q0/img.jpg?width=336&amp;amp;height=188&amp;amp;face=249_41_286_82');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;[따배도] 도커 시리즈&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.youtube.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt; &lt;b&gt;정리 포스팅&amp;nbsp;:&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Chapter1. 도커 살피기&lt;/h3&gt;
&lt;figure id=&quot;og_1682273800553&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;따배도 도커 시리즈 0~3-2] 도커 살펴보기&quot; data-og-description=&quot;  공부 계기 추가적인 도커 공부를 위해 유튜브 따배도 도커 시리즈를 보면서 정리해 봅니다. 목차  1. 컨테이너를 배우는 이유? ⏳ 시대의 변화! 시대는 베어메탈 방식 &amp;gt; 가상화 방식 &amp;gt; 가상&quot; data-og-host=&quot;littlezero48.tistory.com&quot; data-og-source-url=&quot;https://littlezero48.tistory.com/416&quot; data-og-url=&quot;https://littlezero48.tistory.com/416&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bUU6VE/hySm2Lw4pM/O1v5KodmLEvitoQySpcks0/img.png?width=589&amp;amp;height=471&amp;amp;face=0_0_589_471,https://scrap.kakaocdn.net/dn/jTb9j/hySoEWy4jB/f9Au5YzZqmS08czTAHbW8K/img.png?width=589&amp;amp;height=471&amp;amp;face=0_0_589_471,https://scrap.kakaocdn.net/dn/dbF5NZ/hySoAGCUPd/91LideVpVdSEf6BQew6jBK/img.png?width=1485&amp;amp;height=437&amp;amp;face=0_0_1485_437&quot;&gt;&lt;a href=&quot;https://littlezero48.tistory.com/416&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://littlezero48.tistory.com/416&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bUU6VE/hySm2Lw4pM/O1v5KodmLEvitoQySpcks0/img.png?width=589&amp;amp;height=471&amp;amp;face=0_0_589_471,https://scrap.kakaocdn.net/dn/jTb9j/hySoEWy4jB/f9Au5YzZqmS08czTAHbW8K/img.png?width=589&amp;amp;height=471&amp;amp;face=0_0_589_471,https://scrap.kakaocdn.net/dn/dbF5NZ/hySoAGCUPd/91LideVpVdSEf6BQew6jBK/img.png?width=1485&amp;amp;height=437&amp;amp;face=0_0_1485_437');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;따배도 도커 시리즈 0~3-2] 도커 살펴보기&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;  공부 계기 추가적인 도커 공부를 위해 유튜브 따배도 도커 시리즈를 보면서 정리해 봅니다. 목차  1. 컨테이너를 배우는 이유? ⏳ 시대의 변화! 시대는 베어메탈 방식 &amp;gt; 가상화 방식 &amp;gt; 가상&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;littlezero48.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;Chapter2. 컨테이너 생성 및 허브 배포&lt;/h3&gt;
&lt;figure id=&quot;og_1682273846005&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;따배도 도커 시리즈 4] 컨테이너 만들고 허브에 배포해보기&quot; data-og-description=&quot;  공부 계기 추가적인 도커 공부를 위해 유튜브 따배도 도커 시리즈를 보면서 정리해 봅니다. 목차  4-1. 컨테이너를 만들기 : 이론 1️⃣ 무엇을 컨테이너로 만드는 건가요? 컨테이너란 개발&quot; data-og-host=&quot;littlezero48.tistory.com&quot; data-og-source-url=&quot;https://littlezero48.tistory.com/417&quot; data-og-url=&quot;https://littlezero48.tistory.com/417&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/9lhdb/hySmXwGLue/C3VQjcdGBRWiikIisc4lyK/img.png?width=800&amp;amp;height=217&amp;amp;face=0_0_800_217,https://scrap.kakaocdn.net/dn/5aKBR/hySmUmpLop/PVSlJHoGVbO3fDbn64WGTK/img.png?width=800&amp;amp;height=217&amp;amp;face=0_0_800_217,https://scrap.kakaocdn.net/dn/8dGHy/hySmZuungv/8C8S9lRHJppLC5b9NuNX51/img.png?width=1226&amp;amp;height=726&amp;amp;face=0_0_1226_726&quot;&gt;&lt;a href=&quot;https://littlezero48.tistory.com/417&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://littlezero48.tistory.com/417&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/9lhdb/hySmXwGLue/C3VQjcdGBRWiikIisc4lyK/img.png?width=800&amp;amp;height=217&amp;amp;face=0_0_800_217,https://scrap.kakaocdn.net/dn/5aKBR/hySmUmpLop/PVSlJHoGVbO3fDbn64WGTK/img.png?width=800&amp;amp;height=217&amp;amp;face=0_0_800_217,https://scrap.kakaocdn.net/dn/8dGHy/hySmZuungv/8C8S9lRHJppLC5b9NuNX51/img.png?width=1226&amp;amp;height=726&amp;amp;face=0_0_1226_726');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;따배도 도커 시리즈 4] 컨테이너 만들고 허브에 배포해보기&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;  공부 계기 추가적인 도커 공부를 위해 유튜브 따배도 도커 시리즈를 보면서 정리해 봅니다. 목차  4-1. 컨테이너를 만들기 : 이론 1️⃣ 무엇을 컨테이너로 만드는 건가요? 컨테이너란 개발&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;littlezero48.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;Chapter3.&lt;span&gt; 컨테이너 Registry&lt;/span&gt;&lt;/h3&gt;
&lt;figure id=&quot;og_1682273862266&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;따배도 도커 시리즈 5] 컨테이너 보관창고 Registry&quot; data-og-description=&quot;  공부 계기 추가적인 도커 공부를 위해 유튜브 따배도 도커 시리즈를 보면서 정리해 봅니다. 목차  5-1. 컨테이너 보관창고 : 이론편 1️⃣ 컨테이너 보관 창고 (Registry)가 있어요? * Registry는 &quot; data-og-host=&quot;littlezero48.tistory.com&quot; data-og-source-url=&quot;https://littlezero48.tistory.com/418&quot; data-og-url=&quot;https://littlezero48.tistory.com/418&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/f6xkM/hySoCYKezR/8tVhwdC2VqdozbeSVMyBr0/img.png?width=800&amp;amp;height=416&amp;amp;face=0_0_800_416,https://scrap.kakaocdn.net/dn/wQXfC/hySoBMi9ru/55Siq8sXzZD4ZksP9k8HQk/img.png?width=800&amp;amp;height=416&amp;amp;face=0_0_800_416,https://scrap.kakaocdn.net/dn/MBwp3/hySoyB2RYn/KIOeSXqJLJ0n5HQp0lMMvK/img.png?width=1301&amp;amp;height=454&amp;amp;face=0_0_1301_454&quot;&gt;&lt;a href=&quot;https://littlezero48.tistory.com/418&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://littlezero48.tistory.com/418&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/f6xkM/hySoCYKezR/8tVhwdC2VqdozbeSVMyBr0/img.png?width=800&amp;amp;height=416&amp;amp;face=0_0_800_416,https://scrap.kakaocdn.net/dn/wQXfC/hySoBMi9ru/55Siq8sXzZD4ZksP9k8HQk/img.png?width=800&amp;amp;height=416&amp;amp;face=0_0_800_416,https://scrap.kakaocdn.net/dn/MBwp3/hySoyB2RYn/KIOeSXqJLJ0n5HQp0lMMvK/img.png?width=1301&amp;amp;height=454&amp;amp;face=0_0_1301_454');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;따배도 도커 시리즈 5] 컨테이너 보관창고 Registry&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;  공부 계기 추가적인 도커 공부를 위해 유튜브 따배도 도커 시리즈를 보면서 정리해 봅니다. 목차  5-1. 컨테이너 보관창고 : 이론편 1️⃣ 컨테이너 보관 창고 (Registry)가 있어요? * Registry는&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;littlezero48.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;Chapter4.&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;컨테이너 사용법&lt;/span&gt;&lt;/h3&gt;
&lt;figure id=&quot;og_1682273920257&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;따배도 도커 시리즈 6] 컨테이너 사용하기&quot; data-og-description=&quot;  공부 계기 추가적인 도커 공부를 위해 유튜브 따배도 도커 시리즈를 보면서 정리해 봅니다. 목차  6-1. 컨테이너 사용하기 : 이론 * 명령어 표 참고사항 - [ ] : 선택사항 , : 필수사항, | : 둘중&quot; data-og-host=&quot;littlezero48.tistory.com&quot; data-og-source-url=&quot;https://littlezero48.tistory.com/419&quot; data-og-url=&quot;https://littlezero48.tistory.com/419&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/buBrxe/hySmXi84ul/1q0qbTk03yOzrYoChFRYH1/img.png?width=800&amp;amp;height=692&amp;amp;face=0_0_800_692,https://scrap.kakaocdn.net/dn/bFPlX2/hySm5nVhNu/dIaFXXkz3x2lkqokXeJGYK/img.png?width=800&amp;amp;height=692&amp;amp;face=0_0_800_692,https://scrap.kakaocdn.net/dn/3UcOn/hySoCxFy6q/tVZD6T0nJxGLdKBbOw6xSk/img.png?width=1175&amp;amp;height=518&amp;amp;face=0_0_1175_518&quot;&gt;&lt;a href=&quot;https://littlezero48.tistory.com/419&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://littlezero48.tistory.com/419&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/buBrxe/hySmXi84ul/1q0qbTk03yOzrYoChFRYH1/img.png?width=800&amp;amp;height=692&amp;amp;face=0_0_800_692,https://scrap.kakaocdn.net/dn/bFPlX2/hySm5nVhNu/dIaFXXkz3x2lkqokXeJGYK/img.png?width=800&amp;amp;height=692&amp;amp;face=0_0_800_692,https://scrap.kakaocdn.net/dn/3UcOn/hySoCxFy6q/tVZD6T0nJxGLdKBbOw6xSk/img.png?width=1175&amp;amp;height=518&amp;amp;face=0_0_1175_518');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;따배도 도커 시리즈 6] 컨테이너 사용하기&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;  공부 계기 추가적인 도커 공부를 위해 유튜브 따배도 도커 시리즈를 보면서 정리해 봅니다. 목차  6-1. 컨테이너 사용하기 : 이론 * 명령어 표 참고사항 - [ ] : 선택사항 , : 필수사항, | : 둘중&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;littlezero48.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;Chapter5.&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;컨테이너 관리&lt;/span&gt;&lt;/h3&gt;
&lt;figure id=&quot;og_1682273942682&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;따배도 도커 시리즈 7] 컨테이너 관리&quot; data-og-description=&quot;  공부 계기 추가적인 도커 공부를 위해 유튜브 따배도 도커 시리즈를 보면서 정리해 봅니다. 목차  7-1. 컨테이너 관리하기 : 이론 공식문서 링크 Docker run reference docs.docker.com 1️⃣ 컨테이너 &quot; data-og-host=&quot;littlezero48.tistory.com&quot; data-og-source-url=&quot;https://littlezero48.tistory.com/422&quot; data-og-url=&quot;https://littlezero48.tistory.com/422&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/s8vVE/hySm1Z8nrk/pPD2V56WzazkkkNd9qHDl0/img.png?width=457&amp;amp;height=68&amp;amp;face=0_0_457_68,https://scrap.kakaocdn.net/dn/LhBcV/hySoGUn1kJ/KdWOnUMCupURYvayAK7V71/img.png?width=457&amp;amp;height=68&amp;amp;face=0_0_457_68,https://scrap.kakaocdn.net/dn/bh5apH/hySm7symRe/WAYv0BY5mn3OQso6fPvsX0/img.png?width=1081&amp;amp;height=326&amp;amp;face=0_0_1081_326&quot;&gt;&lt;a href=&quot;https://littlezero48.tistory.com/422&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://littlezero48.tistory.com/422&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/s8vVE/hySm1Z8nrk/pPD2V56WzazkkkNd9qHDl0/img.png?width=457&amp;amp;height=68&amp;amp;face=0_0_457_68,https://scrap.kakaocdn.net/dn/LhBcV/hySoGUn1kJ/KdWOnUMCupURYvayAK7V71/img.png?width=457&amp;amp;height=68&amp;amp;face=0_0_457_68,https://scrap.kakaocdn.net/dn/bh5apH/hySm7symRe/WAYv0BY5mn3OQso6fPvsX0/img.png?width=1081&amp;amp;height=326&amp;amp;face=0_0_1081_326');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;따배도 도커 시리즈 7] 컨테이너 관리&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;  공부 계기 추가적인 도커 공부를 위해 유튜브 따배도 도커 시리즈를 보면서 정리해 봅니다. 목차  7-1. 컨테이너 관리하기 : 이론 공식문서 링크 Docker run reference docs.docker.com 1️⃣ 컨테이너&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;littlezero48.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;Chapter6.&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;컨테이너 볼륨 및 데이터 공유&lt;/span&gt;&lt;/h3&gt;
&lt;figure id=&quot;og_1682273972351&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;따배도 도커 시리즈 8] Docker Container Storage&quot; data-og-description=&quot;  공부 계기 추가적인 도커 공부를 위해 유튜브 따배도 도커 시리즈를 보면서 정리해 봅니다. 목차  8-1. Docker Container Storage : 이론 1️⃣ 컨테이너 볼륨이 뭐에요? 컨테이너 이미지는 readonly이&quot; data-og-host=&quot;littlezero48.tistory.com&quot; data-og-source-url=&quot;https://littlezero48.tistory.com/426&quot; data-og-url=&quot;https://littlezero48.tistory.com/426&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/c1ngoE/hySmX4wdHQ/kfaVmvgW2HuCZmYoNKY121/img.png?width=800&amp;amp;height=275&amp;amp;face=0_0_800_275,https://scrap.kakaocdn.net/dn/dl74vc/hySoAGCVVy/dYnAGpTHL8myIr1A4kafoK/img.png?width=800&amp;amp;height=275&amp;amp;face=0_0_800_275,https://scrap.kakaocdn.net/dn/rMeAK/hySoCdnlGA/vxOsTGsxVUFEZ4NnsNZnek/img.png?width=1104&amp;amp;height=380&amp;amp;face=0_0_1104_380&quot;&gt;&lt;a href=&quot;https://littlezero48.tistory.com/426&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://littlezero48.tistory.com/426&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/c1ngoE/hySmX4wdHQ/kfaVmvgW2HuCZmYoNKY121/img.png?width=800&amp;amp;height=275&amp;amp;face=0_0_800_275,https://scrap.kakaocdn.net/dn/dl74vc/hySoAGCVVy/dYnAGpTHL8myIr1A4kafoK/img.png?width=800&amp;amp;height=275&amp;amp;face=0_0_800_275,https://scrap.kakaocdn.net/dn/rMeAK/hySoCdnlGA/vxOsTGsxVUFEZ4NnsNZnek/img.png?width=1104&amp;amp;height=380&amp;amp;face=0_0_1104_380');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;따배도 도커 시리즈 8] Docker Container Storage&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;  공부 계기 추가적인 도커 공부를 위해 유튜브 따배도 도커 시리즈를 보면서 정리해 봅니다. 목차  8-1. Docker Container Storage : 이론 1️⃣ 컨테이너 볼륨이 뭐에요? 컨테이너 이미지는 readonly이&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;littlezero48.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;Chapter7.&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;컨테이너 간 통신&lt;/span&gt;&lt;/h3&gt;
&lt;figure id=&quot;og_1682274011879&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;따배도 도커 시리즈 9] 컨테이너간 통신(네트워크)&quot; data-og-description=&quot;  공부 계기 추가적인 도커 공부를 위해 유튜브 따배도 도커 시리즈를 보면서 정리해 봅니다. 목차  9-1. 컨테이너 간 통신 (네트워크) : 이론 1️⃣ 컨테이너는 어떻게 통신하나요? * 컨테이너&quot; data-og-host=&quot;littlezero48.tistory.com&quot; data-og-source-url=&quot;https://littlezero48.tistory.com/427&quot; data-og-url=&quot;https://littlezero48.tistory.com/427&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bEYKTn/hySm2EKjsq/hvuq29xxl6yfv4myfhgrhK/img.png?width=508&amp;amp;height=642&amp;amp;face=0_0_508_642,https://scrap.kakaocdn.net/dn/t87ZT/hySouzDGdl/m4zpmLuKaFnkfd5ZgVvlw0/img.png?width=508&amp;amp;height=642&amp;amp;face=0_0_508_642,https://scrap.kakaocdn.net/dn/ctkSPT/hySmYCmoBW/pCUnKJRdMuIOmV6pBDMERk/img.png?width=1068&amp;amp;height=507&amp;amp;face=0_0_1068_507&quot;&gt;&lt;a href=&quot;https://littlezero48.tistory.com/427&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://littlezero48.tistory.com/427&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bEYKTn/hySm2EKjsq/hvuq29xxl6yfv4myfhgrhK/img.png?width=508&amp;amp;height=642&amp;amp;face=0_0_508_642,https://scrap.kakaocdn.net/dn/t87ZT/hySouzDGdl/m4zpmLuKaFnkfd5ZgVvlw0/img.png?width=508&amp;amp;height=642&amp;amp;face=0_0_508_642,https://scrap.kakaocdn.net/dn/ctkSPT/hySmYCmoBW/pCUnKJRdMuIOmV6pBDMERk/img.png?width=1068&amp;amp;height=507&amp;amp;face=0_0_1068_507');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;따배도 도커 시리즈 9] 컨테이너간 통신(네트워크)&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;  공부 계기 추가적인 도커 공부를 위해 유튜브 따배도 도커 시리즈를 보면서 정리해 봅니다. 목차  9-1. 컨테이너 간 통신 (네트워크) : 이론 1️⃣ 컨테이너는 어떻게 통신하나요? * 컨테이너&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;littlezero48.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;Chapter8.&lt;span&gt;&lt;span&gt; Docker Compose&lt;/span&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;figure id=&quot;og_1682274051864&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;따배도 도커 시리즈 10] 빌드에서 운영까지 (docker compose)&quot; data-og-description=&quot;  공부 계기 추가적인 도커 공부를 위해 유튜브 따배도 도커 시리즈를 보면서 정리해 봅니다. 목차  10-1. 빌드에서 운영까지 : 이론 1️⃣ 도커 컴포즈가 뭐에요? 여러 컨테이너를 일괄적으로&quot; data-og-host=&quot;littlezero48.tistory.com&quot; data-og-source-url=&quot;https://littlezero48.tistory.com/428&quot; data-og-url=&quot;https://littlezero48.tistory.com/428&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/dx3hnl/hySmZVzLI4/Bhdrl6Bgb9hLvQJRbhMDiK/img.jpg?width=800&amp;amp;height=383&amp;amp;face=0_0_800_383,https://scrap.kakaocdn.net/dn/b4CCWe/hySowc9XmM/VNdc8lBL0784jkb7CfW5U0/img.jpg?width=800&amp;amp;height=383&amp;amp;face=0_0_800_383,https://scrap.kakaocdn.net/dn/dENgpi/hySm7eZl80/0c9KpQnwiVWIYnypKAM8t0/img.png?width=709&amp;amp;height=619&amp;amp;face=0_0_709_619&quot;&gt;&lt;a href=&quot;https://littlezero48.tistory.com/428&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://littlezero48.tistory.com/428&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/dx3hnl/hySmZVzLI4/Bhdrl6Bgb9hLvQJRbhMDiK/img.jpg?width=800&amp;amp;height=383&amp;amp;face=0_0_800_383,https://scrap.kakaocdn.net/dn/b4CCWe/hySowc9XmM/VNdc8lBL0784jkb7CfW5U0/img.jpg?width=800&amp;amp;height=383&amp;amp;face=0_0_800_383,https://scrap.kakaocdn.net/dn/dENgpi/hySm7eZl80/0c9KpQnwiVWIYnypKAM8t0/img.png?width=709&amp;amp;height=619&amp;amp;face=0_0_709_619');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;따배도 도커 시리즈 10] 빌드에서 운영까지 (docker compose)&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;  공부 계기 추가적인 도커 공부를 위해 유튜브 따배도 도커 시리즈를 보면서 정리해 봅니다. 목차  10-1. 빌드에서 운영까지 : 이론 1️⃣ 도커 컴포즈가 뭐에요? 여러 컨테이너를 일괄적으로&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;littlezero48.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #f6e199; color: #3f3f3f; text-align: start;&quot;&gt;&amp;nbsp; 완강!&amp;nbsp;&lt;/span&gt;&lt;/p&gt;</description>
      <category>Posting Series</category>
      <category>Docker</category>
      <category>따배도</category>
      <author>littlezero48</author>
      <guid isPermaLink="true">https://littlezero48.tistory.com/429</guid>
      <comments>https://littlezero48.tistory.com/429#entry429comment</comments>
      <pubDate>Mon, 24 Apr 2023 03:21:50 +0900</pubDate>
    </item>
    <item>
      <title>따배도 도커 시리즈 10] 빌드에서 운영까지 (docker compose)</title>
      <link>https://littlezero48.tistory.com/428</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt; &amp;nbsp;&lt;span style=&quot;color: #ef5369;&quot;&gt;&lt;b&gt;공부 계기&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #ef5369;&quot;&gt;&lt;b&gt;추가적인 도커 공부를 위해 유튜브 따배도 도커 시리즈를 보면서 정리해 봅니다.&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;color: #ef5369;&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div id=&quot;book-toc&quot; style=&quot;color: #333333; text-align: start;&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;목차&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;/div&gt;
&lt;h3 id=&quot; 6-1.-컨테이너-사용하기--이론&quot; style=&quot;text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt; 10-1. 빌드에서 운영까지 : 이론&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1️⃣ 도커 컴포즈가 뭐에요?&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;다운로드.jpg&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;614&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c9HZKA/btsbUpuVbc6/2kbqtqoenre8IX3GDo4oL0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c9HZKA/btsbUpuVbc6/2kbqtqoenre8IX3GDo4oL0/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c9HZKA/btsbUpuVbc6/2kbqtqoenre8IX3GDo4oL0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc9HZKA%2FbtsbUpuVbc6%2F2kbqtqoenre8IX3GDo4oL0%2Fimg.jpg&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; loading=&quot;lazy&quot; width=&quot;600&quot; height=&quot;288&quot; data-filename=&quot;다운로드.jpg&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;614&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여러 컨테이너를 일괄적으로 정의하고 실행할 수 있는 툴.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하나의 서비스를 운영하기 위해 여러개의 애플리케이션을 동작해야 할 때가 있다. 이때 애플리케이션을 컨테이너화 시켜 통합 관리할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;지금까지 여러 명령어를 하나하나 실행해주었는데&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;YAML(야믈)파일 하나로 도커 컴포즈에 요청하면 이 yaml 파일을 명령어로 해석해 컨테이너를 관리한다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;또한 이 compose로 연결되어 있는 컨테이너들을&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;docker-compose 툴로 한꺼번에 상태를 보고, 관리하고, 운영할 수 있다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure id=&quot;og_1682260086175&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;The Compose file&quot; data-og-description=&quot; &quot; data-og-host=&quot;docs.docker.com&quot; data-og-source-url=&quot;https://docs.docker.com/compose/compose-file/03-compose-file/&quot; data-og-url=&quot;https://docs.docker.com/compose/compose-file/03-compose-file/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bgp3vZ/hySm70mAFj/wPEP5RSPKmHC9WWBcI0ENk/img.png?width=129&amp;amp;height=128&amp;amp;face=0_0_129_128,https://scrap.kakaocdn.net/dn/6cAI7/hySmRQL1na/nKS2N0HP3mDQsZak2ZRTYK/img.png?width=950&amp;amp;height=500&amp;amp;face=0_0_950_500&quot;&gt;&lt;a href=&quot;https://docs.docker.com/compose/compose-file/03-compose-file/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://docs.docker.com/compose/compose-file/03-compose-file/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bgp3vZ/hySm70mAFj/wPEP5RSPKmHC9WWBcI0ENk/img.png?width=129&amp;amp;height=128&amp;amp;face=0_0_129_128,https://scrap.kakaocdn.net/dn/6cAI7/hySmRQL1na/nKS2N0HP3mDQsZak2ZRTYK/img.png?width=950&amp;amp;height=500&amp;amp;face=0_0_950_500');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;The Compose file&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;docs.docker.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;  &lt;b&gt;도커 컴파일 구성&lt;/b&gt;&lt;/p&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기 포스팅에도 정리해 놓긴 했었는데&amp;nbsp;&lt;/p&gt;
&lt;figure id=&quot;og_1682260195790&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;원티드 챌린지 Docker 2] 로컬환경에서 도커를 활용해보자!&quot; data-og-description=&quot;  공부 계기 원티드 챌린지가 이번 달 제공하는 강의는 Docker! Docker 강의 총 4번 중 2번째 정리해보려고 합니다. Docker 활용 목차  이론편 : Docker Compose 1️⃣ Docker Compose 란? 도커 파일은 하나의 &quot; data-og-host=&quot;littlezero48.tistory.com&quot; data-og-source-url=&quot;https://littlezero48.tistory.com/404&quot; data-og-url=&quot;https://littlezero48.tistory.com/404&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/qLv5X/hySoEhTLmP/mKIo0LUZtySwC66BTJnZE0/img.jpg?width=800&amp;amp;height=384&amp;amp;face=0_0_800_384,https://scrap.kakaocdn.net/dn/bt6HVn/hySoCxCERx/n8JaDOEylUTkcZuiKDGq51/img.jpg?width=800&amp;amp;height=384&amp;amp;face=0_0_800_384,https://scrap.kakaocdn.net/dn/khLNL/hySotOdFvC/0Wvsv2jPkbicQv6uDt7K0K/img.png?width=709&amp;amp;height=619&amp;amp;face=0_0_709_619&quot;&gt;&lt;a href=&quot;https://littlezero48.tistory.com/404&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://littlezero48.tistory.com/404&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/qLv5X/hySoEhTLmP/mKIo0LUZtySwC66BTJnZE0/img.jpg?width=800&amp;amp;height=384&amp;amp;face=0_0_800_384,https://scrap.kakaocdn.net/dn/bt6HVn/hySoCxCERx/n8JaDOEylUTkcZuiKDGq51/img.jpg?width=800&amp;amp;height=384&amp;amp;face=0_0_800_384,https://scrap.kakaocdn.net/dn/khLNL/hySotOdFvC/0Wvsv2jPkbicQv6uDt7K0K/img.png?width=709&amp;amp;height=619&amp;amp;face=0_0_709_619');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;원티드 챌린지 Docker 2] 로컬환경에서 도커를 활용해보자!&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;  공부 계기 원티드 챌린지가 이번 달 제공하는 강의는 Docker! Docker 강의 총 4번 중 2번째 정리해보려고 합니다. Docker 활용 목차  이론편 : Docker Compose 1️⃣ Docker Compose 란? 도커 파일은 하나의&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;littlezero48.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p style=&quot;text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;* version&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;도커 컴포즈의 버전을 의미.&lt;br /&gt;현재(230409 기준) version 3 이상을 사용&lt;/p&gt;
&lt;p style=&quot;text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;* services&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;실행하려는 컨테이너들을 정의하는 영역&lt;br /&gt;컨테이너에 대한 이름, 이미지, 포트 매핑, 환경변수, 볼륨 등의 정보를 가지고 컨테이너를 생성하고 관리&lt;/p&gt;
&lt;p style=&quot;text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; -&amp;nbsp;&lt;b&gt;image&lt;/b&gt;&amp;nbsp;: 컨테이너의 베이스 이미지&lt;/p&gt;
&lt;p style=&quot;text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; -&amp;nbsp;&lt;b&gt;build&lt;/b&gt;&amp;nbsp;: 정의된 도커파일에서 이미지 빌드하고 서비스 컨테이너 생성&lt;/p&gt;
&lt;p style=&quot;text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; -&amp;nbsp;&lt;b&gt;environment&lt;/b&gt; :&amp;nbsp; 컨테이너에 적용할 환경변수 설정 &lt;span style=&quot;color: #9d9d9d;&quot;&gt;(run 명령어의 --env, -e 옵션과 동일)&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; -&amp;nbsp;&lt;b&gt;command&lt;/b&gt;&amp;nbsp;:&amp;nbsp; 컨테이너가 실행될 때 수행할 명령어&amp;nbsp;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;(run 명령어의 서브 command에 적용하는 것과 동일)&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; -&amp;nbsp;&lt;b&gt;depends_on&lt;/b&gt; : 컨테이너 간의 의존성 주입. 여기에 적힌 컨테이너가 먼저 생성되야한다.&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; -&amp;nbsp;&lt;b&gt;ports&lt;/b&gt;&amp;nbsp;: 개방할 포트 지정 (run 명령어의 -p 와 동일)&lt;/p&gt;
&lt;p style=&quot;text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; -&amp;nbsp;&lt;b&gt;expose&lt;/b&gt;&amp;nbsp;: 링크로 연계된 컨테이너에게만 공개할 포트 설정&lt;/p&gt;
&lt;p style=&quot;text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; -&amp;nbsp;&lt;b&gt;volumes&lt;/b&gt;&amp;nbsp;: 컨테이너에 볼륨 마운트&lt;/p&gt;
&lt;p style=&quot;text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; -&amp;nbsp;&lt;b&gt;restart&lt;/b&gt;&amp;nbsp;: 컨테이너가 종료될 때 재시작 정책&lt;/p&gt;
&lt;p style=&quot;text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; - no : 재시작 되지 않음&lt;/p&gt;
&lt;p style=&quot;text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; - always : 외부에 영향에 의해 종료 되었을 때 항상 재시작 (수동으로 끄기 전까지 항상 재시작)&lt;/p&gt;
&lt;p style=&quot;text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; - on-failure : 오류가 있을 시 재시작&lt;/p&gt;
&lt;p style=&quot;text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;709&quot; data-origin-height=&quot;619&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/t6wea/btscjmJ4vq0/OIa3EK73feP4eSm46K0ku1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/t6wea/btscjmJ4vq0/OIa3EK73feP4eSm46K0ku1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/t6wea/btscjmJ4vq0/OIa3EK73feP4eSm46K0ku1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Ft6wea%2FbtscjmJ4vq0%2FOIa3EK73feP4eSm46K0ku1%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;709&quot; height=&quot;619&quot; data-origin-width=&quot;709&quot; data-origin-height=&quot;619&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;p style=&quot;text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt; &amp;nbsp;&lt;span style=&quot;color: #ef5369;&quot;&gt;&lt;b&gt;참고&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;yaml 파일은 2칸씩 들여쓰기(indent) 해야함&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style2&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2️⃣ 도커 컴포즈로 컨테이너 실행할 수 있나요?&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1) 도커 컴포즈가 사용할 서비스 디렉토리 생성&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;webserver 디렉토리를 생성하고(mkdir = make directory), webserver 로 이동 (cd = change directory)&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1682261153500&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;mkdir webserver
cd webserver&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2) docker-compose.yml 생성&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;도커컴포즈&amp;nbsp; yml(=yaml)파일 생성&lt;/p&gt;
&lt;pre id=&quot;code_1682261223954&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;cat &amp;gt; docker-compose.yml&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그 안에 아래 처럼 작성 (*yaml 파일은 2인덴트(들여쓰기) 기준!!)&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1682261390448&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;version: '3'

services:
  web:
    image: httpd:latest
    ports: 
      - &quot;80:80&quot;
    links:
      - mysql:db
    command: apachectl -DFOREGROUND
    
  mysql:
    imge: mysql:latest
    command: mysqld
    environment:
      MYSQL_ROOT_PASSWORD: pass&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3) docker-compose 명령어&lt;/p&gt;
&lt;pre id=&quot;code_1682261533250&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# start : 시작, up : 생성 및 실행 , d 옵션 : detach모드 즉, 백그라운드 실행
docker compose up [-d]  

# 지금 위치한 디렉토리 대상 도커컴포즈 파일 기준으로 프로세스 목록 조회
docker compose ps

# 개수 설정
docker compose scale mysql=2

# stop : 중지, down : =rm, 중지 및 삭제
docker compose down&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 300px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style8&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 33.7209%; text-align: center; height: 20px;&quot;&gt;&lt;b&gt;명령어&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 66.2791%; text-align: center; height: 20px;&quot;&gt;&lt;b&gt;설명&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 33.7209%; height: 20px;&quot;&gt;up&lt;/td&gt;
&lt;td style=&quot;width: 66.2791%; height: 20px;&quot;&gt;컨테이너 생성/시작&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 33.7209%; height: 20px;&quot;&gt;ps&lt;/td&gt;
&lt;td style=&quot;width: 66.2791%; height: 20px;&quot;&gt;컨테이너 목록 표시&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 33.7209%; height: 20px;&quot;&gt;logs&lt;/td&gt;
&lt;td style=&quot;width: 66.2791%; height: 20px;&quot;&gt;컨테이너 로그 출력&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 33.7209%; height: 20px;&quot;&gt;run&lt;/td&gt;
&lt;td style=&quot;width: 66.2791%; height: 20px;&quot;&gt;컨테이너 실행&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 33.7209%; height: 20px;&quot;&gt;start&lt;/td&gt;
&lt;td style=&quot;width: 66.2791%; height: 20px;&quot;&gt;컨테이너 시작&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 33.7209%; height: 20px;&quot;&gt;stop&lt;/td&gt;
&lt;td style=&quot;width: 66.2791%; height: 20px;&quot;&gt;컨테이너 정지&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 33.7209%; height: 20px;&quot;&gt;restart&lt;/td&gt;
&lt;td style=&quot;width: 66.2791%; height: 20px;&quot;&gt;컨테이너 재시작&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 33.7209%; height: 20px;&quot;&gt;pause&lt;/td&gt;
&lt;td style=&quot;width: 66.2791%; height: 20px;&quot;&gt;컨테이너 일시 정지&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 33.7209%; height: 20px;&quot;&gt;unpause&lt;/td&gt;
&lt;td style=&quot;width: 66.2791%; height: 20px;&quot;&gt;컨테이너 재개&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 33.7209%; height: 20px;&quot;&gt;port&lt;/td&gt;
&lt;td style=&quot;width: 66.2791%; height: 20px;&quot;&gt;공개 포트 번호 표시&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 33.7209%; height: 20px;&quot;&gt;config&lt;/td&gt;
&lt;td style=&quot;width: 66.2791%; height: 20px;&quot;&gt;구성 확인 (yaml 파일 문법 체크&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 33.7209%; height: 20px;&quot;&gt;kill&lt;/td&gt;
&lt;td style=&quot;width: 66.2791%; height: 20px;&quot;&gt;실행 중인 컨테이너 강제 정지&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 33.7209%; height: 20px;&quot;&gt;rm&lt;/td&gt;
&lt;td style=&quot;width: 66.2791%; height: 20px;&quot;&gt;컨테이너 삭제&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 33.7209%; height: 20px;&quot;&gt;down&lt;/td&gt;
&lt;td style=&quot;width: 66.2791%; height: 20px;&quot;&gt;리소스 삭제&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 33.7209%;&quot;&gt;-f&lt;/td&gt;
&lt;td style=&quot;width: 66.2791%;&quot;&gt;다른 폴더에 있는 yaml파일을 실행하고 싶을 때 사용하는 옵션&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 33.7209%;&quot;&gt;scale 서비스이름=개수&lt;/td&gt;
&lt;td style=&quot;width: 66.2791%;&quot;&gt;해당 서비스 개수를 설정&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 id=&quot; 6-1.-컨테이너-사용하기--이론&quot; style=&quot;text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt; 10-2. 빌드에서 운영까지 : 실습&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;0️⃣ 도커 컴포즈 플러그인 설치&lt;/b&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1682265573628&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Install the Compose plugin&quot; data-og-description=&quot; &quot; data-og-host=&quot;docs.docker.com&quot; data-og-source-url=&quot;https://docs.docker.com/compose/install/linux/&quot; data-og-url=&quot;https://docs.docker.com/compose/install/linux/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/4FJUW/hySmVex8wM/5PnHUHmQYSS9KzsC8GFIvk/img.png?width=129&amp;amp;height=128&amp;amp;face=0_0_129_128,https://scrap.kakaocdn.net/dn/yXY17/hySoxC62e7/9VQvmB6SHF7N3NDBDR9A8K/img.png?width=950&amp;amp;height=500&amp;amp;face=0_0_950_500&quot;&gt;&lt;a href=&quot;https://docs.docker.com/compose/install/linux/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://docs.docker.com/compose/install/linux/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/4FJUW/hySmVex8wM/5PnHUHmQYSS9KzsC8GFIvk/img.png?width=129&amp;amp;height=128&amp;amp;face=0_0_129_128,https://scrap.kakaocdn.net/dn/yXY17/hySoxC62e7/9VQvmB6SHF7N3NDBDR9A8K/img.png?width=950&amp;amp;height=500&amp;amp;face=0_0_950_500');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Install the Compose plugin&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;docs.docker.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;pre id=&quot;code_1682265494094&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo apt-get update
sudo apt-get install docker-compose-plugin&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;595&quot; data-origin-height=&quot;40&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ZN9ep/btscfzCOmmB/Nwsj42sZSBOuOJ4hcnq9pK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ZN9ep/btscfzCOmmB/Nwsj42sZSBOuOJ4hcnq9pK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ZN9ep/btscfzCOmmB/Nwsj42sZSBOuOJ4hcnq9pK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FZN9ep%2FbtscfzCOmmB%2FNwsj42sZSBOuOJ4hcnq9pK%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;595&quot; height=&quot;40&quot; data-origin-width=&quot;595&quot; data-origin-height=&quot;40&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style2&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기 실습 부분은 도커에서 제공하는 자료와 함께 실습&lt;/p&gt;
&lt;figure id=&quot;og_1682267417337&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Try Docker Compose&quot; data-og-description=&quot; &quot; data-og-host=&quot;docs.docker.com&quot; data-og-source-url=&quot;https://docs.docker.com/compose/gettingstarted/&quot; data-og-url=&quot;https://docs.docker.com/compose/gettingstarted/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bWTpsp/hySmZnItDa/yI0xVpMwyKuXOkHUIkPDP1/img.png?width=129&amp;amp;height=128&amp;amp;face=0_0_129_128,https://scrap.kakaocdn.net/dn/cjYMFY/hySm3XV550/y2qNCt3AE3FgbAZq3hRCKk/img.png?width=950&amp;amp;height=500&amp;amp;face=0_0_950_500,https://scrap.kakaocdn.net/dn/cq6qYN/hySm7F3L9E/9XsQVbPrM8x3UQpFImPr30/img.png?width=936&amp;amp;height=622&amp;amp;face=0_0_936_622&quot;&gt;&lt;a href=&quot;https://docs.docker.com/compose/gettingstarted/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://docs.docker.com/compose/gettingstarted/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bWTpsp/hySmZnItDa/yI0xVpMwyKuXOkHUIkPDP1/img.png?width=129&amp;amp;height=128&amp;amp;face=0_0_129_128,https://scrap.kakaocdn.net/dn/cjYMFY/hySm3XV550/y2qNCt3AE3FgbAZq3hRCKk/img.png?width=950&amp;amp;height=500&amp;amp;face=0_0_950_500,https://scrap.kakaocdn.net/dn/cq6qYN/hySm7F3L9E/9XsQVbPrM8x3UQpFImPr30/img.png?width=936&amp;amp;height=622&amp;amp;face=0_0_936_622');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Try Docker Compose&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;docs.docker.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1️⃣ 서비스 디렉토리 생성 및 파일 생성&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;서비스 디렉토리 생성&lt;/p&gt;
&lt;pre id=&quot;code_1682265242982&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;mkdir composetest
cd composetest&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;390&quot; data-origin-height=&quot;39&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/czpTqI/btsca0UWFAm/ezz5MQqb5wLtEvN4mgXEK0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/czpTqI/btsca0UWFAm/ezz5MQqb5wLtEvN4mgXEK0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/czpTqI/btsca0UWFAm/ezz5MQqb5wLtEvN4mgXEK0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FczpTqI%2Fbtsca0UWFAm%2Fezz5MQqb5wLtEvN4mgXEK0%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;390&quot; height=&quot;39&quot; data-origin-width=&quot;390&quot; data-origin-height=&quot;39&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;실습용 예시 파일 app.py&lt;/p&gt;
&lt;pre id=&quot;code_1682267525438&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;cat &amp;gt; app.py&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1682267470767&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import time

import redis
from flask import Flask

app = Flask(__name__)
cache = redis.Redis(host='redis', port=6379)

def get_hit_count():
    retries = 5
    while True:
        try:
            return cache.incr('hits')
        except redis.exceptions.ConnectionError as exc:
            if retries == 0:
                raise exc
            retries -= 1
            time.sleep(0.5)

@app.route('/')
def hello():
    count = get_hit_count()
    return 'Hello World! I have been seen {} times.\n'.format(count)&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;624&quot; data-origin-height=&quot;477&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b738cJ/btsbT2mm26r/YJFHKHkiKTiFw3PAptX2oK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b738cJ/btsbT2mm26r/YJFHKHkiKTiFw3PAptX2oK/img.png&quot; data-alt=&quot;끝에 ^C는 종료로 눌리는 것으로 내용에는 포함되지 않음&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b738cJ/btsbT2mm26r/YJFHKHkiKTiFw3PAptX2oK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb738cJ%2FbtsbT2mm26r%2FYJFHKHkiKTiFw3PAptX2oK%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;624&quot; height=&quot;477&quot; data-origin-width=&quot;624&quot; data-origin-height=&quot;477&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;끝에 ^C는 종료로 눌리는 것으로 내용에는 포함되지 않음&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;실습용 파일 requirements.txt&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;539&quot; data-origin-height=&quot;75&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/qC1E7/btscfAIufPS/KtMHI2j0PBMiiFAjmkETb1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/qC1E7/btscfAIufPS/KtMHI2j0PBMiiFAjmkETb1/img.png&quot; data-alt=&quot;끝에 ^C는 종료로 눌리는 것으로 내용에는 포함되지 않음&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/qC1E7/btscfAIufPS/KtMHI2j0PBMiiFAjmkETb1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FqC1E7%2FbtscfAIufPS%2FKtMHI2j0PBMiiFAjmkETb1%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;539&quot; height=&quot;75&quot; data-origin-width=&quot;539&quot; data-origin-height=&quot;75&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;끝에 ^C는 종료로 눌리는 것으로 내용에는 포함되지 않음&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style2&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2️⃣ &lt;b&gt;빌드를 위한 dockerfile 생성&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;파일 생성&lt;/p&gt;
&lt;pre id=&quot;code_1682265260378&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;cat &amp;gt; Dockerfile&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;파일 작성&lt;/p&gt;
&lt;pre id=&quot;code_1682266120343&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;FROM python:3.7-alpine
WORKDIR /code
ENV FLASK_APP=app.py
ENV FLASK_RUN_HOST=0.0.0.0
RUN apk add --no-cache gcc musl-dev linux-headers
COPY requirements.txt requirements.txt
RUN pip install -r requirements.txt
EXPOSE 5000
COPY . .
CMD [&quot;flask&quot;,&quot;run&quot;]
# 다음줄에서 crtl+c하면 저장 및 종료&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;파일 조회&lt;/p&gt;
&lt;pre id=&quot;code_1682266614945&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# &amp;gt; 리다이렉션이 들어가면 덮어쓰기가 되므로 빼주면 조회가능
cat Dockerfile&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;571&quot; data-origin-height=&quot;439&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dxYh2S/btsbV7OdD06/kF27WKJRQwbAjkRL5ZyWMk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dxYh2S/btsbV7OdD06/kF27WKJRQwbAjkRL5ZyWMk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dxYh2S/btsbV7OdD06/kF27WKJRQwbAjkRL5ZyWMk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdxYh2S%2FbtsbV7OdD06%2FkF27WKJRQwbAjkRL5ZyWMk%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;571&quot; height=&quot;439&quot; data-origin-width=&quot;571&quot; data-origin-height=&quot;439&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;명령어 분석&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 237px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;명령어&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;설명&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;FROM&amp;nbsp;python:3.7-alpine&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;python:3.7-alpine 이미지를 베이스로 사용&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;WORKDIR&amp;nbsp;/code&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;작업 디렉토리는 현재위치의 code라는 폴더를 사용&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;ENV&amp;nbsp;FLASK_APP=app.py&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;환경변수 FLASK_APP 에 app.py할당&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;ENV&amp;nbsp;FLASK_RUN_HOST=0.0.0.0&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;환경변수 FLASK_RUN_HOST에 0.0.0.0 할당&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 17px;&quot;&gt;RUN&amp;nbsp;apk&amp;nbsp;add&amp;nbsp;--no-cache&amp;nbsp;gcc&amp;nbsp;musl-dev&amp;nbsp;linux-headers&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 17px;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 40px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 40px;&quot;&gt;COPY&amp;nbsp;requirements.txt&amp;nbsp;requirements.txt&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 40px;&quot;&gt;호스트의 requirements.txt 파일을 컨테이너 작업 디렉토리인 code 에 복사&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;RUN&amp;nbsp;pip&amp;nbsp;install&amp;nbsp;-r&amp;nbsp;requirements.txt&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;requirements.txt 내부 요소를 읽어 pip 인스톨을 진행&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;EXPOSE&amp;nbsp;5000&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;5000포트를 개방&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;COPY . .&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;현재 . 디렉토리를 컨테이너의 . 디렉토리로 모두 복사&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;CMD&amp;nbsp;[&quot;flask&quot;,&quot;run&quot;]&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;복사한 코드를 flask로 실행하는 명령어&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style2&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3️⃣ &lt;b&gt;docker-compose.yml 생성&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;docker-compose.yml 생성&lt;/p&gt;
&lt;pre id=&quot;code_1682266150815&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;cat &amp;gt; docker-compose.yml&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;내용 작성&lt;/p&gt;
&lt;pre id=&quot;code_1682266201868&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;version: &quot;3&quot;
services:
  web:
    build: .
    ports:
      - &quot;5000:5000&quot;
  
  redis:
    image: &quot;redis:alpine&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;572&quot; data-origin-height=&quot;208&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/yQUuv/btscfBm6l4S/js55aY7Zb768PiLjkHkTxK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/yQUuv/btscfBm6l4S/js55aY7Zb768PiLjkHkTxK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/yQUuv/btscfBm6l4S/js55aY7Zb768PiLjkHkTxK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FyQUuv%2FbtscfBm6l4S%2Fjs55aY7Zb768PiLjkHkTxK%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;572&quot; height=&quot;208&quot; data-origin-width=&quot;572&quot; data-origin-height=&quot;208&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style2&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4️⃣ &lt;b&gt;docker-compose 명령어&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;컴포즈를 실행 (** 컴포즈 파일명이 docker-compose.yml 아니라면 -f 옵션을 통해 파일 이름을 정확하게 적어야함)&lt;/p&gt;
&lt;pre id=&quot;code_1682266215500&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;docker compose up&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1104&quot; data-origin-height=&quot;809&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Ivf9b/btscfz3THMp/GDWkmEFZoKQ7k8I3PkmokK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Ivf9b/btscfz3THMp/GDWkmEFZoKQ7k8I3PkmokK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Ivf9b/btscfz3THMp/GDWkmEFZoKQ7k8I3PkmokK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FIvf9b%2Fbtscfz3THMp%2FGDWkmEFZoKQ7k8I3PkmokK%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;1104&quot; height=&quot;809&quot; data-origin-width=&quot;1104&quot; data-origin-height=&quot;809&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;578&quot; data-origin-height=&quot;187&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bnk1PN/btsbSOIWlj7/GcpgthS7mU8kIkH7hbx5QK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bnk1PN/btsbSOIWlj7/GcpgthS7mU8kIkH7hbx5QK/img.png&quot; data-alt=&quot;6번 들어갔더니 6번 카운팅 됨&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bnk1PN/btsbSOIWlj7/GcpgthS7mU8kIkH7hbx5QK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbnk1PN%2FbtsbSOIWlj7%2FGcpgthS7mU8kIkH7hbx5QK%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;578&quot; height=&quot;187&quot; data-origin-width=&quot;578&quot; data-origin-height=&quot;187&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;6번 들어갔더니 6번 카운팅 됨&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style2&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;5️⃣ docker-compose 확인&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1682268346073&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 현재 컴포즈파일로 인해 실행된 프로세스 목록 조회
docker compose ps&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1360&quot; data-origin-height=&quot;78&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/6jqPU/btscoERdhqc/H46ip9ZwVW1zFUzSX93Do1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/6jqPU/btscoERdhqc/H46ip9ZwVW1zFUzSX93Do1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/6jqPU/btscoERdhqc/H46ip9ZwVW1zFUzSX93Do1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F6jqPU%2FbtscoERdhqc%2FH46ip9ZwVW1zFUzSX93Do1%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;1360&quot; height=&quot;78&quot; data-origin-width=&quot;1360&quot; data-origin-height=&quot;78&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style2&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;6️⃣기존 docker-compose를 중간에 수정하려면&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;일단 기존 컨테이너들을 중지하고 삭제&lt;/p&gt;
&lt;pre id=&quot;code_1682268465423&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;docker compose down&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;비쥬얼 에디터로 compose 파일 수정&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;컨테이너에 있는 파일을 호스트랑 볼륨마운트해서 호스트에서 수정해보기 위한 볼륨 마운트&lt;/p&gt;
&lt;pre id=&quot;code_1682268631560&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;version: &quot;3&quot;
services:
  web:
    build: .
    ports:
      - &quot;5000:5000&quot;
    volumes:
      - .:/code
    environment:
      FLASK_ENV: development
  
  redis:
    image: &quot;redis:alpine&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;294&quot; data-origin-height=&quot;257&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bqKfg3/btscjj7HgdJ/AKmJst627KwB77zYaASNuK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bqKfg3/btscjj7HgdJ/AKmJst627KwB77zYaASNuK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bqKfg3/btscjj7HgdJ/AKmJst627KwB77zYaASNuK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbqKfg3%2Fbtscjj7HgdJ%2FAKmJst627KwB77zYaASNuK%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;294&quot; height=&quot;257&quot; data-origin-width=&quot;294&quot; data-origin-height=&quot;257&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;수정하고 다시 up&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1286&quot; data-origin-height=&quot;155&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/tjGk6/btscoCy5V6E/Dcr7EkgXsNzJS6Ae1uHrJ0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/tjGk6/btscoCy5V6E/Dcr7EkgXsNzJS6Ae1uHrJ0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/tjGk6/btscoCy5V6E/Dcr7EkgXsNzJS6Ae1uHrJ0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FtjGk6%2FbtscoCy5V6E%2FDcr7EkgXsNzJS6Ae1uHrJ0%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;1286&quot; height=&quot;155&quot; data-origin-width=&quot;1286&quot; data-origin-height=&quot;155&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 호스트의 디렉토리에 마운트했으니 호스트의 app.py를 바로 수정해서 적용되는 지를 확인해보자&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;648&quot; data-origin-height=&quot;58&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/qgaJW/btscoEXYDJg/rccEUpH9ow7IRzTRYRophk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/qgaJW/btscoEXYDJg/rccEUpH9ow7IRzTRYRophk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/qgaJW/btscoEXYDJg/rccEUpH9ow7IRzTRYRophk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FqgaJW%2FbtscoEXYDJg%2FrccEUpH9ow7IRzTRYRophk%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;648&quot; height=&quot;58&quot; data-origin-width=&quot;648&quot; data-origin-height=&quot;58&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;655&quot; data-origin-height=&quot;463&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/xbLWA/btscjjfyCac/nV0XvWKMAHEK2tXUpw7MG1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/xbLWA/btscjjfyCac/nV0XvWKMAHEK2tXUpw7MG1/img.png&quot; data-alt=&quot;World &amp;amp;gt; Docker로 변경&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/xbLWA/btscjjfyCac/nV0XvWKMAHEK2tXUpw7MG1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FxbLWA%2FbtscjjfyCac%2FnV0XvWKMAHEK2tXUpw7MG1%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;655&quot; height=&quot;463&quot; data-origin-width=&quot;655&quot; data-origin-height=&quot;463&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;World &amp;gt; Docker로 변경&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;460&quot; data-origin-height=&quot;173&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b5YHbe/btscjj0Vqla/PKrAVRwda4OVGCBKZtlL40/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b5YHbe/btscjj0Vqla/PKrAVRwda4OVGCBKZtlL40/img.png&quot; data-alt=&quot;이전&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b5YHbe/btscjj0Vqla/PKrAVRwda4OVGCBKZtlL40/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb5YHbe%2Fbtscjj0Vqla%2FPKrAVRwda4OVGCBKZtlL40%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;460&quot; height=&quot;173&quot; data-origin-width=&quot;460&quot; data-origin-height=&quot;173&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;이전&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;518&quot; data-origin-height=&quot;186&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/kCQD2/btsbVbpDzLY/pzA8TQb3ep5RYVVhtQgA1K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/kCQD2/btsbVbpDzLY/pzA8TQb3ep5RYVVhtQgA1K/img.png&quot; data-alt=&quot;이후&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/kCQD2/btsbVbpDzLY/pzA8TQb3ep5RYVVhtQgA1K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FkCQD2%2FbtsbVbpDzLY%2FpzA8TQb3ep5RYVVhtQgA1K%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;518&quot; height=&quot;186&quot; data-origin-width=&quot;518&quot; data-origin-height=&quot;186&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;이후&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style2&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;7️⃣ 개수를 조절해보자&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1364&quot; data-origin-height=&quot;76&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/AGSh9/btsb2UHCsYd/KkUWQzBUjIYWsX9JjxKUX1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/AGSh9/btsb2UHCsYd/KkUWQzBUjIYWsX9JjxKUX1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/AGSh9/btsb2UHCsYd/KkUWQzBUjIYWsX9JjxKUX1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FAGSh9%2Fbtsb2UHCsYd%2FKkUWQzBUjIYWsX9JjxKUX1%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;1364&quot; height=&quot;76&quot; data-origin-width=&quot;1364&quot; data-origin-height=&quot;76&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1682269223812&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 현재 scale 명령어는 비활성화 되었고
docker compose scale redis=3

# up의 옵션으로 사용해야한다
docker compose up --scale redis=3&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1366&quot; data-origin-height=&quot;232&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bVq2kJ/btsbT2s85oE/63IZxsuVQSXJQYIG2U7v2K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bVq2kJ/btsbT2s85oE/63IZxsuVQSXJQYIG2U7v2K/img.png&quot; data-alt=&quot;redis 서비스가 3개로 늘어난걸 볼 수있다&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bVq2kJ/btsbT2s85oE/63IZxsuVQSXJQYIG2U7v2K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbVq2kJ%2FbtsbT2s85oE%2F63IZxsuVQSXJQYIG2U7v2K%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;1366&quot; height=&quot;232&quot; data-origin-width=&quot;1366&quot; data-origin-height=&quot;232&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;redis 서비스가 3개로 늘어난걸 볼 수있다&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 명령어를 통해 그때그때 사용자의 수에 따라 scale out, scale in을 해줄 수 있다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;  다만, 포트포워딩된 경우는 정해진 포트를 쓰기 때문에 확장이 불가능, 다른 포트 사용해야함&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style2&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;8️⃣ 추가 명령어&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;run을 이용하면 서브 명령어 전달 가능&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래는 web 컨테이너에 env 명령어로 환경변수 보여달라는 의미&lt;/p&gt;
&lt;pre id=&quot;code_1682269845460&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# docker compose run [OPTIONS] SERVICE [COMMAND] [ARGS...]
docker compose run web env&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1036&quot; data-origin-height=&quot;286&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bLcT2X/btsbTwnG7oG/omHfj9SuKJp89zOg236voK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bLcT2X/btsbTwnG7oG/omHfj9SuKJp89zOg236voK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bLcT2X/btsbTwnG7oG/omHfj9SuKJp89zOg236voK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbLcT2X%2FbtsbTwnG7oG%2FomHfj9SuKJp89zOg236voK%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;1036&quot; height=&quot;286&quot; data-origin-width=&quot;1036&quot; data-origin-height=&quot;286&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;해당 컨테이너 로그 보기&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1682270046034&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;docker compose logs web&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1292&quot; data-origin-height=&quot;802&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cH7Zng/btsb5lkOX4L/0cG8inBABgzUbgBk42QDYk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cH7Zng/btsb5lkOX4L/0cG8inBABgzUbgBk42QDYk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cH7Zng/btsb5lkOX4L/0cG8inBABgzUbgBk42QDYk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcH7Zng%2Fbtsb5lkOX4L%2F0cG8inBABgzUbgBk42QDYk%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;1292&quot; height=&quot;802&quot; data-origin-width=&quot;1292&quot; data-origin-height=&quot;802&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style2&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;9️⃣ 종료 및 삭제&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1682270144638&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 종료
docker compose stop

# 종료 및 삭제
docker compose down

# --volumes 옵션까지 넣으면 컴포즈로 인해 생성된 볼륨까지도 모두 삭제
docker compose down --volumes&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style2&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;  또 다른 예시&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;워드프레스랑 mysql이랑 연동해보는 예시&lt;/p&gt;
&lt;figure id=&quot;og_1682270485322&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;WordPress samples&quot; data-og-description=&quot; &quot; data-og-host=&quot;docs.docker.com&quot; data-og-source-url=&quot;https://docs.docker.com/samples/wordpress/&quot; data-og-url=&quot;https://docs.docker.com/samples/wordpress/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/zq3OH/hySm1eM8vB/VMcZmN1XwVBCXk0GyNdMrK/img.png?width=129&amp;amp;height=128&amp;amp;face=0_0_129_128,https://scrap.kakaocdn.net/dn/Ve7eG/hySoE3jQia/IkrEtjh5kNW7YU6HGKerkk/img.png?width=950&amp;amp;height=500&amp;amp;face=0_0_950_500&quot;&gt;&lt;a href=&quot;https://docs.docker.com/samples/wordpress/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://docs.docker.com/samples/wordpress/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/zq3OH/hySm1eM8vB/VMcZmN1XwVBCXk0GyNdMrK/img.png?width=129&amp;amp;height=128&amp;amp;face=0_0_129_128,https://scrap.kakaocdn.net/dn/Ve7eG/hySoE3jQia/IkrEtjh5kNW7YU6HGKerkk/img.png?width=950&amp;amp;height=500&amp;amp;face=0_0_950_500');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;WordPress samples&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;docs.docker.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1) 서비스 디렉토리 생성&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;408&quot; data-origin-height=&quot;37&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/nSnHN/btscjkrZGfH/okxmXjcyL3XLbk0lxf0uEK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/nSnHN/btscjkrZGfH/okxmXjcyL3XLbk0lxf0uEK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/nSnHN/btscjkrZGfH/okxmXjcyL3XLbk0lxf0uEK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FnSnHN%2FbtscjkrZGfH%2FokxmXjcyL3XLbk0lxf0uEK%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;408&quot; height=&quot;37&quot; data-origin-width=&quot;408&quot; data-origin-height=&quot;37&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2) docker-compose.yml 생성&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;705&quot; data-origin-height=&quot;645&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/CklUR/btsb5lE7EWK/8kvOcqCKKd47ED3zuX3fAK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/CklUR/btsb5lE7EWK/8kvOcqCKKd47ED3zuX3fAK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/CklUR/btsb5lE7EWK/8kvOcqCKKd47ED3zuX3fAK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FCklUR%2Fbtsb5lE7EWK%2F8kvOcqCKKd47ED3zuX3fAK%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;705&quot; height=&quot;645&quot; data-origin-width=&quot;705&quot; data-origin-height=&quot;645&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3) compose 실행 확인&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1434&quot; data-origin-height=&quot;437&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cd5SBH/btsbUQsrnYf/jfLqFmAtsvMQFHrThKvJT1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cd5SBH/btsbUQsrnYf/jfLqFmAtsvMQFHrThKvJT1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cd5SBH/btsbUQsrnYf/jfLqFmAtsvMQFHrThKvJT1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcd5SBH%2FbtsbUQsrnYf%2FjfLqFmAtsvMQFHrThKvJT1%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;1434&quot; height=&quot;437&quot; data-origin-width=&quot;1434&quot; data-origin-height=&quot;437&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;829&quot; data-origin-height=&quot;585&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cDEAJs/btsb2Tvcm7V/53gRv06vxhXErZbld5UcYK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cDEAJs/btsb2Tvcm7V/53gRv06vxhXErZbld5UcYK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cDEAJs/btsb2Tvcm7V/53gRv06vxhXErZbld5UcYK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcDEAJs%2Fbtsb2Tvcm7V%2F53gRv06vxhXErZbld5UcYK%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;829&quot; height=&quot;585&quot; data-origin-width=&quot;829&quot; data-origin-height=&quot;585&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>DevOps/Docker</category>
      <category>Docker</category>
      <author>littlezero48</author>
      <guid isPermaLink="true">https://littlezero48.tistory.com/428</guid>
      <comments>https://littlezero48.tistory.com/428#entry428comment</comments>
      <pubDate>Sun, 23 Apr 2023 23:19:19 +0900</pubDate>
    </item>
    <item>
      <title>따배도 도커 시리즈 9] 컨테이너간 통신(네트워크)</title>
      <link>https://littlezero48.tistory.com/427</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt; &amp;nbsp;&lt;span style=&quot;color: #ef5369;&quot;&gt;&lt;b&gt;공부 계기&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #ef5369;&quot;&gt;&lt;b&gt;추가적인 도커 공부를 위해 유튜브 따배도 도커 시리즈를 보면서 정리해 봅니다.&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;color: #ef5369;&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div id=&quot;book-toc&quot; style=&quot;color: #333333; text-align: start;&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;목차&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;/div&gt;
&lt;h3 id=&quot; 6-1.-컨테이너-사용하기--이론&quot; style=&quot;text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt; 9-1. 컨테이너 간 통신 (네트워크) : 이론&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1️⃣ 컨테이너는 어떻게 통신하나요?&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;* 컨테이너를 생성하게 되면 컨테이너는 Net namespace&lt;sup class=&quot;footnote&quot;&gt;&lt;a href=&quot;#footnote_427_1&quot; id=&quot;footnote_link_427_1&quot; onmouseover=&quot;tistoryFootnote.show(this, 427, 1)&quot; onmouseout=&quot;tistoryFootnote.hide(427, 1)&quot; style=&quot;color:#f9650d; font-family: Verdana, Sans-serif; display: inline;&quot;&gt;&lt;span style=&quot;display: none;&quot;&gt;[각주:&lt;/span&gt;1&lt;span style=&quot;display: none;&quot;&gt;]&lt;/span&gt;&lt;/a&gt;&lt;/sup&gt;라는 기술을 통해서 구현된 가상화로 각자 독립된 네트워크 공간을 할당 받는다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;컨테이너의 네트워크 모델&amp;nbsp;&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;508&quot; data-origin-height=&quot;642&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/vkV51/btsb5ldsSOf/i1K7mDEKFipl3iRWOxPBU0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/vkV51/btsb5ldsSOf/i1K7mDEKFipl3iRWOxPBU0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/vkV51/btsb5ldsSOf/i1K7mDEKFipl3iRWOxPBU0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FvkV51%2Fbtsb5ldsSOf%2Fi1K7mDEKFipl3iRWOxPBU0%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;508&quot; height=&quot;642&quot; data-origin-width=&quot;508&quot; data-origin-height=&quot;642&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;① 컨테이너를 생성시 &lt;b&gt;eth0라는 네트워크 인터페이스를 컨테이너에 할당&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;② 그와 동시에 &lt;b&gt;호스트에도 veth(virtual ethernet)라는 네트워크 인터페이스가 할당&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;③ 이 veth를 통해 컨테이너의 eth0 인터페이스와 &lt;b&gt;서로 통신&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;④ 그리고 &lt;b&gt;호스트 veth는 docker0과 바인딩&lt;/b&gt;되고&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;⑤&lt;b&gt; docker0는 호스트의 eth0 인터페이스 연결&lt;/b&gt;되어&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;⑥ 외부로부터 들어온 요청을 연결&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #333333;&quot;&gt;* ethernet 이란?&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;컴퓨터 네트워크 방식으로 가정이나 건물과 같은 로컬 환경(LAN)에서 가장 많이 활용되는 기술 규격이다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: justify;&quot;&gt;이더넷은 OSI 모델의 물리 계층에서 신호와 배선, 데이터 링크 계층에서 MAC(media access control)패킷과 프로토콜의 형식을 정의한다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;text-align: start;&quot;&gt;네트워크에 연결된 각 기기들이 48비트 길이의 고유의&amp;nbsp;&lt;/span&gt;MAC 주소&lt;span style=&quot;text-align: start;&quot;&gt;를 가지고 이 주소를 이용해 상호간에 데이터를 주고 받을 수 있도록 만들어져 있다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;* docker0 란?&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;docker0 인터페이스는 호스트의 eth0 인터페이스와 컨테이너 eth0 사이의 중재자 역할, 연결 다리 역할을 하는 가상 브릿지로 도커를 설치하면 도커 내부로직에 의해 자동으로 설정되며, 자동으로 IP를 할당받게 된다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(기본 172.17.X.X로 시작하며 netmask는 255.255.0.0으로 설정&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;* veth (virtual ethenet) 란?&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;컨테이너 생성시 도커가 자동으로 생성해주는 가상의 네트워크 인터페이스로, 항상 쌍으로 생성된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하나는 vethxxxx 라는 이름으로 호스트에 생성되어 docker0에 바인딩 되는 것 하나와&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;eth0라는 이름으로 컨테이너 내부에 생성되어 veth와 연결하는 것 하나를 생성한다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;그래서 컨테이너 네트워크는&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- virtual ethernet bridge : 172.17.0.0/16&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- L2&lt;sup class=&quot;footnote&quot;&gt;&lt;a href=&quot;#footnote_427_2&quot; id=&quot;footnote_link_427_2&quot; onmouseover=&quot;tistoryFootnote.show(this, 427, 2)&quot; onmouseout=&quot;tistoryFootnote.hide(427, 2)&quot; style=&quot;color:#f9650d; font-family: Verdana, Sans-serif; display: inline;&quot;&gt;&lt;span style=&quot;display: none;&quot;&gt;[각주:&lt;/span&gt;2&lt;span style=&quot;display: none;&quot;&gt;]&lt;/span&gt;&lt;/a&gt;&lt;/sup&gt; 통신기반&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- container 생성 시 veth 인터페이스 생성 (sandbox)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 모든 컨테이너는 외부 통신을 docker0 통해 진행&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- container running시 172.17.X.Y로 IP 주소할당&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1) 이더넷 ip 주소 조회&lt;/p&gt;
&lt;pre id=&quot;code_1682165183167&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;ip address&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1068&quot; data-origin-height=&quot;507&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/VWxYf/btsbTpBHQ8l/sFrjrpVNJpu94Pq0dgxPp0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/VWxYf/btsbTpBHQ8l/sFrjrpVNJpu94Pq0dgxPp0/img.png&quot; data-alt=&quot;docker0에 컨테이너 돌리니까 veth까지 보인다&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/VWxYf/btsbTpBHQ8l/sFrjrpVNJpu94Pq0dgxPp0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FVWxYf%2FbtsbTpBHQ8l%2FsFrjrpVNJpu94Pq0dgxPp0%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;1068&quot; height=&quot;507&quot; data-origin-width=&quot;1068&quot; data-origin-height=&quot;507&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;docker0에 컨테이너 돌리니까 veth까지 보인다&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;** wsl2 환경에서는 별도로 bridge 기능을 활성화 하지 않으면 docker0이 보이지 않는다고 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style2&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2️⃣ 컨테이너 포트를 외부로 노출할 수 있어요?&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Port Forwarding 을 통해 포트를 외부로 노출시킬 수 있다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1682167923650&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;docker run [-p 호스트포트:컨테이너포트] &amp;lt;이미지명:태그&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;840&quot; data-origin-height=&quot;637&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bybpeD/btscjjzPPOF/4GRwR9U87ij9WkZDKio3c1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bybpeD/btscjjzPPOF/4GRwR9U87ij9WkZDKio3c1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bybpeD/btscjjzPPOF/4GRwR9U87ij9WkZDKio3c1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbybpeD%2FbtscjjzPPOF%2F4GRwR9U87ij9WkZDKio3c1%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;840&quot; height=&quot;637&quot; data-origin-width=&quot;840&quot; data-origin-height=&quot;637&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;iptables rule을 통해 포트 노출이 가능한데 포트포워딩을 하면 방화벽 룰이 만들어져 연결 가능&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래 명령어로 포트포워딩 된거 확인 가능&lt;/p&gt;
&lt;pre id=&quot;code_1682166808725&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;iptables -t nat -L -n -v&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1085&quot; data-origin-height=&quot;463&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bOS1xZ/btsbUQFo0Pt/KRriMM1mk6q9Wzf0ssFhj0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bOS1xZ/btsbUQFo0Pt/KRriMM1mk6q9Wzf0ssFhj0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bOS1xZ/btsbUQFo0Pt/KRriMM1mk6q9Wzf0ssFhj0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbOS1xZ%2FbtsbUQFo0Pt%2FKRriMM1mk6q9Wzf0ssFhj0%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;1085&quot; height=&quot;463&quot; data-origin-width=&quot;1085&quot; data-origin-height=&quot;463&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;* 80포트를 열고있는 컨테이너들이 여러개인 것은 가능 하나 호스트의 eth0 에 80포트로 연결될 수 있는 건 하나. 컨테이너 끼리는 ip가 달라서 포트가 80포트로 같아도 각자의 포트라 상관없지만 연결되는 호스트의 포트 80은 단 하나만 존재하기 때문이다. 그러므로 nginx를 여러개 연결해주고 싶다면, 80포트가 아닌 다른 포트로 연결시키면 된다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;* 포트끼리는 꼭 같은 포트로 일치시킬 필요 없다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;* 호스트 포트 중 사용하지 않고 있는 포트 중에 랜덤으로 부여하고 싶다면&lt;/p&gt;
&lt;pre id=&quot;code_1682167786619&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 호스트포트는 랜덤으로 지정
docker run [-p 컨테이너포트] &amp;lt;이미지명:태그&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;만약 대문자 P만 한다면 dockerfile에서 expose로 정의하고 있는 포트에 맞춰 랜덤 포트를 설정하게 된다.&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1682167856144&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;docker run -P &amp;lt;이미지명:태그&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style2&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;3️⃣ 컨테이너 네트워크를 추가할 수 있나요?&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;docker0에 할당되는 ip는 원하는대로 static할당이 불가능하다&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그럼 static으로 할당하거나 원하는 ip대역대에 할당하고 싶다면&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;docker0의 대역대를 바꾸거나 유저 정의의 네트워크를 생성하면 가능하다&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;1) &lt;b&gt;네트워크 생성&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1682226644275&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# docker network create [--driver 방식] [--subnet 대역대/사이더] [--gateway ip주소설정] &amp;lt;네트워크명&amp;gt;
docker network create --driver bridge --subnet 192.168.100.0/24 --gateway 192.168.100.254 mynet&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;* driver : bridge 형태의 네트워크나 호스트 또는 non base의 네트워크를 할 것인지 설정 가능&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;* subnet : 서브넷 대역대 설정. 생략하게 되면 docker0에 따른 순서적인 대역대가 설정된다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;* gateway : 컴퓨터 네트워크에서 서로 다른 통신망, 프로토콜을 사용하는 네트워크 간의 통신을 가능하게 하는 컴퓨터나 소프트웨어를 두루 일컫는 말로, 즉 다른 네트워크로 들어가는 입구 역할&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt; ❓&lt;b&gt; IP주소 뒤 /숫자는 뭐지? CIDR (사이더)야! 사이더는 또 뭔데!?&lt;/b&gt;&lt;/p&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #555555; text-align: left;&quot;&gt;정의로 하자면 Classless Inter-Domain Routing 으로 클래스 없는 도메인간 라우팅 기법이라고 한다. &lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #555555; text-align: left;&quot;&gt;(이게 무슨말이야)&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #555555; text-align: left;&quot;&gt;➕&lt;span style=&quot;color: #333333;&quot;&gt; IP에도 클래스가 있단 말이야?&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;사이더를 알기 전에 먼저 IP클래스가 어떻게 나뉘는 지 부터 보자.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #555555; text-align: left;&quot;&gt;1️⃣&lt;span style=&quot;color: #333333;&quot;&gt; &lt;b&gt;A클래스&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #555555; text-align: left;&quot;&gt;맨앞자리 수가 항상 0인 경우로 2진수로 표현하면 &lt;span style=&quot;color: #555555; text-align: left;&quot;&gt;0xxxxxxx.xxxxxxxx.&lt;/span&gt;&lt;span style=&quot;color: #555555; text-align: left;&quot;&gt;xxxxxxxx.&lt;/span&gt;&lt;span style=&quot;color: #555555; text-align: left;&quot;&gt;xxxxxxxx 이다.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;span style=&quot;color: #555555;&quot;&gt;범위는 &lt;span style=&quot;color: #555555; text-align: left;&quot;&gt;00000000.&lt;/span&gt;&lt;span style=&quot;color: #555555; text-align: left;&quot;&gt;00000000.&lt;/span&gt;&lt;span style=&quot;color: #555555; text-align: left;&quot;&gt;00000000.&lt;/span&gt;&lt;span style=&quot;color: #555555; text-align: left;&quot;&gt;00000000 (0.0.0.0) ~ 01111111.11111111.&lt;span style=&quot;color: #555555; text-align: left;&quot;&gt;11111111.&lt;/span&gt;&lt;span style=&quot;color: #555555; text-align: left;&quot;&gt;11111111 (127.255.255.255) 이다.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;p style=&quot;text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #555555; text-align: left;&quot;&gt;&lt;span style=&quot;color: #555555; text-align: left;&quot;&gt;A클래스는 하나의 네트워크가 가장 많은 호스트 수를 가질 수 있는 클래스이며,&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #555555; text-align: left;&quot;&gt;&lt;span style=&quot;color: #555555; text-align: left;&quot;&gt;ip주소 첫 옥테드&lt;sup class=&quot;footnote&quot;&gt;&lt;a href=&quot;#footnote_427_3&quot; id=&quot;footnote_link_427_3&quot; onmouseover=&quot;tistoryFootnote.show(this, 427, 3)&quot; onmouseout=&quot;tistoryFootnote.hide(427, 3)&quot; style=&quot;color:#f9650d; font-family: Verdana, Sans-serif; display: inline;&quot;&gt;&lt;span style=&quot;display: none;&quot;&gt;[각주:&lt;/span&gt;3&lt;span style=&quot;display: none;&quot;&gt;]&lt;/span&gt;&lt;/a&gt;&lt;/sup&gt; 까지를 네트워크 범위로 한다&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #555555; text-align: left;&quot;&gt;&lt;span style=&quot;color: #555555; text-align: left;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;첫 옥테드 붉은 자리는 네트워크 범위, 뒤의 3개의 옥테드 파랑 부분은 호스트 범위&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 17px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 25%; height: 17px; text-align: center;&quot;&gt;&lt;span style=&quot;color: #ef5369;&quot;&gt;00000000&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 25%; height: 17px; text-align: center;&quot;&gt;&lt;span style=&quot;color: #0593d3;&quot;&gt;00000000&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 25%; height: 17px; text-align: center;&quot;&gt;&lt;span style=&quot;color: #0593d3;&quot;&gt;00000000&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 25%; height: 17px; text-align: center;&quot;&gt;&lt;span style=&quot;color: #0593d3;&quot;&gt;00000000&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;네트워크는 첫자리 0은 고정이라 이를 제외하면 2^7개 까지 가능하지만, 127은 루프백주소&lt;sup class=&quot;footnote&quot;&gt;&lt;a href=&quot;#footnote_427_4&quot; id=&quot;footnote_link_427_4&quot; onmouseover=&quot;tistoryFootnote.show(this, 427, 4)&quot; onmouseout=&quot;tistoryFootnote.hide(427, 4)&quot; style=&quot;color:#f9650d; font-family: Verdana, Sans-serif; display: inline;&quot;&gt;&lt;span style=&quot;display: none;&quot;&gt;[각주:&lt;/span&gt;4&lt;span style=&quot;display: none;&quot;&gt;]&lt;/span&gt;&lt;/a&gt;&lt;/sup&gt; &lt;/span&gt;라 제외되야해서 네트워크 번호는 1~126까지 가능하다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;만약 13.0.0.0의 네트워크를 할당 받으면 13부분이 네트워크, 나머지 0.0.0은 호스트 IP로 할당 가능한데&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;이 경우 13.0.0.0은 &lt;b&gt;네트워크 주소&lt;/b&gt; 표현을 위해, 13.255.255.255는 &lt;b&gt;브로드캐스트 주소&lt;/b&gt;로 사용하기 위해 빠지게 되고 이를 제외한 나머지 주소들은 전부 할당할 수 있어서 ip개수의 식이&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;(2^(호스트 2진수 수))-2 개로 위에서는 (2^24)-2개가 된다.&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 57px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style8&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 44.3765%; height: 20px; text-align: center;&quot;&gt;&lt;b&gt;네트워크 개수&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 55.6235%; height: 20px; text-align: center;&quot;&gt;&lt;b&gt;호스트 개수&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 44.3765%; height: 20px; text-align: center;&quot;&gt;2^7 - 1 (앞이 0고정에, 127제외)&lt;/td&gt;
&lt;td style=&quot;width: 55.6235%; height: 20px; text-align: center;&quot;&gt;2^24 - 2&lt;br /&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;(네트워크 주소 0.0.0과 브로드캐스트 주소 255.255.255 제외)&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style2&quot; /&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;2️⃣ &lt;b&gt;B클래스&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;B클래스는 반드시 10으로 시작하며 2진수로 표현하면 &lt;span style=&quot;color: #555555; text-align: left;&quot;&gt;10xxxxxx.xxxxxxxx.&lt;span style=&quot;color: #555555; text-align: left;&quot;&gt;xxxxxxxx.&lt;/span&gt;&lt;span style=&quot;color: #555555; text-align: left;&quot;&gt;xxxxxxxx 된다.&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #555555; text-align: left;&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #555555; text-align: left;&quot;&gt;128.0.0.0 ~ 191&lt;span style=&quot;color: #555555; text-align: left;&quot;&gt;.255.255.255까지의 범위를 지닌다&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #555555; text-align: left;&quot;&gt;&lt;span style=&quot;color: #555555; text-align: left;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #555555; text-align: left;&quot;&gt;&lt;span style=&quot;color: #555555; text-align: left;&quot;&gt;앞이 10으로 고정되어 127 이후의 128 부터 네트워크 범위가 시작.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #555555; text-align: left;&quot;&gt;&lt;span style=&quot;color: #555555; text-align: left;&quot;&gt;네트워크 범위가 두번째 옥테드 까지이다&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 17px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 25%; height: 17px; text-align: center;&quot;&gt;&lt;span style=&quot;color: #ef5369;&quot;&gt;00000000&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 25%; height: 17px; text-align: center;&quot;&gt;&lt;span style=&quot;color: #ef5369;&quot;&gt;00000000&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 25%; height: 17px; text-align: center;&quot;&gt;&lt;span style=&quot;color: #0593d3;&quot;&gt;00000000&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 25%; height: 17px; text-align: center;&quot;&gt;&lt;span style=&quot;color: #0593d3;&quot;&gt;00000000&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;table style=&quot;color: #333333; text-align: start; border-collapse: collapse; width: 100%; height: 40px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style8&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 43.8875%; height: 20px; text-align: center;&quot;&gt;&lt;b&gt;네트워크 개수&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 56.1125%; height: 20px; text-align: center;&quot;&gt;&lt;b&gt;호스트 개수&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 43.8875%; height: 20px; text-align: center;&quot;&gt;2^14 (앞의 10이 고정)&lt;/td&gt;
&lt;td style=&quot;width: 56.1125%; height: 20px; text-align: center;&quot;&gt;2^16 - 2 &lt;br /&gt;(네트워크 주소 0.0.0과 브로드캐스트 주소 255.255.255 제외)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style2&quot; /&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;3️⃣&lt;b&gt; C클래스&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #555555; text-align: left;&quot;&gt;&lt;span style=&quot;color: #555555; text-align: left;&quot;&gt;C클래스는 반드시 110으로 시작하며 2진수로 표현하면 &lt;span style=&quot;color: #555555; text-align: left;&quot;&gt;110xxxxx.xxxxxxxx.&lt;/span&gt;&lt;span style=&quot;color: #555555; text-align: left;&quot;&gt;xxxxxxxx.&lt;/span&gt;&lt;span style=&quot;color: #555555; text-align: left;&quot;&gt;xxxxxxxx&amp;nbsp; 이며&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #555555; text-align: left;&quot;&gt;&lt;span style=&quot;color: #555555; text-align: left;&quot;&gt;&lt;span style=&quot;color: #555555; text-align: left;&quot;&gt;앞이 110으로 고정되어 192.0.0.0 ~ 223.255.255.255 까지의 범위를 갖는다고 한다.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #555555; text-align: left;&quot;&gt;&lt;span style=&quot;color: #555555; text-align: left;&quot;&gt;네트워크 범위가 세번째 옥테드 까지이다&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #555555; text-align: left;&quot;&gt;&lt;span style=&quot;color: #555555; text-align: left;&quot;&gt;네트워크 범위가 가장 크므로 상대적으로 호스트 개수를 가장 적게 가질수 있는 클래스이기도 하다.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 17px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 25%; height: 17px; text-align: center;&quot;&gt;&lt;span style=&quot;color: #ef5369;&quot;&gt;00000000&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 25%; height: 17px; text-align: center;&quot;&gt;&lt;span style=&quot;color: #ef5369;&quot;&gt;00000000&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 25%; height: 17px; text-align: center;&quot;&gt;&lt;span style=&quot;color: #ef5369;&quot;&gt;00000000&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 25%; height: 17px; text-align: center;&quot;&gt;&lt;span style=&quot;color: #0593d3;&quot;&gt;00000000&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;table style=&quot;color: #333333; text-align: start; border-collapse: collapse; width: 100%; height: 40px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style8&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 43.154%; height: 20px; text-align: center;&quot;&gt;&lt;b&gt;네트워크 개수&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 56.846%; height: 20px; text-align: center;&quot;&gt;&lt;b&gt;호스트 개수&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 43.154%; height: 20px; text-align: center;&quot;&gt;2^21 (앞의 110이 고정)&lt;/td&gt;
&lt;td style=&quot;width: 56.846%; height: 20px; text-align: center;&quot;&gt;2^8 - 2&lt;br /&gt;(네트워크 주소 0.0.0과 브로드캐스트 주소 255.255.255 제외)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style2&quot; /&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;클래스가 어떻게 나뉘는지 알아 보았다면 이제 다시 사이더로 돌아와 보자.&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #555555; text-align: left;&quot;&gt;IP주소를 2진수로 된 8비트 4개 블록으로 나누면 총 32개의 자리수가 생긴다&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #555555; text-align: left;&quot;&gt;사이더는 32까지의 수를 사용하는 데 이 말인 즉슨 이 아래 자릿수들을 해당 수 만큼 고정하여 그룹핑하게 된다.&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 17px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 25%; height: 17px; text-align: center;&quot;&gt;00000000&lt;/td&gt;
&lt;td style=&quot;width: 25%; height: 17px; text-align: center;&quot;&gt;00000000&lt;/td&gt;
&lt;td style=&quot;width: 25%; height: 17px; text-align: center;&quot;&gt;00000000&lt;/td&gt;
&lt;td style=&quot;width: 25%; height: 17px; text-align: center;&quot;&gt;00000000&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #555555; text-align: left;&quot;&gt;/24를 예로 들자면 아래 붉은 숫자 24개까지 같은 IP주소를 사이더 그룹으로 만들게 된다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 17px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 25%; height: 17px; text-align: center;&quot;&gt;&lt;span style=&quot;color: #ef5369;&quot;&gt;00000000&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 25%; height: 17px; text-align: center;&quot;&gt;&lt;span style=&quot;color: #ef5369;&quot;&gt;00000000&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 25%; height: 17px; text-align: center;&quot;&gt;&lt;span style=&quot;color: #ef5369;&quot;&gt;00000000&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 25%; height: 17px; text-align: center;&quot;&gt;00000000&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;예시로 192.168.100.0 에서 24 사이더를 설정해주게 되면 아래와 같은 수가 고정 ip가 되고 나머지가 호스트로 배정된다.&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 17px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 25%; height: 17px; text-align: center;&quot;&gt;&lt;span style=&quot;color: #ef5369;&quot;&gt;11000000&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 25%; height: 17px; text-align: center;&quot;&gt;&lt;span style=&quot;color: #ef5369; text-align: start;&quot;&gt;10101000&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 25%; height: 17px; text-align: center;&quot;&gt;&lt;span style=&quot;color: #ef5369;&quot;&gt;0&lt;span style=&quot;text-align: start;&quot;&gt;1100100&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 25%; height: 17px; text-align: center;&quot;&gt;00000000&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;C클래스와 범위가 같아서 뭐가 다르냐?! 싶지만&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;기존 클래스는 옥테드 단위로만 그룹을 나눌 수 있었다면!&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;사이더를 사용하게 되면 /16, /24, /32 옥테드 기준이 아닌 그 외의 숫자로도 사이더 블록으로 그룹핑이 가능해서&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;클래스와 상관없이 라우팅이 가능하기 때문에 사이더를 &lt;b&gt;&lt;span style=&quot;color: #555555; text-align: left;&quot;&gt;클래스 없는 도메인간 라우팅&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #555555; text-align: left;&quot;&gt; 기법이라고 한&lt;/span&gt;&lt;span style=&quot;color: #555555; text-align: left;&quot;&gt;다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;기존의 Network Class 방식에 비해 유연하게 동작할 수 있고&amp;nbsp;&lt;span style=&quot;text-align: start;&quot;&gt;그룹들을 계층적으로 관리가능 해&lt;/span&gt;&amp;nbsp;IP 주소 체계를 보다 효율화할 수 있게 해준다.&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;&lt;b&gt;2) 네트워크 조회&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1682231045002&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;docker network ls&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #f6e199; color: #000000; text-align: start;&quot;&gt;3) 컨테이너 생성시 네트워크 설정&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;net 옵션으로 네트워크를 설정하지 않으면 기본 docker0로 설정된다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;ip옵션도 설정해주지 않는다면 설정되는 네트워크 대역폭에서 순차적으로 배정된다. &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;(docker0로 네트워크가 설정되어 있다면 ip옵션을 사용해 static ip 할당이 불가능하다. 유저 정의 네트워크만 가능)&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1682231157998&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# docker run [-d] [--name 컨테이너명] [--net 네트워크이름] [--ip ip주소] [-p 호스트포트:컨테이너포트] &amp;lt;이미지명:태그&amp;gt;
docker run -d --name web --net mynet --ip 192.168.100.100 -p 80:80 nginx:1.14&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style2&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;4️⃣ 컨테이너끼리 통신은 어떻게 하나요?&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;컨테이너 간의 통신을 이용해 프론트 서버와 백 서버를 연결하여 사용할 수도 있다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1) 연결할 컨테이너 하나 생성&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예시로 mysql의 컨테이너를 생성할 건데 mysql의 컨테이너는 생성시 환경변수 설정이 필요하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;e옵션으로 environment 환경변수를 사용해 mysql 계정 비밀번호를 설정&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(v옵션으로 호스트에 데이터 저장할 수 있도록 볼륨마운트)&lt;/p&gt;
&lt;pre id=&quot;code_1682231769619&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# e옵션 (environment 환경변수)
docker run -d --name mysql -v /dbdata:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=wordpress \
-e MYSQL_PASSWORD=wordpress \
mysql&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;&lt;b&gt;2) 연결할 다른 컨테이너 하나 생성&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기서 다른 컨테이너와 연결하려면 &lt;b&gt;link 옵션&lt;/b&gt;을 사용해야 한다.&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1682232070388&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# --link 연결할컨테이너명:임의명칭
docker run -d --name wordpress --link mysql:mysql \
-e WORDPRESS_DB_PASSWORD=wordpress \
-p 80:80 wordpress:4&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;493&quot; data-origin-height=&quot;617&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/TQRPW/btsbVeT0iqe/UaKnga9ik2I5MBe1hB5Aqk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/TQRPW/btsbVeT0iqe/UaKnga9ik2I5MBe1hB5Aqk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/TQRPW/btsbVeT0iqe/UaKnga9ik2I5MBe1hB5Aqk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FTQRPW%2FbtsbVeT0iqe%2FUaKnga9ik2I5MBe1hB5Aqk%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;493&quot; height=&quot;617&quot; data-origin-width=&quot;493&quot; data-origin-height=&quot;617&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 id=&quot; 6-1.-컨테이너-사용하기--이론&quot; style=&quot;text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt; 9-2. 컨테이너 간 통신 (네트워크) : 실습&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1️⃣ 컨테이너 네트워크 사용하기 &amp;amp; 컨테이너 포트 외부로 노출하기&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;1) 도커 bridge, eth0 주소 확인&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1682237668366&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;ip address&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;도커 0에 할당된 ip확인&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;973&quot; data-origin-height=&quot;373&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/AdqmH/btsbV6uQhPF/D8KLwmf9Ibqx0iKNsT05T0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/AdqmH/btsbV6uQhPF/D8KLwmf9Ibqx0iKNsT05T0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/AdqmH/btsbV6uQhPF/D8KLwmf9Ibqx0iKNsT05T0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FAdqmH%2FbtsbV6uQhPF%2FD8KLwmf9Ibqx0iKNsT05T0%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;973&quot; height=&quot;373&quot; data-origin-width=&quot;973&quot; data-origin-height=&quot;373&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;brctl은 이더넷 브리지 관리 도구로 bridge-utils 패키지에 포함되어 있다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;apt-get을 업데이트하고 apt-get install bridge-utils 해서 설치해주면 사용할 수 있다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래 명령어를 쳐보면 docker0가 브리지 인터페이스임을 확인할 수 있다.&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1682244633983&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;brctl show&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;691&quot; data-origin-height=&quot;65&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/pYTGl/btsbTphItwb/ck3k5ngW59t69ssOR3kk11/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/pYTGl/btsbTphItwb/ck3k5ngW59t69ssOR3kk11/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/pYTGl/btsbTphItwb/ck3k5ngW59t69ssOR3kk11/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FpYTGl%2FbtsbTphItwb%2Fck3k5ngW59t69ssOR3kk11%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;691&quot; height=&quot;65&quot; data-origin-width=&quot;691&quot; data-origin-height=&quot;65&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2) 컨테이너 하나를 생성하여 할당된 아이피를 확인해보자&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1682244811285&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;docker run -it --name c1 busybox&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;721&quot; data-origin-height=&quot;220&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/nMsPb/btsbXIABcN1/zxIJLf9FGfCZ7L5KZmkm30/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/nMsPb/btsbXIABcN1/zxIJLf9FGfCZ7L5KZmkm30/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/nMsPb/btsbXIABcN1/zxIJLf9FGfCZ7L5KZmkm30/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FnMsPb%2FbtsbXIABcN1%2FzxIJLf9FGfCZ7L5KZmkm30%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;721&quot; height=&quot;220&quot; data-origin-width=&quot;721&quot; data-origin-height=&quot;220&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;c1을 종료하지 말고 다른 세션으로 접속해 또하나의 busybox를 돌려보면&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그 다음 아이피를 할당 받은 것을 확인할 수 있다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;742&quot; data-origin-height=&quot;220&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/chy6Oc/btsb5kTAe9w/Y5QghmfGul1IbquKwLgSm1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/chy6Oc/btsb5kTAe9w/Y5QghmfGul1IbquKwLgSm1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/chy6Oc/btsb5kTAe9w/Y5QghmfGul1IbquKwLgSm1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fchy6Oc%2Fbtsb5kTAe9w%2FY5QghmfGul1IbquKwLgSm1%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;742&quot; height=&quot;220&quot; data-origin-width=&quot;742&quot; data-origin-height=&quot;220&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다른 컨테이너로 웹서버를 하나 돌려봐도 그 다음 아이피가 할당 된 걸 확인 할 수 있다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;717&quot; data-origin-height=&quot;573&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/tR96J/btsb1RD86OP/wLnojEHUjXhGmLZc9Q7zYK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/tR96J/btsb1RD86OP/wLnojEHUjXhGmLZc9Q7zYK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/tR96J/btsb1RD86OP/wLnojEHUjXhGmLZc9Q7zYK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FtR96J%2Fbtsb1RD86OP%2FwLnojEHUjXhGmLZc9Q7zYK%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;717&quot; height=&quot;573&quot; data-origin-width=&quot;717&quot; data-origin-height=&quot;573&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 이러한 컨테이너들은 docker0를 통해 외부로 나간다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3) 좀 더 자세하게 보기&lt;/p&gt;
&lt;pre id=&quot;code_1682245750332&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;docker inspect c1&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;892&quot; data-origin-height=&quot;730&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b2HF4Y/btsbUPmzgTy/tlBx3jImuc4941aviD0BHK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b2HF4Y/btsbUPmzgTy/tlBx3jImuc4941aviD0BHK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b2HF4Y/btsbUPmzgTy/tlBx3jImuc4941aviD0BHK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb2HF4Y%2FbtsbUPmzgTy%2FtlBx3jImuc4941aviD0BHK%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;892&quot; height=&quot;730&quot; data-origin-width=&quot;892&quot; data-origin-height=&quot;730&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;* sandbox : 컨테이너의 네트워크 환경&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;* endpoint : veth, 네트워크 인터페이스&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;만약 컨테이너에서 신호가 나가려면 gateway를 통해 나간다&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이걸 받는 브리지 인터페이스는 자신의 ip주소를 호스트 ip address로 바꾸어 외부로 보내는 Masquerade 서비스 (마스커레이드), nat 서비스 (Network Address Translation) 를 지원하게 된다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래 명령어로 nat 테이블을 보면 docker0에서 나가는 것은 어디로든 마스커레이드를 해준다는 게 표시가 되어 있다.&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1682246097638&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;iptables -t nat -L -v&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1113&quot; data-origin-height=&quot;462&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cLLvxn/btsbUphdSPN/9V0IoeEkXyAh0xKtegzIf1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cLLvxn/btsbUphdSPN/9V0IoeEkXyAh0xKtegzIf1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cLLvxn/btsbUphdSPN/9V0IoeEkXyAh0xKtegzIf1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcLLvxn%2FbtsbUphdSPN%2F9V0IoeEkXyAh0xKtegzIf1%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;1113&quot; height=&quot;462&quot; data-origin-width=&quot;1113&quot; data-origin-height=&quot;462&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style2&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2️⃣&lt;b&gt; 컨테이너 포트 외부로 노출하기&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;포트포워딩 옵션들&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1682246386885&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 호스트포트:컨테이너포트
docker run --name web1 -d -p 80:80 nginx:1.14
# 컨테이너포트
docker run --name web2 -d -p 80 nginx:1.14
# 대문자 P, expose 설정된 포트에 맞추는 옵션
docker run --name web3 -d -P nginx:1.14&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1) 호스트 포트와 컨테이너 포트 둘다 설정&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1682246711562&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;docker run -p 80:80 -d --name web1 nginx&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1156&quot; data-origin-height=&quot;634&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bxymfl/btscfBAvt9L/AvmsCG6KMw3aIFoAHvTmaK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bxymfl/btscfBAvt9L/AvmsCG6KMw3aIFoAHvTmaK/img.png&quot; data-alt=&quot;외부에서 컨테이너로 접근까지 확인!&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bxymfl/btscfBAvt9L/AvmsCG6KMw3aIFoAHvTmaK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbxymfl%2FbtscfBAvt9L%2FAvmsCG6KMw3aIFoAHvTmaK%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;1156&quot; height=&quot;634&quot; data-origin-width=&quot;1156&quot; data-origin-height=&quot;634&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;외부에서 컨테이너로 접근까지 확인!&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2) 컨테이너 포트만 설정&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;호스트에서 사용하지 않는 포트 중 하나가 랜덤으로 컨테이너 80포트와 연결됨&lt;/p&gt;
&lt;pre id=&quot;code_1682247102611&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;docker run -p 80 -d --name web2 nginx&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1242&quot; data-origin-height=&quot;659&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/WdMTI/btsbVefuR9D/5byiiYKAh61qRy8zQEQ1IK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/WdMTI/btsbVefuR9D/5byiiYKAh61qRy8zQEQ1IK/img.png&quot; data-alt=&quot;랜덤으로 32768 할당&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/WdMTI/btsbVefuR9D/5byiiYKAh61qRy8zQEQ1IK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FWdMTI%2FbtsbVefuR9D%2F5byiiYKAh61qRy8zQEQ1IK%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;1242&quot; height=&quot;659&quot; data-origin-width=&quot;1242&quot; data-origin-height=&quot;659&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;랜덤으로 32768 할당&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3) 대문자 P 옵션 : dockerfile에 설정된 expose되어 있는 포트만큼 설정&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;허브에서 다운 받은 이미지들은 허브 상세 dockerfile에서 어느 포트에 설정되어 있는지 확인 할 수 있다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;445&quot; data-origin-height=&quot;203&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/UBu2A/btscfBtKgiu/o0BhzKOQwRtcVVjPxWhvy0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/UBu2A/btscfBtKgiu/o0BhzKOQwRtcVVjPxWhvy0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/UBu2A/btscfBtKgiu/o0BhzKOQwRtcVVjPxWhvy0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FUBu2A%2FbtscfBtKgiu%2Fo0BhzKOQwRtcVVjPxWhvy0%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;445&quot; height=&quot;203&quot; data-origin-width=&quot;445&quot; data-origin-height=&quot;203&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;테스트해보려는 nginx 공식 dockerfile에는 expose로 80이 설정되어 있으므로 대문자 P 옵션 사용시 80으로 설정된다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이미 80이 있다면 랜덤포트로 설정하게 된다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여러개 expose되어 있다면 여러개 모두 설정된다. 여러개가 중복이라면 이또한 랜덤포트로 설정&lt;/p&gt;
&lt;pre id=&quot;code_1682248090539&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;docker run -P -d --name web3 nginx&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1206&quot; data-origin-height=&quot;154&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/pWCsi/btscjj0MJ2X/G0xqyJSZ2KFoTRrWyLlTw1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/pWCsi/btscjj0MJ2X/G0xqyJSZ2KFoTRrWyLlTw1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/pWCsi/btscjj0MJ2X/G0xqyJSZ2KFoTRrWyLlTw1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FpWCsi%2Fbtscjj0MJ2X%2FG0xqyJSZ2KFoTRrWyLlTw1%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;1206&quot; height=&quot;154&quot; data-origin-width=&quot;1206&quot; data-origin-height=&quot;154&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;중복된 80포트를 피해, 또 임의로 중복될 수 있는 그다음 포트를 피해 32769로 할당된 걸 볼 수 있다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;  이렇게 3가지로 포트포워딩해 외부로 부터 커넥션하여 서비스 할 수 있게 된다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style2&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;3️⃣ 유저 정의 (user-defined) 네트워크 구성하기&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1) 네트워크 조회&lt;/p&gt;
&lt;pre id=&quot;code_1682248583073&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;docker network ls&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;464&quot; data-origin-height=&quot;109&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/99Z2X/btsb1QSOgEn/mUtJ0ho3NIoytSYk1Y1W1k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/99Z2X/btsb1QSOgEn/mUtJ0ho3NIoytSYk1Y1W1k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/99Z2X/btsb1QSOgEn/mUtJ0ho3NIoytSYk1Y1W1k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F99Z2X%2Fbtsb1QSOgEn%2FmUtJ0ho3NIoytSYk1Y1W1k%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;464&quot; height=&quot;109&quot; data-origin-width=&quot;464&quot; data-origin-height=&quot;109&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기서 bridge을 쓰고 있는게 docker0 이다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2) 네트워크 생성&lt;/p&gt;
&lt;pre id=&quot;code_1682248427348&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;docker network create --driver bridge --subnet 192.168.100.0/24 --gateway 192.168.100.254 mynet&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;* driver 설정 안해도 기본 설정이 bridge&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;* subnet 설정을 안하면 기본 도커가 쓰는 대역폭이 172.17 부터 시작하므로 그 이후로 설정된다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;* 게이트웨이를 설정 안하면 대역폭 네트워크 주소를 제외하고 가장 첫번째 아이피를 사용한다.&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1086&quot; data-origin-height=&quot;177&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/sT9U3/btsbSNwln6Z/tAGzZZNnUZiQDUKvYOzkBk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/sT9U3/btsbSNwln6Z/tAGzZZNnUZiQDUKvYOzkBk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/sT9U3/btsbSNwln6Z/tAGzZZNnUZiQDUKvYOzkBk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FsT9U3%2FbtsbSNwln6Z%2FtAGzZZNnUZiQDUKvYOzkBk%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;1086&quot; height=&quot;177&quot; data-origin-width=&quot;1086&quot; data-origin-height=&quot;177&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3) 네트워크 상세 조회&lt;/p&gt;
&lt;pre id=&quot;code_1682249104591&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# docker network inspect &amp;lt;네트워크명&amp;gt;
docker network inspect mynet&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;892&quot; data-origin-height=&quot;804&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lmzPX/btsb2TojMmz/WLXNhxK0Q42sPzb2nVQRtK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lmzPX/btsb2TojMmz/WLXNhxK0Q42sPzb2nVQRtK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lmzPX/btsb2TojMmz/WLXNhxK0Q42sPzb2nVQRtK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FlmzPX%2Fbtsb2TojMmz%2FWLXNhxK0Q42sPzb2nVQRtK%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;892&quot; height=&quot;804&quot; data-origin-width=&quot;892&quot; data-origin-height=&quot;804&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4) 네트워크 사용 컨테이너 생성&lt;/p&gt;
&lt;pre id=&quot;code_1682249016957&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# --net 네트워크명
docker run -it --name c1 --net mynet busybox&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;836&quot; data-origin-height=&quot;418&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bgEUbI/btscfBgeR5J/HKgvVnswhaaPjb6jU7r9j0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bgEUbI/btscfBgeR5J/HKgvVnswhaaPjb6jU7r9j0/img.png&quot; data-alt=&quot;설정한 ip를 사용하는 것을 확인!&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bgEUbI/btscfBgeR5J/HKgvVnswhaaPjb6jU7r9j0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbgEUbI%2FbtscfBgeR5J%2FHKgvVnswhaaPjb6jU7r9j0%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;836&quot; height=&quot;418&quot; data-origin-width=&quot;836&quot; data-origin-height=&quot;418&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;설정한 ip를 사용하는 것을 확인!&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style2&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4️⃣&lt;b&gt; 컨테이너 서비스 운영&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;컨테이너를 통해 서버와 클라이언트 서비스를 운영해보자&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1) mysql 컨테이너 생성 및 실행&lt;/p&gt;
&lt;pre id=&quot;code_1682256818456&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;docker run -d --name mysql -v /dbdata:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=wordpress \
-e MYSQL_DATABASE=wordpress \ 
-e MYSQL_USER=wordpress \
-e MYSQL_PASSWORD=wordpress \
mysql&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;696&quot; data-origin-height=&quot;78&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/xSN6C/btsb2TBYnGO/zndQqRoItFkpvRXADKHoEk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/xSN6C/btsb2TBYnGO/zndQqRoItFkpvRXADKHoEk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/xSN6C/btsb2TBYnGO/zndQqRoItFkpvRXADKHoEk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FxSN6C%2Fbtsb2TBYnGO%2FzndQqRoItFkpvRXADKHoEk%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;696&quot; height=&quot;78&quot; data-origin-width=&quot;696&quot; data-origin-height=&quot;78&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2) wordpress 컨테이너 생성 및 실행&lt;/p&gt;
&lt;pre id=&quot;code_1682256857703&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;docker run -d --name wordpress --link mysql:mysql \
-e WORDPRESS_DB_HOST=db \
-e WORDPRESS_DB_USER=wordpress \
-e WORDPRESS_DB_PASSWORD=wordpress \
-e WORDPRESS_DB_NAME=wordpress \
-p 80:80 wordpress&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;701&quot; data-origin-height=&quot;75&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bpRLWP/btsbUqHqzg3/8IXMm9KqEhuQkKKbUc5CGK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bpRLWP/btsbUqHqzg3/8IXMm9KqEhuQkKKbUc5CGK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bpRLWP/btsbUqHqzg3/8IXMm9KqEhuQkKKbUc5CGK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbpRLWP%2FbtsbUqHqzg3%2F8IXMm9KqEhuQkKKbUc5CGK%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;701&quot; height=&quot;75&quot; data-origin-width=&quot;701&quot; data-origin-height=&quot;75&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;흠... wsl로 하면 db 연결 실패했다하고&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;버박으로하면 Failed to connect to localhost port 80 뜨고....&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;마지막 연결 부분에 있어서 이슈가 있는 데 이부분은 해결하면 추가예정!&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;877&quot; data-origin-height=&quot;310&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/oKdyA/btsbT09VFOY/Tn3geWYKinHY4xSDi7uoHK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/oKdyA/btsbT09VFOY/Tn3geWYKinHY4xSDi7uoHK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/oKdyA/btsbT09VFOY/Tn3geWYKinHY4xSDi7uoHK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FoKdyA%2FbtsbT09VFOY%2FTn3geWYKinHY4xSDi7uoHK%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;877&quot; height=&quot;310&quot; data-origin-width=&quot;877&quot; data-origin-height=&quot;310&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;도커 네트워크 구조 참조&lt;/p&gt;
&lt;figure id=&quot;og_1682162377691&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;[Docker] Docker Network (docker0와 veth)&quot; data-og-description=&quot;Docker Network 컨테이너를 생성하게 되면 컨테이너는 NET namespace라는 기술을 통해 구현된 가상화 기법을 사용하여 각자 독립된 네트워크 공간을 할당 받습니다. 그렇다면 이 독립된 네트워크 공간&quot; data-og-host=&quot;yoo11052.tistory.com&quot; data-og-source-url=&quot;https://yoo11052.tistory.com/208&quot; data-og-url=&quot;https://yoo11052.tistory.com/208&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/rYBY8/hySmSnvNJq/lEYgPmZZ2izp0bd7fxhlOk/img.png?width=150&amp;amp;height=150&amp;amp;face=0_0_150_150,https://scrap.kakaocdn.net/dn/XXSTj/hySmTNtHMS/BukjMCvF7YESQAbA75RaSk/img.png?width=150&amp;amp;height=150&amp;amp;face=0_0_150_150,https://scrap.kakaocdn.net/dn/c5YXrF/hySm0siWJ9/uRlHaqkuaxI5BMcmlWWuQK/img.png?width=867&amp;amp;height=587&amp;amp;face=0_0_867_587&quot;&gt;&lt;a href=&quot;https://yoo11052.tistory.com/208&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://yoo11052.tistory.com/208&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/rYBY8/hySmSnvNJq/lEYgPmZZ2izp0bd7fxhlOk/img.png?width=150&amp;amp;height=150&amp;amp;face=0_0_150_150,https://scrap.kakaocdn.net/dn/XXSTj/hySmTNtHMS/BukjMCvF7YESQAbA75RaSk/img.png?width=150&amp;amp;height=150&amp;amp;face=0_0_150_150,https://scrap.kakaocdn.net/dn/c5YXrF/hySm0siWJ9/uRlHaqkuaxI5BMcmlWWuQK/img.png?width=867&amp;amp;height=587&amp;amp;face=0_0_867_587');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;[Docker] Docker Network (docker0와 veth)&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Docker Network 컨테이너를 생성하게 되면 컨테이너는 NET namespace라는 기술을 통해 구현된 가상화 기법을 사용하여 각자 독립된 네트워크 공간을 할당 받습니다. 그렇다면 이 독립된 네트워크 공간&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;yoo11052.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class=&quot;footnotes&quot;&gt;
  &lt;ol class=&quot;footnotes&quot;&gt;
    &lt;li id=&quot;footnote_427_1&quot;&gt;&lt;b&gt;Net namespace&lt;/b&gt;&lt;br /&gt;Network interface, iptables 등 네트워크 리소스와 관련된 정보를 분할하여 각각의 다른 namespace에 할당 &lt;a href=&quot;#footnote_link_427_1&quot;&gt;[본문으로]&lt;/a&gt;&lt;/li&gt;
    &lt;li id=&quot;footnote_427_2&quot;&gt; &lt;b&gt;L2 (Layer 2)&lt;/b&gt;&lt;br /&gt;OSI계층의 2번째 레이어인 데이터 링크 계층 통신을 말한다  &lt;a href=&quot;#footnote_link_427_2&quot;&gt;[본문으로]&lt;/a&gt;&lt;/li&gt;
    &lt;li id=&quot;footnote_427_3&quot;&gt; &lt;b&gt;옥테드 octet&lt;br /&gt;&lt;/b&gt;2진수 8자리를 옥테드라고 한다. &lt;a href=&quot;#footnote_link_427_3&quot;&gt;[본문으로]&lt;/a&gt;&lt;/li&gt;
    &lt;li id=&quot;footnote_427_4&quot;&gt; &lt;b&gt;루프백주소&lt;/b&gt;&lt;br /&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;text-align: start;&quot;&gt;네트워크상에서 자신을 나타내는 가상적인 주소이며,&amp;nbsp;&lt;/span&gt;자신에게 다시 네트워크 입력이 들어온다고 하여 루프백(Loopback) 주소라 한다 &lt;a href=&quot;#footnote_link_427_4&quot;&gt;[본문으로]&lt;/a&gt;&lt;/li&gt;
  &lt;/ol&gt;
&lt;/div&gt;</description>
      <category>DevOps/Docker</category>
      <category>Docker</category>
      <author>littlezero48</author>
      <guid isPermaLink="true">https://littlezero48.tistory.com/427</guid>
      <comments>https://littlezero48.tistory.com/427#entry427comment</comments>
      <pubDate>Sun, 23 Apr 2023 23:19:07 +0900</pubDate>
    </item>
    <item>
      <title>따배도 도커 시리즈 8] Docker Container Storage</title>
      <link>https://littlezero48.tistory.com/426</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt; &lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #ef5369;&quot;&gt;&lt;b&gt;공부 계기&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #ef5369;&quot;&gt;&lt;b&gt;추가적인 도커 공부를 위해 유튜브 따배도 도커 시리즈를 보면서 정리해 봅니다.&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;color: #ef5369;&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;div id=&quot;book-toc&quot; style=&quot;color: #333333; text-align: start;&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;목차&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;h3 id=&quot; 6-1.-컨테이너-사용하기--이론&quot; style=&quot;text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt; 8-1. Docker Container Storage : 이론&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1️⃣ 컨테이너 볼륨이 뭐에요?&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;컨테이너 이미지는 readonly이다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;컨테이너 이미지를 컨테이너로 돌리게 되면 RW (ReadWrite) 레이어가 추가되고 컨테이너에 추가되는 데이터들이 이곳에 저장되게 된다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이처럼 기존의 readonly 레이어에 readwrite 레이어를 올려 마치 하나인 것처럼 관리하고 보여주게 되는데&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이를 union file system(다른말로 overlay) 이라고 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 하나처럼 운영되는 컨테이너는 컨테이너를 삭제하면 rw레이어 데이터까지 지워버리게 된다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;데이터를 보존해야하는데!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 컨테이너가 제공하는 기능이 바로 &lt;b&gt;볼륨&lt;/b&gt;이다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;컨테이너 rw 레이어의 디렉토리 경로와 호스트 저장소 디렉토리를 연결하여 rw레이어에 쌓일 데이터를 호스트 컴퓨터 저장소에 쌓이게 함으로써 컨테이너 삭제시에도 데이터를 보존할 수 있게 한다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 연결하는 걸 &lt;b&gt;볼륨 마운트&lt;/b&gt;라고 한다. 명령어로는 run시 v옵션으로 가능하다.&lt;/p&gt;
&lt;pre id=&quot;code_1681572731897&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;docker run [-v 호스트디렉토리:컨테이너디렉토리] &amp;lt;이미지명:태그&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style3&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2️⃣ 데이터를 보존하고 싶어요&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-volume 옵션 사용&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 51px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 3.48837%; height: 17px;&quot;&gt;-v&lt;/td&gt;
&lt;td style=&quot;width: 11.8605%; height: 17px;&quot;&gt;&amp;lt;host path&amp;gt;&lt;/td&gt;
&lt;td style=&quot;width: 2.67435%; height: 17px;&quot;&gt;:&lt;/td&gt;
&lt;td style=&quot;width: 20.9303%; height: 17px;&quot;&gt;&amp;lt;container mount path&amp;gt;&lt;/td&gt;
&lt;td style=&quot;width: 18.8954%;&quot; colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;width: 42.1512%;&quot;&gt;기본 방식&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 3.48837%; height: 17px;&quot;&gt;-v&lt;/td&gt;
&lt;td style=&quot;width: 11.8605%; height: 17px;&quot;&gt;&amp;lt;host path&amp;gt;&lt;/td&gt;
&lt;td style=&quot;width: 2.67435%; height: 17px;&quot;&gt;:&lt;/td&gt;
&lt;td style=&quot;width: 20.9303%; height: 17px;&quot;&gt;&amp;lt;container mount path&amp;gt;&lt;/td&gt;
&lt;td style=&quot;width: 2.32557%;&quot;&gt;:&lt;/td&gt;
&lt;td style=&quot;width: 16.5698%; height: 17px;&quot;&gt;&amp;lt;read write mode&amp;gt;&lt;/td&gt;
&lt;td style=&quot;width: 42.1512%;&quot;&gt;***&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 3.48837%; height: 17px;&quot;&gt;-v&lt;/td&gt;
&lt;td style=&quot;width: 54.3605%; height: 17px;&quot; colspan=&quot;5&quot;&gt;&amp;lt;container mount path&amp;gt;&lt;/td&gt;
&lt;td style=&quot;width: 42.1512%;&quot;&gt;호스트의 /var/lib/docker 밑에 UUID 디렉토리 아래로 저장시켜준다.&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;*** 보안을 위해 컨테이너는 오직 호스트 경로의 데이터만 읽어오고 컨테이너에 쌓이는 게 호스트에 영향이 가지 않게 하는 것은 read write mode 자리에 ro를 (readonly)를 써주면 된다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style3&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;3️⃣ 컨테이너끼리 데이터 공유 가능한가요?&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하나의 컨테이너 디렉토리와 호스트 디렉토리를 연결하여 데이터를 쌓고,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;또 다른 컨테이너 디렉토리와 그 호스트 디렉토리를 연결하여 데이터를 공유하면&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;두 컨테이너가 같은 호스트 디렉토리를 바라보게 되어 컨테이너끼리 데이터 공유가 가능하다.&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ex)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;컨테이너가 web content를 만들어 저장하면 다른 webserver 컨테이너가 그 생성한 web content 파일을 가지고 실행을 할 수가 있다. 클라이언트는 webserver 컨테이너에 접속하는 것 만으로도 web content 컨테이너가 제공하는 것과 webserver가 제공하는 것을 다 누릴 수 있게 된다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 id=&quot; 6-1.-컨테이너-사용하기--이론&quot; style=&quot;text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt; 8-2. Docker Container Storage : 실습&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1️⃣ &lt;b&gt;mysql DB data 영구 보존하기&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1) MySQL 컨테이너 생성 및 실행하기&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;*** MySQL DB 실행할 때는 관리자의 패스워드를 함께 지정해줘야한다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해당 경로가 없으면 디렉토리를 자동으로 생성함&lt;/p&gt;
&lt;pre id=&quot;code_1681656034442&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# docker run [-d] [--name 컨테이너명] [-v 호스트경로:컨테이너경로] [-e 환경변수=값] &amp;lt;이미지:태그&amp;gt;
docker run -d --name db -v /dbdata:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=pass mysql:latest&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1104&quot; data-origin-height=&quot;380&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/l4B12/btsaqQtuQrg/X76kHpakqTidkxNVOz2Y91/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/l4B12/btsaqQtuQrg/X76kHpakqTidkxNVOz2Y91/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/l4B12/btsaqQtuQrg/X76kHpakqTidkxNVOz2Y91/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fl4B12%2FbtsaqQtuQrg%2FX76kHpakqTidkxNVOz2Y91%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;1104&quot; height=&quot;380&quot; data-origin-width=&quot;1104&quot; data-origin-height=&quot;380&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2) 컨테이너 안의 MySQL에 접속해서 데이터베이스 생성해보기&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;컨테이너를 터미널로 연결해서 mysql에 접속&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 데이터베이스 확인까지!&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;736&quot; data-origin-height=&quot;556&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bvNwfu/btsaEScRIl0/KpH9wPQN0y9OQl4lkXrR6K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bvNwfu/btsaEScRIl0/KpH9wPQN0y9OQl4lkXrR6K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bvNwfu/btsaEScRIl0/KpH9wPQN0y9OQl4lkXrR6K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbvNwfu%2FbtsaEScRIl0%2FKpH9wPQN0y9OQl4lkXrR6K%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;736&quot; height=&quot;556&quot; data-origin-width=&quot;736&quot; data-origin-height=&quot;556&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;342&quot; data-origin-height=&quot;310&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cscjz9/btsaw9lIyEP/gIpFIKe7kyjxUUKSoYuVw1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cscjz9/btsaw9lIyEP/gIpFIKe7kyjxUUKSoYuVw1/img.png&quot; data-alt=&quot;DB생성 및 확인&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cscjz9/btsaw9lIyEP/gIpFIKe7kyjxUUKSoYuVw1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcscjz9%2Fbtsaw9lIyEP%2FgIpFIKe7kyjxUUKSoYuVw1%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;342&quot; height=&quot;310&quot; data-origin-width=&quot;342&quot; data-origin-height=&quot;310&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;DB생성 및 확인&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;컨테이너 안에 ttabae라는 DB를 생성했으니 호스트 연결된 경로에도 ttabae가 연결됬는 지 확인하면 된다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;호스트 경로에 들어가 조회하니 ttabae가 있는 것을 확인!&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1368&quot; data-origin-height=&quot;109&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bW2kxP/btsai5dYrbz/sXD4a7ZCDiIFABJ66JMeK0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bW2kxP/btsai5dYrbz/sXD4a7ZCDiIFABJ66JMeK0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bW2kxP/btsai5dYrbz/sXD4a7ZCDiIFABJ66JMeK0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbW2kxP%2Fbtsai5dYrbz%2FsXD4a7ZCDiIFABJ66JMeK0%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;1368&quot; height=&quot;109&quot; data-origin-width=&quot;1368&quot; data-origin-height=&quot;109&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3) 컨테이너를 삭제했을 때도 남았는지 확인&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1363&quot; data-origin-height=&quot;155&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/W9dl8/btsaw9lID1q/CgIWnfdDDK3m2j4OscnnCK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/W9dl8/btsaw9lID1q/CgIWnfdDDK3m2j4OscnnCK/img.png&quot; data-alt=&quot;남아있다!&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/W9dl8/btsaw9lID1q/CgIWnfdDDK3m2j4OscnnCK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FW9dl8%2Fbtsaw9lID1q%2FCgIWnfdDDK3m2j4OscnnCK%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;1363&quot; height=&quot;155&quot; data-origin-width=&quot;1363&quot; data-origin-height=&quot;155&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;남아있다!&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4) 호스트 경로 없이 컨테이너 경로만 설정하게 되면?&lt;/p&gt;
&lt;pre id=&quot;code_1681657330451&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# docker run [-d] [--name 컨테이너명] [-v 컨테이너경로] [-e 환경변수=값] &amp;lt;이미지:태그&amp;gt;
docker run -d --name db -v /var/lib/mysql -e MYSQL_ROOT_PASSWORD=pass mysql:latest&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;inspect로 컨테이너 조회하면 마운트 정보에 호스트 소스는 /var/lib/docker/volumes/uuid/_data에 저장된걸 확인할 수 있다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1049&quot; data-origin-height=&quot;265&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b5yN8b/btsar4E2i5J/NrpZ7OkzWU2KIK1cL6jES0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b5yN8b/btsar4E2i5J/NrpZ7OkzWU2KIK1cL6jES0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b5yN8b/btsar4E2i5J/NrpZ7OkzWU2KIK1cL6jES0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb5yN8b%2Fbtsar4E2i5J%2FNrpZ7OkzWU2KIK1cL6jES0%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;1049&quot; height=&quot;265&quot; data-origin-width=&quot;1049&quot; data-origin-height=&quot;265&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 역시도 컨테이너를 삭제한 후에 데이터가 남는 걸 확인 할 수 있다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1348&quot; data-origin-height=&quot;48&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/FkWPi/btsajeIZBQK/Wec3DSFBXUGJBTnJ9JsYP1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/FkWPi/btsajeIZBQK/Wec3DSFBXUGJBTnJ9JsYP1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/FkWPi/btsajeIZBQK/Wec3DSFBXUGJBTnJ9JsYP1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FFkWPi%2FbtsajeIZBQK%2FWec3DSFBXUGJBTnJ9JsYP1%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;1348&quot; height=&quot;48&quot; data-origin-width=&quot;1348&quot; data-origin-height=&quot;48&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1348&quot; data-origin-height=&quot;175&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/biREjB/btsaEibwejv/0LZj5mTCKRDVrzPLSQkup0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/biREjB/btsaEibwejv/0LZj5mTCKRDVrzPLSQkup0/img.png&quot; data-alt=&quot;/var/ 폴더는 root 계정으로 접근 가능!&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/biREjB/btsaEibwejv/0LZj5mTCKRDVrzPLSQkup0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbiREjB%2FbtsaEibwejv%2F0LZj5mTCKRDVrzPLSQkup0%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;1348&quot; height=&quot;175&quot; data-origin-width=&quot;1348&quot; data-origin-height=&quot;175&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;/var/ 폴더는 root 계정으로 접근 가능!&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;5) docker volume 관리 명령어&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;볼륨 조회&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1681658413942&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;docker volume ls&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;689&quot; data-origin-height=&quot;156&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/56V1r/btsaw7g70pY/SjDe0crE5OhpxtKAe5A5Ek/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/56V1r/btsaw7g70pY/SjDe0crE5OhpxtKAe5A5Ek/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/56V1r/btsaw7g70pY/SjDe0crE5OhpxtKAe5A5Ek/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F56V1r%2Fbtsaw7g70pY%2FSjDe0crE5OhpxtKAe5A5Ek%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;689&quot; height=&quot;156&quot; data-origin-width=&quot;689&quot; data-origin-height=&quot;156&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;볼륨 제거&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1681658505647&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;docker volume rm 볼륨UUID&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;994&quot; data-origin-height=&quot;44&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/XQncc/btsal4yPFKV/2I4GY3EFK2i5kbFdiEbk3k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/XQncc/btsal4yPFKV/2I4GY3EFK2i5kbFdiEbk3k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/XQncc/btsal4yPFKV/2I4GY3EFK2i5kbFdiEbk3k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FXQncc%2Fbtsal4yPFKV%2F2I4GY3EFK2i5kbFdiEbk3k%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;994&quot; height=&quot;44&quot; data-origin-width=&quot;994&quot; data-origin-height=&quot;44&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1196&quot; data-origin-height=&quot;88&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/XfWNO/btsaw9eV84G/OWDuRn6fMZd2jYNY3P8Hz0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/XfWNO/btsaw9eV84G/OWDuRn6fMZd2jYNY3P8Hz0/img.png&quot; data-alt=&quot;해당 디렉토리가 사라져있는 걸 확인할 수 있다&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/XfWNO/btsaw9eV84G/OWDuRn6fMZd2jYNY3P8Hz0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FXfWNO%2Fbtsaw9eV84G%2FOWDuRn6fMZd2jYNY3P8Hz0%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;1196&quot; height=&quot;88&quot; data-origin-width=&quot;1196&quot; data-origin-height=&quot;88&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;해당 디렉토리가 사라져있는 걸 확인할 수 있다&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style3&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2️⃣ &lt;b&gt;웹데이터 readonly 서비스로 지원하기&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;웹 컨텐츠를 생성하고 그걸 nginx로 운영하는 webserver로 서비스 할 수 있게 하는 실습&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;  &lt;span style=&quot;color: #ef5369;&quot;&gt;여기서부터는 버츄얼박스와의 ip연결 문제로 이슈가 생겨서 wsl로 진행&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1) 웹 컨텐츠 생성하기&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;폴더 하나 만들고 그 안에 단순 태그를 출력해 index.html을 하나 생성한다&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;762&quot; data-origin-height=&quot;116&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dY5lDt/btsbFg41dHL/mBArf3MdTsdE5lXSHSl0iK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dY5lDt/btsbFg41dHL/mBArf3MdTsdE5lXSHSl0iK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dY5lDt/btsbFg41dHL/mBArf3MdTsdE5lXSHSl0iK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdY5lDt%2FbtsbFg41dHL%2FmBArf3MdTsdE5lXSHSl0iK%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;762&quot; height=&quot;116&quot; data-origin-width=&quot;762&quot; data-origin-height=&quot;116&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;2) 웹서버 서비스할 index.html을 호스트 파일로 교체&lt;/span&gt;&lt;span style=&quot;background-color: #fafafa; color: #333333; text-align: start;&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1682006315440&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# docker run [-d] [--name 컨테이너명] [-v 호스트경로:컨테이너경로:읽기쓰기모드] /
# [-p 호스트포트:컨테이터포트] &amp;lt;이미지명:태그&amp;gt;
docker run -d --name web -v /webdata:/usr/share/nginx/html:ro -p 80:80 nginx:1.14&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;470&quot; data-origin-height=&quot;197&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/q7i9T/btsbFhCQZPb/CIDpMKT9w9gVAzlCottUrk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/q7i9T/btsbFhCQZPb/CIDpMKT9w9gVAzlCottUrk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/q7i9T/btsbFhCQZPb/CIDpMKT9w9gVAzlCottUrk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fq7i9T%2FbtsbFhCQZPb%2FCIDpMKT9w9gVAzlCottUrk%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;470&quot; height=&quot;197&quot; data-origin-width=&quot;470&quot; data-origin-height=&quot;197&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style3&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3️⃣ &lt;b&gt;컨테이너간 데이터 공유하기&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;디스크 사용량의 결과를 주기적으로 만들어내는 컨테이너를 만들어&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;* 디스크 사용량 모니터링&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;디스트 모니터링 할 때 사용하는 df 명령어 (disk free) 에 h옵션 (human/사람이 보기좋은 크기단위표시) 로 디스크 사용량을 모니터링&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1681995005793&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;df -h /&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;  일단 이걸 실습하기 위한 파일 생성&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;① mkdir로 lab8이라는 폴더 생성&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;②&amp;nbsp;lab8로 이동&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;③ vi로 비쥬얼에디터 열어 df.sh 파일 생성&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그 안에 쉘스크립트 내용을 작성&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style8&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 35.2326%; text-align: center;&quot;&gt;&lt;b&gt;스크립트&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 64.7674%; text-align: center;&quot;&gt;&lt;b&gt;설명&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 35.2326%;&quot;&gt;#! /bin/bash&lt;/td&gt;
&lt;td style=&quot;width: 64.7674%;&quot;&gt;#!은 스크립트를 실행할 쉘을 지정하는 선언문&lt;br /&gt;이 스크립트는 /bin/bash라는 bash쉘을 실행한다고 하는 것&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 35.2326%;&quot;&gt;mkdir -p /webdata&lt;/td&gt;
&lt;td style=&quot;width: 64.7674%;&quot;&gt;mkdir(make directory)로 디렉토리 생성&lt;br /&gt;p옵션 (parents)은&amp;nbsp; 기존 디렉토리가 존재해도 에러가 발생하지 않고 필요경우 부모 디렉토리를 생성한다.&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 35.2326%;&quot;&gt;while true&lt;/td&gt;
&lt;td style=&quot;width: 64.7674%;&quot;&gt;반복문으로 조건을 true로 했기에 무한 반복&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 35.2326%;&quot;&gt;do&lt;/td&gt;
&lt;td style=&quot;width: 64.7674%;&quot;&gt;반복될 부분의 시작 표시&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 35.2326%;&quot;&gt;df -h / &amp;gt; /webdata/index.html&lt;/td&gt;
&lt;td style=&quot;width: 64.7674%;&quot;&gt;df 명령어로 (disk free) 디스크 사용량을 보며&amp;nbsp;&lt;br /&gt;h옵션(human)으로 사람이 보기 좋은 크기단위로 표시한다&lt;br /&gt;&amp;gt; (리다이렉션)은 보통 command &amp;gt; filename과 같은 형태로 사용하며, 표준 입력을 전달 또는 표준 출력을 파일로 저장&lt;br /&gt;따라서 디스크 사용량을 저 경로의 index.html파일로 저장한다는 뜻&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 35.2326%;&quot;&gt;sleep 10&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;width: 64.7674%;&quot;&gt;10초 일시정지&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 35.2326%;&quot;&gt;done&lt;/td&gt;
&lt;td style=&quot;width: 64.7674%;&quot;&gt;반복문 중 하나로 do와 짝을 이루어 반복될 부분 닫는 역할&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;④&amp;nbsp;cat으로 df.sh 내용 다시 확인&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;449&quot; data-origin-height=&quot;210&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ddRRur/btsbArNSRQb/WMMK13Kvxs5Ue1iI8AXgZk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ddRRur/btsbArNSRQb/WMMK13Kvxs5Ue1iI8AXgZk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ddRRur/btsbArNSRQb/WMMK13Kvxs5Ue1iI8AXgZk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FddRRur%2FbtsbArNSRQb%2FWMMK13Kvxs5Ue1iI8AXgZk%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;449&quot; height=&quot;210&quot; data-origin-width=&quot;449&quot; data-origin-height=&quot;210&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;⑤&amp;nbsp;dockerfile도 vi로 생성하고 cat으로 확인&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style8&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 34.3023%; text-align: center;&quot;&gt;&lt;b&gt;스크립트&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 65.6977%; text-align: center;&quot;&gt;&lt;b&gt;설명&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 34.3023%;&quot;&gt;FROM ubuntu:20.04&lt;/td&gt;
&lt;td style=&quot;width: 65.6977%;&quot;&gt;베이스이미지를 ubuntu:20.04에서&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 34.3023%;&quot;&gt;ADD df.sh /bin/df.sh&lt;/td&gt;
&lt;td style=&quot;width: 65.6977%;&quot;&gt;컨테이너 빌드시 호스트의 df.sh 파일을 컨테이너 /bin/df.sh로 복사&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 34.3023%;&quot;&gt;RUN chmod +x /bin/df.sh&lt;/td&gt;
&lt;td style=&quot;width: 65.6977%;&quot;&gt;/bin/df.sh에 권한 설정하는 chmod (change mode) 명령어로 +x 속성(&lt;span style=&quot;color: #212529; text-align: left;&quot;&gt;executable/실행가능) 을 주는 명령어를 실행&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 34.3023%;&quot;&gt;ENTRYPOINT[&quot;/bin/df.sh&quot;]&lt;/td&gt;
&lt;td style=&quot;width: 65.6977%;&quot;&gt;/bin/df.sh 실행&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;465&quot; data-origin-height=&quot;113&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/tTK1n/btsbANXsj7z/ICe4JJTNzipsCf1RFSzkI1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/tTK1n/btsbANXsj7z/ICe4JJTNzipsCf1RFSzkI1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/tTK1n/btsbANXsj7z/ICe4JJTNzipsCf1RFSzkI1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FtTK1n%2FbtsbANXsj7z%2FICe4JJTNzipsCf1RFSzkI1%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;465&quot; height=&quot;113&quot; data-origin-width=&quot;465&quot; data-origin-height=&quot;113&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;⑥ 도커 이미지 빌드 및 확인&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1097&quot; data-origin-height=&quot;513&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/72UGk/btsbAsTB2Mx/SupOWYL0R3j9LKmpdnTrX1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/72UGk/btsbAsTB2Mx/SupOWYL0R3j9LKmpdnTrX1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/72UGk/btsbAsTB2Mx/SupOWYL0R3j9LKmpdnTrX1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F72UGk%2FbtsbAsTB2Mx%2FSupOWYL0R3j9LKmpdnTrX1%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;1097&quot; height=&quot;513&quot; data-origin-width=&quot;1097&quot; data-origin-height=&quot;513&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style2&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;  &lt;b&gt;생성한 파일과 이미지를 가지고 컨테이너를 돌려 아래 구조로 연결&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;926&quot; data-origin-height=&quot;299&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/kzBHQ/btsbBY5e2c7/WSMDSk72XvPdlyHh0w1HKK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/kzBHQ/btsbBY5e2c7/WSMDSk72XvPdlyHh0w1HKK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/kzBHQ/btsbBY5e2c7/WSMDSk72XvPdlyHh0w1HKK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FkzBHQ%2FbtsbBY5e2c7%2FWSMDSk72XvPdlyHh0w1HKK%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;926&quot; height=&quot;299&quot; data-origin-width=&quot;926&quot; data-origin-height=&quot;299&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;①&amp;nbsp;index.html을 주기적으로 만드는 컨테이너 df 생성 및 실행&lt;/p&gt;
&lt;pre id=&quot;code_1682005472826&quot; class=&quot;jboss-cli&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;docker run -d -v /webdata:/webdata --name df df:latest&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;② 생성된 index.html을 클라이언트로 연결할 web server 컨테이너 web 생성 및 실행&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1682005404525&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;docker run -d --name web -v /webdata:/usr/share/nginx/html:ro -p 80:80 nginx:1.14&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;③ 결과&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;690&quot; data-origin-height=&quot;170&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cwCOPX/btsbDEZx8h1/Pg0dRKKIyS145dOF5ez1U0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cwCOPX/btsbDEZx8h1/Pg0dRKKIyS145dOF5ez1U0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cwCOPX/btsbDEZx8h1/Pg0dRKKIyS145dOF5ez1U0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcwCOPX%2FbtsbDEZx8h1%2FPg0dRKKIyS145dOF5ez1U0%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;690&quot; height=&quot;170&quot; data-origin-width=&quot;690&quot; data-origin-height=&quot;170&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>DevOps/Docker</category>
      <category>Docker</category>
      <author>littlezero48</author>
      <guid isPermaLink="true">https://littlezero48.tistory.com/426</guid>
      <comments>https://littlezero48.tistory.com/426#entry426comment</comments>
      <pubDate>Fri, 21 Apr 2023 01:02:47 +0900</pubDate>
    </item>
    <item>
      <title>Programmers] 입양 시각 구하기(2)</title>
      <link>https://littlezero48.tistory.com/425</link>
      <description>&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span&gt;문제&lt;/span&gt;&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt; &lt;b&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt; MySQL &lt;/span&gt;&lt;/span&gt;로 풀이&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt; &lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;문제 링크&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;:&lt;/p&gt;
&lt;figure id=&quot;og_1681904447650&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;프로그래머스&quot; data-og-description=&quot;코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.&quot; data-og-host=&quot;programmers.co.kr&quot; data-og-source-url=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/59413&quot; data-og-url=&quot;https://programmers.co.kr/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/9NiyE/hySkKYsD72/xLDkg3U2b4K40tIBGZ234k/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/c6e2PB/hySkO0LTHU/QfjoBr9qZEb2aO3ADmuXRK/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630&quot;&gt;&lt;a href=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/59413&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/59413&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/9NiyE/hySkKYsD72/xLDkg3U2b4K40tIBGZ234k/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/c6e2PB/hySkO0LTHU/QfjoBr9qZEb2aO3ADmuXRK/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;프로그래머스&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;programmers.co.kr&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt; &lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;문제 설명&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;:&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: left;&quot;&gt;보호소에서는 몇 시에 입양이 가장 활발하게 일어나는지 알아보려 합니다. 0시부터 23시까지, 각 시간대별로 입양이 몇 건이나 발생했는지 조회하는 SQL문을 작성해주세요. 이때 결과는 시간대 순으로 정렬해야 합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;  &lt;b&gt;테이블&lt;/b&gt; :&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;ANIMAL_OUTS&lt;span&gt;&amp;nbsp;&lt;/span&gt;테이블은 동물 보호소에서 입양 보낸 동물의 정보를 담은 테이블입니다.&lt;span&gt;&amp;nbsp;&lt;/span&gt;ANIMAL_OUTS&lt;span&gt;&amp;nbsp;&lt;/span&gt;테이블 구조는 다음과 같으며,&lt;span&gt;&amp;nbsp;&lt;/span&gt;ANIMAL_ID,&lt;span&gt;&amp;nbsp;&lt;/span&gt;ANIMAL_TYPE,&lt;span&gt;&amp;nbsp;&lt;/span&gt;DATETIME,&lt;span&gt;&amp;nbsp;&lt;/span&gt;NAME,&lt;span&gt;&amp;nbsp;&lt;/span&gt;SEX_UPON_OUTCOME는 각각 동물의 아이디, 생물 종, 입양일, 이름, 성별 및 중성화 여부를 나타냅니다.&lt;/p&gt;
&lt;table style=&quot;background-color: #263747; color: #b2c0cc; text-align: left; border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody style=&quot;color: #000000;&quot;&gt;
&lt;tr style=&quot;color: #000000;&quot;&gt;
&lt;td style=&quot;background-color: #202b3d; color: #000000;&quot;&gt;&lt;span style=&quot;color: #ffffff;&quot;&gt;ANIMAL_ID&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #202b3d; color: #000000;&quot;&gt;&lt;span style=&quot;color: #ffffff;&quot;&gt;VARCHAR(N)&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #202b3d; color: #000000;&quot;&gt;&lt;span style=&quot;color: #ffffff;&quot;&gt;FALSE&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;color: #000000;&quot;&gt;
&lt;td style=&quot;background-color: #202b3d; color: #000000;&quot;&gt;&lt;span style=&quot;color: #ffffff;&quot;&gt;ANIMAL_TYPE&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #202b3d; color: #000000;&quot;&gt;&lt;span style=&quot;color: #ffffff;&quot;&gt;VARCHAR(N)&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #202b3d; color: #000000;&quot;&gt;&lt;span style=&quot;color: #ffffff;&quot;&gt;FALSE&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;color: #000000;&quot;&gt;
&lt;td style=&quot;background-color: #202b3d; color: #000000;&quot;&gt;&lt;span style=&quot;color: #ffffff;&quot;&gt;DATETIME&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #202b3d; color: #000000;&quot;&gt;&lt;span style=&quot;color: #ffffff;&quot;&gt;DATETIME&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #202b3d; color: #000000;&quot;&gt;&lt;span style=&quot;color: #ffffff;&quot;&gt;FALSE&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;color: #000000;&quot;&gt;
&lt;td style=&quot;background-color: #202b3d; color: #000000;&quot;&gt;&lt;span style=&quot;color: #ffffff;&quot;&gt;NAME&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #202b3d; color: #000000;&quot;&gt;&lt;span style=&quot;color: #ffffff;&quot;&gt;VARCHAR(N)&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #202b3d; color: #000000;&quot;&gt;&lt;span style=&quot;color: #ffffff;&quot;&gt;TRUE&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;color: #000000;&quot;&gt;
&lt;td style=&quot;background-color: #202b3d; color: #000000;&quot;&gt;&lt;span style=&quot;color: #ffffff;&quot;&gt;SEX_UPON_OUTCOME&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #202b3d; color: #000000;&quot;&gt;&lt;span style=&quot;color: #ffffff;&quot;&gt;VARCHAR(N)&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #202b3d; color: #000000;&quot;&gt;&lt;span style=&quot;color: #ffffff;&quot;&gt;FALSE&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;풀이&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;쿼리)&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1681904650511&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;SET @HOUR = -1;
SELECT 
    (@HOUR := @HOUR + 1) AS HOUR,
    (SELECT 
        COUNT(*)
    FROM ANIMAL_OUTS 
    WHERE HOUR(DATETIME) = @HOUR) AS COUNT
FROM ANIMAL_OUTS
WHERE @HOUR &amp;lt; 23;&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #c1bef9;&quot;&gt;리뷰)&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;이 문제에 대해서는 쿼리로 테이블을 만드는 방법을 모르겠어서 다른 사람의 풀이를 참조해서 공부했다&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;여기서 중요한건, 쿼리에서도 변수를 활용할 수 있다는 것!!!!&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;사용하는 방식은&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;SET @변수명 = 변수값;&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;으로 @(앳사인)뒤에 변수명을 정해주고 해당 변수에 값을 선언하면 된다. 그리고 이후의 SELECT문과 구분되기 위해 &lt;b&gt;;(세미콜론)은 필수&lt;/b&gt;다.&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;이렇게 선언하고나서 SELECT문에서 @변수명으로 사용이 가능하게되고&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;만약 SELECT문 안에서 변수에 값을 다시 대입해야 한다면 단순히 = (이퀄)만 사용하는 게 아니라 &lt;b&gt;:= (콜론 + 이퀄)&lt;/b&gt;을 해야 변한 값이 대입이 된다.&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;그래서 이를 참고해서 아래 질의문을 파악해보면 요렇게 된다.&lt;/p&gt;
&lt;pre id=&quot;code_1681909721603&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;SET @HOUR = -1; 	# @HOUR이란 변수에 -1을 대입
SELECT 
    (@HOUR := @HOUR + 1) AS HOUR,	# @HOUR에 @HOUR에서 +1한 값을 다시 대입해서 0부터 출력
    (SELECT 
        COUNT(*)	# 7라인에 일치하는 시간 것만 조회하니 전체조회 COUNT하면 그시간대 입양된 수
    FROM ANIMAL_OUTS 
    WHERE HOUR(DATETIME) = @HOUR) AS COUNT	# 그리고 조건에서도 이 @변수와 일치하는 조건
FROM ANIMAL_OUTS
WHERE @HOUR &amp;lt; 23;	# 이 조건으로 @HOUR은 22까지지만 SELECT문 안에서 +1하는 구문때문에 23까지 출력&lt;/code&gt;&lt;/pre&gt;</description>
      <category>Coding Test/SQL</category>
      <category>SQL</category>
      <author>littlezero48</author>
      <guid isPermaLink="true">https://littlezero48.tistory.com/425</guid>
      <comments>https://littlezero48.tistory.com/425#entry425comment</comments>
      <pubDate>Wed, 19 Apr 2023 22:12:06 +0900</pubDate>
    </item>
    <item>
      <title>Programmers] 조회수가 가장 많은 중고거래 게시판의 첨부파일 조회하기</title>
      <link>https://littlezero48.tistory.com/424</link>
      <description>&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span&gt;문제&lt;/span&gt;&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt; &lt;b&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt; MySQL &lt;/span&gt;&lt;/span&gt;로 풀이&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt; &lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;문제 링크&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;:&lt;/p&gt;
&lt;figure id=&quot;og_1681667260394&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;프로그래머스&quot; data-og-description=&quot;코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.&quot; data-og-host=&quot;programmers.co.kr&quot; data-og-source-url=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/164671&quot; data-og-url=&quot;https://programmers.co.kr/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/52DVx/hySiXI9nl9/j353Yp0IJqSzwDE68RKUkK/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/bK6xaw/hySiX3rAXW/cFuypujKUkZGjaMLcW09s0/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630&quot;&gt;&lt;a href=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/164671&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/164671&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/52DVx/hySiXI9nl9/j353Yp0IJqSzwDE68RKUkK/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/bK6xaw/hySiX3rAXW/cFuypujKUkZGjaMLcW09s0/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;프로그래머스&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;programmers.co.kr&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt; &lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;문제 설명&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;:&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;USED_GOODS_BOARD&lt;span style=&quot;text-align: left;&quot;&gt;와&amp;nbsp;&lt;/span&gt;USED_GOODS_FILE&lt;span style=&quot;text-align: left;&quot;&gt;&amp;nbsp;테이블에서 조회수가 가장 높은 중고거래 게시물에 대한 첨부파일 경로를 조회하는 SQL문을 작성해주세요. 첨부파일 경로는 FILE ID를 기준으로 내림차순 정렬해주세요. 기본적인 파일경로는 /home/grep/src/ 이며, 게시글 ID를 기준으로 디렉토리가 구분되고, 파일이름은 파일 ID, 파일 이름, 파일 확장자로 구성되도록 출력해주세요. 조회수가 가장 높은 게시물은 하나만 존재합니다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;  &lt;b&gt;테이블&lt;/b&gt; :&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;다음은 중고거래 게시판 정보를 담은&lt;span&gt;&amp;nbsp;&lt;/span&gt;USED_GOODS_BOARD&lt;span&gt;&amp;nbsp;&lt;/span&gt;테이블과 중고거래 게시판 첨부파일 정보를 담은&lt;span&gt;&amp;nbsp;&lt;/span&gt;USED_GOODS_FILE&lt;span&gt;&amp;nbsp;&lt;/span&gt;테이블입니다.&lt;span&gt;&amp;nbsp;&lt;/span&gt;USED_GOODS_BOARD&lt;span&gt;&amp;nbsp;&lt;/span&gt;테이블은 다음과 같으며&lt;span&gt;&amp;nbsp;&lt;/span&gt;BOARD_ID,&lt;span&gt;&amp;nbsp;&lt;/span&gt;WRITER_ID,&lt;span&gt;&amp;nbsp;&lt;/span&gt;TITLE,&lt;span&gt;&amp;nbsp;&lt;/span&gt;CONTENTS,&lt;span&gt;&amp;nbsp;&lt;/span&gt;PRICE,&lt;span&gt;&amp;nbsp;&lt;/span&gt;CREATED_DATE,&lt;span&gt;&amp;nbsp;&lt;/span&gt;STATUS,&lt;span&gt;&amp;nbsp;&lt;/span&gt;VIEWS은 게시글 ID, 작성자 ID, 게시글 제목, 게시글 내용, 가격, 작성일, 거래상태, 조회수를 의미합니다.&lt;/p&gt;
&lt;table style=&quot;background-color: #263747; color: #b2c0cc; text-align: left; border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody style=&quot;color: #000000;&quot;&gt;
&lt;tr style=&quot;color: #000000;&quot;&gt;
&lt;td style=&quot;background-color: #202b3d; color: #000000; width: 34.7674%;&quot;&gt;&lt;span style=&quot;color: #ffffff;&quot;&gt;BOARD_ID&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #202b3d; color: #000000; width: 42.3255%;&quot;&gt;&lt;span style=&quot;color: #ffffff;&quot;&gt;VARCHAR(5)&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #202b3d; color: #000000; width: 22.7907%;&quot;&gt;&lt;span style=&quot;color: #ffffff;&quot;&gt;FALSE&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;color: #000000;&quot;&gt;
&lt;td style=&quot;background-color: #202b3d; color: #000000; width: 34.7674%;&quot;&gt;&lt;span style=&quot;color: #ffffff;&quot;&gt;WRITER_ID&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #202b3d; color: #000000; width: 42.3255%;&quot;&gt;&lt;span style=&quot;color: #ffffff;&quot;&gt;VARCHAR(50)&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #202b3d; color: #000000; width: 22.7907%;&quot;&gt;&lt;span style=&quot;color: #ffffff;&quot;&gt;FALSE&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;color: #000000;&quot;&gt;
&lt;td style=&quot;background-color: #202b3d; color: #000000; width: 34.7674%;&quot;&gt;&lt;span style=&quot;color: #ffffff;&quot;&gt;TITLE&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #202b3d; color: #000000; width: 42.3255%;&quot;&gt;&lt;span style=&quot;color: #ffffff;&quot;&gt;VARCHAR(100)&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #202b3d; color: #000000; width: 22.7907%;&quot;&gt;&lt;span style=&quot;color: #ffffff;&quot;&gt;FALSE&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;color: #000000;&quot;&gt;
&lt;td style=&quot;background-color: #202b3d; color: #000000; width: 34.7674%;&quot;&gt;&lt;span style=&quot;color: #ffffff;&quot;&gt;CONTENTS&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #202b3d; color: #000000; width: 42.3255%;&quot;&gt;&lt;span style=&quot;color: #ffffff;&quot;&gt;VARCHAR(1000)&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #202b3d; color: #000000; width: 22.7907%;&quot;&gt;&lt;span style=&quot;color: #ffffff;&quot;&gt;FALSE&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;color: #000000;&quot;&gt;
&lt;td style=&quot;background-color: #202b3d; color: #000000; width: 34.7674%;&quot;&gt;&lt;span style=&quot;color: #ffffff;&quot;&gt;PRICE&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #202b3d; color: #000000; width: 42.3255%;&quot;&gt;&lt;span style=&quot;color: #ffffff;&quot;&gt;NUMBER&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #202b3d; color: #000000; width: 22.7907%;&quot;&gt;&lt;span style=&quot;color: #ffffff;&quot;&gt;FALSE&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;color: #000000;&quot;&gt;
&lt;td style=&quot;background-color: #202b3d; color: #000000; width: 34.7674%;&quot;&gt;&lt;span style=&quot;color: #ffffff;&quot;&gt;CREATED_DATE&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #202b3d; color: #000000; width: 42.3255%;&quot;&gt;&lt;span style=&quot;color: #ffffff;&quot;&gt;DATE&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #202b3d; color: #000000; width: 22.7907%;&quot;&gt;&lt;span style=&quot;color: #ffffff;&quot;&gt;FALSE&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;color: #000000;&quot;&gt;
&lt;td style=&quot;background-color: #202b3d; color: #000000; width: 34.7674%;&quot;&gt;&lt;span style=&quot;color: #ffffff;&quot;&gt;STATUS&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #202b3d; color: #000000; width: 42.3255%;&quot;&gt;&lt;span style=&quot;color: #ffffff;&quot;&gt;VARCHAR(10)&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #202b3d; color: #000000; width: 22.7907%;&quot;&gt;&lt;span style=&quot;color: #ffffff;&quot;&gt;FALSE&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;color: #000000;&quot;&gt;
&lt;td style=&quot;background-color: #202b3d; color: #000000; width: 34.7674%;&quot;&gt;&lt;span style=&quot;color: #ffffff;&quot;&gt;VIEWS&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #202b3d; color: #000000; width: 42.3255%;&quot;&gt;&lt;span style=&quot;color: #ffffff;&quot;&gt;NUMBER&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #202b3d; color: #000000; width: 22.7907%;&quot;&gt;&lt;span style=&quot;color: #ffffff;&quot;&gt;FALSE&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;USED_GOODS_FILE&lt;span&gt;&amp;nbsp;&lt;/span&gt;테이블은 다음과 같으며&lt;span&gt;&amp;nbsp;&lt;/span&gt;FILE_ID,&lt;span&gt;&amp;nbsp;&lt;/span&gt;FILE_EXT,&lt;span&gt;&amp;nbsp;&lt;/span&gt;FILE_NAME,&lt;span&gt;&amp;nbsp;&lt;/span&gt;BOARD_ID는 각각 파일 ID, 파일 확장자, 파일 이름, 게시글 ID를 의미합니다.&lt;/p&gt;
&lt;table style=&quot;background-color: #263747; color: #b2c0cc; text-align: left; border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody style=&quot;color: #000000;&quot;&gt;
&lt;tr style=&quot;color: #000000;&quot;&gt;
&lt;td style=&quot;background-color: #202b3d; color: #000000;&quot;&gt;&lt;span style=&quot;color: #ffffff;&quot;&gt;FILE_ID&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #202b3d; color: #000000;&quot;&gt;&lt;span style=&quot;color: #ffffff;&quot;&gt;VARCHAR(10)&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #202b3d; color: #000000;&quot;&gt;&lt;span style=&quot;color: #ffffff;&quot;&gt;FALSE&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;color: #000000;&quot;&gt;
&lt;td style=&quot;background-color: #202b3d; color: #000000;&quot;&gt;&lt;span style=&quot;color: #ffffff;&quot;&gt;FILE_EXT&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #202b3d; color: #000000;&quot;&gt;&lt;span style=&quot;color: #ffffff;&quot;&gt;VARCHAR(5)&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #202b3d; color: #000000;&quot;&gt;&lt;span style=&quot;color: #ffffff;&quot;&gt;FALSE&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;color: #000000;&quot;&gt;
&lt;td style=&quot;background-color: #202b3d; color: #000000;&quot;&gt;&lt;span style=&quot;color: #ffffff;&quot;&gt;FILE_NAME&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #202b3d; color: #000000;&quot;&gt;&lt;span style=&quot;color: #ffffff;&quot;&gt;VARCHAR(256)&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #202b3d; color: #000000;&quot;&gt;&lt;span style=&quot;color: #ffffff;&quot;&gt;FALSE&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;color: #000000;&quot;&gt;
&lt;td style=&quot;background-color: #202b3d; color: #000000;&quot;&gt;&lt;span style=&quot;color: #ffffff;&quot;&gt;BOARD_ID&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #202b3d; color: #000000;&quot;&gt;&lt;span style=&quot;color: #ffffff;&quot;&gt;VARCHAR(10)&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #202b3d; color: #000000;&quot;&gt;&lt;span style=&quot;color: #ffffff;&quot;&gt;FALSE&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;풀이&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffc1c8;&quot;&gt;추측)&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;가장 조회수가 많이 나오는 글 ID를 먼저 골라오는 게 공수를 줄일 수 있을 듯 하다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;글이랑 첨부파일 먼저 매칭 시키면 일이 커지니까.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;그래서 조회수 최대값을 조회하고 이에 해당하는 글 ID를 찾아 그에 해당하는 파일들을 찾는다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;그리고 FILE_PATH가 파일첨부 테이블의 컬럼들을 조합해서 파일경로로 만들어 출력하면 될듯하다.&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;쿼리)&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;* 1차) 서브쿼리 이용&lt;/p&gt;
&lt;pre id=&quot;code_1681667053625&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;SELECT CONCAT('/home/grep/src/', BOARD_ID, '/', FILE_ID, FILE_NAME, FILE_EXT) AS FILE_PATH
FROM USED_GOODS_FILE 
WHERE BOARD_ID IN (SELECT BOARD_ID
                    FROM USED_GOODS_BOARD
                    WHERE VIEWS IN (SELECT MAX(VIEWS)
                                    FROM USED_GOODS_BOARD))
ORDER BY FILE_ID DESC&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;* 2차) JOIN 이용&lt;/p&gt;
&lt;pre id=&quot;code_1681714969884&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;SELECT CONCAT('/home/grep/src/', BOARD.BOARD_ID, '/', FILE.FILE_ID, FILE.FILE_NAME, FILE.FILE_EXT) AS FILE_PATH
FROM USED_GOODS_FILE AS FILE
LEFT JOIN USED_GOODS_BOARD AS BOARD
ON FILE.BOARD_ID = BOARD.BOARD_ID
WHERE BOARD.VIEWS IN (SELECT MAX(VIEWS) 
               		  FROM USED_GOODS_BOARD)
ORDER BY FILE.FILE_ID DESC&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #c1bef9;&quot;&gt;리뷰)&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;조금 궁금한게 서브쿼리 2번으로 필터링하는거랑..&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;BOARD랑 FILE이랑 매칭하고 WHERE로 최대값 걸러내면 뭐가 더 성능적으로 좋은걸까?&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;쿼리문 실행 순서가 아래와 같은 걸로 아는데&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;from&amp;nbsp;[&amp;nbsp;&amp;gt;&amp;nbsp;on&amp;nbsp;&amp;gt;&amp;nbsp;join&amp;nbsp;]&amp;nbsp;&amp;gt;&amp;nbsp;where&amp;nbsp;&amp;gt;&amp;nbsp;group&amp;nbsp;by&amp;nbsp;[&amp;nbsp;&amp;gt;&amp;nbsp;having&amp;nbsp;]&amp;nbsp;&amp;gt;&amp;nbsp;select&amp;nbsp;&amp;gt;&amp;nbsp;order&amp;nbsp;by&amp;nbsp;&amp;gt;&amp;nbsp;limit&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;WHERE로 필터링 하기 전에 ON하고 JOIN해서 두 테이블을 매칭하면&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;서브쿼리로 조회글 아이디 하나 찾아오는 거 보다 더 공수가 들거 같은데..&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;519&quot; data-origin-height=&quot;511&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bQa5zR/btsatWf7hHf/4XhC2Keb73MGK2QWufinc1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bQa5zR/btsatWf7hHf/4XhC2Keb73MGK2QWufinc1/img.png&quot; data-alt=&quot;둘다 실행계획이 왜 같음?!?!&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bQa5zR/btsatWf7hHf/4XhC2Keb73MGK2QWufinc1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbQa5zR%2FbtsatWf7hHf%2F4XhC2Keb73MGK2QWufinc1%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;519&quot; height=&quot;511&quot; data-origin-width=&quot;519&quot; data-origin-height=&quot;511&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;둘다 실행계획이 왜 같음?!?!&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;라는 내생각과 다르게 찾아보니 충격적인 결과가!&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;서브쿼리의 성능적 문제는 서브쿼리와 컬럼을 &lt;b&gt;비교할때마다 내부 쿼리가 실행된다는 점&lt;/b&gt;이다. ( ‼️)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;쿼리를 반복해서 날리니 성능이 낮아질 수 밖에 없고,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그런 문제때문에 최근 MySQL은 사용자가 서브쿼리문을 사용하면 자체적으로 조인문으로 변환시켜 실행하도록 업데이트되어 결국 둘다 실행계획이 같았던 것. 내부적으로 변환해줘도 꼭 필요한 경우가 아니라면 서브쿼리는 남용하지 않는 것이 좋다고 한다. 주의하도록!!!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;참고자료&lt;/p&gt;
&lt;figure id=&quot;og_1681715210145&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;[MYSQL]   JOIN과 서브쿼리 차이 및 변환   정리&quot; data-og-description=&quot;조인(JOIN) vs 서브쿼리(Sub Query) 조인과 서브쿼리는 때로 동일한 결과를 얻을 수 있다. 상황에 따라 조인을 사용하는 것이 훨씬 좋을 때도 있고, 반면에 서브 쿼리를 사용하는 것이 좋을 때도 있다.&quot; data-og-host=&quot;inpa.tistory.com&quot; data-og-source-url=&quot;https://inpa.tistory.com/entry/MYSQL-%F0%9F%93%9A-JOIN%EA%B3%BC-%EC%84%9C%EB%B8%8C%EC%BF%BC%EB%A6%AC-%EC%B0%A8%EC%9D%B4-%EB%B0%8F-%EB%B3%80%ED%99%98-%F0%9F%92%AF-%EC%A0%95%EB%A6%AC&quot; data-og-url=&quot;https://inpa.tistory.com/entry/MYSQL-%F0%9F%93%9A-JOIN%EA%B3%BC-%EC%84%9C%EB%B8%8C%EC%BF%BC%EB%A6%AC-%EC%B0%A8%EC%9D%B4-%EB%B0%8F-%EB%B3%80%ED%99%98-%F0%9F%92%AF-%EC%A0%95%EB%A6%AC&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/h3VeP/hySi3ceeiF/aCt3hX0htI9fWeWu59JVPK/img.jpg?width=800&amp;amp;height=450&amp;amp;face=0_0_800_450,https://scrap.kakaocdn.net/dn/bgWdRJ/hySi2RUGjr/Qjmr8RxuaKM2LNz5TB3LV1/img.jpg?width=800&amp;amp;height=450&amp;amp;face=0_0_800_450,https://scrap.kakaocdn.net/dn/2ISDW/hySi2j2BBy/6gmNV1mvaQjfyjRfoq4hN1/img.jpg?width=1024&amp;amp;height=576&amp;amp;face=0_0_1024_576&quot;&gt;&lt;a href=&quot;https://inpa.tistory.com/entry/MYSQL-%F0%9F%93%9A-JOIN%EA%B3%BC-%EC%84%9C%EB%B8%8C%EC%BF%BC%EB%A6%AC-%EC%B0%A8%EC%9D%B4-%EB%B0%8F-%EB%B3%80%ED%99%98-%F0%9F%92%AF-%EC%A0%95%EB%A6%AC&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://inpa.tistory.com/entry/MYSQL-%F0%9F%93%9A-JOIN%EA%B3%BC-%EC%84%9C%EB%B8%8C%EC%BF%BC%EB%A6%AC-%EC%B0%A8%EC%9D%B4-%EB%B0%8F-%EB%B3%80%ED%99%98-%F0%9F%92%AF-%EC%A0%95%EB%A6%AC&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/h3VeP/hySi3ceeiF/aCt3hX0htI9fWeWu59JVPK/img.jpg?width=800&amp;amp;height=450&amp;amp;face=0_0_800_450,https://scrap.kakaocdn.net/dn/bgWdRJ/hySi2RUGjr/Qjmr8RxuaKM2LNz5TB3LV1/img.jpg?width=800&amp;amp;height=450&amp;amp;face=0_0_800_450,https://scrap.kakaocdn.net/dn/2ISDW/hySi2j2BBy/6gmNV1mvaQjfyjRfoq4hN1/img.jpg?width=1024&amp;amp;height=576&amp;amp;face=0_0_1024_576');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;[MYSQL]   JOIN과 서브쿼리 차이 및 변환   정리&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;조인(JOIN) vs 서브쿼리(Sub Query) 조인과 서브쿼리는 때로 동일한 결과를 얻을 수 있다. 상황에 따라 조인을 사용하는 것이 훨씬 좋을 때도 있고, 반면에 서브 쿼리를 사용하는 것이 좋을 때도 있다.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;inpa.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Coding Test/SQL</category>
      <category>SQL</category>
      <author>littlezero48</author>
      <guid isPermaLink="true">https://littlezero48.tistory.com/424</guid>
      <comments>https://littlezero48.tistory.com/424#entry424comment</comments>
      <pubDate>Mon, 17 Apr 2023 16:03:44 +0900</pubDate>
    </item>
    <item>
      <title>Programmers] 대여 횟수가 많은 자동차들의 월별 대여 횟수 구하기</title>
      <link>https://littlezero48.tistory.com/423</link>
      <description>&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span&gt;문제&lt;/span&gt;&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt; &lt;b&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt; MySQL &lt;/span&gt;&lt;/span&gt;로 풀이&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt; &lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;문제 링크&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;:&lt;/p&gt;
&lt;figure id=&quot;og_1681578736128&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;프로그래머스&quot; data-og-description=&quot;코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.&quot; data-og-host=&quot;programmers.co.kr&quot; data-og-source-url=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/151139&quot; data-og-url=&quot;https://programmers.co.kr/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/dXKH8C/hyShHN75lv/hTSaihJhWDhZZzROnpntLK/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/bzRwWe/hyShI0AvRm/0akkkKXBP1Jbp5m8S7ujmk/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630&quot;&gt;&lt;a href=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/151139&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/151139&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/dXKH8C/hyShHN75lv/hTSaihJhWDhZZzROnpntLK/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/bzRwWe/hyShI0AvRm/0akkkKXBP1Jbp5m8S7ujmk/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;프로그래머스&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;programmers.co.kr&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt; &lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;문제 설명&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;:&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;CAR_RENTAL_COMPANY_RENTAL_HISTORY&lt;span style=&quot;text-align: left;&quot;&gt;&amp;nbsp;테이블에서 대여 시작일을 기준으로 2022년 8월부터 2022년 10월까지 총 대여 횟수가 5회 이상인 자동차들에 대해서 해당 기간 동안의 월별 자동차 ID 별 총 대여 횟수(컬럼명:&amp;nbsp;&lt;/span&gt;RECORDS&lt;span style=&quot;text-align: left;&quot;&gt;) 리스트를 출력하는 SQL문을 작성해주세요. 결과는 월을 기준으로 오름차순 정렬하고, 월이 같다면 자동차 ID를 기준으로 내림차순 정렬해주세요. 특정 월의 총 대여 횟수가 0인 경우에는 결과에서 제외해주세요.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;  &lt;b&gt;테이블&lt;/b&gt; :&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;다음은 어느 자동차 대여 회사의 자동차 대여 기록 정보를 담은&lt;span&gt;&amp;nbsp;&lt;/span&gt;CAR_RENTAL_COMPANY_RENTAL_HISTORY&lt;span&gt;&amp;nbsp;&lt;/span&gt;테이블입니다.&lt;span&gt;&amp;nbsp;&lt;/span&gt;CAR_RENTAL_COMPANY_RENTAL_HISTORY&lt;span&gt;&amp;nbsp;&lt;/span&gt;테이블은 아래와 같은 구조로 되어있으며,&lt;span&gt;&amp;nbsp;&lt;/span&gt;HISTORY_ID,&lt;span&gt;&amp;nbsp;&lt;/span&gt;CAR_ID,&lt;span&gt;&amp;nbsp;&lt;/span&gt;START_DATE,&lt;span&gt;&amp;nbsp;&lt;/span&gt;END_DATE&lt;span&gt;&amp;nbsp;&lt;/span&gt;는 각각 자동차 대여 기록 ID, 자동차 ID, 대여 시작일, 대여 종료일을 나타냅니다.&lt;/p&gt;
&lt;table style=&quot;background-color: #263747; color: #b2c0cc; text-align: left; border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody style=&quot;color: #000000;&quot;&gt;
&lt;tr style=&quot;color: #000000;&quot;&gt;
&lt;td style=&quot;background-color: #202b3d; color: #000000;&quot;&gt;&lt;span style=&quot;color: #ffffff;&quot;&gt;HISTORY_ID&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #202b3d; color: #000000;&quot;&gt;&lt;span style=&quot;color: #ffffff;&quot;&gt;INTEGER&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #202b3d; color: #000000;&quot;&gt;&lt;span style=&quot;color: #ffffff;&quot;&gt;FALSE&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;color: #000000;&quot;&gt;
&lt;td style=&quot;background-color: #202b3d; color: #000000;&quot;&gt;&lt;span style=&quot;color: #ffffff;&quot;&gt;CAR_ID&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #202b3d; color: #000000;&quot;&gt;&lt;span style=&quot;color: #ffffff;&quot;&gt;INTEGER&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #202b3d; color: #000000;&quot;&gt;&lt;span style=&quot;color: #ffffff;&quot;&gt;FALSE&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;color: #000000;&quot;&gt;
&lt;td style=&quot;background-color: #202b3d; color: #000000;&quot;&gt;&lt;span style=&quot;color: #ffffff;&quot;&gt;START_DATE&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #202b3d; color: #000000;&quot;&gt;&lt;span style=&quot;color: #ffffff;&quot;&gt;DATE&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #202b3d; color: #000000;&quot;&gt;&lt;span style=&quot;color: #ffffff;&quot;&gt;FALSE&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;color: #000000;&quot;&gt;
&lt;td style=&quot;background-color: #202b3d; color: #000000;&quot;&gt;&lt;span style=&quot;color: #ffffff;&quot;&gt;END_DATE&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #202b3d; color: #000000;&quot;&gt;&lt;span style=&quot;color: #ffffff;&quot;&gt;DATE&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #202b3d; color: #000000;&quot;&gt;&lt;span style=&quot;color: #ffffff;&quot;&gt;FALSE&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;풀이&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffc1c8;&quot;&gt;추측)&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;예약한 날의 조건에 맞게 먼저 필터링해서 ROW수를 줄이고,&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;그 3개월 안에 5번 이상인 CAR_ID를 질의한 후에&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;그 CAR_ID 대상으로 ROW수를 줄인 결과에서 해당 기간 동안을 달기준, 차기준으로 GROUP화 시켜 그룹 함수 카운트로달마다 몇번 렌트가 됬는지 질의하면 될 듯하다.&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;쿼리)&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;* 1차)&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1681578307517&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;WITH F AS 
(
SELECT HISTORY_ID, CAR_ID, MONTH(START_DATE) AS MONTH
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY 
WHERE DATE_FORMAT(START_DATE,'%Y-%m-%d') BETWEEN '2022-08-01' AND '2022-10-31'
)

SELECT MONTH, CAR_ID, COUNT(CAR_ID) AS RECORDS
FROM F
WHERE CAR_ID IN (SELECT CAR_ID 
                 FROM F 
                 GROUP BY CAR_ID
                 HAVING COUNT(CAR_ID) &amp;gt;= 5)
GROUP BY MONTH, CAR_ID
ORDER BY MONTH ASC, CAR_ID DESC&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;* 2차) 서브쿼리를 JOIN으로 교체&lt;/p&gt;
&lt;pre id=&quot;code_1681715915775&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;WITH F AS 
(
SELECT HISTORY_ID, CAR_ID, MONTH(START_DATE) AS MONTH
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY 
WHERE DATE_FORMAT(START_DATE,'%Y-%m-%d') BETWEEN '2022-08-01' AND '2022-10-31'
)

SELECT F.MONTH, F.CAR_ID, COUNT(F.CAR_ID) AS RECORDS
FROM F
INNER JOIN (SELECT CAR_ID 
            FROM F 
            GROUP BY CAR_ID
            HAVING COUNT(CAR_ID) &amp;gt;= 5) AS A
ON F.CAR_ID = A.CAR_ID
GROUP BY F.MONTH, F.CAR_ID
ORDER BY F.MONTH ASC, F.CAR_ID DESC&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #c1bef9;&quot;&gt;리뷰)&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;하다 보니 &quot;2022년 8월부터 2022년 10월까지 총 대여 횟수가 5회 이상인 자동차들에 대해서 해당 기간 동안의 월별 자동차 ID 별 총 대여 횟수(컬럼명: RECORDS) 리스트를 출력&quot; 이분에서 8월부터 10월까지의 결과를 두번 써야할 일이 생겼다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;3개월간 총 5회 렌트된 차를 검색할 때 한번&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;3개월간 기록을 달마다 차마다 렌트 카운트 해줄 때 한번&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;그래서 이번엔 임시 테이블을 써서 2번 반복안하고 한번의 결과물로 SELECT문에 두번 쓰는 걸로!&lt;/p&gt;</description>
      <category>Coding Test/SQL</category>
      <category>SQL</category>
      <author>littlezero48</author>
      <guid isPermaLink="true">https://littlezero48.tistory.com/423</guid>
      <comments>https://littlezero48.tistory.com/423#entry423comment</comments>
      <pubDate>Sun, 16 Apr 2023 02:14:29 +0900</pubDate>
    </item>
    <item>
      <title>따배도 도커 시리즈 7] 컨테이너 관리</title>
      <link>https://littlezero48.tistory.com/422</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt; &amp;nbsp;&lt;span style=&quot;color: #ef5369;&quot;&gt;&lt;b&gt;공부 계기&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #ef5369;&quot;&gt;&lt;b&gt;추가적인 도커 공부를 위해 유튜브 따배도 도커 시리즈를 보면서 정리해 봅니다.&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;color: #ef5369;&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;div id=&quot;book-toc&quot; style=&quot;color: #333333; text-align: start;&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;목차&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;h3 id=&quot; 6-1.-컨테이너-사용하기--이론&quot; style=&quot;text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt; 7-1. 컨테이너 관리하기 : 이론&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;공식문서 링크&lt;/p&gt;
&lt;figure id=&quot;og_1681536049447&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Docker run reference&quot; data-og-description=&quot; &quot; data-og-host=&quot;docs.docker.com&quot; data-og-source-url=&quot;https://docs.docker.com/engine/reference/run/&quot; data-og-url=&quot;https://docs.docker.com/engine/reference/run/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/ffgwD/hyShD5w099/L087l0W9ztm2WBAZfHfJzk/img.png?width=129&amp;amp;height=128&amp;amp;face=0_0_129_128,https://scrap.kakaocdn.net/dn/k8CgX/hyShI6Sw0V/9kBEWXxrPWVfKE930LIoXk/img.png?width=950&amp;amp;height=500&amp;amp;face=0_0_950_500&quot;&gt;&lt;a href=&quot;https://docs.docker.com/engine/reference/run/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://docs.docker.com/engine/reference/run/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/ffgwD/hyShD5w099/L087l0W9ztm2WBAZfHfJzk/img.png?width=129&amp;amp;height=128&amp;amp;face=0_0_129_128,https://scrap.kakaocdn.net/dn/k8CgX/hyShI6Sw0V/9kBEWXxrPWVfKE930LIoXk/img.png?width=950&amp;amp;height=500&amp;amp;face=0_0_950_500');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Docker run reference&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;docs.docker.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1️⃣ &lt;b&gt;컨테이너 하드웨어 리소스 제한 어떻게 해요?&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;컨테이너는 호스트 하드웨어 리소스의 사용 제한을 받지 않는다. (호스트의 전부 사용가능)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;효율적으로 사용하기 위해서 리소스 제한을 걸어야한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Docker 명령어를 통해 제한 할 수 있는 리소스&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- CPU, Memory, Disk I/O&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$ docker run --help&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;명령어에서 그 종류를 확인 할 수 있다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;&amp;nbsp;Memory 리소스 제한&amp;nbsp;&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;제한단위 b (바이트), k(키로바이트), m(메가바이트), g(기가바이트)로 할당&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style8&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 25.1163%; text-align: center;&quot;&gt;&lt;b&gt;옵션&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 74.8837%; text-align: center;&quot;&gt;&lt;b&gt;의미&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 25.1163%;&quot;&gt;--memory, -m&lt;/td&gt;
&lt;td style=&quot;width: 74.8837%;&quot;&gt;컨테이너가 사용할 최대 메모리 설정, 그 이상 쓰게되면 컨테이너가 스스로 킬함&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 25.1163%;&quot;&gt;--memory-swap&lt;/td&gt;
&lt;td style=&quot;width: 74.8837%;&quot;&gt;컨테이너의 스왑메모리&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;sup class=&quot;footnote&quot;&gt;&lt;a href=&quot;#footnote_422_1&quot; id=&quot;footnote_link_422_1&quot; onmouseover=&quot;tistoryFootnote.show(this, 422, 1)&quot; onmouseout=&quot;tistoryFootnote.hide(422, 1)&quot; style=&quot;color:#f9650d; font-family: Verdana, Sans-serif; display: inline;&quot;&gt;&lt;span style=&quot;display: none;&quot;&gt;[각주:&lt;/span&gt;1&lt;span style=&quot;display: none;&quot;&gt;]&lt;/span&gt;&lt;/a&gt;&lt;/sup&gt; 영역 설정&lt;br /&gt;&lt;u&gt;설정시 주의)&lt;/u&gt;&lt;br /&gt;이 옵션뒤의 메모리 크기는 메모리 + 스왑메모리의 크기를 넣는다.&lt;br /&gt;스왑메모리를 사용하지 않으려면 이 옵션뒤에 메모리 크기와 동일하게 적어주면 되며&lt;br /&gt;만약 스왑 메모리를 설정을 따로 안하면 메모리의 2배가 설정된다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 25.1163%;&quot;&gt;--memory-reservation&lt;/td&gt;
&lt;td style=&quot;width: 74.8837%;&quot;&gt;--memory 값보다 적은 값으로 구성하는 소프트 제한 값 설정&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 25.1163%;&quot;&gt;--oom-kill-disable&lt;/td&gt;
&lt;td style=&quot;width: 74.8837%;&quot;&gt;OOM Killer&lt;sup class=&quot;footnote&quot;&gt;&lt;a href=&quot;#footnote_422_2&quot; id=&quot;footnote_link_422_2&quot; onmouseover=&quot;tistoryFootnote.show(this, 422, 2)&quot; onmouseout=&quot;tistoryFootnote.hide(422, 2)&quot; style=&quot;color:#f9650d; font-family: Verdana, Sans-serif; display: inline;&quot;&gt;&lt;span style=&quot;display: none;&quot;&gt;[각주:&lt;/span&gt;2&lt;span style=&quot;display: none;&quot;&gt;]&lt;/span&gt;&lt;/a&gt;&lt;/sup&gt;&lt;/span&gt;가 프로세스 kill하지 못하도록 보호&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style4&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 9.4186%;&quot;&gt;$ docker&lt;/td&gt;
&lt;td style=&quot;width: 4.76744%;&quot;&gt;run&lt;/td&gt;
&lt;td style=&quot;width: 3.72093%;&quot;&gt;-d&lt;/td&gt;
&lt;td style=&quot;width: 71.7442%;&quot;&gt;-m 512m&lt;/td&gt;
&lt;td style=&quot;width: 10.3488%;&quot;&gt;nginx:1.14&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;background-color: #f9f9f9; width: 9.4186%;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;background-color: #f9f9f9; width: 4.76744%;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;background-color: #f9f9f9; width: 3.72093%;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;background-color: #f9f9f9; width: 71.7442%;&quot;&gt;메모리 512 메가 바이트로 설정&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;background-color: #f9f9f9; width: 10.3488%;&quot;&gt;이미지명:태그&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 9.4186%;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;width: 4.76744%;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;width: 3.72093%;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;width: 71.7442%;&quot;&gt;-m 1g --memory-reservation 500m&lt;/td&gt;
&lt;td style=&quot;width: 10.3488%;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;background-color: #f9f9f9; width: 9.4186%;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;background-color: #f9f9f9; width: 4.76744%;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;background-color: #f9f9f9; width: 3.72093%;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;background-color: #f9f9f9; width: 71.7442%;&quot;&gt;해당 컨테이너는 최소 500메가 바이트를 보장받고 최대 1기가바이트 사용가능&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;background-color: #f9f9f9; width: 10.3488%;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 9.4186%;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;width: 4.76744%;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;width: 3.72093%;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;width: 71.7442%;&quot;&gt;-m 200m --memory-swap 300m&lt;/td&gt;
&lt;td style=&quot;width: 10.3488%;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;background-color: #f9f9f9; width: 9.4186%;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;background-color: #f9f9f9; width: 4.76744%;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;background-color: #f9f9f9; width: 3.72093%;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;background-color: #f9f9f9; width: 71.7442%;&quot;&gt;메모리는 200메가바이트 할당하고 스왑 뒤에 300메가 바이트를 써놨으니&lt;br /&gt;200m + 300m = 500m 일까? ❌&lt;br /&gt;뒤의 300m는 앞의 200m를 포함하고 있어 실제 스왑메모리는 100m에 해당&lt;/td&gt;
&lt;td style=&quot;background-color: #f9f9f9; width: 10.3488%;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 9.4186%;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;width: 4.76744%;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;width: 3.72093%;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;width: 71.7442%;&quot;&gt;-m 200m --oom-kill-disable&lt;/td&gt;
&lt;td style=&quot;width: 10.3488%;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;background-color: #f9f9f9; width: 9.4186%;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;background-color: #f9f9f9; width: 4.76744%;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;background-color: #f9f9f9; width: 3.72093%;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;background-color: #f9f9f9; width: 71.7442%;&quot;&gt;메모리는 200m 할당하고 물리메모리가 부족해서 oom killer가 실행됬을 때에도 이 컨테이너는 강제 종료되지 않고 실행을 보장받는다.&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;background-color: #f9f9f9; width: 10.3488%;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&amp;nbsp;&lt;b&gt;CPU 리소스 제한&amp;nbsp;&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style8&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 23.721%; text-align: center;&quot;&gt;&lt;b&gt;옵션&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 76.279%; text-align: center;&quot;&gt;&lt;b&gt;의미&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 23.721%;&quot;&gt;--cpus&lt;/td&gt;
&lt;td style=&quot;width: 76.279%;&quot;&gt;컨테이너에 할당할 최대 CPI core&lt;b&gt;수&lt;/b&gt;를 지정. 어떤 core를 쓸지는 지정되지 않는다&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 23.721%;&quot;&gt;--cpuset-cpus&lt;/td&gt;
&lt;td style=&quot;width: 76.279%;&quot;&gt;컨테이너가 사용할 수 있는 CPU나 코어를 할당. CPU index는 0부터 시작.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 23.721%;&quot;&gt;--cpu--share&lt;/td&gt;
&lt;td style=&quot;width: 76.279%;&quot;&gt;컨테이너가 사용하는 CPU의 상대 가중치 설정. &lt;br /&gt;말그대로 CPU를 &lt;b&gt;상대적&lt;/b&gt;으로 얼마나 사용할 수 있는지를 설정한다. 기본은 &lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;1024이다.&lt;br /&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 101px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style4&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;$ docker&lt;/td&gt;
&lt;td&gt;run&lt;/td&gt;
&lt;td&gt;-d&lt;/td&gt;
&lt;td&gt;-cpus=&quot;.5&quot;&lt;/td&gt;
&lt;td&gt;ubuntu:20.04&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;background-color: #f9f9f9;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;background-color: #f9f9f9;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;background-color: #f9f9f9;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;background-color: #f9f9f9;&quot;&gt;이 컨테이너는 최대 0.5개의 CPU파워 사용가능&lt;/td&gt;
&lt;td style=&quot;background-color: #f9f9f9;&quot;&gt;이미지명:태그&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;-cpuset-cpus 0-3&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;background-color: #f9f9f9;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;background-color: #f9f9f9;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;background-color: #f9f9f9;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;background-color: #f9f9f9;&quot;&gt;이 컨테이너는 인덱스 0부터 3까지 해당하는 CPU가 할당&lt;/td&gt;
&lt;td style=&quot;background-color: #f9f9f9;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;-cpu-shares 2048&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;background-color: #f9f9f9;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;background-color: #f9f9f9;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;background-color: #f9f9f9;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;background-color: #f9f9f9;&quot;&gt;컨테이너가 사용하는 CPU 상대 가중치를 2048로 설정&lt;br /&gt;만약 다른 컨테이너가 1024라면 이 컨테이너는 다른 컨테이너에 비해 2배 사용가능&lt;/td&gt;
&lt;td style=&quot;background-color: #f9f9f9;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&amp;nbsp;&lt;b&gt;Block I/O&lt;/b&gt;&lt;sup class=&quot;footnote&quot;&gt;&lt;a href=&quot;#footnote_422_3&quot; id=&quot;footnote_link_422_3&quot; onmouseover=&quot;tistoryFootnote.show(this, 422, 3)&quot; onmouseout=&quot;tistoryFootnote.hide(422, 3)&quot; style=&quot;color:#f9650d; font-family: Verdana, Sans-serif; display: inline;&quot;&gt;&lt;span style=&quot;display: none;&quot;&gt;[각주:&lt;/span&gt;3&lt;span style=&quot;display: none;&quot;&gt;]&lt;/span&gt;&lt;/a&gt;&lt;/sup&gt; &lt;/span&gt;&lt;b&gt;제한&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 71px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style8&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 24.3023%; height: 20px; text-align: center;&quot;&gt;&lt;b&gt;옵션&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 75.6977%; height: 20px; text-align: center;&quot;&gt;&lt;b&gt;의미&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 24.3023%; height: 17px;&quot;&gt;--blkio-weight&lt;br /&gt;--blkio-weight-device&lt;/td&gt;
&lt;td style=&quot;width: 75.6977%; height: 17px;&quot;&gt;모든 컨테이너가 동작시 block I/O에 I/O 스케쥴링을 받게 되는데 여기서 Quota(쿼터/몫)를 설정할 수 있으며 100-1000까지 선택가능하다&lt;br /&gt;기본은&amp;nbsp; 500&lt;br /&gt;weight는 일단 상대적 가중치를 의미하며 만약 다른 컨테이너가 500이고 한 컨테이너만 1000일시 I/O 스케쥴링을 다른 컨테이너에 비해 2배더 할당 받을 수 있다.&amp;nbsp;&lt;br /&gt;-devide가 붙은 옵션은 특정 디바이스에 대해서만 가중치를 부여한다.&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 24.3023%; height: 17px;&quot;&gt;--device-read-bps&lt;br /&gt;--device-write-bps&lt;/td&gt;
&lt;td style=&quot;width: 75.6977%; height: 17px;&quot;&gt;특정 디바이스에 대한 읽기와 쓰기 작업의 초당 제한은 kb, mb, gb 단위로 설정&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 24.3023%; height: 17px;&quot;&gt;--device-read-iops&lt;br /&gt;--device-write-iops&lt;/td&gt;
&lt;td style=&quot;width: 75.6977%; height: 17px;&quot;&gt;컨테이너의 read/write 속도의 쿼터를 설정한다&lt;br /&gt;초당 쿼터를 제한해서 I/O를 발생시킨다. 설정시 0 이상의 정수로 표기하며 이 수는 아래 식의 iops 값에 해당한다.&amp;nbsp;&lt;br /&gt;초당 데이터 전송량 = IOPS * 블럭크기 (단위 데이터 용량)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 114px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style4&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 8.83721%; height: 17px;&quot;&gt;$ docker&lt;/td&gt;
&lt;td style=&quot;width: 5.23258%; height: 17px;&quot;&gt;run&lt;/td&gt;
&lt;td style=&quot;width: 9.3023%; height: 17px;&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&amp;nbsp;-it --rm&amp;nbsp;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 52.0348%; height: 17px;&quot;&gt;--blkio-weight 100&lt;/td&gt;
&lt;td style=&quot;width: 13.3139%; height: 17px;&quot;&gt;ubuntu:latest&lt;/td&gt;
&lt;td style=&quot;width: 11.2791%; height: 17px;&quot;&gt;/bin/bash&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 60px;&quot;&gt;
&lt;td style=&quot;width: 8.83721%; height: 60px;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;width: 5.23258%; height: 60px;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;width: 9.3023%; height: 60px;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;width: 52.0348%; height: 60px;&quot;&gt;(다른 컨테이너들이 전부 500이면) 이 컨테이너의 Block IO의 쿼터를 100으로 하여 500보다 상대적으로 적게 리소스를 할당 받겠다&lt;/td&gt;
&lt;td style=&quot;width: 13.3139%; height: 60px;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;width: 11.2791%; height: 60px;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 8.83721%; height: 17px;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;width: 5.23258%; height: 17px;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;width: 9.3023%; height: 17px;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;width: 52.0348%; height: 17px;&quot;&gt;--device-write-bps /dev/vda:1mb&lt;/td&gt;
&lt;td style=&quot;width: 13.3139%; height: 17px;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;width: 11.2791%; height: 17px;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 8.83721%; height: 20px;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;width: 5.23258%; height: 20px;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;width: 9.3023%; height: 20px;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;width: 52.0348%; height: 20px;&quot;&gt;디바이스 vda에 write해줄때는 최대 1메가바이트로 설정&lt;/td&gt;
&lt;td style=&quot;width: 13.3139%; height: 20px;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;width: 11.2791%; height: 20px;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 8.83721%;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;width: 5.23258%;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;width: 9.3023%;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;width: 52.0348%;&quot;&gt;--device-write-iops /dev/vda:100&lt;/td&gt;
&lt;td style=&quot;width: 13.3139%;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;width: 11.2791%;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 8.83721%;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;width: 5.23258%;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;width: 9.3023%;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;width: 52.0348%;&quot;&gt;디바이스 vda에 iops값 100을 할당&lt;/td&gt;
&lt;td style=&quot;width: 13.3139%;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;width: 11.2791%;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style3&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2️⃣ &lt;b&gt;컨테이너 사용 리소스를 확인하는 모니터링 툴이 있나요?&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;도커 모니터링 명령어&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1) 실행중인 컨테이너의 런타임 통계 확인&lt;/p&gt;
&lt;pre id=&quot;code_1681540478397&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;docker stats [옵션] [컨테이너]&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2) 도커 호스트의 실시간 event 정보 수집 및 출력&lt;/p&gt;
&lt;pre id=&quot;code_1681540554988&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;docker events -f container=&amp;lt;컨테이너명&amp;gt;
docker image -f container=&amp;lt;컨테이너명&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;cAdvisor&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;구글에서 만든 도커 모니터링 툴&lt;/p&gt;
&lt;figure id=&quot;og_1681540656361&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;object&quot; data-og-title=&quot;GitHub - google/cadvisor: Analyzes resource usage and performance characteristics of running containers.&quot; data-og-description=&quot;Analyzes resource usage and performance characteristics of running containers. - GitHub - google/cadvisor: Analyzes resource usage and performance characteristics of running containers.&quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/google/cadvisor&quot; data-og-url=&quot;https://github.com/google/cadvisor&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bxSYku/hyShGBfZh3/DTEtDYdpKqSDxeHSM9w3D0/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600&quot;&gt;&lt;a href=&quot;https://github.com/google/cadvisor&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://github.com/google/cadvisor&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bxSYku/hyShGBfZh3/DTEtDYdpKqSDxeHSM9w3D0/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;GitHub - google/cadvisor: Analyzes resource usage and performance characteristics of running containers.&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Analyzes resource usage and performance characteristics of running containers. - GitHub - google/cadvisor: Analyzes resource usage and performance characteristics of running containers.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;github.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 id=&quot; 6-1.-컨테이너-사용하기--이론&quot; style=&quot;text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt; 7-2. 컨테이너 관리하기 : 실습&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;➕ 이 실습 전에 추가로 알아둘 내용&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;리눅스의 부하 테스트 프로그램 중 하나 Stress&lt;/p&gt;
&lt;div style=&quot;background-color: #fafafa; color: #333333;&quot; data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;부하 테스트 프로그램 stress를 이용한 dockerfile 생성&lt;/p&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;457&quot; data-origin-height=&quot;68&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/rSpKf/btsalakTJ0n/S23WRJzhZpPedQBQcCokO1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/rSpKf/btsalakTJ0n/S23WRJzhZpPedQBQcCokO1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/rSpKf/btsalakTJ0n/S23WRJzhZpPedQBQcCokO1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FrSpKf%2FbtsalakTJ0n%2FS23WRJzhZpPedQBQcCokO1%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;457&quot; height=&quot;68&quot; data-origin-width=&quot;457&quot; data-origin-height=&quot;68&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;435&quot; data-origin-height=&quot;118&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/zqOol/btsaqQlZbZM/UqWOGNpgtL4brtyrmiawtk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/zqOol/btsaqQlZbZM/UqWOGNpgtL4brtyrmiawtk/img.png&quot; data-alt=&quot;비쥬얼 에디터로 dockerfile 생성&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/zqOol/btsaqQlZbZM/UqWOGNpgtL4brtyrmiawtk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FzqOol%2FbtsaqQlZbZM%2FUqWOGNpgtL4brtyrmiawtk%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;435&quot; height=&quot;118&quot; data-origin-width=&quot;435&quot; data-origin-height=&quot;118&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;비쥬얼 에디터로 dockerfile 생성&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1081&quot; data-origin-height=&quot;326&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/d1XzSG/btsai6i0nGQ/R0UHTnk8DzKKLK0HuXddW1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/d1XzSG/btsai6i0nGQ/R0UHTnk8DzKKLK0HuXddW1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/d1XzSG/btsai6i0nGQ/R0UHTnk8DzKKLK0HuXddW1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fd1XzSG%2Fbtsai6i0nGQ%2FR0UHTnk8DzKKLK0HuXddW1%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;1081&quot; height=&quot;326&quot; data-origin-width=&quot;1081&quot; data-origin-height=&quot;326&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;컨테이너 빌드하고&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;아래 명령어를 치면 2개의 cpu에 작업부하를 발생시킴&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1681542136342&quot; class=&quot;ada&quot; style=&quot;background-color: #f8f8f8; color: #383a42;&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;stress --cpu 2&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래는 메모리 부하 테스트로 프로세스 2개와 사용할 메모리 만큼을 부하 발생시킴&lt;/p&gt;
&lt;pre id=&quot;code_1681542136342&quot; class=&quot;armasm&quot; style=&quot;background-color: #f8f8f8; color: #383a42;&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;stress --vm 2 --vm-bytes &amp;lt;사용할 크기&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1️⃣&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;컨테이너 리소스 제한&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;&amp;nbsp;메모리 리소스 제한&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1681550285548&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ docke run [-m 메모리크기] [--memory-wap 메모리+스왑크기] &amp;lt;이미지명&amp;gt; [명령어]
# $ docke run -m 100m --memory-swap 100m stress:latest stress --vm 1 --vm-bytes 90m -t 5s&lt;/code&gt;&lt;/pre&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 8.37209%;&quot;&gt;$ docker&lt;/td&gt;
&lt;td style=&quot;width: 4.30232%;&quot;&gt;run&lt;/td&gt;
&lt;td style=&quot;width: 10.9303%;&quot;&gt;-m 100m&lt;/td&gt;
&lt;td style=&quot;width: 18.6046%;&quot;&gt;--memory-swap 100m&lt;/td&gt;
&lt;td style=&quot;width: 11.8604%;&quot;&gt;stress:latest&lt;/td&gt;
&lt;td style=&quot;width: 8.83727%;&quot;&gt;stress&lt;/td&gt;
&lt;td style=&quot;width: 7.09302%;&quot;&gt;--vm 1&lt;/td&gt;
&lt;td style=&quot;width: 12.7907%;&quot;&gt;--vm-bytes 90m&lt;/td&gt;
&lt;td style=&quot;width: 7.2093%;&quot;&gt;-t 5s&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 8.37209%;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;width: 4.30232%;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;width: 10.9303%;&quot;&gt;물리메모리&lt;/td&gt;
&lt;td style=&quot;width: 18.6046%;&quot;&gt;물리메모리+스왑메모리&lt;/td&gt;
&lt;td style=&quot;width: 11.8604%;&quot;&gt;이미지&lt;/td&gt;
&lt;td style=&quot;width: 35.9303%;&quot; colspan=&quot;4&quot;&gt;명령어 stress 90mb의 메모리 부하를 5초간&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1102&quot; data-origin-height=&quot;61&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/FbP0j/btsar5J4Gpx/fM0EA1OrbKnbhSZxXSvcD1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/FbP0j/btsar5J4Gpx/fM0EA1OrbKnbhSZxXSvcD1/img.png&quot; data-alt=&quot;성공&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/FbP0j/btsar5J4Gpx/fM0EA1OrbKnbhSZxXSvcD1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FFbP0j%2Fbtsar5J4Gpx%2FfM0EA1OrbKnbhSZxXSvcD1%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;1102&quot; height=&quot;61&quot; data-origin-width=&quot;1102&quot; data-origin-height=&quot;61&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;성공&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;100mb의 메모리를 90mb만 사용했으므로 성공적으로 실행&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;하지만 만약 90mb가 아니라 150mb를 준다면?&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1107&quot; data-origin-height=&quot;114&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/br3UvC/btsafQInp7C/w0PurQICDBMckPAteSXyzK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/br3UvC/btsafQInp7C/w0PurQICDBMckPAteSXyzK/img.png&quot; data-alt=&quot;실패&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/br3UvC/btsafQInp7C/w0PurQICDBMckPAteSXyzK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbr3UvC%2FbtsafQInp7C%2Fw0PurQICDBMckPAteSXyzK%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;1107&quot; height=&quot;114&quot; data-origin-width=&quot;1107&quot; data-origin-height=&quot;114&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;실패&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;최대 메모리를 오버하여 실패가 되어 바로 컨테이너가 kill된걸 확인할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기서 스왑메모리 옵션을 지워준다면?&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;996&quot; data-origin-height=&quot;59&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/mn8cM/btsaibkDb4l/tljTKG5EpPoLIjcDVIjk20/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/mn8cM/btsaibkDb4l/tljTKG5EpPoLIjcDVIjk20/img.png&quot; data-alt=&quot;성공!&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/mn8cM/btsaibkDb4l/tljTKG5EpPoLIjcDVIjk20/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fmn8cM%2FbtsaibkDb4l%2FtljTKG5EpPoLIjcDVIjk20%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;996&quot; height=&quot;59&quot; data-origin-width=&quot;996&quot; data-origin-height=&quot;59&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;성공!&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;왜냐하면 스왑메모리를 명령어로 설정해주지 않으면 물리메모리의 2배로 기본 설정이 되기 때문에&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;--memory-swap 200m를 설정해준 것처럼 되어 정상 작동한다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;  트러블 (해결은 아직이고 일단 체크)&lt;/p&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;또잉?? oom killer로 테스트 해보려고 하니 당신의 kernel에서 지원을 안해 oom killer 내용을 삭제했다는 메시지가 나온다.&lt;/p&gt;
&lt;pre id=&quot;code_1681548742951&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;docker run -d -m 100m --name m4 --oom-kill-disable=true nginx&lt;/code&gt;&lt;/pre&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;891&quot; data-origin-height=&quot;59&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/uDzij/btsamXS7hfH/WSZKMIjHKZKeDWIdSoxkI1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/uDzij/btsamXS7hfH/WSZKMIjHKZKeDWIdSoxkI1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/uDzij/btsamXS7hfH/WSZKMIjHKZKeDWIdSoxkI1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FuDzij%2FbtsamXS7hfH%2FWSZKMIjHKZKeDWIdSoxkI1%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;891&quot; height=&quot;59&quot; data-origin-width=&quot;891&quot; data-origin-height=&quot;59&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;311&quot; data-origin-height=&quot;169&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/brf09y/btsahzswJGv/Bfmcy6qVKzKFbW57bbTt4K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/brf09y/btsahzswJGv/Bfmcy6qVKzKFbW57bbTt4K/img.png&quot; data-alt=&quot;inspect로 봐도 안되어 있음&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/brf09y/btsahzswJGv/Bfmcy6qVKzKFbW57bbTt4K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbrf09y%2FbtsahzswJGv%2FBfmcy6qVKzKFbW57bbTt4K%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;311&quot; height=&quot;169&quot; data-origin-width=&quot;311&quot; data-origin-height=&quot;169&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;inspect로 봐도 안되어 있음&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;ubuntu 전체가 그런건 아닌거 같고 .. 검색해보니 현재 나랑 같은 22.04 LTS에서 이런 문제를 겪었다는 글을 찾을 수 있었다. 원인과 해결책은 아직이라 좀 더 조사해봐야겠다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;일단 20.04 LTS에서는 정상작동하는 것 확인&lt;/p&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1001&quot; data-origin-height=&quot;235&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b1g3wU/btsakeabHTC/khFFUM7QDefkuaWqBocXt0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b1g3wU/btsakeabHTC/khFFUM7QDefkuaWqBocXt0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b1g3wU/btsakeabHTC/khFFUM7QDefkuaWqBocXt0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb1g3wU%2FbtsakeabHTC%2FkhFFUM7QDefkuaWqBocXt0%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;1001&quot; height=&quot;235&quot; data-origin-width=&quot;1001&quot; data-origin-height=&quot;235&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;pre id=&quot;code_1681548760385&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;docker inspect --format '{{.HostConfig.OomKillDisable}}' m4&lt;/code&gt;&lt;/pre&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;987&quot; data-origin-height=&quot;42&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/x9uDI/btsamWNusJo/6k8ZKQyJ0RlFS9wp2xqBE1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/x9uDI/btsamWNusJo/6k8ZKQyJ0RlFS9wp2xqBE1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/x9uDI/btsamWNusJo/6k8ZKQyJ0RlFS9wp2xqBE1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fx9uDI%2FbtsamWNusJo%2F6k8ZKQyJ0RlFS9wp2xqBE1%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;987&quot; height=&quot;42&quot; data-origin-width=&quot;987&quot; data-origin-height=&quot;42&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;또 다른 파일을 조회하여 확인 가능하다.&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1681548861153&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;cat /sys/fs/cgroup/memory/docker/컨테이너fullID/memory.oom_control&lt;/code&gt;&lt;/pre&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1092&quot; data-origin-height=&quot;98&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cbUt14/btsak9lZBCg/vhJilxuMJS6JDgOKdDKRk1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cbUt14/btsak9lZBCg/vhJilxuMJS6JDgOKdDKRk1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cbUt14/btsak9lZBCg/vhJilxuMJS6JDgOKdDKRk1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcbUt14%2Fbtsak9lZBCg%2FvhJilxuMJS6JDgOKdDKRk1%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;1092&quot; height=&quot;98&quot; data-origin-width=&quot;1092&quot; data-origin-height=&quot;98&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;한데 이것도 22.04에서 시스템 디렉토리 구조가 바뀌었고, 컨테이너에 memory.oom_control이라는 파일도 없다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1554&quot; data-origin-height=&quot;212&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dYoAbp/btsaiqhUdWT/48APGmAVGvuGm8cWuoi05K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dYoAbp/btsaiqhUdWT/48APGmAVGvuGm8cWuoi05K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dYoAbp/btsaiqhUdWT/48APGmAVGvuGm8cWuoi05K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdYoAbp%2FbtsaiqhUdWT%2F48APGmAVGvuGm8cWuoi05K%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;1554&quot; height=&quot;212&quot; data-origin-width=&quot;1554&quot; data-origin-height=&quot;212&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style2&quot; /&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;&amp;nbsp;CPU 리소스 제한 실습&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1) cpu 확인&lt;/p&gt;
&lt;pre id=&quot;code_1681550145781&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;lscpu&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;838&quot; data-origin-height=&quot;664&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/KGAGs/btsamYkd8kA/BBniXxrjDJg3aV1CtHKvHK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/KGAGs/btsamYkd8kA/BBniXxrjDJg3aV1CtHKvHK/img.png&quot; data-alt=&quot;버추얼박스에서 cpu2개 설정해놨기 때문에 2개 조회&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/KGAGs/btsamYkd8kA/BBniXxrjDJg3aV1CtHKvHK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FKGAGs%2FbtsamYkd8kA%2FBBniXxrjDJg3aV1CtHKvHK%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;838&quot; height=&quot;664&quot; data-origin-width=&quot;838&quot; data-origin-height=&quot;664&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;버추얼박스에서 cpu2개 설정해놨기 때문에 2개 조회&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2) CPU 할당해보기&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;인덱스 1인 CPU 할당하고(--cpuset-cpus 1), stress 이미지에 cpu가 2개 돌아가게 되어있어서 cpu를 1개도 바꿔주고(stress --cpu 1), 이름 c1이라는 컨테이너를 생성해(--name c1) 백그라운드(-d)로 러닝시키는 명령어&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1681550517621&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# docker run [--cpuset-cpus cpu인덱스] [--name 컨테이너이름] [-d] &amp;lt;이미지명:태그&amp;gt; [명령어]
docker run --cpuset-cpus 1 --name c1 -d stress:latest stress --cpu 1&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;983&quot; data-origin-height=&quot;40&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/MMFKi/btsar45wwfU/TwG6ekFLDZuZalQE4mU1rk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/MMFKi/btsar45wwfU/TwG6ekFLDZuZalQE4mU1rk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/MMFKi/btsar45wwfU/TwG6ekFLDZuZalQE4mU1rk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FMMFKi%2Fbtsar45wwfU%2FTwG6ekFLDZuZalQE4mU1rk%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;983&quot; height=&quot;40&quot; data-origin-width=&quot;983&quot; data-origin-height=&quot;40&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3) 확인&lt;/p&gt;
&lt;pre id=&quot;code_1681551114388&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;htop
# 이 명령어 쓰려면 아래 명령어로 htop 설치해야함
# sudo apt install htop&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1501&quot; data-origin-height=&quot;274&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bEiZkT/btsafP3NZM9/2SxlnPTipBOAbvqHPgoIHK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bEiZkT/btsafP3NZM9/2SxlnPTipBOAbvqHPgoIHK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bEiZkT/btsafP3NZM9/2SxlnPTipBOAbvqHPgoIHK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbEiZkT%2FbtsafP3NZM9%2F2SxlnPTipBOAbvqHPgoIHK%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;1501&quot; height=&quot;274&quot; data-origin-width=&quot;1501&quot; data-origin-height=&quot;274&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;보면 프로세스로 stress --cpu 1이 실행되는 걸 확인할 수 있고, cpu 1번이 100퍼센트로 돌고 있는 걸 확인할 수 있다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;977&quot; data-origin-height=&quot;22&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/rIMla/btsaqPOeYsY/PInd93E2hMhkWFw3QysXq1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/rIMla/btsaqPOeYsY/PInd93E2hMhkWFw3QysXq1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/rIMla/btsaqPOeYsY/PInd93E2hMhkWFw3QysXq1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FrIMla%2FbtsaqPOeYsY%2FPInd93E2hMhkWFw3QysXq1%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;977&quot; height=&quot;22&quot; data-origin-width=&quot;977&quot; data-origin-height=&quot;22&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;으로 0번도 100퍼센트 돌아가게 하니&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1508&quot; data-origin-height=&quot;211&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/8YjNq/btsakgscs4Y/F9FcTeI7ZLpNkjmQ90gyRk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/8YjNq/btsakgscs4Y/F9FcTeI7ZLpNkjmQ90gyRk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/8YjNq/btsakgscs4Y/F9FcTeI7ZLpNkjmQ90gyRk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F8YjNq%2Fbtsakgscs4Y%2FF9FcTeI7ZLpNkjmQ90gyRk%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;1508&quot; height=&quot;211&quot; data-origin-width=&quot;1508&quot; data-origin-height=&quot;211&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아까의 컨테이너랑 같이 0번과 1번 모두 100프로 돌고 있다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;만약 --cpuser-cpus를 0부터 1까지로 설정하고 cpu 실행을 1개로만 설정했다면 0부터 1사이에서 그때그때 상황마다 1개만 선택해서 돌아간다.&lt;/p&gt;
&lt;pre id=&quot;code_1681551702769&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;docker run --cpuset-cpus 0-1 --name c1 -d stress:latest stress --cpu 1&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4) cpu-share로 가중치를 줘보자&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;각각 cload1에 2048, cload2에 기본, cload3,4에 512 가중치를 주었다.&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1681551880857&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# docker run [-c 가중치] [--name 컨테이너명] [-d] &amp;lt;이미지명:태그&amp;gt;

# 가중치 설정 케이스
docker run -c 2048 --name cload1 -d stress:latest
# 가중치 설정 따로 안한 기본 케이스
docker run --name cload2 -d stress:latest
# 가중치 설정 케이스
docker run -c 512 --name cload3 -d stress:latest
# 가중치 설정 케이스 (3이랑 똑같이)
docker run -c 512 --name cload4 -d stress:latest&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1073&quot; data-origin-height=&quot;122&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/zx5lA/btsamXTbpIf/rWahHK1grKJVTkCPLa5UX0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/zx5lA/btsamXTbpIf/rWahHK1grKJVTkCPLa5UX0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/zx5lA/btsamXTbpIf/rWahHK1grKJVTkCPLa5UX0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fzx5lA%2FbtsamXTbpIf%2FrWahHK1grKJVTkCPLa5UX0%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;1073&quot; height=&quot;122&quot; data-origin-width=&quot;1073&quot; data-origin-height=&quot;122&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이거 실제 가중치를 받은 만큼 알아보고 싶다!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그럼 모니터링 툴로 ㄱㄱ&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style2&quot; /&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;&amp;nbsp;Block I/O 제한&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1) block I/O 조회&lt;/p&gt;
&lt;pre id=&quot;code_1681553241740&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;lsblk&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;781&quot; data-origin-height=&quot;479&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ckFP3I/btsai5j8UjQ/oU5l58k3YIplthypWqfDC0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ckFP3I/btsai5j8UjQ/oU5l58k3YIplthypWqfDC0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ckFP3I/btsai5j8UjQ/oU5l58k3YIplthypWqfDC0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FckFP3I%2Fbtsai5j8UjQ%2FoU5l58k3YIplthypWqfDC0%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;781&quot; height=&quot;479&quot; data-origin-width=&quot;781&quot; data-origin-height=&quot;479&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하늘색 부분이 device 이름이다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2) 디바이스 별 iops 설정&lt;/p&gt;
&lt;pre id=&quot;code_1681553386581&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# docker run [-it] [--rm] [--device-write-iops /dev/디바이스이름:쿼터] &amp;lt;이미지명:태그&amp;gt; [명령어]
docker run -it --rm --device-write-iops /dev/sda:10 ubuntu:latest /bin/bash&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기서 --rm 은 컨테이너를 일회성으로 쓸때 사용하며, 컨테이너가 종료되면 컨테이너와 컨테이너 관련 리소스까지 깨끗하게 삭제하는 옵션이다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위의 명령어로&amp;nbsp; 쿼터 10으로 할당된 우분투를 실행시킨 후&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1049&quot; data-origin-height=&quot;141&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/DzMLQ/btsajen4b5S/aJLUEy9PJwGVwjjFUKR0KK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/DzMLQ/btsajen4b5S/aJLUEy9PJwGVwjjFUKR0KK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/DzMLQ/btsajen4b5S/aJLUEy9PJwGVwjjFUKR0KK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FDzMLQ%2Fbtsajen4b5S%2FaJLUEy9PJwGVwjjFUKR0KK%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;1049&quot; height=&quot;141&quot; data-origin-width=&quot;1049&quot; data-origin-height=&quot;141&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래 명령어를 실행해보자&lt;/p&gt;
&lt;pre id=&quot;code_1681557903052&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;dd if=/dev/zero of=file1 bs=1M count=10 oflag=direct&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;* dd : data duplicator&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;* if : 지정한 파일(위에서는 /dev/zero)를 입력 대상으로 설정&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;* of : 지정한 파일(file1)을 출력 대상으로 설정&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;* bs : 바이트를 기준으로 하며 한번에 읽고 쓸 최대 바이트 크기 지정&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;* count : 지정한 블록 수 만큼 복사&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;* oflag : 테스트 파일을 쓸때 사용하는 file flag를 설정, direct 경우 O_DIRECT플래그를 켜고 write()를 호출하게 되는데 이 플러그를 이용하면 파일시스템에 캐시 영역을 사용하지 않고 바로 디스크를 쓰기때문에 입출력 성능 측정할때 필요하다.&lt;sup class=&quot;footnote&quot;&gt;&lt;a href=&quot;#footnote_422_4&quot; id=&quot;footnote_link_422_4&quot; onmouseover=&quot;tistoryFootnote.show(this, 422, 4)&quot; onmouseout=&quot;tistoryFootnote.hide(422, 4)&quot; style=&quot;color:#f9650d; font-family: Verdana, Sans-serif; display: inline;&quot;&gt;&lt;span style=&quot;display: none;&quot;&gt;[각주:&lt;/span&gt;4&lt;span style=&quot;display: none;&quot;&gt;]&lt;/span&gt;&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;761&quot; data-origin-height=&quot;79&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/buxtng/btsamXlnY0u/IhkgmtGawfcYSq0hTGx0a0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/buxtng/btsamXlnY0u/IhkgmtGawfcYSq0hTGx0a0/img.png&quot; data-alt=&quot;10개 복사한 결과와 걸린 시간등을 알 수 있다.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/buxtng/btsamXlnY0u/IhkgmtGawfcYSq0hTGx0a0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbuxtng%2FbtsamXlnY0u%2FIhkgmtGawfcYSq0hTGx0a0%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;761&quot; height=&quot;79&quot; data-origin-width=&quot;761&quot; data-origin-height=&quot;79&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;10개 복사한 결과와 걸린 시간등을 알 수 있다.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;쿼터를 100으로 할당해서 다시 해보면&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1059&quot; data-origin-height=&quot;103&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bpLviX/btsai5karFF/A8XQ9l4hV93qcY4e08Oqv0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bpLviX/btsai5karFF/A8XQ9l4hV93qcY4e08Oqv0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bpLviX/btsai5karFF/A8XQ9l4hV93qcY4e08Oqv0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbpLviX%2Fbtsai5karFF%2FA8XQ9l4hV93qcY4e08Oqv0%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;1059&quot; height=&quot;103&quot; data-origin-width=&quot;1059&quot; data-origin-height=&quot;103&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;쿼터 10일때 5.5 MB/s 밖에 안나오던게 쿼터 100이 되니 93.2MB/s 나 나온걸 확인 할 수 있다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style3&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2️⃣&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;컨테이너 모니터링하기&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;1) 컨테이너 런타임 통계&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;컨테이너 설정 안하면 실행중인 모든 컨테이너 대상 조회&lt;/p&gt;
&lt;pre id=&quot;code_1681552467295&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;docker stats [옵션] [컨테이너]&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1002&quot; data-origin-height=&quot;108&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/TPLiK/btsakgyXLEw/0NBWN1Zkvo2f5wJCZf1TBK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/TPLiK/btsakgyXLEw/0NBWN1Zkvo2f5wJCZf1TBK/img.png&quot; data-alt=&quot;이렇게 런타임으로 돌아가는 걸 볼 수 있다&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/TPLiK/btsakgyXLEw/0NBWN1Zkvo2f5wJCZf1TBK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FTPLiK%2FbtsakgyXLEw%2F0NBWN1Zkvo2f5wJCZf1TBK%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;1002&quot; height=&quot;108&quot; data-origin-width=&quot;1002&quot; data-origin-height=&quot;108&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;이렇게 런타임으로 돌아가는 걸 볼 수 있다&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그런데 상대적 비율로 돌아간다고 하셨는데 CPU 비율이 가중치처럼 안돌아가는 데.. 왜지.. 오히려 기본설정인 cload2가 더 많은 비율을 보인다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;976&quot; data-origin-height=&quot;102&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cj4YDw/btsakh5Ivhl/IhJQVNEUulellFu5JdrkA1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cj4YDw/btsakh5Ivhl/IhJQVNEUulellFu5JdrkA1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cj4YDw/btsakh5Ivhl/IhJQVNEUulellFu5JdrkA1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcj4YDw%2Fbtsakh5Ivhl%2FIhJQVNEUulellFu5JdrkA1%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;976&quot; height=&quot;102&quot; data-origin-width=&quot;976&quot; data-origin-height=&quot;102&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;cpu를 하나로 고정해봐도... cload2가 더 많은 퍼센트를 차지.. 기본 설정이 뭔가 달라진걸까?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;확실히 기본 설정이 달라진 듯&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;cload5로 가중치를 1024를 명시해주고 돌려보니 확실히 맞는 비율이 나온다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;968&quot; data-origin-height=&quot;101&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/oKg18/btsaia0o5qP/R5I9dMC04nnUFaPWJ9xGXk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/oKg18/btsaia0o5qP/R5I9dMC04nnUFaPWJ9xGXk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/oKg18/btsaia0o5qP/R5I9dMC04nnUFaPWJ9xGXk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FoKg18%2Fbtsaia0o5qP%2FR5I9dMC04nnUFaPWJ9xGXk%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;968&quot; height=&quot;101&quot; data-origin-width=&quot;968&quot; data-origin-height=&quot;101&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다시 cpu를 하나로 고정하지말고 테스트 해보자&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;976&quot; data-origin-height=&quot;108&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/beK1xA/btsak9TR9xc/SnnetDD7G4IqsMzUnEiKyk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/beK1xA/btsak9TR9xc/SnnetDD7G4IqsMzUnEiKyk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/beK1xA/btsak9TR9xc/SnnetDD7G4IqsMzUnEiKyk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbeK1xA%2Fbtsak9TR9xc%2FSnnetDD7G4IqsMzUnEiKyk%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;976&quot; height=&quot;108&quot; data-origin-width=&quot;976&quot; data-origin-height=&quot;108&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;cpu를 여러개 사용하면 하나로 고정했을때 보다 안정정으로 비율이 나오지 않는다. 그래도 꽤 비율이 맞는 편&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style3&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3️⃣&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;cAdvisor 설치해서 사용하기&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;그리고 cAdvisor 깃헙의 명령어를 적용&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1260&quot; data-origin-height=&quot;261&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/2GWm9/btsafNSrGmc/kAU2rNy9H2szFavsLpwom0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/2GWm9/btsafNSrGmc/kAU2rNy9H2szFavsLpwom0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/2GWm9/btsafNSrGmc/kAU2rNy9H2szFavsLpwom0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F2GWm9%2FbtsafNSrGmc%2FkAU2rNy9H2szFavsLpwom0%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;1260&quot; height=&quot;261&quot; data-origin-width=&quot;1260&quot; data-origin-height=&quot;261&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1279&quot; data-origin-height=&quot;163&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/vaUCX/btsatVOcw89/5jb15KZLXeapUcT2PadDzK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/vaUCX/btsatVOcw89/5jb15KZLXeapUcT2PadDzK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/vaUCX/btsatVOcw89/5jb15KZLXeapUcT2PadDzK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FvaUCX%2FbtsatVOcw89%2F5jb15KZLXeapUcT2PadDzK%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;1279&quot; height=&quot;163&quot; data-origin-width=&quot;1279&quot; data-origin-height=&quot;163&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;명령어 적용해 돌리고 해당 포트로 연결하면 아래와 같은 UI로 컨테이너를 모니터링 할 수 있다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;577&quot; data-origin-height=&quot;915&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c7c59d/btsbA6vYGOI/Bg1XnkDMGkOtDGpYf2SuH1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c7c59d/btsbA6vYGOI/Bg1XnkDMGkOtDGpYf2SuH1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c7c59d/btsbA6vYGOI/Bg1XnkDMGkOtDGpYf2SuH1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc7c59d%2FbtsbA6vYGOI%2FBg1XnkDMGkOtDGpYf2SuH1%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;577&quot; height=&quot;915&quot; data-origin-width=&quot;577&quot; data-origin-height=&quot;915&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;550&quot; data-origin-height=&quot;828&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/sWwZI/btsbBUPzCna/mDHZPCyO93kMZY19xPhBDk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/sWwZI/btsbBUPzCna/mDHZPCyO93kMZY19xPhBDk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/sWwZI/btsbBUPzCna/mDHZPCyO93kMZY19xPhBDk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FsWwZI%2FbtsbBUPzCna%2FmDHZPCyO93kMZY19xPhBDk%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;550&quot; height=&quot;828&quot; data-origin-width=&quot;550&quot; data-origin-height=&quot;828&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;div class=&quot;footnotes&quot;&gt;
  &lt;ol class=&quot;footnotes&quot;&gt;
    &lt;li id=&quot;footnote_422_1&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;Swap Memory&lt;/b&gt;&lt;br /&gt;RAM 즉 물리 메모리가 다 차게 되어 프로세스가 작업을 이어 나가지 못하고 종료되는 것을 방지하기 위해 하드디스크 공간을 이용하여 부족한 메모리를 대체할 수 있는 메모리 &lt;a href=&quot;#footnote_link_422_1&quot;&gt;[본문으로]&lt;/a&gt;&lt;/li&gt;
    &lt;li id=&quot;footnote_422_2&quot;&gt; &lt;b&gt;OOM Killer (Out Of Memory Killer)&lt;br /&gt;&lt;/b&gt;&lt;span style=&quot;color: #4d5156; text-align: left;&quot;&gt;리눅스 기능 중 하나로 메모리가 부족할 경우 특정 프로세스를 강제로 종료하여 메모리를 확보하는 기능 &lt;a href=&quot;#footnote_link_422_2&quot;&gt;[본문으로]&lt;/a&gt;&lt;/li&gt;
    &lt;li id=&quot;footnote_422_3&quot;&gt; &lt;b&gt;Block I/O&lt;/b&gt;&lt;br /&gt;&lt;span style=&quot;color: #1f1f1f; text-align: left;&quot;&gt;블록 장치는 개별 바이트 단위가 아닌 일정 크기(block) 단위로 접근하는 장치&lt;br /&gt;&lt;span style=&quot;color: #1f1f1f; text-align: left;&quot;&gt;간단히 말하면 하드 디스크와 같은 대용량 저장 장치를 말한다.&lt;/span&gt;  &lt;a href=&quot;#footnote_link_422_3&quot;&gt;[본문으로]&lt;/a&gt;&lt;/li&gt;
    &lt;li id=&quot;footnote_422_4&quot;&gt; &lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;출처:&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://hbase.tistory.com/21&quot;&gt;https://hbase.tistory.com/21&lt;/a&gt;  &lt;a href=&quot;#footnote_link_422_4&quot;&gt;[본문으로]&lt;/a&gt;&lt;/li&gt;
  &lt;/ol&gt;
&lt;/div&gt;</description>
      <category>DevOps/Docker</category>
      <category>Docker</category>
      <author>littlezero48</author>
      <guid isPermaLink="true">https://littlezero48.tistory.com/422</guid>
      <comments>https://littlezero48.tistory.com/422#entry422comment</comments>
      <pubDate>Sat, 15 Apr 2023 23:47:18 +0900</pubDate>
    </item>
  </channel>
</rss>