<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Maverick Fung</title>
    <description>The latest articles on DEV Community by Maverick Fung (@mavr).</description>
    <link>https://dev.to/mavr</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F692247%2F465da610-b7e4-4792-9007-b8e38ac8678d.jpg</url>
      <title>DEV Community: Maverick Fung</title>
      <link>https://dev.to/mavr</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/mavr"/>
    <language>en</language>
    <item>
      <title>Amazon Route 53 Transfer domain and trouble shooting</title>
      <dc:creator>Maverick Fung</dc:creator>
      <pubDate>Wed, 01 Nov 2023 06:35:44 +0000</pubDate>
      <link>https://dev.to/mavr/amazon-route-53-transfer-domain-and-trouble-shooting-2if0</link>
      <guid>https://dev.to/mavr/amazon-route-53-transfer-domain-and-trouble-shooting-2if0</guid>
      <description>&lt;p&gt;&lt;strong&gt;Hi Developers,I'm Maverick,I want share a case for you today,Let me show you&lt;/strong&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Background
&lt;/h1&gt;

&lt;p&gt;I hava a customer,who have 2 aws account ,I will call that Account-A and Account-B,in Account-A have a domain(like example.com) register by Route 53,and the customer have new project need deploy to Account-B,so the customer want to transfer this domain(example.com) from Account-A to Account-B.Then I login to Account-A Route 53 console and want transfer domain(example.com) to Account-B.&lt;/p&gt;

&lt;h1&gt;
  
  
  Step by Step
&lt;/h1&gt;

&lt;h2&gt;
  
  
  Route 53 Domain Operation
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;First login to Route 53 console page&lt;/li&gt;
&lt;li&gt;in left navigation bar of the page,we need choose Registered Domains&lt;/li&gt;
&lt;li&gt;Jump in you want transfer domain details page&lt;/li&gt;
&lt;li&gt;make sure your domain "Transfer lock" status is &lt;strong&gt;"OFF"&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Select "Transfer to another AWS account" from the drop-down box in the upper right corner&lt;/li&gt;
&lt;li&gt;paste your target account ID&lt;/li&gt;
&lt;li&gt;Then you will get the transfer password&lt;/li&gt;
&lt;li&gt;Login another AWS account,like Account-B,same operations step 1-2,and choose "Transfer in"---"Single domain"&lt;/li&gt;
&lt;li&gt;In details page,just put request infomation&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Zt2OPlRF--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/q31bofiw58h6t7m0s5it.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Zt2OPlRF--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/q31bofiw58h6t7m0s5it.png" alt="Image description" width="800" height="250"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--s_RPvnYI--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/44n6cemkrt21ky12csb9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--s_RPvnYI--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/44n6cemkrt21ky12csb9.png" alt="Image description" width="767" height="299"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--6scdvdxH--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/5h8dw0omfe2sfls43v6y.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--6scdvdxH--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/5h8dw0omfe2sfls43v6y.png" alt="Image description" width="800" height="250"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Trouble shooting
&lt;/h1&gt;

&lt;h2&gt;
  
  
  The domain is not transferable at this time
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Introduce
&lt;/h3&gt;

&lt;p&gt;Actually,I don't know how to deal this problem,and I trying to search by using google,and I found have some body also have same question,but no answer!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--SzDqB4ts--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/q07o1x1eivqklurr3a8c.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--SzDqB4ts--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/q07o1x1eivqklurr3a8c.png" alt="Image description" width="730" height="367"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Same question link:&lt;a href="https://repost.aws/questions/QUsUOoB4fHSG-WBb9QWTlMxA/why-is-transferring-domain-between-accounts-unavailable-at-this-time"&gt;https://repost.aws/questions/QUsUOoB4fHSG-WBb9QWTlMxA/why-is-transferring-domain-between-accounts-unavailable-at-this-time&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Solution
&lt;/h3&gt;

&lt;p&gt;Make sure your Domain status code is "ok" and no more code,In this case , customer domain just buy about 2 days,the Domain status code is "addPeriod ok",you have to wait about 5 days or more time&lt;/p&gt;

</description>
      <category>aws</category>
      <category>route53</category>
      <category>domain</category>
      <category>awscommunity</category>
    </item>
    <item>
      <title>Use Boto3 create EventBridge-Rule tigger Lambda Function</title>
      <dc:creator>Maverick Fung</dc:creator>
      <pubDate>Thu, 18 Aug 2022 03:07:00 +0000</pubDate>
      <link>https://dev.to/mavr/use-boto3-create-eventbridge-rule-tigger-lambda-function-blj</link>
      <guid>https://dev.to/mavr/use-boto3-create-eventbridge-rule-tigger-lambda-function-blj</guid>
      <description>&lt;h1&gt;
  
  
  Hi,Guys,This article I will teach you how to use python3 to create EventBridge Rule and tigger it to lambda function
&lt;/h1&gt;

&lt;h1&gt;
  
  
  If you don't have too much time,I will do this
&lt;/h1&gt;

&lt;h1&gt;
  
  
  somebody say:"Cut the crap and show me your code"
&lt;/h1&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;time&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;boto3&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;botocore.config&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Config&lt;/span&gt;

&lt;span class="n"&gt;lambda_client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;boto3&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;client&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;lambda&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;config&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nc"&gt;Config&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;region_name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;environ&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;AWS_REGION&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]))&lt;/span&gt;
&lt;span class="n"&gt;event_client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;boto3&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;client&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;events&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;config&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nc"&gt;Config&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;region_name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;environ&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;AWS_REGION&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]))&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;lambda_handler&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;event&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;context&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;rule_name&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;LeifengRule&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt; &lt;span class="c1"&gt;# Define a var for rule_name
&lt;/span&gt;    &lt;span class="n"&gt;cron_sec&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;cron(59 23 * * ? *)&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt; &lt;span class="c1"&gt;# Define a var for cron
&lt;/span&gt;    &lt;span class="n"&gt;lambda_fc_name&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;LeifengFC&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt; &lt;span class="c1"&gt;# Define a var for lambda name
&lt;/span&gt;    &lt;span class="n"&gt;lambda_fc_arn&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;arn:aws:lambda:us-east-1:xxxx:function:LeifengFC&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt; &lt;span class="c1"&gt;# Here you need copy the lambda_fc_name function arn
&lt;/span&gt;    &lt;span class="n"&gt;add_permission_role_arn&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;arn:aws:iam::xxxx:role/add_permission&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt; &lt;span class="c1"&gt;# put create role ARN
&lt;/span&gt;    &lt;span class="c1"&gt;# use boto3 create a rule
&lt;/span&gt;    &lt;span class="n"&gt;create_rule_resp&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;event_client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;put_rule&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
            &lt;span class="n"&gt;Name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;rule_name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;# There put your rule name
&lt;/span&gt;            &lt;span class="n"&gt;ScheduleExpression&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;cron_sec&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;# there put your cron
&lt;/span&gt;            &lt;span class="n"&gt;State&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;ENABLED&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;# there set the rule state ENABLED or DISABLED
&lt;/span&gt;            &lt;span class="n"&gt;EventBusName&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;default&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;# set eventbus ,I use default
&lt;/span&gt;            &lt;span class="n"&gt;RoleArn&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;add_permission_role_arn&lt;/span&gt;
        &lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="n"&gt;put_target_resp&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;event_client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;put_targets&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
            &lt;span class="n"&gt;Rule&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;rule_name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="n"&gt;Targets&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[{&lt;/span&gt;
                &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Id&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;lambda_fc_name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Arn&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;lambda_fc_arn&lt;/span&gt;
            &lt;span class="p"&gt;}]&lt;/span&gt;
        &lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="c1"&gt;# use if to determine the lambda_fc_arn weather '$' exists
&lt;/span&gt;    &lt;span class="c1"&gt;# if the '$' in lambda_fc_arn,just remove from $
&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;$&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;lambda_fc_arn&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;lambda_fc_arn&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;lambda_fc_arn&lt;/span&gt;&lt;span class="p"&gt;[:&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="n"&gt;add_lambda_permission&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;lambda_client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;add_permission&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
            &lt;span class="n"&gt;FunctionName&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;lambda_fc_arn&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="n"&gt;StatementId&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nf"&gt;str&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;time&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;time&lt;/span&gt;&lt;span class="p"&gt;())[&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;:]&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;lambda_fc_name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="n"&gt;Action&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;lambda:InvokeFunction&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="n"&gt;Principal&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;events.amazonaws.com&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="n"&gt;SourceArn&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;create_rule_resp&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;RuleArn&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
        &lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h1&gt;
  
  
  1.Create IAM Role and Policy
&lt;/h1&gt;

&lt;h2&gt;
  
  
  1.1 Create add_permission role
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1.1.1 Open AWS IAM console
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://us-east-1.console.aws.amazon.com/iam/home" rel="noopener noreferrer"&gt;Click here:https://us-east-1.console.aws.amazon.com/iam/home&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  1.1.2 Create a role
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjg03zoytgi8nc86vx04g.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjg03zoytgi8nc86vx04g.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4lxnornanglmkld8ecee.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4lxnornanglmkld8ecee.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  1.1.2.1 use the json file
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"Version"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"2012-10-17"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"Statement"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"Effect"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Allow"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"Principal"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"Service"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"lambda.amazonaws.com"&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"Action"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"sts:AssumeRole"&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"Effect"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Allow"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"Principal"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"Service"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"events.amazonaws.com"&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"Action"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"sts:AssumeRole"&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt; 
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1dbpg0ojxpp1qhdkwdmp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1dbpg0ojxpp1qhdkwdmp.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  1.1.2.2 attach 2 policy to the role(lambda and event full access)
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F76cxs0s05c6ppg8qytsx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F76cxs0s05c6ppg8qytsx.png" alt="Image description"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frims5mn2xlwa5079z1m7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frims5mn2xlwa5079z1m7.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h4&gt;
  
  
  1.1.2.3 Remember the add_permission role ARN
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fktzwdiccr774hswxdgzp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fktzwdiccr774hswxdgzp.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  1.2 Create lambda execute role
&lt;/h2&gt;
&lt;h3&gt;
  
  
  1.2.1 Open AWS IAM console
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://us-east-1.console.aws.amazon.com/iam/home" rel="noopener noreferrer"&gt;Click here:https://us-east-1.console.aws.amazon.com/iam/home&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  1.2.2 Create a role for lambda
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqpwhqub3yyy48zsaa03c.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqpwhqub3yyy48zsaa03c.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  1.2.3 set a name &lt;strong&gt;lambda_exec_role&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fos8ooe0rtqjhpj6ezv43.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fos8ooe0rtqjhpj6ezv43.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  1.2.4 check the role(not attach any policy)
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fe4hfa1apu5srym7o7otz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fe4hfa1apu5srym7o7otz.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  1.3 Create a policy for lambda_exec_role
&lt;/h2&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"Version"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"2012-10-17"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"Statement"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="nl"&gt;"Effect"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Allow"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="nl"&gt;"Action"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
                &lt;/span&gt;&lt;span class="s2"&gt;"events:DeleteRule"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
                &lt;/span&gt;&lt;span class="s2"&gt;"events:PutTargets"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
                &lt;/span&gt;&lt;span class="s2"&gt;"events:DescribeRule"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
                &lt;/span&gt;&lt;span class="s2"&gt;"events:ListRuleNamesByTarget"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
                &lt;/span&gt;&lt;span class="s2"&gt;"events:EnableRule"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
                &lt;/span&gt;&lt;span class="s2"&gt;"events:PutRule"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
                &lt;/span&gt;&lt;span class="s2"&gt;"events:ListRules"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
                &lt;/span&gt;&lt;span class="s2"&gt;"events:RemoveTargets"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
                &lt;/span&gt;&lt;span class="s2"&gt;"events:ListTargetsByRule"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
                &lt;/span&gt;&lt;span class="s2"&gt;"events:DisableRule"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
                &lt;/span&gt;&lt;span class="s2"&gt;"lambda:ListFunctions"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
                &lt;/span&gt;&lt;span class="s2"&gt;"lambda:AddPermission"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
                &lt;/span&gt;&lt;span class="s2"&gt;"iam:PassRole"&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="nl"&gt;"Resource"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"*"&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h2&gt;
  
  
  1.4 attach lambda_exec_role_policy to lambda_exec_role
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwlz16lf3egvptfow7avc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwlz16lf3egvptfow7avc.png" alt="Image description"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fj7gvhtry0hnrv404qcj9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fj7gvhtry0hnrv404qcj9.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fija1h5hha42hrex7z425.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fija1h5hha42hrex7z425.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h1&gt;
  
  
  2.Create a lambda function
&lt;/h1&gt;
&lt;h2&gt;
  
  
  2.1 create a lambda function set runtime as python3.9
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5ypv7oww695qlj129ja2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5ypv7oww695qlj129ja2.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  2.2 Copy the code to lambda
&lt;/h2&gt;

&lt;p&gt;please replace  &lt;strong&gt;rule_name&lt;/strong&gt; &lt;strong&gt;cron_sec&lt;/strong&gt; &lt;strong&gt;lambda_fc_name&lt;/strong&gt; and &lt;strong&gt;lambda_fc_arn&lt;/strong&gt; value&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;this code just show you&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;time&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;boto3&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;botocore.config&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Config&lt;/span&gt;

&lt;span class="n"&gt;lambda_client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;boto3&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;client&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;lambda&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;config&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nc"&gt;Config&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;region_name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;environ&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;AWS_REGION&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]))&lt;/span&gt;
&lt;span class="n"&gt;event_client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;boto3&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;client&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;events&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;config&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nc"&gt;Config&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;region_name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;environ&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;AWS_REGION&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]))&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;lambda_handler&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;event&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;context&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;rule_name&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;LeifengRule&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt; &lt;span class="c1"&gt;# Define a var for rule_name
&lt;/span&gt;    &lt;span class="n"&gt;cron_sec&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;cron(59 23 * * ? *)&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt; &lt;span class="c1"&gt;# Define a var for cron
&lt;/span&gt;    &lt;span class="n"&gt;lambda_fc_name&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;LeifengFC&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt; &lt;span class="c1"&gt;# Define a var for lambda name
&lt;/span&gt;    &lt;span class="n"&gt;lambda_fc_arn&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;arn:aws:lambda:us-east-1:xxxx:function:LeifengFC&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt; &lt;span class="c1"&gt;# Here you need copy the lambda_fc_name function arn
&lt;/span&gt;    &lt;span class="n"&gt;add_permission_role_arn&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;arn:aws:iam::xxxx:role/add_permission&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt; &lt;span class="c1"&gt;# put create role ARN
&lt;/span&gt;    &lt;span class="c1"&gt;# use boto3 create a rule
&lt;/span&gt;    &lt;span class="n"&gt;create_rule_resp&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;event_client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;put_rule&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
            &lt;span class="n"&gt;Name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;rule_name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;# There put your rule name
&lt;/span&gt;            &lt;span class="n"&gt;ScheduleExpression&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;cron_sec&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;# there put your cron
&lt;/span&gt;            &lt;span class="n"&gt;State&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;ENABLED&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;# there set the rule state ENABLED or DISABLED
&lt;/span&gt;            &lt;span class="n"&gt;EventBusName&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;default&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;# set eventbus ,I use default
&lt;/span&gt;            &lt;span class="n"&gt;RoleArn&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;add_permission_role_arn&lt;/span&gt;
        &lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="n"&gt;put_target_resp&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;event_client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;put_targets&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
            &lt;span class="n"&gt;Rule&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;rule_name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="n"&gt;Targets&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[{&lt;/span&gt;
                &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Id&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;lambda_fc_name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Arn&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;lambda_fc_arn&lt;/span&gt;
            &lt;span class="p"&gt;}]&lt;/span&gt;
        &lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="c1"&gt;# use if to determine the lambda_fc_arn weather '$' exists
&lt;/span&gt;    &lt;span class="c1"&gt;# if the '$' in lambda_fc_arn,just remove from $
&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;$&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;lambda_fc_arn&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;lambda_fc_arn&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;lambda_fc_arn&lt;/span&gt;&lt;span class="p"&gt;[:&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="n"&gt;add_lambda_permission&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;lambda_client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;add_permission&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
            &lt;span class="n"&gt;FunctionName&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;lambda_fc_arn&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="n"&gt;StatementId&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nf"&gt;str&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;time&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;time&lt;/span&gt;&lt;span class="p"&gt;())[&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;:]&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;lambda_fc_name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="n"&gt;Action&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;lambda:InvokeFunction&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="n"&gt;Principal&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;events.amazonaws.com&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="n"&gt;SourceArn&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;create_rule_resp&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;RuleArn&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
        &lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzjbon212ds9wf39ftlnk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzjbon212ds9wf39ftlnk.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8q7fqkgnuw9fri4yeg0r.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8q7fqkgnuw9fri4yeg0r.png" alt="Image description"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1huy5uylshf4argol8hd.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1huy5uylshf4argol8hd.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fud0pq6alo9j5fjfid8lj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fud0pq6alo9j5fjfid8lj.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  If this article can help you, I will be very happy,Thank you ,have a nice day!
&lt;/h1&gt;

</description>
      <category>lambda</category>
      <category>eventbridge</category>
      <category>boto3</category>
      <category>awscommunitybuilder</category>
    </item>
    <item>
      <title>amazing! Millions of people are learning Docker!(Chinese)</title>
      <dc:creator>Maverick Fung</dc:creator>
      <pubDate>Wed, 10 Aug 2022 16:29:54 +0000</pubDate>
      <link>https://dev.to/mavr/amazing-millions-of-people-are-learning-dockerchinese-4ca5</link>
      <guid>https://dev.to/mavr/amazing-millions-of-people-are-learning-dockerchinese-4ca5</guid>
      <description>&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  1、环境简介
&lt;/h1&gt;

&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  1.1、系统简介
&lt;/h2&gt;

&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  1.1.1、Docker简介
&lt;/h3&gt;

&lt;p&gt;:::info&lt;br&gt;
💡Docker 是一个开源的应用容器引擎，让开发者可以打包他们的应用以及依赖包到一个可移植的容器中，然后发布到任何流行的Linux机器上，也可以实现虚拟化，容器是完全使用沙箱机制，相互之间不会有任何接口。&lt;br&gt;
:::&lt;br&gt;
一个完整的Docker有以下几个部分组成：&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;dockerClient客户端&lt;/li&gt;
&lt;li&gt;Docker Daemon守护进程&lt;/li&gt;
&lt;li&gt;Docker Image镜像&lt;/li&gt;
&lt;li&gt;DockerContainer容器&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Docker引擎Docker Engine是C/S架构，主要有以下部件组成：&lt;br&gt;&lt;strong&gt;服务器（Docker daemon）&lt;/strong&gt;：后台运行的Docker daemon进程。Daemon进程用于管理Docker对象，包括镜像（images）、容器（containers）、网络（networks）、数据卷（data volumes）。&lt;br&gt;&lt;strong&gt;REST接口&lt;/strong&gt;：同daemon交互的REST API接口。&lt;br&gt;&lt;strong&gt;客户端（Docker client）&lt;/strong&gt;：命令行（CLI）交互客户端。客户端使用REST API接口同Docker daemon进行访问。Docker服务的架构图如图1-1所示。&lt;br&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.nlark.com%2Fyuque%2F0%2F2022%2Fpng%2F2207808%2F1659508191752-9cc837a5-e6a7-4994-8c53-8978f7ba4191.png%23clientId%3Du5a83b8b4-d6d0-4%26crop%3D0%26crop%3D0%26crop%3D1%26crop%3D1%26from%3Dpaste%26height%3D482%26id%3Dw25ip%26margin%3D%255Bobject%2520Object%255D%26name%3Dimage.png%26originHeight%3D602%26originWidth%3D769%26originalType%3Dbinary%26ratio%3D1%26rotation%3D0%26showTitle%3Dfalse%26size%3D113708%26status%3Ddone%26style%3Dnone%26taskId%3Du3caca3b0-f6bb-4538-ba88-a1d38537a5e%26title%3D%26width%3D615.2" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.nlark.com%2Fyuque%2F0%2F2022%2Fpng%2F2207808%2F1659508191752-9cc837a5-e6a7-4994-8c53-8978f7ba4191.png%23clientId%3Du5a83b8b4-d6d0-4%26crop%3D0%26crop%3D0%26crop%3D1%26crop%3D1%26from%3Dpaste%26height%3D482%26id%3Dw25ip%26margin%3D%255Bobject%2520Object%255D%26name%3Dimage.png%26originHeight%3D602%26originWidth%3D769%26originalType%3Dbinary%26ratio%3D1%26rotation%3D0%26showTitle%3Dfalse%26size%3D113708%26status%3Ddone%26style%3Dnone%26taskId%3Du3caca3b0-f6bb-4538-ba88-a1d38537a5e%26title%3D%26width%3D615.2" alt="image.png"&gt;&lt;/a&gt;&lt;br&gt;图1-1  Docker服务的架构图&lt;br&gt;
&lt;a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  1.1.2、Docker平台组成
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.nlark.com%2Fyuque%2F0%2F2022%2Fpng%2F2207808%2F1659508375884-d18532a1-e15b-4b51-8889-792e6356a7b4.png%23clientId%3Du5a83b8b4-d6d0-4%26crop%3D0%26crop%3D0%26crop%3D1%26crop%3D1%26from%3Dpaste%26height%3D353%26id%3Du9a63529f%26margin%3D%255Bobject%2520Object%255D%26name%3Dimage.png%26originHeight%3D441%26originWidth%3D864%26originalType%3Dbinary%26ratio%3D1%26rotation%3D0%26showTitle%3Dfalse%26size%3D100940%26status%3Ddone%26style%3Dnone%26taskId%3Du636d6ba8-f40b-4365-8c17-788ba3a78c0%26title%3D%26width%3D691.2" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.nlark.com%2Fyuque%2F0%2F2022%2Fpng%2F2207808%2F1659508375884-d18532a1-e15b-4b51-8889-792e6356a7b4.png%23clientId%3Du5a83b8b4-d6d0-4%26crop%3D0%26crop%3D0%26crop%3D1%26crop%3D1%26from%3Dpaste%26height%3D353%26id%3Du9a63529f%26margin%3D%255Bobject%2520Object%255D%26name%3Dimage.png%26originHeight%3D441%26originWidth%3D864%26originalType%3Dbinary%26ratio%3D1%26rotation%3D0%26showTitle%3Dfalse%26size%3D100940%26status%3Ddone%26style%3Dnone%26taskId%3Du636d6ba8-f40b-4365-8c17-788ba3a78c0%26title%3D%26width%3D691.2" alt="image.png"&gt;&lt;/a&gt;&lt;br&gt;图1-2  Docker服务组成图&lt;br&gt;运行一个Docker服务，组成包括Docker daemon服务器、Docker Client客户端、Docker Image镜像、Docker Registry库、Docker Contrainer容器，如图1-2所示。&lt;br&gt;&lt;strong&gt;（1）Docker镜像：&lt;/strong&gt;&lt;br&gt;是一个只读模板，用于创建Docker容器，由Dockerfile文本描述镜像的内容。镜像定义类似“面对对象的类”，从一个基础镜像（Base Image）开始。构建一个镜像实际就是安装、配置和运行的过程，Docker镜像基于UnionFS把以上过程进行分层（Layer）存储，这样更新镜像可以只更新变化的层。Docker的描述文件为Dockerfile，Dockerfile是一个文本文件，基本指令包括：&lt;br&gt;FROM：定义基础镜像。&lt;br&gt;MAINTAINER ：作者或维护者。&lt;br&gt;RUN：运行linux 命令。&lt;br&gt;ADD：增加文件或目录。&lt;br&gt;EVN：定义环境变量。&lt;br&gt;CMD：运行进程。&lt;br&gt;&lt;strong&gt;（2）Docker容器：&lt;/strong&gt;&lt;br&gt;是一个镜像的运行实例。容器有镜像创建，运行过程例如：&lt;br&gt;运行ubuntu操作系统镜像，-i 前台交互模型，运行命令为/bin/bash&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;docker run &lt;span class="nt"&gt;-i&lt;/span&gt; &lt;span class="nt"&gt;-t&lt;/span&gt; ubuntu /bin/bash
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;拉（pull）镜像，Docker Engine 检查ubuntu  镜像是否存在，如果本地已经存在，使用该镜像创建容器，如果不存在，Docker Engine从镜像库拉镜像。&lt;br&gt;使用该镜像创建新容器。&lt;br&gt;分配文件系统，挂载一个读写层，在读写从加载镜像。&lt;br&gt;分配网络/网桥接口，创建一个网络接口，让容器和主机通信。&lt;br&gt;从可用的IP池选择IP地址，分配给容器。&lt;br&gt;执行命令/bin/bash。&lt;br&gt;捕获和提供执行结果。&lt;br&gt;&lt;strong&gt;（3）Docker 仓库：&lt;/strong&gt;&lt;br&gt;Docker仓库是Docker镜像库。Docker Registry也是一个容器。Docker Hub是Docker公司提供的互联网公共镜像仓库。可以构建自己本地的镜像仓库，国内有些公司也构建了镜像仓库。包括阿里云、新浪等。Docker 集群服务：Docker集群服务运行承租的Docker节点一起工作。目前支持swarm模式。&lt;br&gt;一个 Docker Registry 节点中可以包含多个仓库（Repository）；每个仓库可以包含多个标签（Tag）；每个标签对应一个镜像。&lt;br&gt;一般而言，一个仓库包含的是同一个软件的不同版本的镜像，而标签则用于对应于软件的的不同版本。&lt;br&gt;可以通过 &amp;lt;仓库名&amp;gt;:&amp;lt;标签&amp;gt; 的格式来指定具体是哪个版本的镜像。如果不给出标签，将以 latest 作为默认标签。&lt;br&gt;以&lt;a href="https://hub.docker.com/_/ubuntu/" rel="noopener noreferrer"&gt;Ubuntu镜像&lt;/a&gt;为例，ubuntu 是仓库的名字，其内包含有不同的版本标签，如，14.04, 16.04。可以通过 ubuntu:14.04，或者 ubuntu:16.04 来具体指定所需哪个版本的镜像。如果忽略了标签，比如ubuntu，那将视为 ubuntu:latest。&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker pull ubuntu:16:04
docker pull ubuntu:14:04
docker pull ubuntu  &lt;span class="c"&gt;#这里指代  ubuntu:latest&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  1.2、预装环境说明
&lt;/h2&gt;

&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  1.2.1、软件版本说明
&lt;/h3&gt;

&lt;p&gt;宿主机系统:CentOS 7.9&lt;br&gt;Docker版本: 1.13.1&lt;/p&gt;

&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  1.2.2、基础环境配置
&lt;/h3&gt;

&lt;p&gt;:::info&lt;br&gt;
💡本次实验环境采用下面的基础环境1-4步骤进行基础设置，请勿遗漏&lt;br&gt;
:::&lt;br&gt;
&lt;strong&gt;1.关闭selinux&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# vi /etc/sysconfig/selinux&lt;/span&gt;
&lt;span class="nv"&gt;SELINUX&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;disabled &lt;span class="c"&gt;# 修改enforcing为disabled&lt;/span&gt;
&lt;span class="c"&gt;# getenforce&lt;/span&gt;
Disabled
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;2.关闭防火墙&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;systemctl stop firewalld
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;3.删除iptables防火墙规则&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;iptables –F
iptables –X
iptables –Z
/usr/sbin/iptables-save
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;4.修改系统内核&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;打开内核转发功能。
vi /etc/sysctl.conf
编辑配置文件/etc/sysctl.conf，将以下内容添加,添加完后在命令模式下 :wq 保存退出：
net.ipv4.ip_forward &lt;span class="o"&gt;=&lt;/span&gt; 1
net.ipv4.conf.default.rp_filter &lt;span class="o"&gt;=&lt;/span&gt; 0
net.ipv4.conf.all.rp_filter &lt;span class="o"&gt;=&lt;/span&gt; 0

&lt;span class="c"&gt;#修改完成后使用命令生效。&lt;/span&gt;
sysctl –p
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  2、服务安装
&lt;/h1&gt;

&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  2.1、安装Docker服务
&lt;/h2&gt;

&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  2.1.1、CentOS安装Docker
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;yum &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-y&lt;/span&gt; docker  &lt;span class="c"&gt;#安装docker服务&lt;/span&gt;
systemctl restart docker &lt;span class="c"&gt;#启动docker服务&lt;/span&gt;
systemctl &lt;span class="nb"&gt;enable &lt;/span&gt;docker &lt;span class="c"&gt;#设置开机启动&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.nlark.com%2Fyuque%2F0%2F2022%2Fpng%2F2207808%2F1659544916107-e0d4bf98-00df-47f5-8d73-43f25173a09c.png%23clientId%3Du96e9434f-4c8c-4%26crop%3D0%26crop%3D0%26crop%3D1%26crop%3D1%26from%3Dpaste%26height%3D310%26id%3Du2918bcab%26margin%3D%255Bobject%2520Object%255D%26name%3Dimage.png%26originHeight%3D387%26originWidth%3D627%26originalType%3Dbinary%26ratio%3D1%26rotation%3D0%26showTitle%3Dfalse%26size%3D8969%26status%3Ddone%26style%3Dnone%26taskId%3Dud9e657d0-bd6a-48b2-a7f1-0a554d2c14a%26title%3D%26width%3D501.6" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.nlark.com%2Fyuque%2F0%2F2022%2Fpng%2F2207808%2F1659544916107-e0d4bf98-00df-47f5-8d73-43f25173a09c.png%23clientId%3Du96e9434f-4c8c-4%26crop%3D0%26crop%3D0%26crop%3D1%26crop%3D1%26from%3Dpaste%26height%3D310%26id%3Du2918bcab%26margin%3D%255Bobject%2520Object%255D%26name%3Dimage.png%26originHeight%3D387%26originWidth%3D627%26originalType%3Dbinary%26ratio%3D1%26rotation%3D0%26showTitle%3Dfalse%26size%3D8969%26status%3Ddone%26style%3Dnone%26taskId%3Dud9e657d0-bd6a-48b2-a7f1-0a554d2c14a%26title%3D%26width%3D501.6" alt="image.png"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  2.1.2、Ubuntu安装Docker
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;apt-get update
&lt;span class="nb"&gt;sudo &lt;/span&gt;apt-get &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-y&lt;/span&gt; docker.io
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.nlark.com%2Fyuque%2F0%2F2022%2Fpng%2F2207808%2F1659532641801-0dfd6a77-2f44-4ac4-b37f-d025288fef19.png%23clientId%3Du5a83b8b4-d6d0-4%26crop%3D0%26crop%3D0%26crop%3D1%26crop%3D1%26from%3Dpaste%26height%3D225%26id%3Du4aa98cab%26margin%3D%255Bobject%2520Object%255D%26name%3Dimage.png%26originHeight%3D281%26originWidth%3D891%26originalType%3Dbinary%26ratio%3D1%26rotation%3D0%26showTitle%3Dfalse%26size%3D7383%26status%3Ddone%26style%3Dnone%26taskId%3Du9ded8361-2ab2-432f-8c37-6b564117c2f%26title%3D%26width%3D712.8" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.nlark.com%2Fyuque%2F0%2F2022%2Fpng%2F2207808%2F1659532641801-0dfd6a77-2f44-4ac4-b37f-d025288fef19.png%23clientId%3Du5a83b8b4-d6d0-4%26crop%3D0%26crop%3D0%26crop%3D1%26crop%3D1%26from%3Dpaste%26height%3D225%26id%3Du4aa98cab%26margin%3D%255Bobject%2520Object%255D%26name%3Dimage.png%26originHeight%3D281%26originWidth%3D891%26originalType%3Dbinary%26ratio%3D1%26rotation%3D0%26showTitle%3Dfalse%26size%3D7383%26status%3Ddone%26style%3Dnone%26taskId%3Du9ded8361-2ab2-432f-8c37-6b564117c2f%26title%3D%26width%3D712.8" alt="image.png"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h1&gt;
  
  
  3、镜像
&lt;/h1&gt;

&lt;p&gt;:::info&lt;br&gt;
在之前的介绍中，我们知道镜像是 Docker 的三大组件之一。 Docker 运行容器前需要本地存在对应的镜像，如果镜像不存在本地，Docker 会从镜像仓库下载（默认是 Docker Hub 公共 注册服务器中的仓库）。 本章将介绍更多关于镜像的内容，包括： 从仓库获取镜像； 管理本地主机上的镜像； 介绍镜像实现的基本原理。&lt;br&gt;&lt;br&gt;
:::&lt;br&gt;
  本节将介绍更多关于镜像的内容，包括： &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;从仓库获取镜像； &lt;/li&gt;
&lt;li&gt;管理本地主机上的镜像； &lt;/li&gt;
&lt;li&gt;介绍镜像实现的基本原理。
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  3.1、设置镜像加速（阿里云）
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors" rel="noopener noreferrer"&gt;点击此处设置阿里云镜像加速服务&lt;/a&gt;:&lt;a href="https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors" rel="noopener noreferrer"&gt;https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors&lt;/a&gt;&lt;br&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.nlark.com%2Fyuque%2F0%2F2022%2Fpng%2F2207808%2F1659694661235-5474305b-e84a-4fec-b241-9c2551201243.png%23clientId%3Du28d579b0-9e04-4%26crop%3D0%26crop%3D0%26crop%3D1%26crop%3D1%26from%3Dpaste%26height%3D667%26id%3Dubc5de466%26margin%3D%255Bobject%2520Object%255D%26name%3Dimage.png%26originHeight%3D834%26originWidth%3D1160%26originalType%3Dbinary%26ratio%3D1%26rotation%3D0%26showTitle%3Dfalse%26size%3D59639%26status%3Ddone%26style%3Dnone%26taskId%3Du7e0ca459-f361-4d65-8ba9-d739df03509%26title%3D%26width%3D928" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.nlark.com%2Fyuque%2F0%2F2022%2Fpng%2F2207808%2F1659694661235-5474305b-e84a-4fec-b241-9c2551201243.png%23clientId%3Du28d579b0-9e04-4%26crop%3D0%26crop%3D0%26crop%3D1%26crop%3D1%26from%3Dpaste%26height%3D667%26id%3Dubc5de466%26margin%3D%255Bobject%2520Object%255D%26name%3Dimage.png%26originHeight%3D834%26originWidth%3D1160%26originalType%3Dbinary%26ratio%3D1%26rotation%3D0%26showTitle%3Dfalse%26size%3D59639%26status%3Ddone%26style%3Dnone%26taskId%3Du7e0ca459-f361-4d65-8ba9-d739df03509%26title%3D%26width%3D928" alt="image.png"&gt;&lt;/a&gt;&lt;br&gt;修改为阿里云镜像加速&lt;br&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.nlark.com%2Fyuque%2F0%2F2022%2Fpng%2F2207808%2F1659694291869-6a880758-7ebf-4964-ade2-54b6e270911b.png%23clientId%3Du28d579b0-9e04-4%26crop%3D0%26crop%3D0%26crop%3D1%26crop%3D1%26from%3Dpaste%26height%3D174%26id%3DStHVJ%26margin%3D%255Bobject%2520Object%255D%26name%3Dimage.png%26originHeight%3D217%26originWidth%3D629%26originalType%3Dbinary%26ratio%3D1%26rotation%3D0%26showTitle%3Dfalse%26size%3D13054%26status%3Ddone%26style%3Dnone%26taskId%3Du272e915b-dc58-420b-a163-7a96afdb536%26title%3D%26width%3D503.2" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.nlark.com%2Fyuque%2F0%2F2022%2Fpng%2F2207808%2F1659694291869-6a880758-7ebf-4964-ade2-54b6e270911b.png%23clientId%3Du28d579b0-9e04-4%26crop%3D0%26crop%3D0%26crop%3D1%26crop%3D1%26from%3Dpaste%26height%3D174%26id%3DStHVJ%26margin%3D%255Bobject%2520Object%255D%26name%3Dimage.png%26originHeight%3D217%26originWidth%3D629%26originalType%3Dbinary%26ratio%3D1%26rotation%3D0%26showTitle%3Dfalse%26size%3D13054%26status%3Ddone%26style%3Dnone%26taskId%3Du272e915b-dc58-420b-a163-7a96afdb536%26title%3D%26width%3D503.2" alt="image.png"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  3.2、拉取镜像(pull)
&lt;/h2&gt;

&lt;p&gt;可以使用 docker pull 命令来从仓库获取所需要的镜像。  &lt;br&gt;这里使用nginx镜像作为演示&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# 以nginx为例&lt;/span&gt;

docker pull nginx
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.nlark.com%2Fyuque%2F0%2F2022%2Fpng%2F2207808%2F1659605061782-5704e715-a461-4313-a09a-f7b5f8363eb8.png%23clientId%3Du69928ef9-8d99-4%26crop%3D0%26crop%3D0%26crop%3D1%26crop%3D1%26from%3Dpaste%26height%3D226%26id%3Dufad1302a%26margin%3D%255Bobject%2520Object%255D%26name%3Dimage.png%26originHeight%3D283%26originWidth%3D920%26originalType%3Dbinary%26ratio%3D1%26rotation%3D0%26showTitle%3Dfalse%26size%3D37412%26status%3Ddone%26style%3Dnone%26taskId%3Du782ad60d-a3f2-4e88-a4d5-6876ffa9c5d%26title%3D%26width%3D736" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.nlark.com%2Fyuque%2F0%2F2022%2Fpng%2F2207808%2F1659605061782-5704e715-a461-4313-a09a-f7b5f8363eb8.png%23clientId%3Du69928ef9-8d99-4%26crop%3D0%26crop%3D0%26crop%3D1%26crop%3D1%26from%3Dpaste%26height%3D226%26id%3Dufad1302a%26margin%3D%255Bobject%2520Object%255D%26name%3Dimage.png%26originHeight%3D283%26originWidth%3D920%26originalType%3Dbinary%26ratio%3D1%26rotation%3D0%26showTitle%3Dfalse%26size%3D37412%26status%3Ddone%26style%3Dnone%26taskId%3Du782ad60d-a3f2-4e88-a4d5-6876ffa9c5d%26title%3D%26width%3D736" alt="image.png"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  3.3、列出镜像(images)
&lt;/h2&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# 列出本地所有镜像&lt;/span&gt;
docker images 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.nlark.com%2Fyuque%2F0%2F2022%2Fpng%2F2207808%2F1659617996251-388e4409-fc1f-492e-b738-1fcd1b60fe8e.png%23clientId%3Du2ec06010-83bd-4%26crop%3D0%26crop%3D0%26crop%3D1%26crop%3D1%26from%3Dpaste%26height%3D100%26id%3Duc3a07f84%26margin%3D%255Bobject%2520Object%255D%26name%3Dimage.png%26originHeight%3D125%26originWidth%3D590%26originalType%3Dbinary%26ratio%3D1%26rotation%3D0%26showTitle%3Dfalse%26size%3D8580%26status%3Ddone%26style%3Dnone%26taskId%3Du2bf514b5-fa72-4f42-bf79-ddc5bb01be5%26title%3D%26width%3D472" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.nlark.com%2Fyuque%2F0%2F2022%2Fpng%2F2207808%2F1659617996251-388e4409-fc1f-492e-b738-1fcd1b60fe8e.png%23clientId%3Du2ec06010-83bd-4%26crop%3D0%26crop%3D0%26crop%3D1%26crop%3D1%26from%3Dpaste%26height%3D100%26id%3Duc3a07f84%26margin%3D%255Bobject%2520Object%255D%26name%3Dimage.png%26originHeight%3D125%26originWidth%3D590%26originalType%3Dbinary%26ratio%3D1%26rotation%3D0%26showTitle%3Dfalse%26size%3D8580%26status%3Ddone%26style%3Dnone%26taskId%3Du2bf514b5-fa72-4f42-bf79-ddc5bb01be5%26title%3D%26width%3D472" alt="image.png"&gt;&lt;/a&gt;&lt;br&gt; 在列出信息中，可以看到几个字段信息 &lt;br&gt;来自于&lt;strong&gt;哪个仓库(REPOSITORY)---&amp;gt; docker.io/nginx&lt;/strong&gt;&lt;br&gt;比如 nginx 镜像的&lt;strong&gt;标记(TAG)&lt;/strong&gt;，比如 latest  &lt;br&gt;它的 ID 号（唯一）---&amp;gt;  b692a91e4e15&lt;br&gt; 创建时间  ---&amp;gt; 2 days ago&lt;br&gt;镜像大小  ---&amp;gt; 142 MB&lt;br&gt;
&lt;a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  3.4、创建镜像(commit/import/Dockerfile)
&lt;/h2&gt;

&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  3.4.1、使用commit创建镜像
&lt;/h3&gt;

&lt;p&gt;:::info&lt;br&gt;
💡其中， -m 来指定提交的说明信息，跟我们使用的版本控制工具一样； -a 可以指定更新的用户信息；之后是用来创建镜像 的容器的 ID；最后指定目标镜像的仓库名和 tag 信息。创建成功后会返回这个镜像的 ID 信息。&lt;br&gt;
:::&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# 运行一个名为nginx的容器 映射宿主机 8081到80端口&lt;/span&gt;
docker run &lt;span class="nt"&gt;-dit&lt;/span&gt; &lt;span class="nt"&gt;--name&lt;/span&gt; nginx &lt;span class="nt"&gt;-p&lt;/span&gt; 8081:80 nginx
&lt;span class="c"&gt;# 查看所有容器&lt;/span&gt;
docker ps &lt;span class="nt"&gt;-a&lt;/span&gt;
&lt;span class="c"&gt;# 使用exec 命令进入 nginx容器内&lt;/span&gt;
docker &lt;span class="nb"&gt;exec&lt;/span&gt; &lt;span class="nt"&gt;-it&lt;/span&gt; nginx bash

&lt;span class="c"&gt;# 使用echo 替换 index.html页面显示内容&lt;/span&gt;
&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"this is v2 website"&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; /usr/share/nginx/html/index.html


&lt;span class="c"&gt;# 此处的 ee9d263ea0f7 为之前创建的 nginx 容器 id&lt;/span&gt;
docker commit &lt;span class="nt"&gt;-m&lt;/span&gt; &lt;span class="s2"&gt;"this is v2 web"&lt;/span&gt; &lt;span class="nt"&gt;-a&lt;/span&gt; &lt;span class="s2"&gt;"UniStars"&lt;/span&gt; ee9d263ea0f7 nginx:v2

&lt;span class="c"&gt;# 使用新构建的镜像运行容器&lt;/span&gt;
docker run &lt;span class="nt"&gt;-dit&lt;/span&gt; &lt;span class="nt"&gt;--name&lt;/span&gt; nginx2 nginx:v2
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.nlark.com%2Fyuque%2F0%2F2022%2Fpng%2F2207808%2F1659620488487-4bd77453-daaf-4f24-be71-fc2e1a07c630.png%23clientId%3Du2ec06010-83bd-4%26crop%3D0%26crop%3D0%26crop%3D1%26crop%3D1%26from%3Dpaste%26height%3D498%26id%3Du07d0e884%26margin%3D%255Bobject%2520Object%255D%26name%3Dimage.png%26originHeight%3D622%26originWidth%3D1205%26originalType%3Dbinary%26ratio%3D1%26rotation%3D0%26showTitle%3Dfalse%26size%3D65276%26status%3Ddone%26style%3Dnone%26taskId%3Dud2a5681c-4be1-4eee-9d84-ba1e79c31a2%26title%3D%26width%3D964" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.nlark.com%2Fyuque%2F0%2F2022%2Fpng%2F2207808%2F1659620488487-4bd77453-daaf-4f24-be71-fc2e1a07c630.png%23clientId%3Du2ec06010-83bd-4%26crop%3D0%26crop%3D0%26crop%3D1%26crop%3D1%26from%3Dpaste%26height%3D498%26id%3Du07d0e884%26margin%3D%255Bobject%2520Object%255D%26name%3Dimage.png%26originHeight%3D622%26originWidth%3D1205%26originalType%3Dbinary%26ratio%3D1%26rotation%3D0%26showTitle%3Dfalse%26size%3D65276%26status%3Ddone%26style%3Dnone%26taskId%3Dud2a5681c-4be1-4eee-9d84-ba1e79c31a2%26title%3D%26width%3D964" alt="image.png"&gt;&lt;/a&gt;&lt;br&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.nlark.com%2Fyuque%2F0%2F2022%2Fpng%2F2207808%2F1659620663621-c62ab07b-1e3a-4e0e-9e8d-24c6afbaede5.png%23clientId%3Du2ec06010-83bd-4%26crop%3D0%26crop%3D0%26crop%3D1%26crop%3D1%26from%3Dpaste%26height%3D208%26id%3Du4034880a%26margin%3D%255Bobject%2520Object%255D%26name%3Dimage.png%26originHeight%3D260%26originWidth%3D1171%26originalType%3Dbinary%26ratio%3D1%26rotation%3D0%26showTitle%3Dfalse%26size%3D27795%26status%3Ddone%26style%3Dnone%26taskId%3Duc85f9dc9-3ee4-4f15-ac3f-87739e1fae6%26title%3D%26width%3D936.8" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.nlark.com%2Fyuque%2F0%2F2022%2Fpng%2F2207808%2F1659620663621-c62ab07b-1e3a-4e0e-9e8d-24c6afbaede5.png%23clientId%3Du2ec06010-83bd-4%26crop%3D0%26crop%3D0%26crop%3D1%26crop%3D1%26from%3Dpaste%26height%3D208%26id%3Du4034880a%26margin%3D%255Bobject%2520Object%255D%26name%3Dimage.png%26originHeight%3D260%26originWidth%3D1171%26originalType%3Dbinary%26ratio%3D1%26rotation%3D0%26showTitle%3Dfalse%26size%3D27795%26status%3Ddone%26style%3Dnone%26taskId%3Duc85f9dc9-3ee4-4f15-ac3f-87739e1fae6%26title%3D%26width%3D936.8" alt="image.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  3.4.2、使用Dockerfile创建镜像
&lt;/h3&gt;

&lt;p&gt;Dockerfile是一个包含用于组合映像的命令的文本文档。可以使用在&lt;a href="https://so.csdn.net/so/search?q=%E5%91%BD%E4%BB%A4%E8%A1%8C&amp;amp;spm=1001.2101.3001.7020" rel="noopener noreferrer"&gt;命令行&lt;/a&gt;中调用任何命令。 Docker通过读取Dockerfile中的指令自动生成映像。&lt;br&gt; &lt;br&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# 使用mkdir 命令在当前目录下创建一个dockerfile目录&lt;/span&gt;
&lt;span class="nb"&gt;mkdir &lt;/span&gt;dockerfile
&lt;span class="c"&gt;# 使用vi命令 创建并编写 Dockerfile 文件&lt;/span&gt;
vi Dockerfile

&lt;span class="c"&gt;# 添加如下内容&lt;/span&gt;
FROM centos:7
RUN yum &lt;span class="nt"&gt;-y&lt;/span&gt; &lt;span class="nb"&gt;install &lt;/span&gt;httpd
RUN &lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"Build By Dockerfile"&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; /var/www/html/index.html
RUN &lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"ServerName localhost:80"&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt; /etc/httpd/conf/httpd.conf
EXPOSE 80
CMD &lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"/usr/sbin/httpd"&lt;/span&gt;,&lt;span class="s2"&gt;"-D"&lt;/span&gt;,&lt;span class="s2"&gt;"FOREGROUND"&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;

&lt;span class="c"&gt;# 运行docker build 命令来构建该镜像，这里的-t 后面跟的是这个镜像的TAG&lt;/span&gt;
 docker build &lt;span class="nt"&gt;-t&lt;/span&gt; httpd:v1 &lt;span class="nb"&gt;.&lt;/span&gt;
&lt;span class="c"&gt;# 运行 docker images 查看构建成功的镜像&lt;/span&gt;
docker images

&lt;span class="c"&gt;# 使用docker run 来运行刚刚构建的镜像&lt;/span&gt;
docker run &lt;span class="nt"&gt;-dit&lt;/span&gt; &lt;span class="nt"&gt;--name&lt;/span&gt; http &lt;span class="nt"&gt;-p&lt;/span&gt; 8088:80 httpd:v1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.nlark.com%2Fyuque%2F0%2F2022%2Fpng%2F2207808%2F1659681554035-55c786a5-8c7b-4d96-82e7-bba3d9b570cd.png%23clientId%3Du28d579b0-9e04-4%26crop%3D0%26crop%3D0%26crop%3D1%26crop%3D1%26from%3Dpaste%26height%3D124%26id%3Du54849306%26margin%3D%255Bobject%2520Object%255D%26name%3Dimage.png%26originHeight%3D155%26originWidth%3D605%26originalType%3Dbinary%26ratio%3D1%26rotation%3D0%26showTitle%3Dfalse%26size%3D9396%26status%3Ddone%26style%3Dnone%26taskId%3Duc412b5c8-a19a-40a0-8d3b-b3bf1a5667b%26title%3D%26width%3D484" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.nlark.com%2Fyuque%2F0%2F2022%2Fpng%2F2207808%2F1659681554035-55c786a5-8c7b-4d96-82e7-bba3d9b570cd.png%23clientId%3Du28d579b0-9e04-4%26crop%3D0%26crop%3D0%26crop%3D1%26crop%3D1%26from%3Dpaste%26height%3D124%26id%3Du54849306%26margin%3D%255Bobject%2520Object%255D%26name%3Dimage.png%26originHeight%3D155%26originWidth%3D605%26originalType%3Dbinary%26ratio%3D1%26rotation%3D0%26showTitle%3Dfalse%26size%3D9396%26status%3Ddone%26style%3Dnone%26taskId%3Duc412b5c8-a19a-40a0-8d3b-b3bf1a5667b%26title%3D%26width%3D484" alt="image.png"&gt;&lt;/a&gt;&lt;br&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.nlark.com%2Fyuque%2F0%2F2022%2Fpng%2F2207808%2F1659681620391-e9ef090d-7ba7-4728-979f-3971e29f797d.png%23clientId%3Du28d579b0-9e04-4%26crop%3D0%26crop%3D0%26crop%3D1%26crop%3D1%26from%3Dpaste%26height%3D329%26id%3Du1440bb32%26margin%3D%255Bobject%2520Object%255D%26name%3Dimage.png%26originHeight%3D411%26originWidth%3D655%26originalType%3Dbinary%26ratio%3D1%26rotation%3D0%26showTitle%3Dfalse%26size%3D40829%26status%3Ddone%26style%3Dnone%26taskId%3Dud311d912-26b0-4b1e-9aac-52c6437b9b2%26title%3D%26width%3D524" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.nlark.com%2Fyuque%2F0%2F2022%2Fpng%2F2207808%2F1659681620391-e9ef090d-7ba7-4728-979f-3971e29f797d.png%23clientId%3Du28d579b0-9e04-4%26crop%3D0%26crop%3D0%26crop%3D1%26crop%3D1%26from%3Dpaste%26height%3D329%26id%3Du1440bb32%26margin%3D%255Bobject%2520Object%255D%26name%3Dimage.png%26originHeight%3D411%26originWidth%3D655%26originalType%3Dbinary%26ratio%3D1%26rotation%3D0%26showTitle%3Dfalse%26size%3D40829%26status%3Ddone%26style%3Dnone%26taskId%3Dud311d912-26b0-4b1e-9aac-52c6437b9b2%26title%3D%26width%3D524" alt="image.png"&gt;&lt;/a&gt;&lt;br&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.nlark.com%2Fyuque%2F0%2F2022%2Fpng%2F2207808%2F1659681675208-ee22d90f-57a2-4936-9964-aae2459bb992.png%23clientId%3Du28d579b0-9e04-4%26crop%3D0%26crop%3D0%26crop%3D1%26crop%3D1%26from%3Dpaste%26height%3D174%26id%3Du63db84ea%26margin%3D%255Bobject%2520Object%255D%26name%3Dimage.png%26originHeight%3D218%26originWidth%3D735%26originalType%3Dbinary%26ratio%3D1%26rotation%3D0%26showTitle%3Dfalse%26size%3D26761%26status%3Ddone%26style%3Dnone%26taskId%3Dud9336979-05b0-44a4-a4de-00b047865c3%26title%3D%26width%3D588" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.nlark.com%2Fyuque%2F0%2F2022%2Fpng%2F2207808%2F1659681675208-ee22d90f-57a2-4936-9964-aae2459bb992.png%23clientId%3Du28d579b0-9e04-4%26crop%3D0%26crop%3D0%26crop%3D1%26crop%3D1%26from%3Dpaste%26height%3D174%26id%3Du63db84ea%26margin%3D%255Bobject%2520Object%255D%26name%3Dimage.png%26originHeight%3D218%26originWidth%3D735%26originalType%3Dbinary%26ratio%3D1%26rotation%3D0%26showTitle%3Dfalse%26size%3D26761%26status%3Ddone%26style%3Dnone%26taskId%3Dud9336979-05b0-44a4-a4de-00b047865c3%26title%3D%26width%3D588" alt="image.png"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  3.4.3、Dockerfile详解
&lt;/h3&gt;

&lt;p&gt;Dockerfile 由一行行命令语句组成，并且支持以 # 开头的注释行。  &lt;br&gt;Dockerfile 基本的语法如下&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; 使用 # 来注释
&lt;/li&gt;
&lt;li&gt;MAINTAINER 镜像作者信息&lt;/li&gt;
&lt;li&gt;FROM 指令告诉 Docker 使用哪个镜像作为基础
&lt;/li&gt;
&lt;li&gt;RUN 开头的指令会在创建中运行，比如安装一个软件包，在这里使用 yum 来安装了一些软件
&lt;/li&gt;
&lt;li&gt;COPY 从 Docker 宿主机复制文件至创建的新镜像文件&lt;/li&gt;
&lt;li&gt;ADD 类似于 COPY 指令，ADD 支持 tar 文件和 URL 路径&lt;/li&gt;
&lt;li&gt;WORKDIR 用于为 Dockerfile 中所有的 RUN、CMD、ENTRYPOINT、COPY、ADD 指定设定工作目录&lt;/li&gt;
&lt;li&gt;VOLUME 数据卷，用于在 image 中创建挂载点目录，以挂载 Docker host 上的卷或者其他容器上的卷&lt;/li&gt;
&lt;li&gt;EXPOSE 为容器打开指定的监听端口以实现与外部通信&lt;/li&gt;
&lt;li&gt;ENV 用于为镜像定义所需的环境变量，可以被 Dockerfile 文件中其他命令调用(ENV、ADD、COPY、RUN、CMD)&lt;/li&gt;
&lt;li&gt;CMD 启动容器指定默认要运行的程序或命令，默认"/bin/sh -c"运行&lt;/li&gt;
&lt;li&gt;ENTRYPOINT 类型 CMD 指令的功能，用于为容器指定默认运行程序或命令&lt;/li&gt;
&lt;li&gt;USER 指定当前用户&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h4&gt;
  
  
  3.4.3.1、FROM
&lt;/h4&gt;

&lt;p&gt;格式为 FROM   或 FROM :TAG。&lt;br&gt;第一条指令必须为 FROM 指令。并且，如果在同一个Dockerfile中创建多个镜像时，可以使用多个 FROM 指令（每个镜像 一次）。&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;FROM centos:7
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  3.4.3.2、MAINTAINER
&lt;/h4&gt;

&lt;p&gt;格式为 MAINTAINER   ，指定维护者信息。&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;MAINTAINER FengLei
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  3.4.3.3、RUN
&lt;/h4&gt;

&lt;p&gt;格式为:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;RUN &lt;/li&gt;
&lt;li&gt;RUN  ["executable", "param1", "param2"]
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;RUN yum &lt;span class="nt"&gt;-y&lt;/span&gt; &lt;span class="nb"&gt;install &lt;/span&gt;httpd
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;前者将在 shell 终端中运行命令，即 /bin/sh -c ；后者则使用 exec 执行。指定使用其它终端可以通过第二种方式实 现，例如 RUN ["/bin/bash", "-c", "echo Build_Dockerfile"] 。&lt;br&gt;每条 RUN 指令将在当前镜像基础上执行指定命令，并提交为新的镜像。当命令较长时可以使用 \ 来换行。&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;RUN yum clean all&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
    yum &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-y&lt;/span&gt; httpd&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
    &lt;span class="nb"&gt;mkdir&lt;/span&gt; &lt;span class="nt"&gt;-p&lt;/span&gt; /var/www/html/&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  3.4.3.4、COPY
&lt;/h4&gt;

&lt;p&gt;格式：&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;COPY ... &lt;/li&gt;
&lt;li&gt;COPY ["",... ""]&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;和 RUN 指令一样，也有两种格式，一种类似于命令行，一种类似于函数调用。&lt;br&gt;复制本地主机的  .（为 Dockerfile 所在目录的相对路径）到容器中的。&lt;br&gt;当使用本地目录为源目录时，推荐使用 COPY 。 &lt;br&gt;COPY 指令将从构建上下文目录中 &amp;lt;源路径&amp;gt; 的文件/目录复制到新的一层的镜像 内的 &amp;lt;目标路径&amp;gt; 位置。比如：&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;COPY index /usr/share/nginx/html
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&amp;lt;源路径&amp;gt; 可以是多个，甚至可以是通配符，其通配符规则要满足 Go 的 filepath.Match 规则，如：&lt;br&gt;COPY /root/* /mnt/&lt;br&gt;COPY /root/&lt;em&gt;.html /usr/share/nginx/html/&lt;br&gt;&lt;/em&gt;&lt;em&gt;&amp;lt;目标路径&amp;gt;&lt;/em&gt;* 可以是容器内的绝对路径，也可以是相对于工作目录的相对路径（工 作目录可以用 WORKDIR 指令来指定）。目标路径不需要事先创建，如果目录不存 在会在复制文件前先行创建缺失目录。 此外，还需要注意一点，使用 COPY 指令，源文件的各种元数据都会保留。比如 读、写、执行权限、文件变更时间等。这个特性对于镜像定制很有用。特别是构建 相关文件都在使用 Git 进行管理的时候。 &lt;br&gt;
&lt;a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h4&gt;
  
  
  3.4.3.5、ADD
&lt;/h4&gt;

&lt;p&gt;格式为 ADD   。&lt;br&gt;该命令将复制指定的  到容器中的   。&lt;br&gt;其中可以是Dockerfile所在目录的一个相对路径；也可以是 一个 URL；还可以是一个 tar 文件（自动解压为目录）。&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;FROM centos:7
ADD httpd-2.4.tar.gz /
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  3.4.3.6、WORKDIR
&lt;/h4&gt;

&lt;p&gt;格式为 WORKDIR  &lt;br&gt;为后续的 RUN 、 CMD 、 ENTRYPOINT 指令配置工作目录。&lt;br&gt;可以使用多个 WORKDIR 指令，后续命令如果参数是相对路径，则会基于之前命令指定的路径。例如&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;WORKDIR /mnt/
WORKDIR dir1
WORKDIR dir2
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;最终路径为  &lt;strong&gt;/mnt/dir1/dir2&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  3.4.3.7、USER
&lt;/h4&gt;

&lt;p&gt;格式为 USER &amp;lt;用户名&amp;gt;&lt;br&gt;USER 指令和 WORKDIR 相似，都是改变环境状态并影响以后的层。 WORKDIR 是改变工作目录， USER 则是改变之后层的执行 RUN , CMD 以及 ENTRYPOINT 这类命令的身份。&lt;br&gt;&lt;strong&gt;注意: USER只是切换用户，该用户必须事先存在&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;RUN groupadd &lt;span class="nt"&gt;-r&lt;/span&gt; ug &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; useradd &lt;span class="nt"&gt;-r&lt;/span&gt; &lt;span class="nt"&gt;-g&lt;/span&gt; ug user1
USER user1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  3.4.3.8、VOLUME
&lt;/h4&gt;

&lt;p&gt;格式为 VOLUME ["/data"] 。&lt;br&gt;创建一个可以从本地主机或其他容器挂载的挂载点，一般用来存放数据库和需要保持的数据等。 &lt;/p&gt;

&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  3.4.3.9、EXPOSE
&lt;/h4&gt;

&lt;p&gt;格式为 EXPOSE  [...] 。&lt;br&gt;告诉 Docker 服务端容器暴露的端口号，供互联系统使用。&lt;br&gt;这只是一个声明，在运行时并不 会因为这个声明应用就会开启这个端口的服务。在 Dockerfile 中写入这样的声明有 两个好处，一个是帮助镜像使用者理解这个镜像服务的守护端口，以方便配置映 射；另一个用处则是在运行时使用随机端口映射时，也就是 docker run -P 时，会自动随机映射 EXPOSE 的端口。&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;FROM centos:7
EXPOSE 80,22
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  3.4.3.10、ENV
&lt;/h4&gt;

&lt;p&gt;格式有两种：&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;ENV  &lt;/li&gt;
&lt;li&gt;ENV =&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;这个指令就是设置环境变量，无论是后面的其它指令，如 RUN ，还是运行时的应用，都可以直接使用这里定义的环境变量。定义了环境变量，那么在后续的指令中，就可以使用这个环境变量。 &lt;br&gt;这里的例子演示了定义MYSQL的用户和密码&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ENV MYSQL_USER docker_user
ENV MYSQL_PASS docker_password
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  3.4.3.11、CMD
&lt;/h4&gt;

&lt;p&gt;支持三种格式，分别是:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;CMD ["executable","param1","param2"] 使用 exec 执行（推荐）；&lt;/li&gt;
&lt;li&gt;CMD command param1 param2 在 /bin/sh 中执行，提供给需要交互的应用；&lt;/li&gt;
&lt;li&gt;CMD ["param1","param2"] 提供给 ENTRYPOINT 的默认参数；
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;指定启动容器时执行的命令，每个 Dockerfile 只能有一条 CMD 命令。&lt;br&gt;如果指定了多条命令，只有最后一条会被执行。&lt;br&gt;如果用户启动容器时候指定了运行的命令，则会覆盖掉 CMD 指定的命令。  &lt;br&gt;在运行时可以指定新的命令来替代镜像设置中的这个默认命令，比如， centos 镜像默认的 CMD 是 /bin/bash ，如果我们直接 docker run -it centos ,会直接进入 bash 。&lt;br&gt;也可以在运行时指定运行别的命令，如 docker run -it centos cat /etc/redhat-release。这就是用 cat /etc/redhat-release 命令替换了默认的 /bin/bash 命令&lt;br&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.nlark.com%2Fyuque%2F0%2F2022%2Fpng%2F2207808%2F1659776519682-0b3b8545-5d01-4b12-aaf4-33a6dd17c966.png%23clientId%3Du73d06e87-6ff8-4%26crop%3D0%26crop%3D0%26crop%3D1%26crop%3D1%26from%3Dpaste%26height%3D158%26id%3Du1e5d7bdc%26margin%3D%255Bobject%2520Object%255D%26name%3Dimage.png%26originHeight%3D197%26originWidth%3D1502%26originalType%3Dbinary%26ratio%3D1%26rotation%3D0%26showTitle%3Dfalse%26size%3D22751%26status%3Ddone%26style%3Dnone%26taskId%3Duf82e1695-2590-4468-9475-609a0072af1%26title%3D%26width%3D1201.6" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.nlark.com%2Fyuque%2F0%2F2022%2Fpng%2F2207808%2F1659776519682-0b3b8545-5d01-4b12-aaf4-33a6dd17c966.png%23clientId%3Du73d06e87-6ff8-4%26crop%3D0%26crop%3D0%26crop%3D1%26crop%3D1%26from%3Dpaste%26height%3D158%26id%3Du1e5d7bdc%26margin%3D%255Bobject%2520Object%255D%26name%3Dimage.png%26originHeight%3D197%26originWidth%3D1502%26originalType%3Dbinary%26ratio%3D1%26rotation%3D0%26showTitle%3Dfalse%26size%3D22751%26status%3Ddone%26style%3Dnone%26taskId%3Duf82e1695-2590-4468-9475-609a0072af1%26title%3D%26width%3D1201.6" alt="image.png"&gt;&lt;/a&gt;&lt;br&gt;在指令格式上，一般推荐使用** exec **格式，这类格式在解析时会被解析为 JSON 数组，因此一定要使用双引号 " ，而不要使用单引号。 &lt;br&gt;如果使用 shell 格式的话，实际的命令会被包装为 sh -c 的参数的形式进行 执行。比如：&lt;br&gt;CMD echo $USERNAME在实际执行中，会将其变更为： CMD [ "sh", "-c", "echo $USERNAME" ]&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;CMD &lt;span class="o"&gt;[&lt;/span&gt; &lt;span class="s2"&gt;"sh"&lt;/span&gt;, &lt;span class="s2"&gt;"-c"&lt;/span&gt;, &lt;span class="s2"&gt;"echo &lt;/span&gt;&lt;span class="nv"&gt;$USERNAME&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="o"&gt;]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;这就是为什么我们可以使用环境变量的原因，因为这些环境变量会被 shell 进行解 析处理。 提到 CMD 就不得不提容器中应用在前台执行和后台执行的问题。这是初学者常出 现的一个混淆。  &lt;/p&gt;

&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  3.4.3.12、ENTRYPOINT
&lt;/h4&gt;

&lt;p&gt;ENTRYPOINT  成为 入口点&lt;br&gt;ENTRYPOINT 的格式和 RUN 指令格式一样，分为 exec 格式和 shell 格 式。  &lt;br&gt; 拥有两种格式：&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;ENTRYPOINT ["executable", "param1", "param2"]&lt;/li&gt;
&lt;li&gt;ENTRYPOINT command param1 param2 （shell中执行）。&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;配置容器启动后执行的命令，并且不可被 docker run 提供的参数覆盖。 每个 Dockerfile 中只能有一个 ENTRYPOINT ，当指定多个时，只有最后一个起效。  &lt;br&gt;ENTRYPOINT 的目的和 CMD 一样，都是在指定容器启动程序及参 数。 ENTRYPOINT 在运行时也可以替代，不过比 CMD 要略显繁琐，需要通过 docker run 的参数 --entrypoint 来指定。 当指定了 ENTRYPOINT 后， CMD 的含义就发生了改变，不再是直接的运行其命令，而是将 CMD 的内容作为参数传给 ENTRYPOINT 指令，换句话说实际执行 时，将变为：  &lt;br&gt; "CMD"&lt;/p&gt;

&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  3.4.4、Dockerfile演示
&lt;/h3&gt;

&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  3.4.4.1、构建带有openssh-server功能的容器镜像
&lt;/h4&gt;

&lt;p&gt;centos-7 镜像为基础镜像,安装openssh-server服务，暴露端口 22，容器开机运行 sshd&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;FROM centos:7

RUN yum &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-y&lt;/span&gt; openssh-server &lt;span class="nb"&gt;sudo
&lt;/span&gt;RUN &lt;span class="nb"&gt;sed&lt;/span&gt; &lt;span class="nt"&gt;-i&lt;/span&gt; &lt;span class="s1"&gt;'s/UsePAM yes/UsePAM no/g'&lt;/span&gt; /etc/ssh/sshd_config 

&lt;span class="c"&gt;#RUN useradd admin&lt;/span&gt;
&lt;span class="c"&gt;#RUN echo "admin:admin" | chpasswd&lt;/span&gt;
RUN &lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"root:123456"&lt;/span&gt; | chpasswd
&lt;span class="c"&gt;#RUN echo "admin  ALL=(ALL)    ALL" &amp;gt;&amp;gt; /etc/sudoers&lt;/span&gt;

RUN ssh-keygen &lt;span class="nt"&gt;-t&lt;/span&gt; dsa &lt;span class="nt"&gt;-f&lt;/span&gt; /etc/ssh/ssh_host_dsa_key
RUN ssh-keygen &lt;span class="nt"&gt;-t&lt;/span&gt; rsa &lt;span class="nt"&gt;-f&lt;/span&gt; /etc/ssh/ssh_host_rsa_key

RUN &lt;span class="nb"&gt;mkdir&lt;/span&gt; /var/run/sshd
EXPOSE 22
CMD &lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"/usr/sbin/sshd"&lt;/span&gt;, &lt;span class="s2"&gt;"-D"&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.nlark.com%2Fyuque%2F0%2F2022%2Fpng%2F2207808%2F1659780138975-1100db04-41b8-4438-9fde-419efc72604e.png%23clientId%3Du8f254822-3363-4%26crop%3D0%26crop%3D0%26crop%3D1%26crop%3D1%26from%3Dpaste%26height%3D337%26id%3Du3526e3df%26margin%3D%255Bobject%2520Object%255D%26name%3Dimage.png%26originHeight%3D421%26originWidth%3D682%26originalType%3Dbinary%26ratio%3D1%26rotation%3D0%26showTitle%3Dfalse%26size%3D41707%26status%3Ddone%26style%3Dnone%26taskId%3Du0f918358-af4f-4583-95e9-3a26592bb6c%26title%3D%26width%3D545.6" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.nlark.com%2Fyuque%2F0%2F2022%2Fpng%2F2207808%2F1659780138975-1100db04-41b8-4438-9fde-419efc72604e.png%23clientId%3Du8f254822-3363-4%26crop%3D0%26crop%3D0%26crop%3D1%26crop%3D1%26from%3Dpaste%26height%3D337%26id%3Du3526e3df%26margin%3D%255Bobject%2520Object%255D%26name%3Dimage.png%26originHeight%3D421%26originWidth%3D682%26originalType%3Dbinary%26ratio%3D1%26rotation%3D0%26showTitle%3Dfalse%26size%3D41707%26status%3Ddone%26style%3Dnone%26taskId%3Du0f918358-af4f-4583-95e9-3a26592bb6c%26title%3D%26width%3D545.6" alt="image.png"&gt;&lt;/a&gt;&lt;br&gt;编写完成 Dockerfile 后可以使用 docker build 来生成镜像。&lt;br&gt;其中 -t 标记来添加 tag，指定新的镜像的用户信息。&lt;br&gt;“.” 是 Dockerfile 所在的路径（当前目录），也可以替换为一个具体的 Dockerfile 的路径  &lt;br&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.nlark.com%2Fyuque%2F0%2F2022%2Fpng%2F2207808%2F1659780169279-0501ba8d-f9bf-4660-aec8-6059a7c80d72.png%23clientId%3Du8f254822-3363-4%26crop%3D0%26crop%3D0%26crop%3D1%26crop%3D1%26from%3Dpaste%26height%3D226%26id%3Du32c67fe8%26margin%3D%255Bobject%2520Object%255D%26name%3Dimage.png%26originHeight%3D283%26originWidth%3D666%26originalType%3Dbinary%26ratio%3D1%26rotation%3D0%26showTitle%3Dfalse%26size%3D28304%26status%3Ddone%26style%3Dnone%26taskId%3Du57cfe638-e02d-4889-95c5-cfc370ca16f%26title%3D%26width%3D532.8" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.nlark.com%2Fyuque%2F0%2F2022%2Fpng%2F2207808%2F1659780169279-0501ba8d-f9bf-4660-aec8-6059a7c80d72.png%23clientId%3Du8f254822-3363-4%26crop%3D0%26crop%3D0%26crop%3D1%26crop%3D1%26from%3Dpaste%26height%3D226%26id%3Du32c67fe8%26margin%3D%255Bobject%2520Object%255D%26name%3Dimage.png%26originHeight%3D283%26originWidth%3D666%26originalType%3Dbinary%26ratio%3D1%26rotation%3D0%26showTitle%3Dfalse%26size%3D28304%26status%3Ddone%26style%3Dnone%26taskId%3Du57cfe638-e02d-4889-95c5-cfc370ca16f%26title%3D%26width%3D532.8" alt="image.png"&gt;&lt;/a&gt;&lt;br&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.nlark.com%2Fyuque%2F0%2F2022%2Fpng%2F2207808%2F1659780270468-d9d1d6a2-eedf-4b2b-893a-169c35f56858.png%23clientId%3Du8f254822-3363-4%26crop%3D0%26crop%3D0%26crop%3D1%26crop%3D1%26from%3Dpaste%26height%3D366%26id%3Du570f14c5%26margin%3D%255Bobject%2520Object%255D%26name%3Dimage.png%26originHeight%3D457%26originWidth%3D1471%26originalType%3Dbinary%26ratio%3D1%26rotation%3D0%26showTitle%3Dfalse%26size%3D87251%26status%3Ddone%26style%3Dnone%26taskId%3Du505ec317-c0e2-4da7-9f97-d45c4ae4e40%26title%3D%26width%3D1176.8" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.nlark.com%2Fyuque%2F0%2F2022%2Fpng%2F2207808%2F1659780270468-d9d1d6a2-eedf-4b2b-893a-169c35f56858.png%23clientId%3Du8f254822-3363-4%26crop%3D0%26crop%3D0%26crop%3D1%26crop%3D1%26from%3Dpaste%26height%3D366%26id%3Du570f14c5%26margin%3D%255Bobject%2520Object%255D%26name%3Dimage.png%26originHeight%3D457%26originWidth%3D1471%26originalType%3Dbinary%26ratio%3D1%26rotation%3D0%26showTitle%3Dfalse%26size%3D87251%26status%3Ddone%26style%3Dnone%26taskId%3Du505ec317-c0e2-4da7-9f97-d45c4ae4e40%26title%3D%26width%3D1176.8" alt="image.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  3.5、标记(tag)
&lt;/h2&gt;

&lt;p&gt;:::info&lt;br&gt;
以阿里云为例,稍后会在仓库小节进行详细描述&lt;br&gt;
:::&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker tag 镜像id 远程/本地仓库/镜像名称:版本号

例如:
docker tag 37bb9c63c8b2 registry-vpc.cn-hangzhou.aliyuncs.com/acs/agent:0.7-dfb6816

37bb9c63c8b2 为镜像id
registry-vpc.cn-hangzhou.aliyuncs.com/acs/  为仓库地址
agent 为镜像名称
0.7-dfb6816 为版本号


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  3.6、上传镜像(push)
&lt;/h2&gt;

&lt;p&gt;:::info&lt;br&gt;
以阿里云为例,稍后会在仓库小节进行详细描述&lt;br&gt;
:::&lt;/p&gt;

&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  3.7、导出/导入(save/load)
&lt;/h2&gt;

&lt;p&gt;如果要导出镜像到本地文件，可以使用 docker save 命令。  &lt;br&gt; 可以使用 docker load 从导出的本地文件中再导入到本地镜像库&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# 列出镜像,找出要导出&lt;/span&gt;
docker images

&lt;span class="c"&gt;# 导出镜像&lt;/span&gt;
docker save &lt;span class="nt"&gt;-o&lt;/span&gt; nginx_sv2.tar nginx:v2

&lt;span class="c"&gt;# 查看&lt;/span&gt;
&lt;span class="nb"&gt;ls&lt;/span&gt; &lt;span class="nt"&gt;-l&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.nlark.com%2Fyuque%2F0%2F2022%2Fpng%2F2207808%2F1659684898808-aa784241-242b-4481-842c-7767abd8f7f9.png%23clientId%3Du28d579b0-9e04-4%26crop%3D0%26crop%3D0%26crop%3D1%26crop%3D1%26from%3Dpaste%26height%3D204%26id%3Du651dd389%26margin%3D%255Bobject%2520Object%255D%26name%3Dimage.png%26originHeight%3D255%26originWidth%3D650%26originalType%3Dbinary%26ratio%3D1%26rotation%3D0%26showTitle%3Dfalse%26size%3D27762%26status%3Ddone%26style%3Dnone%26taskId%3Du2929d671-8e1c-412c-8a0c-a74b4fa5821%26title%3D%26width%3D520" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.nlark.com%2Fyuque%2F0%2F2022%2Fpng%2F2207808%2F1659684898808-aa784241-242b-4481-842c-7767abd8f7f9.png%23clientId%3Du28d579b0-9e04-4%26crop%3D0%26crop%3D0%26crop%3D1%26crop%3D1%26from%3Dpaste%26height%3D204%26id%3Du651dd389%26margin%3D%255Bobject%2520Object%255D%26name%3Dimage.png%26originHeight%3D255%26originWidth%3D650%26originalType%3Dbinary%26ratio%3D1%26rotation%3D0%26showTitle%3Dfalse%26size%3D27762%26status%3Ddone%26style%3Dnone%26taskId%3Du2929d671-8e1c-412c-8a0c-a74b4fa5821%26title%3D%26width%3D520" alt="image.png"&gt;&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# 查看准备导入的镜像包&lt;/span&gt;
&lt;span class="nb"&gt;ls&lt;/span&gt; &lt;span class="nt"&gt;-l&lt;/span&gt;

&lt;span class="c"&gt;# 先删除已存在的 nginx:v2&lt;/span&gt;
docker rmi 2ee0ee0dc960

&lt;span class="c"&gt;# 导入镜像,2种语法&lt;/span&gt;

docker load &lt;span class="nt"&gt;--input&lt;/span&gt; nginx_v2.tar
docker load &amp;lt; nginx_v2.tar

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.nlark.com%2Fyuque%2F0%2F2022%2Fpng%2F2207808%2F1659684960314-a968ac9c-8557-4c86-b8f9-f78e6f295971.png%23clientId%3Du28d579b0-9e04-4%26crop%3D0%26crop%3D0%26crop%3D1%26crop%3D1%26from%3Dpaste%26height%3D289%26id%3Dub2994a50%26margin%3D%255Bobject%2520Object%255D%26name%3Dimage.png%26originHeight%3D361%26originWidth%3D785%26originalType%3Dbinary%26ratio%3D1%26rotation%3D0%26showTitle%3Dfalse%26size%3D47344%26status%3Ddone%26style%3Dnone%26taskId%3Ducd3efa71-30ac-4e6d-961b-645d8f839bf%26title%3D%26width%3D628" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.nlark.com%2Fyuque%2F0%2F2022%2Fpng%2F2207808%2F1659684960314-a968ac9c-8557-4c86-b8f9-f78e6f295971.png%23clientId%3Du28d579b0-9e04-4%26crop%3D0%26crop%3D0%26crop%3D1%26crop%3D1%26from%3Dpaste%26height%3D289%26id%3Dub2994a50%26margin%3D%255Bobject%2520Object%255D%26name%3Dimage.png%26originHeight%3D361%26originWidth%3D785%26originalType%3Dbinary%26ratio%3D1%26rotation%3D0%26showTitle%3Dfalse%26size%3D47344%26status%3Ddone%26style%3Dnone%26taskId%3Ducd3efa71-30ac-4e6d-961b-645d8f839bf%26title%3D%26width%3D628" alt="image.png"&gt;&lt;/a&gt;&lt;br&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.nlark.com%2Fyuque%2F0%2F2022%2Fpng%2F2207808%2F1659685008394-8a6212e4-d0b4-4d5a-83fa-4e3ef2692202.png%23clientId%3Du28d579b0-9e04-4%26crop%3D0%26crop%3D0%26crop%3D1%26crop%3D1%26from%3Dpaste%26height%3D321%26id%3Du3b78c831%26margin%3D%255Bobject%2520Object%255D%26name%3Dimage.png%26originHeight%3D401%26originWidth%3D1005%26originalType%3Dbinary%26ratio%3D1%26rotation%3D0%26showTitle%3Dfalse%26size%3D56345%26status%3Ddone%26style%3Dnone%26taskId%3Dudfbfa860-a04f-493d-a3a1-f5d1ef8d271%26title%3D%26width%3D804" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.nlark.com%2Fyuque%2F0%2F2022%2Fpng%2F2207808%2F1659685008394-8a6212e4-d0b4-4d5a-83fa-4e3ef2692202.png%23clientId%3Du28d579b0-9e04-4%26crop%3D0%26crop%3D0%26crop%3D1%26crop%3D1%26from%3Dpaste%26height%3D321%26id%3Du3b78c831%26margin%3D%255Bobject%2520Object%255D%26name%3Dimage.png%26originHeight%3D401%26originWidth%3D1005%26originalType%3Dbinary%26ratio%3D1%26rotation%3D0%26showTitle%3Dfalse%26size%3D56345%26status%3Ddone%26style%3Dnone%26taskId%3Dudfbfa860-a04f-493d-a3a1-f5d1ef8d271%26title%3D%26width%3D804" alt="image.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  3.8、使用supermin5构建镜像
&lt;/h2&gt;

&lt;p&gt;使用 supermin5 命令构建 centos7系统的 docker 镜像，镜像名称为 centos-7，镜像预装 yum、net-tools、initscripts 和 vi 命令&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# 安装supermin&lt;/span&gt;
yum &lt;span class="nt"&gt;-y&lt;/span&gt; &lt;span class="nb"&gt;install &lt;/span&gt;supermin&lt;span class="k"&gt;*&lt;/span&gt;

&lt;span class="c"&gt;# supermin5 添加预装工具 yum net-tools initscripts vi&lt;/span&gt;
supermin5 &lt;span class="nt"&gt;-v&lt;/span&gt; &lt;span class="nt"&gt;--prepare&lt;/span&gt; bash coreutils  yum  net-tools initscripts vim-minial  &lt;span class="nt"&gt;-o&lt;/span&gt; supermin.d
&lt;span class="c"&gt;# supermin5 构建&lt;/span&gt;
supermin5 &lt;span class="nt"&gt;-v&lt;/span&gt; &lt;span class="nt"&gt;--build&lt;/span&gt; &lt;span class="nt"&gt;--format&lt;/span&gt; &lt;span class="nb"&gt;chroot &lt;/span&gt;supermin.d &lt;span class="nt"&gt;-o&lt;/span&gt; appliance.d

&lt;span class="nb"&gt;echo &lt;/span&gt;7 &lt;span class="o"&gt;&amp;gt;&lt;/span&gt;  appliance.d/etc/yum/vars/releasever
&lt;span class="c"&gt;# 镜像打包&lt;/span&gt;
&lt;span class="nb"&gt;tar&lt;/span&gt; &lt;span class="nt"&gt;--numeric-owner&lt;/span&gt; &lt;span class="nt"&gt;-cpf&lt;/span&gt; centos-7.tar &lt;span class="nt"&gt;-C&lt;/span&gt; appliance.d &lt;span class="nb"&gt;.&lt;/span&gt;

&lt;span class="c"&gt;# 导入镜像&lt;/span&gt;
&lt;span class="nb"&gt;cat &lt;/span&gt;centos-7.tar | docker import - centos-7
&lt;span class="c"&gt;# 运行&lt;/span&gt;
docker run &lt;span class="nt"&gt;-dit&lt;/span&gt; &lt;span class="nt"&gt;--name&lt;/span&gt; centos7 centos-7 /bin/bash
&lt;span class="nb"&gt;cat&lt;/span&gt; /etc/redhat-release

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.nlark.com%2Fyuque%2F0%2F2022%2Fpng%2F2207808%2F1659781187405-049f3717-c300-4897-8b88-af660d0c5c63.png%23clientId%3Dudea96b3d-a287-4%26crop%3D0%26crop%3D0%26crop%3D1%26crop%3D1%26from%3Dpaste%26height%3D173%26id%3Du467df879%26margin%3D%255Bobject%2520Object%255D%26name%3Dimage.png%26originHeight%3D216%26originWidth%3D755%26originalType%3Dbinary%26ratio%3D1%26rotation%3D0%26showTitle%3Dfalse%26size%3D29203%26status%3Ddone%26style%3Dnone%26taskId%3Du699daf3a-e38e-46d6-a0b2-b79f5c6ea69%26title%3D%26width%3D604" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.nlark.com%2Fyuque%2F0%2F2022%2Fpng%2F2207808%2F1659781187405-049f3717-c300-4897-8b88-af660d0c5c63.png%23clientId%3Dudea96b3d-a287-4%26crop%3D0%26crop%3D0%26crop%3D1%26crop%3D1%26from%3Dpaste%26height%3D173%26id%3Du467df879%26margin%3D%255Bobject%2520Object%255D%26name%3Dimage.png%26originHeight%3D216%26originWidth%3D755%26originalType%3Dbinary%26ratio%3D1%26rotation%3D0%26showTitle%3Dfalse%26size%3D29203%26status%3Ddone%26style%3Dnone%26taskId%3Du699daf3a-e38e-46d6-a0b2-b79f5c6ea69%26title%3D%26width%3D604" alt="image.png"&gt;&lt;/a&gt;&lt;br&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.nlark.com%2Fyuque%2F0%2F2022%2Fpng%2F2207808%2F1659781308272-6350cb1e-263c-4495-bda0-0b17c8ceb024.png%23clientId%3Dudea96b3d-a287-4%26crop%3D0%26crop%3D0%26crop%3D1%26crop%3D1%26from%3Dpaste%26height%3D170%26id%3Du98265c12%26margin%3D%255Bobject%2520Object%255D%26name%3Dimage.png%26originHeight%3D212%26originWidth%3D954%26originalType%3Dbinary%26ratio%3D1%26rotation%3D0%26showTitle%3Dfalse%26size%3D25841%26status%3Ddone%26style%3Dnone%26taskId%3Dubc2d94b3-52af-4f10-96c6-ac7c2bfa838%26title%3D%26width%3D763.2" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.nlark.com%2Fyuque%2F0%2F2022%2Fpng%2F2207808%2F1659781308272-6350cb1e-263c-4495-bda0-0b17c8ceb024.png%23clientId%3Dudea96b3d-a287-4%26crop%3D0%26crop%3D0%26crop%3D1%26crop%3D1%26from%3Dpaste%26height%3D170%26id%3Du98265c12%26margin%3D%255Bobject%2520Object%255D%26name%3Dimage.png%26originHeight%3D212%26originWidth%3D954%26originalType%3Dbinary%26ratio%3D1%26rotation%3D0%26showTitle%3Dfalse%26size%3D25841%26status%3Ddone%26style%3Dnone%26taskId%3Dubc2d94b3-52af-4f10-96c6-ac7c2bfa838%26title%3D%26width%3D763.2" alt="image.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  3.9、删除镜像(rmi)
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker rmi 镜像iD

例:
docker rmi b692a91e4e15
docker rmi b6
b692a91e4e15 代表nginx镜像的id 也可以只写 前两位

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.nlark.com%2Fyuque%2F0%2F2022%2Fpng%2F2207808%2F1659685040300-ffac5bb7-e8f7-4bce-90ca-e2ce0cc01d49.png%23clientId%3Du28d579b0-9e04-4%26crop%3D0%26crop%3D0%26crop%3D1%26crop%3D1%26from%3Dpaste%26height%3D242%26id%3Du2469fa56%26margin%3D%255Bobject%2520Object%255D%26name%3Dimage.png%26originHeight%3D302%26originWidth%3D895%26originalType%3Dbinary%26ratio%3D1%26rotation%3D0%26showTitle%3Dfalse%26size%3D39963%26status%3Ddone%26style%3Dnone%26taskId%3Duaefa1282-490a-471e-ba7b-cf2919d54d3%26title%3D%26width%3D716" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.nlark.com%2Fyuque%2F0%2F2022%2Fpng%2F2207808%2F1659685040300-ffac5bb7-e8f7-4bce-90ca-e2ce0cc01d49.png%23clientId%3Du28d579b0-9e04-4%26crop%3D0%26crop%3D0%26crop%3D1%26crop%3D1%26from%3Dpaste%26height%3D242%26id%3Du2469fa56%26margin%3D%255Bobject%2520Object%255D%26name%3Dimage.png%26originHeight%3D302%26originWidth%3D895%26originalType%3Dbinary%26ratio%3D1%26rotation%3D0%26showTitle%3Dfalse%26size%3D39963%26status%3Ddone%26style%3Dnone%26taskId%3Duaefa1282-490a-471e-ba7b-cf2919d54d3%26title%3D%26width%3D716" alt="image.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  4、容器
&lt;/h1&gt;

&lt;p&gt;:::info&lt;br&gt;
 容器是 Docker 又一核心概念。 &lt;br&gt;简单的说，容器是独立运行的一个或一组应用，以及它们的运行态环境。对应的，虚拟机可以理解为模拟运行的一整套操作 系统（提供了运行态环境和其他系统环境）和跑在上面的应用。 &lt;br&gt;本节将具体介绍如何来管理一个容器，包括创建、启动和停止等&lt;br&gt;&lt;br&gt;
:::&lt;br&gt;
&lt;a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  4.1、查看容器
&lt;/h2&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# 查看正在运行的容器&lt;/span&gt;
docker ps 

&lt;span class="c"&gt;# 查看所有容器&lt;/span&gt;
docker ps &lt;span class="nt"&gt;-a&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  4.2、启动/停止容器
&lt;/h2&gt;

&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  4.2.1、创建并启动新容器
&lt;/h3&gt;

&lt;p&gt;常用附加参数:&lt;br&gt;-d 在后台运行容器并打印容器ID&lt;br&gt;-t 选项让Docker分配一个伪终端（pseudo-tty）并绑定到容器的标准输入上&lt;br&gt;-i 则让容器的标准输入保持打开。&lt;br&gt;-p 映射端口 宿主机端口:容器端口&lt;br&gt;-P 随机映射端口 &lt;br&gt;-v 绑定卷&lt;br&gt;-w 设置工作目录&lt;br&gt;--rm 退出容器自动删除&lt;br&gt;--restart 重启条件，若宿主机开机要求该容器也运行 那么请设置 --restart=always&lt;br&gt;--name 设置容器名称&lt;br&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# 启动一个随宿主机启动,并映射宿主机80端口到容器80端口 的 nginx 容器&lt;/span&gt;
docker run &lt;span class="nt"&gt;-dit&lt;/span&gt; &lt;span class="nt"&gt;--name&lt;/span&gt; nginx &lt;span class="nt"&gt;-p&lt;/span&gt; 80:80 &lt;span class="nt"&gt;--restart&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;always nginx
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.nlark.com%2Fyuque%2F0%2F2022%2Fpng%2F2207808%2F1659689063558-ca23e9e0-6708-468f-be44-76dac8d2c970.png%23clientId%3Du28d579b0-9e04-4%26crop%3D0%26crop%3D0%26crop%3D1%26crop%3D1%26from%3Dpaste%26height%3D333%26id%3Du7c25b7ea%26margin%3D%255Bobject%2520Object%255D%26name%3Dimage.png%26originHeight%3D416%26originWidth%3D1170%26originalType%3Dbinary%26ratio%3D1%26rotation%3D0%26showTitle%3Dfalse%26size%3D44514%26status%3Ddone%26style%3Dnone%26taskId%3Du249b2040-9453-4379-8815-9fbf97c3d82%26title%3D%26width%3D936" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.nlark.com%2Fyuque%2F0%2F2022%2Fpng%2F2207808%2F1659689063558-ca23e9e0-6708-468f-be44-76dac8d2c970.png%23clientId%3Du28d579b0-9e04-4%26crop%3D0%26crop%3D0%26crop%3D1%26crop%3D1%26from%3Dpaste%26height%3D333%26id%3Du7c25b7ea%26margin%3D%255Bobject%2520Object%255D%26name%3Dimage.png%26originHeight%3D416%26originWidth%3D1170%26originalType%3Dbinary%26ratio%3D1%26rotation%3D0%26showTitle%3Dfalse%26size%3D44514%26status%3Ddone%26style%3Dnone%26taskId%3Du249b2040-9453-4379-8815-9fbf97c3d82%26title%3D%26width%3D936" alt="image.png"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  4.2.2、启动已停止的容器
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker start 容器名称/容器id
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.nlark.com%2Fyuque%2F0%2F2022%2Fpng%2F2207808%2F1659689109417-48840972-40ef-4052-85c2-7e2fd6e77011.png%23clientId%3Du28d579b0-9e04-4%26crop%3D0%26crop%3D0%26crop%3D1%26crop%3D1%26from%3Dpaste%26height%3D194%26id%3Dub7fb76c1%26margin%3D%255Bobject%2520Object%255D%26name%3Dimage.png%26originHeight%3D243%26originWidth%3D1220%26originalType%3Dbinary%26ratio%3D1%26rotation%3D0%26showTitle%3Dfalse%26size%3D24680%26status%3Ddone%26style%3Dnone%26taskId%3Dud4e218c2-283b-4748-be64-3bd94be20ec%26title%3D%26width%3D976" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.nlark.com%2Fyuque%2F0%2F2022%2Fpng%2F2207808%2F1659689109417-48840972-40ef-4052-85c2-7e2fd6e77011.png%23clientId%3Du28d579b0-9e04-4%26crop%3D0%26crop%3D0%26crop%3D1%26crop%3D1%26from%3Dpaste%26height%3D194%26id%3Dub7fb76c1%26margin%3D%255Bobject%2520Object%255D%26name%3Dimage.png%26originHeight%3D243%26originWidth%3D1220%26originalType%3Dbinary%26ratio%3D1%26rotation%3D0%26showTitle%3Dfalse%26size%3D24680%26status%3Ddone%26style%3Dnone%26taskId%3Dud4e218c2-283b-4748-be64-3bd94be20ec%26title%3D%26width%3D976" alt="image.png"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  4.2.3、停止正在运行的容器
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker stop 容器名称/容器id
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.nlark.com%2Fyuque%2F0%2F2022%2Fpng%2F2207808%2F1659689092330-7cf1783f-b434-400f-ada5-9a14b017ec03.png%23clientId%3Du28d579b0-9e04-4%26crop%3D0%26crop%3D0%26crop%3D1%26crop%3D1%26from%3Dpaste%26height%3D163%26id%3Du8bca38d6%26margin%3D%255Bobject%2520Object%255D%26name%3Dimage.png%26originHeight%3D204%26originWidth%3D1029%26originalType%3Dbinary%26ratio%3D1%26rotation%3D0%26showTitle%3Dfalse%26size%3D18689%26status%3Ddone%26style%3Dnone%26taskId%3Du80954046-7713-44e9-97ea-672c6c597a8%26title%3D%26width%3D823.2" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.nlark.com%2Fyuque%2F0%2F2022%2Fpng%2F2207808%2F1659689092330-7cf1783f-b434-400f-ada5-9a14b017ec03.png%23clientId%3Du28d579b0-9e04-4%26crop%3D0%26crop%3D0%26crop%3D1%26crop%3D1%26from%3Dpaste%26height%3D163%26id%3Du8bca38d6%26margin%3D%255Bobject%2520Object%255D%26name%3Dimage.png%26originHeight%3D204%26originWidth%3D1029%26originalType%3Dbinary%26ratio%3D1%26rotation%3D0%26showTitle%3Dfalse%26size%3D18689%26status%3Ddone%26style%3Dnone%26taskId%3Du80954046-7713-44e9-97ea-672c6c597a8%26title%3D%26width%3D823.2" alt="image.png"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  4.3、删除容器
&lt;/h2&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# 删除已停止的容器&lt;/span&gt;
docker &lt;span class="nb"&gt;rm &lt;/span&gt;容器名称/容器id

&lt;span class="c"&gt;# 删除正在运行的容器  -f 代表 强制&lt;/span&gt;
docker &lt;span class="nb"&gt;rm&lt;/span&gt; &lt;span class="nt"&gt;-f&lt;/span&gt; 容器名称/容器id

&lt;span class="c"&gt;# 删除所有停止的容器&lt;/span&gt;
docker container prune

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.nlark.com%2Fyuque%2F0%2F2022%2Fpng%2F2207808%2F1659689132430-72a6a53b-050e-4562-93db-d8cc3d87812a.png%23clientId%3Du28d579b0-9e04-4%26crop%3D0%26crop%3D0%26crop%3D1%26crop%3D1%26from%3Dpaste%26height%3D142%26id%3Du8cb3d17c%26margin%3D%255Bobject%2520Object%255D%26name%3Dimage.png%26originHeight%3D177%26originWidth%3D679%26originalType%3Dbinary%26ratio%3D1%26rotation%3D0%26showTitle%3Dfalse%26size%3D12393%26status%3Ddone%26style%3Dnone%26taskId%3Du0115ddff-730c-4dca-9904-11998a0f08a%26title%3D%26width%3D543.2" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.nlark.com%2Fyuque%2F0%2F2022%2Fpng%2F2207808%2F1659689132430-72a6a53b-050e-4562-93db-d8cc3d87812a.png%23clientId%3Du28d579b0-9e04-4%26crop%3D0%26crop%3D0%26crop%3D1%26crop%3D1%26from%3Dpaste%26height%3D142%26id%3Du8cb3d17c%26margin%3D%255Bobject%2520Object%255D%26name%3Dimage.png%26originHeight%3D177%26originWidth%3D679%26originalType%3Dbinary%26ratio%3D1%26rotation%3D0%26showTitle%3Dfalse%26size%3D12393%26status%3Ddone%26style%3Dnone%26taskId%3Du0115ddff-730c-4dca-9904-11998a0f08a%26title%3D%26width%3D543.2" alt="image.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  4.4、连接容器
&lt;/h2&gt;

&lt;p&gt;在使用 -d 参数时，容器启动后会进入后台。 某些时候需要进入容器进行操作，包括使用 docker attach 命令或 docker exec 命令，推荐使用 docker exec 命令&lt;br&gt;&lt;br&gt;
&lt;a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  4.4.1、attach命令
&lt;/h3&gt;

&lt;p&gt;使用 attach 命令有时候并不方便。当多个窗口同时 attach 到同一个容器的时候，所有窗口都会同步显示。当某个窗 口因命令阻塞时,其他窗口也无法执行操作了。  &lt;br&gt;当使用attach退出时，容器也会退出&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker attach centos7
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.nlark.com%2Fyuque%2F0%2F2022%2Fpng%2F2207808%2F1659781523628-054b0496-0f12-4904-937d-115aea4a784b.png%23clientId%3Dudea96b3d-a287-4%26crop%3D0%26crop%3D0%26crop%3D1%26crop%3D1%26from%3Dpaste%26height%3D152%26id%3Du2427e195%26margin%3D%255Bobject%2520Object%255D%26name%3Dimage.png%26originHeight%3D190%26originWidth%3D1423%26originalType%3Dbinary%26ratio%3D1%26rotation%3D0%26showTitle%3Dfalse%26size%3D18970%26status%3Ddone%26style%3Dnone%26taskId%3Du014d2f6b-c375-4da8-b724-0e93ad9ca3f%26title%3D%26width%3D1138.4" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.nlark.com%2Fyuque%2F0%2F2022%2Fpng%2F2207808%2F1659781523628-054b0496-0f12-4904-937d-115aea4a784b.png%23clientId%3Dudea96b3d-a287-4%26crop%3D0%26crop%3D0%26crop%3D1%26crop%3D1%26from%3Dpaste%26height%3D152%26id%3Du2427e195%26margin%3D%255Bobject%2520Object%255D%26name%3Dimage.png%26originHeight%3D190%26originWidth%3D1423%26originalType%3Dbinary%26ratio%3D1%26rotation%3D0%26showTitle%3Dfalse%26size%3D18970%26status%3Ddone%26style%3Dnone%26taskId%3Du014d2f6b-c375-4da8-b724-0e93ad9ca3f%26title%3D%26width%3D1138.4" alt="image.png"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  4.4.2、exec命令
&lt;/h3&gt;

&lt;p&gt;docker exec 后边可以跟多个参数，一般使用 -i -t参数。 只用 -i 参数时，由于没有分配伪终端，界面没有我们熟悉的 Linux 命令提示 符，但命令执行结果仍然可以返回。 当 -i -t 参数一起使用时，则可以看到我们熟悉的 Linux 命令提示符。&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker &lt;span class="nb"&gt;exec&lt;/span&gt; &lt;span class="nt"&gt;-it&lt;/span&gt; centos7 bash
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.nlark.com%2Fyuque%2F0%2F2022%2Fpng%2F2207808%2F1659781644575-17cb28b2-91e1-4c43-852d-f8bd6433c0a0.png%23clientId%3Dudea96b3d-a287-4%26crop%3D0%26crop%3D0%26crop%3D1%26crop%3D1%26from%3Dpaste%26height%3D165%26id%3Du67b7e0a3%26margin%3D%255Bobject%2520Object%255D%26name%3Dimage.png%26originHeight%3D206%26originWidth%3D1316%26originalType%3Dbinary%26ratio%3D1%26rotation%3D0%26showTitle%3Dfalse%26size%3D22388%26status%3Ddone%26style%3Dnone%26taskId%3Du8c9cd536-92b8-45fb-875c-89e2c0dea5a%26title%3D%26width%3D1052.8" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.nlark.com%2Fyuque%2F0%2F2022%2Fpng%2F2207808%2F1659781644575-17cb28b2-91e1-4c43-852d-f8bd6433c0a0.png%23clientId%3Dudea96b3d-a287-4%26crop%3D0%26crop%3D0%26crop%3D1%26crop%3D1%26from%3Dpaste%26height%3D165%26id%3Du67b7e0a3%26margin%3D%255Bobject%2520Object%255D%26name%3Dimage.png%26originHeight%3D206%26originWidth%3D1316%26originalType%3Dbinary%26ratio%3D1%26rotation%3D0%26showTitle%3Dfalse%26size%3D22388%26status%3Ddone%26style%3Dnone%26taskId%3Du8c9cd536-92b8-45fb-875c-89e2c0dea5a%26title%3D%26width%3D1052.8" alt="image.png"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  4.5、导入导出容器
&lt;/h2&gt;

&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  4.5.1、导出容器
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker &lt;span class="nb"&gt;export &lt;/span&gt;容器id &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; tar包名

例如
docker &lt;span class="nb"&gt;export &lt;/span&gt;82be49d3c283 &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; nginx.tar
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.nlark.com%2Fyuque%2F0%2F2022%2Fpng%2F2207808%2F1659689257155-8b2c9533-0be3-46ec-b6a0-c57283759cbe.png%23clientId%3Du28d579b0-9e04-4%26crop%3D0%26crop%3D0%26crop%3D1%26crop%3D1%26from%3Dpaste%26height%3D182%26id%3Du7b78528b%26margin%3D%255Bobject%2520Object%255D%26name%3Dimage.png%26originHeight%3D227%26originWidth%3D1188%26originalType%3Dbinary%26ratio%3D1%26rotation%3D0%26showTitle%3Dfalse%26size%3D32338%26status%3Ddone%26style%3Dnone%26taskId%3Du59eb2bbc-2eaf-4fd5-a774-e6b0cd5c24e%26title%3D%26width%3D950.4" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.nlark.com%2Fyuque%2F0%2F2022%2Fpng%2F2207808%2F1659689257155-8b2c9533-0be3-46ec-b6a0-c57283759cbe.png%23clientId%3Du28d579b0-9e04-4%26crop%3D0%26crop%3D0%26crop%3D1%26crop%3D1%26from%3Dpaste%26height%3D182%26id%3Du7b78528b%26margin%3D%255Bobject%2520Object%255D%26name%3Dimage.png%26originHeight%3D227%26originWidth%3D1188%26originalType%3Dbinary%26ratio%3D1%26rotation%3D0%26showTitle%3Dfalse%26size%3D32338%26status%3Ddone%26style%3Dnone%26taskId%3Du59eb2bbc-2eaf-4fd5-a774-e6b0cd5c24e%26title%3D%26width%3D950.4" alt="image.png"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  4.5.2、导入容器
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# cat tar包 | docker import - 仓库/镜像名:tag&lt;/span&gt;
&lt;span class="c"&gt;# 例：&lt;/span&gt;
&lt;span class="nb"&gt;cat &lt;/span&gt;nginx.tar | docker import - unistars/nginx:v1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.nlark.com%2Fyuque%2F0%2F2022%2Fpng%2F2207808%2F1659689623470-b58af43a-36a5-4c79-b7aa-0fd8ffbe8913.png%23clientId%3Du28d579b0-9e04-4%26crop%3D0%26crop%3D0%26crop%3D1%26crop%3D1%26from%3Dpaste%26height%3D239%26id%3Dudf1edf50%26margin%3D%255Bobject%2520Object%255D%26name%3Dimage.png%26originHeight%3D299%26originWidth%3D794%26originalType%3Dbinary%26ratio%3D1%26rotation%3D0%26showTitle%3Dfalse%26size%3D38741%26status%3Ddone%26style%3Dnone%26taskId%3Du62dacdd3-cdf8-4a40-853c-b5aedb241f8%26title%3D%26width%3D635.2" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.nlark.com%2Fyuque%2F0%2F2022%2Fpng%2F2207808%2F1659689623470-b58af43a-36a5-4c79-b7aa-0fd8ffbe8913.png%23clientId%3Du28d579b0-9e04-4%26crop%3D0%26crop%3D0%26crop%3D1%26crop%3D1%26from%3Dpaste%26height%3D239%26id%3Dudf1edf50%26margin%3D%255Bobject%2520Object%255D%26name%3Dimage.png%26originHeight%3D299%26originWidth%3D794%26originalType%3Dbinary%26ratio%3D1%26rotation%3D0%26showTitle%3Dfalse%26size%3D38741%26status%3Ddone%26style%3Dnone%26taskId%3Du62dacdd3-cdf8-4a40-853c-b5aedb241f8%26title%3D%26width%3D635.2" alt="image.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h1&gt;
  
  
  5、仓库
&lt;/h1&gt;

&lt;p&gt;仓库（Repository）是集中存放镜像的地方。&lt;br&gt; 一个容易混淆的概念是注册服务器（Registry）。实际上注册服务器是管理仓库的具体服务器，每个服务器上可以有多个仓 库，而每个仓库下面有多个镜像。从这方面来说，仓库可以被认为是一个具体的项目或目录。&lt;br&gt;例如对于仓库地址 registry.cn-hangzhou.aliyuncs.com/fl_test/docker_demo 来说&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;registry.cn-hangzhou.aliyuncs.com 是注册服务器地址&lt;/li&gt;
&lt;li&gt;fl_test 是仓库名&lt;/li&gt;
&lt;li&gt;docker_demo为镜像名称
&lt;a&gt;&lt;/a&gt;
## 5.1、远程仓库
:::info
目前 Docker 官方维护了一个公共仓库 Docker Hub，其中已经包括了超过 15,000 的镜像。大部分需求，都可以通过在 Docker Hub 中直接下载镜像来实现。 下面以阿里云容器镜像服务为大家演示
:::&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  5.1.1、创建阿里云镜像仓库
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://cr.console.aliyun.com/cn-hangzhou/instance/dashboard" rel="noopener noreferrer"&gt;点击创建阿里云镜像仓库(杭州站)&lt;/a&gt;：&lt;a href="https://cr.console.aliyun.com/cn-hangzhou/instance/dashboard" rel="noopener noreferrer"&gt;https://cr.console.aliyun.com/cn-hangzhou/instance/dashboard&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;仓库信息---设置 命名空间   仓库名称  仓库类型 以及 说明&lt;/li&gt;
&lt;li&gt;设置代码源 ----  本地仓库&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.nlark.com%2Fyuque%2F0%2F2022%2Fpng%2F2207808%2F1659697497666-d00df137-62e8-4685-812b-aedd59e79b0d.png%23clientId%3Du28d579b0-9e04-4%26crop%3D0%26crop%3D0%26crop%3D1%26crop%3D1%26from%3Dpaste%26height%3D623%26id%3Du3341635a%26margin%3D%255Bobject%2520Object%255D%26name%3Dimage.png%26originHeight%3D779%26originWidth%3D1878%26originalType%3Dbinary%26ratio%3D1%26rotation%3D0%26showTitle%3Dfalse%26size%3D69585%26status%3Ddone%26style%3Dnone%26taskId%3Du9361f90f-ea2d-44af-b29a-b953902d8f0%26title%3D%26width%3D1502.4" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.nlark.com%2Fyuque%2F0%2F2022%2Fpng%2F2207808%2F1659697497666-d00df137-62e8-4685-812b-aedd59e79b0d.png%23clientId%3Du28d579b0-9e04-4%26crop%3D0%26crop%3D0%26crop%3D1%26crop%3D1%26from%3Dpaste%26height%3D623%26id%3Du3341635a%26margin%3D%255Bobject%2520Object%255D%26name%3Dimage.png%26originHeight%3D779%26originWidth%3D1878%26originalType%3Dbinary%26ratio%3D1%26rotation%3D0%26showTitle%3Dfalse%26size%3D69585%26status%3Ddone%26style%3Dnone%26taskId%3Du9361f90f-ea2d-44af-b29a-b953902d8f0%26title%3D%26width%3D1502.4" alt="image.png"&gt;&lt;/a&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.nlark.com%2Fyuque%2F0%2F2022%2Fpng%2F2207808%2F1659697509594-f0d638ae-032d-484b-89a7-d3c127d03926.png%23clientId%3Du28d579b0-9e04-4%26crop%3D0%26crop%3D0%26crop%3D1%26crop%3D1%26from%3Dpaste%26height%3D384%26id%3Duaca14dac%26margin%3D%255Bobject%2520Object%255D%26name%3Dimage.png%26originHeight%3D480%26originWidth%3D1031%26originalType%3Dbinary%26ratio%3D1%26rotation%3D0%26showTitle%3Dfalse%26size%3D28092%26status%3Ddone%26style%3Dnone%26taskId%3Dud65e549f-7789-48b2-b183-c59fe758cc0%26title%3D%26width%3D824.8" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.nlark.com%2Fyuque%2F0%2F2022%2Fpng%2F2207808%2F1659697509594-f0d638ae-032d-484b-89a7-d3c127d03926.png%23clientId%3Du28d579b0-9e04-4%26crop%3D0%26crop%3D0%26crop%3D1%26crop%3D1%26from%3Dpaste%26height%3D384%26id%3Duaca14dac%26margin%3D%255Bobject%2520Object%255D%26name%3Dimage.png%26originHeight%3D480%26originWidth%3D1031%26originalType%3Dbinary%26ratio%3D1%26rotation%3D0%26showTitle%3Dfalse%26size%3D28092%26status%3Ddone%26style%3Dnone%26taskId%3Dud65e549f-7789-48b2-b183-c59fe758cc0%26title%3D%26width%3D824.8" alt="image.png"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  5.1.2、登录远程仓库
&lt;/h3&gt;

&lt;p&gt;可以通过执行 docker login 命令来输入用户名、密码和邮箱来完成注册和登录。 注册成功后，本地用户目录的 .dockercfg 中将保存用户的认证信息。&lt;br&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.nlark.com%2Fyuque%2F0%2F2022%2Fpng%2F2207808%2F1659694482768-8168b196-1a14-4085-b450-9a871f0e1de8.png%23clientId%3Du28d579b0-9e04-4%26crop%3D0%26crop%3D0%26crop%3D1%26crop%3D1%26from%3Dpaste%26height%3D164%26id%3DtgICe%26margin%3D%255Bobject%2520Object%255D%26name%3Dimage.png%26originHeight%3D205%26originWidth%3D1041%26originalType%3Dbinary%26ratio%3D1%26rotation%3D0%26showTitle%3Dfalse%26size%3D17752%26status%3Ddone%26style%3Dnone%26taskId%3Dua937fa97-cb2a-4fcd-8ac3-1cdb7210f5d%26title%3D%26width%3D832.8" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.nlark.com%2Fyuque%2F0%2F2022%2Fpng%2F2207808%2F1659694482768-8168b196-1a14-4085-b450-9a871f0e1de8.png%23clientId%3Du28d579b0-9e04-4%26crop%3D0%26crop%3D0%26crop%3D1%26crop%3D1%26from%3Dpaste%26height%3D164%26id%3DtgICe%26margin%3D%255Bobject%2520Object%255D%26name%3Dimage.png%26originHeight%3D205%26originWidth%3D1041%26originalType%3Dbinary%26ratio%3D1%26rotation%3D0%26showTitle%3Dfalse%26size%3D17752%26status%3Ddone%26style%3Dnone%26taskId%3Dua937fa97-cb2a-4fcd-8ac3-1cdb7210f5d%26title%3D%26width%3D832.8" alt="image.png"&gt;&lt;/a&gt;&lt;br&gt;  &lt;/p&gt;

&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  5.2、本地私有仓库
&lt;/h2&gt;

&lt;p&gt;有时候出于安全和网络情况考虑，云上仓库并不方便，那么，用户可以创建一个本地仓库供私人使用。 本节介绍如何使用本地仓库。 docker-registry 是官方提供的工具，可以用于构建私有的镜像仓库。  &lt;/p&gt;

&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  5.2.1、安装并运行本地  registry  仓库
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# 运行本地仓库容器&lt;/span&gt;
docker run &lt;span class="nt"&gt;-dit&lt;/span&gt; &lt;span class="nt"&gt;--name&lt;/span&gt; registry &lt;span class="nt"&gt;--restart&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;always &lt;span class="nt"&gt;-p&lt;/span&gt; 5000:5000 registry

&lt;span class="c"&gt;# 修改docker配置文件&lt;/span&gt;
vi /etc/sysconfig/docker
&lt;span class="c"&gt;# 添加&lt;/span&gt;
&lt;span class="c"&gt;# 172.31.36.113 为宿主机局域网IP地址，请自行更改为自己的IP地址&lt;/span&gt;
&lt;span class="nv"&gt;ADD_REGISTRY&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;'--add-registry 172.31.36.113:5000'&lt;/span&gt;
&lt;span class="nv"&gt;INSECURE_REGISTRY&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;'--insecure-registry 172.31.36.113:5000'&lt;/span&gt;

vi /etc/docker/daemon.json
&lt;span class="c"&gt;# 添加&lt;/span&gt;
&lt;span class="c"&gt;# 注意上一行后面需增加 , &lt;/span&gt;
&lt;span class="s2"&gt;"insecure-registries"&lt;/span&gt;:[&lt;span class="s2"&gt;"172.31.36.113:5000"&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.nlark.com%2Fyuque%2F0%2F2022%2Fpng%2F2207808%2F1659704968501-7a86ec38-d2a2-4c2d-9ee7-89cd7a3cc4a8.png%23clientId%3Du28d579b0-9e04-4%26crop%3D0%26crop%3D0%26crop%3D1%26crop%3D1%26from%3Dpaste%26height%3D266%26id%3Du2da86c62%26margin%3D%255Bobject%2520Object%255D%26name%3Dimage.png%26originHeight%3D332%26originWidth%3D1332%26originalType%3Dbinary%26ratio%3D1%26rotation%3D0%26showTitle%3Dfalse%26size%3D36740%26status%3Ddone%26style%3Dnone%26taskId%3Du10ee9956-691c-4785-852f-a94c701bb63%26title%3D%26width%3D1065.6" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.nlark.com%2Fyuque%2F0%2F2022%2Fpng%2F2207808%2F1659704968501-7a86ec38-d2a2-4c2d-9ee7-89cd7a3cc4a8.png%23clientId%3Du28d579b0-9e04-4%26crop%3D0%26crop%3D0%26crop%3D1%26crop%3D1%26from%3Dpaste%26height%3D266%26id%3Du2da86c62%26margin%3D%255Bobject%2520Object%255D%26name%3Dimage.png%26originHeight%3D332%26originWidth%3D1332%26originalType%3Dbinary%26ratio%3D1%26rotation%3D0%26showTitle%3Dfalse%26size%3D36740%26status%3Ddone%26style%3Dnone%26taskId%3Du10ee9956-691c-4785-852f-a94c701bb63%26title%3D%26width%3D1065.6" alt="image.png"&gt;&lt;/a&gt;&lt;br&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.nlark.com%2Fyuque%2F0%2F2022%2Fpng%2F2207808%2F1659705827454-cc291392-2df0-491d-b2a6-6af38bb22050.png%23clientId%3Du28d579b0-9e04-4%26crop%3D0%26crop%3D0%26crop%3D1%26crop%3D1%26from%3Dpaste%26height%3D364%26id%3Du5955c63c%26margin%3D%255Bobject%2520Object%255D%26name%3Dimage.png%26originHeight%3D455%26originWidth%3D806%26originalType%3Dbinary%26ratio%3D1%26rotation%3D0%26showTitle%3Dfalse%26size%3D48146%26status%3Ddone%26style%3Dnone%26taskId%3Du9c950d7f-bb5e-42b9-834f-939be2971c9%26title%3D%26width%3D644.8" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.nlark.com%2Fyuque%2F0%2F2022%2Fpng%2F2207808%2F1659705827454-cc291392-2df0-491d-b2a6-6af38bb22050.png%23clientId%3Du28d579b0-9e04-4%26crop%3D0%26crop%3D0%26crop%3D1%26crop%3D1%26from%3Dpaste%26height%3D364%26id%3Du5955c63c%26margin%3D%255Bobject%2520Object%255D%26name%3Dimage.png%26originHeight%3D455%26originWidth%3D806%26originalType%3Dbinary%26ratio%3D1%26rotation%3D0%26showTitle%3Dfalse%26size%3D48146%26status%3Ddone%26style%3Dnone%26taskId%3Du9c950d7f-bb5e-42b9-834f-939be2971c9%26title%3D%26width%3D644.8" alt="image.png"&gt;&lt;/a&gt;&lt;br&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.nlark.com%2Fyuque%2F0%2F2022%2Fpng%2F2207808%2F1659705886073-e7711fd8-1d78-47a6-9a06-796fef3022c9.png%23clientId%3Du28d579b0-9e04-4%26crop%3D0%26crop%3D0%26crop%3D1%26crop%3D1%26from%3Dpaste%26height%3D294%26id%3Du603131c4%26margin%3D%255Bobject%2520Object%255D%26name%3Dimage.png%26originHeight%3D368%26originWidth%3D966%26originalType%3Dbinary%26ratio%3D1%26rotation%3D0%26showTitle%3Dfalse%26size%3D47833%26status%3Ddone%26style%3Dnone%26taskId%3Du0e19f409-ae07-4a27-8638-88bdfef1fe3%26title%3D%26width%3D772.8" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.nlark.com%2Fyuque%2F0%2F2022%2Fpng%2F2207808%2F1659705886073-e7711fd8-1d78-47a6-9a06-796fef3022c9.png%23clientId%3Du28d579b0-9e04-4%26crop%3D0%26crop%3D0%26crop%3D1%26crop%3D1%26from%3Dpaste%26height%3D294%26id%3Du603131c4%26margin%3D%255Bobject%2520Object%255D%26name%3Dimage.png%26originHeight%3D368%26originWidth%3D966%26originalType%3Dbinary%26ratio%3D1%26rotation%3D0%26showTitle%3Dfalse%26size%3D47833%26status%3Ddone%26style%3Dnone%26taskId%3Du0e19f409-ae07-4a27-8638-88bdfef1fe3%26title%3D%26width%3D772.8" alt="image.png"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  5.2.2、查看仓库中镜像
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl 172.31.36.113:5000/v2/_catalog
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.nlark.com%2Fyuque%2F0%2F2022%2Fpng%2F2207808%2F1659712305561-88b8a726-aa52-4979-a69f-09de56275723.png%23clientId%3Du28d579b0-9e04-4%26crop%3D0%26crop%3D0%26crop%3D1%26crop%3D1%26from%3Dpaste%26height%3D461%26id%3Du5c3a5b28%26margin%3D%255Bobject%2520Object%255D%26name%3Dimage.png%26originHeight%3D576%26originWidth%3D983%26originalType%3Dbinary%26ratio%3D1%26rotation%3D0%26showTitle%3Dfalse%26size%3D80300%26status%3Ddone%26style%3Dnone%26taskId%3Duc6952b73-b2ba-4b9f-929a-79ada187b04%26title%3D%26width%3D786.4" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.nlark.com%2Fyuque%2F0%2F2022%2Fpng%2F2207808%2F1659712305561-88b8a726-aa52-4979-a69f-09de56275723.png%23clientId%3Du28d579b0-9e04-4%26crop%3D0%26crop%3D0%26crop%3D1%26crop%3D1%26from%3Dpaste%26height%3D461%26id%3Du5c3a5b28%26margin%3D%255Bobject%2520Object%255D%26name%3Dimage.png%26originHeight%3D576%26originWidth%3D983%26originalType%3Dbinary%26ratio%3D1%26rotation%3D0%26showTitle%3Dfalse%26size%3D80300%26status%3Ddone%26style%3Dnone%26taskId%3Duc6952b73-b2ba-4b9f-929a-79ada187b04%26title%3D%26width%3D786.4" alt="image.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h1&gt;
  
  
  6、数据管理
&lt;/h1&gt;

&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  6.1、数据卷
&lt;/h2&gt;

&lt;p&gt;数据卷是一个可供一个或多个容器使用的特殊目录，它绕过 UFS，可以提供很多有用的特性：&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;数据卷可以在容器之间共享和重用&lt;/li&gt;
&lt;li&gt;对数据卷的修改会立马生效&lt;/li&gt;
&lt;li&gt;对数据卷的更新，不会影响镜像&lt;/li&gt;
&lt;li&gt;卷会一直存在，直到没有容器使用&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;数据卷的使用，类似于 Linux 下对目录或文件进行 mount。  &lt;/p&gt;

&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  6.1.1、创建数据卷
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# 创建一个名为 new-volume 的数据卷&lt;/span&gt;
docker volume create new-volume
&lt;span class="c"&gt;# 列出&lt;/span&gt;
docker volume &lt;span class="nb"&gt;ls&lt;/span&gt;

&lt;span class="c"&gt;# 查看卷信息&lt;/span&gt;
docker volume inspect new-volume
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.nlark.com%2Fyuque%2F0%2F2022%2Fpng%2F2207808%2F1659717050603-5d036fae-e90e-46b6-8ae9-172c28ece15c.png%23clientId%3Duaa7488e7-d8e1-4%26crop%3D0%26crop%3D0%26crop%3D1%26crop%3D1%26from%3Dpaste%26height%3D276%26id%3Du8a455dcf%26margin%3D%255Bobject%2520Object%255D%26name%3Dimage.png%26originHeight%3D345%26originWidth%3D767%26originalType%3Dbinary%26ratio%3D1%26rotation%3D0%26showTitle%3Dfalse%26size%3D27763%26status%3Ddone%26style%3Dnone%26taskId%3Duefca18db-874a-4259-93f6-f92524470ca%26title%3D%26width%3D613.6" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.nlark.com%2Fyuque%2F0%2F2022%2Fpng%2F2207808%2F1659717050603-5d036fae-e90e-46b6-8ae9-172c28ece15c.png%23clientId%3Duaa7488e7-d8e1-4%26crop%3D0%26crop%3D0%26crop%3D1%26crop%3D1%26from%3Dpaste%26height%3D276%26id%3Du8a455dcf%26margin%3D%255Bobject%2520Object%255D%26name%3Dimage.png%26originHeight%3D345%26originWidth%3D767%26originalType%3Dbinary%26ratio%3D1%26rotation%3D0%26showTitle%3Dfalse%26size%3D27763%26status%3Ddone%26style%3Dnone%26taskId%3Duefca18db-874a-4259-93f6-f92524470ca%26title%3D%26width%3D613.6" alt="image.png"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  6.1.2、挂载数据卷
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# 启动一个挂载新卷的nginx容器&lt;/span&gt;
docker run &lt;span class="nt"&gt;-dit&lt;/span&gt; &lt;span class="nt"&gt;--name&lt;/span&gt; nginx &lt;span class="nt"&gt;-v&lt;/span&gt; new-volume:/mnt nginx

&lt;span class="c"&gt;# 查看容器的详细信息 grep -a 这里显示具体前后行数&lt;/span&gt;
 docker inspect nginx|grep Mounts &lt;span class="nt"&gt;-a5&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.nlark.com%2Fyuque%2F0%2F2022%2Fpng%2F2207808%2F1659717244214-a238ed65-e339-4dcf-b2f9-7c279fc404d1.png%23clientId%3Duaa7488e7-d8e1-4%26crop%3D0%26crop%3D0%26crop%3D1%26crop%3D1%26from%3Dpaste%26height%3D91%26id%3Du1b985115%26margin%3D%255Bobject%2520Object%255D%26name%3Dimage.png%26originHeight%3D114%26originWidth%3D1244%26originalType%3Dbinary%26ratio%3D1%26rotation%3D0%26showTitle%3Dfalse%26size%3D18076%26status%3Ddone%26style%3Dnone%26taskId%3Dude25cc1e-82bf-4987-b1b9-54a502a35d3%26title%3D%26width%3D995.2" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.nlark.com%2Fyuque%2F0%2F2022%2Fpng%2F2207808%2F1659717244214-a238ed65-e339-4dcf-b2f9-7c279fc404d1.png%23clientId%3Duaa7488e7-d8e1-4%26crop%3D0%26crop%3D0%26crop%3D1%26crop%3D1%26from%3Dpaste%26height%3D91%26id%3Du1b985115%26margin%3D%255Bobject%2520Object%255D%26name%3Dimage.png%26originHeight%3D114%26originWidth%3D1244%26originalType%3Dbinary%26ratio%3D1%26rotation%3D0%26showTitle%3Dfalse%26size%3D18076%26status%3Ddone%26style%3Dnone%26taskId%3Dude25cc1e-82bf-4987-b1b9-54a502a35d3%26title%3D%26width%3D995.2" alt="image.png"&gt;&lt;/a&gt;&lt;br&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.nlark.com%2Fyuque%2F0%2F2022%2Fpng%2F2207808%2F1659717403784-54cfbe45-727a-436e-8f36-b75c5d850fcc.png%23clientId%3Duaa7488e7-d8e1-4%26crop%3D0%26crop%3D0%26crop%3D1%26crop%3D1%26from%3Dpaste%26height%3D222%26id%3Du7165bd5c%26margin%3D%255Bobject%2520Object%255D%26name%3Dimage.png%26originHeight%3D277%26originWidth%3D1213%26originalType%3Dbinary%26ratio%3D1%26rotation%3D0%26showTitle%3Dfalse%26size%3D24775%26status%3Ddone%26style%3Dnone%26taskId%3Du789b3a90-a04b-43bb-a1e8-afb95d51870%26title%3D%26width%3D970.4" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.nlark.com%2Fyuque%2F0%2F2022%2Fpng%2F2207808%2F1659717403784-54cfbe45-727a-436e-8f36-b75c5d850fcc.png%23clientId%3Duaa7488e7-d8e1-4%26crop%3D0%26crop%3D0%26crop%3D1%26crop%3D1%26from%3Dpaste%26height%3D222%26id%3Du7165bd5c%26margin%3D%255Bobject%2520Object%255D%26name%3Dimage.png%26originHeight%3D277%26originWidth%3D1213%26originalType%3Dbinary%26ratio%3D1%26rotation%3D0%26showTitle%3Dfalse%26size%3D24775%26status%3Ddone%26style%3Dnone%26taskId%3Du789b3a90-a04b-43bb-a1e8-afb95d51870%26title%3D%26width%3D970.4" alt="image.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  6.1.3、删除数据卷
&lt;/h3&gt;

&lt;p&gt;数据卷 是被设计用来持久化数据的，它的生命周期独立于容器，Docker 不会在 容器被删除后自动删除 数据卷 ，并且也不存在垃圾回收这样的机制来处理没有任 何容器引用的 数据卷 。如果需要在删除容器的同时移除数据卷。可以在删除容器 的时候使用 &lt;strong&gt;docker rm -v&lt;/strong&gt; 这个命令。&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker volume &lt;span class="nb"&gt;rm &lt;/span&gt;new-volume
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;无主的数据卷可能会占据很多空间，要清理请使用以下命令&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker volume prune

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  6.2、挂载主机目录
&lt;/h2&gt;

&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  6.2.1、挂载主机目录作为数据卷
&lt;/h3&gt;

&lt;p&gt;也可以使用 -v 标记也可以指定挂载一个本地主机的目录到容器中去。&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# 在root目录下创建web目录，并创建index.html文件&lt;/span&gt;
&lt;span class="nb"&gt;mkdir&lt;/span&gt; /root/web
&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"This is mount root dir"&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; /root/web/index.html

&lt;span class="c"&gt;# 运行挂载主机目录 /root/web/ 到 容器/usr/share/nginx/html&lt;/span&gt;
docker run &lt;span class="nt"&gt;-dit&lt;/span&gt; &lt;span class="nt"&gt;--name&lt;/span&gt; nginxweb &lt;span class="nt"&gt;-p&lt;/span&gt; 8088:80 &lt;span class="nt"&gt;-v&lt;/span&gt; /root/web/:/usr/share/nginx/html/ nginx

&lt;span class="c"&gt;# curl查看内容&lt;/span&gt;
curl localhost:8088
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.nlark.com%2Fyuque%2F0%2F2022%2Fpng%2F2207808%2F1659753492757-34294899-4ab0-404e-a9fa-2f6a4f1874ea.png%23clientId%3Du45dad7f1-3b57-4%26crop%3D0%26crop%3D0%26crop%3D1%26crop%3D1%26from%3Dpaste%26height%3D246%26id%3Du8ec710cb%26margin%3D%255Bobject%2520Object%255D%26name%3Dimage.png%26originHeight%3D307%26originWidth%3D1280%26originalType%3Dbinary%26ratio%3D1%26rotation%3D0%26showTitle%3Dfalse%26size%3D46431%26status%3Ddone%26style%3Dnone%26taskId%3Du77711960-8788-445c-a64b-6d20fc18a50%26title%3D%26width%3D1024" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.nlark.com%2Fyuque%2F0%2F2022%2Fpng%2F2207808%2F1659753492757-34294899-4ab0-404e-a9fa-2f6a4f1874ea.png%23clientId%3Du45dad7f1-3b57-4%26crop%3D0%26crop%3D0%26crop%3D1%26crop%3D1%26from%3Dpaste%26height%3D246%26id%3Du8ec710cb%26margin%3D%255Bobject%2520Object%255D%26name%3Dimage.png%26originHeight%3D307%26originWidth%3D1280%26originalType%3Dbinary%26ratio%3D1%26rotation%3D0%26showTitle%3Dfalse%26size%3D46431%26status%3Ddone%26style%3Dnone%26taskId%3Du77711960-8788-445c-a64b-6d20fc18a50%26title%3D%26width%3D1024" alt="image.png"&gt;&lt;/a&gt;&lt;br&gt;上面的命令加载主机的 &lt;strong&gt;/root/web&lt;/strong&gt; 目录到容器的** /usr/share/nginx/html &lt;strong&gt;目录。&lt;br&gt;这个功能在进行测试的时候十分方便，比如 用户可以放置一些程序到本地目录中，来查看容器是否正常工作。本地目录的路径必须是绝对路径，如果目录不存在 Docker 会自动为你创建它。 &lt;br&gt;&lt;/strong&gt;&lt;em&gt;注意&lt;/em&gt;&lt;em&gt;：Dockerfile 中&lt;/em&gt;&lt;em&gt;不支持&lt;/em&gt;*这种用法，这是因为 Dockerfile 是为了移植和分享用的。然而，不同操作系统的路径格式不一 样，所以目前还不能支持。&lt;br&gt;Docker 挂载数据卷的默认权限是读写，用户也可以通过 :ro 指定为只读。&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker run &lt;span class="nt"&gt;-dit&lt;/span&gt; &lt;span class="nt"&gt;--name&lt;/span&gt; nginxweb &lt;span class="nt"&gt;-p&lt;/span&gt; 8088:80 &lt;span class="nt"&gt;-v&lt;/span&gt; /root/web/:/usr/share/nginx/html/:ro nginx
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.nlark.com%2Fyuque%2F0%2F2022%2Fpng%2F2207808%2F1659754033255-8d0bb9b1-6a47-4012-ae60-015628a68113.png%23clientId%3Du45dad7f1-3b57-4%26crop%3D0%26crop%3D0%26crop%3D1%26crop%3D1%26from%3Dpaste%26height%3D155%26id%3Dub2bd9161%26margin%3D%255Bobject%2520Object%255D%26name%3Dimage.png%26originHeight%3D194%26originWidth%3D1415%26originalType%3Dbinary%26ratio%3D1%26rotation%3D0%26showTitle%3Dfalse%26size%3D35577%26status%3Ddone%26style%3Dnone%26taskId%3Due095eded-a836-475f-8954-bf26fce15d1%26title%3D%26width%3D1132" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.nlark.com%2Fyuque%2F0%2F2022%2Fpng%2F2207808%2F1659754033255-8d0bb9b1-6a47-4012-ae60-015628a68113.png%23clientId%3Du45dad7f1-3b57-4%26crop%3D0%26crop%3D0%26crop%3D1%26crop%3D1%26from%3Dpaste%26height%3D155%26id%3Dub2bd9161%26margin%3D%255Bobject%2520Object%255D%26name%3Dimage.png%26originHeight%3D194%26originWidth%3D1415%26originalType%3Dbinary%26ratio%3D1%26rotation%3D0%26showTitle%3Dfalse%26size%3D35577%26status%3Ddone%26style%3Dnone%26taskId%3Due095eded-a836-475f-8954-bf26fce15d1%26title%3D%26width%3D1132" alt="image.png"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  6.2.2、挂载主机文件作为数据卷
&lt;/h3&gt;

&lt;p&gt;同样，使用 -v 来进行挂载，从主机挂载单个文件到容器&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# 创建演示文件&lt;/span&gt;
&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"This is mount single file"&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; /root/index.html

&lt;span class="c"&gt;# 创建挂载单个主机文件的容器&lt;/span&gt;
docker run &lt;span class="nt"&gt;-dit&lt;/span&gt; &lt;span class="nt"&gt;--name&lt;/span&gt; nginxweb &lt;span class="nt"&gt;-p&lt;/span&gt; 8088:80 &lt;span class="nt"&gt;-v&lt;/span&gt; /root/index.html:/usr/share/nginx/html/index.html nginx

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.nlark.com%2Fyuque%2F0%2F2022%2Fpng%2F2207808%2F1659754708280-c91f1dfe-e897-4111-98c3-50d5eee00355.png%23clientId%3Du45dad7f1-3b57-4%26crop%3D0%26crop%3D0%26crop%3D1%26crop%3D1%26from%3Dpaste%26height%3D185%26id%3Du1d383f3b%26margin%3D%255Bobject%2520Object%255D%26name%3Dimage.png%26originHeight%3D231%26originWidth%3D1352%26originalType%3Dbinary%26ratio%3D1%26rotation%3D0%26showTitle%3Dfalse%26size%3D30169%26status%3Ddone%26style%3Dnone%26taskId%3Due313b27c-5f16-4c77-b8a1-79590d92450%26title%3D%26width%3D1081.6" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.nlark.com%2Fyuque%2F0%2F2022%2Fpng%2F2207808%2F1659754708280-c91f1dfe-e897-4111-98c3-50d5eee00355.png%23clientId%3Du45dad7f1-3b57-4%26crop%3D0%26crop%3D0%26crop%3D1%26crop%3D1%26from%3Dpaste%26height%3D185%26id%3Du1d383f3b%26margin%3D%255Bobject%2520Object%255D%26name%3Dimage.png%26originHeight%3D231%26originWidth%3D1352%26originalType%3Dbinary%26ratio%3D1%26rotation%3D0%26showTitle%3Dfalse%26size%3D30169%26status%3Ddone%26style%3Dnone%26taskId%3Due313b27c-5f16-4c77-b8a1-79590d92450%26title%3D%26width%3D1081.6" alt="image.png"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  6.3、容器间共享卷
&lt;/h2&gt;

&lt;p&gt;在这个案例中，将使用三个nginx容器进行演示，分别为 nginxweb1、nginxweb2、nginxweb3&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;
&lt;span class="c"&gt;# 启动nginxweb1 创建共享卷&lt;/span&gt;
docker run &lt;span class="nt"&gt;-dit&lt;/span&gt; &lt;span class="nt"&gt;--name&lt;/span&gt; nginxweb1 &lt;span class="nt"&gt;-p&lt;/span&gt; 8081:80 &lt;span class="nt"&gt;-v&lt;/span&gt; /usr/share/nginx/html nginx
&lt;span class="c"&gt;# 启动nginxweb2、nginxweb3 并指定共享卷为 nginxweb1&lt;/span&gt;
docker run &lt;span class="nt"&gt;-dit&lt;/span&gt; &lt;span class="nt"&gt;--name&lt;/span&gt; nginxweb2 &lt;span class="nt"&gt;--volumes-from&lt;/span&gt; nginxweb1 &lt;span class="nt"&gt;-p&lt;/span&gt; 8082:80 nginx
docker run &lt;span class="nt"&gt;-dit&lt;/span&gt; &lt;span class="nt"&gt;--name&lt;/span&gt; nginxweb3 &lt;span class="nt"&gt;--volumes-from&lt;/span&gt; nginxweb1 &lt;span class="nt"&gt;-p&lt;/span&gt; 8083:80 nginx
&lt;span class="c"&gt;# curl测试&lt;/span&gt;
curl localhost:8081
curl localhost:8082
curl localhost:8083
&lt;span class="c"&gt;# 进入nginxweb1 进行修改index.html文件，并测试&lt;/span&gt;
docker &lt;span class="nb"&gt;exec&lt;/span&gt; &lt;span class="nt"&gt;-it&lt;/span&gt; nginxweb1 bash
容器内操作
&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"This is nginxweb1 website"&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; /usr/share/nginx/html/index.html
&lt;span class="c"&gt;# 退出容器测试 exit&lt;/span&gt;
curl localhost:8081
curl localhost:8082
curl localhost:8083
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.nlark.com%2Fyuque%2F0%2F2022%2Fpng%2F2207808%2F1659757054533-7455415b-f365-4874-9732-ddeb933d7f9b.png%23clientId%3Du45dad7f1-3b57-4%26crop%3D0%26crop%3D0%26crop%3D1%26crop%3D1%26from%3Dpaste%26height%3D505%26id%3Ducefd9263%26margin%3D%255Bobject%2520Object%255D%26name%3Dimage.png%26originHeight%3D631%26originWidth%3D1129%26originalType%3Dbinary%26ratio%3D1%26rotation%3D0%26showTitle%3Dfalse%26size%3D80232%26status%3Ddone%26style%3Dnone%26taskId%3Dud2126bba-241e-4a38-9531-b6b608ef110%26title%3D%26width%3D903.2" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.nlark.com%2Fyuque%2F0%2F2022%2Fpng%2F2207808%2F1659757054533-7455415b-f365-4874-9732-ddeb933d7f9b.png%23clientId%3Du45dad7f1-3b57-4%26crop%3D0%26crop%3D0%26crop%3D1%26crop%3D1%26from%3Dpaste%26height%3D505%26id%3Ducefd9263%26margin%3D%255Bobject%2520Object%255D%26name%3Dimage.png%26originHeight%3D631%26originWidth%3D1129%26originalType%3Dbinary%26ratio%3D1%26rotation%3D0%26showTitle%3Dfalse%26size%3D80232%26status%3Ddone%26style%3Dnone%26taskId%3Dud2126bba-241e-4a38-9531-b6b608ef110%26title%3D%26width%3D903.2" alt="image.png"&gt;&lt;/a&gt;&lt;br&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.nlark.com%2Fyuque%2F0%2F2022%2Fpng%2F2207808%2F1659757078122-00dab523-0f30-4414-8ca7-2f1aeeba018c.png%23clientId%3Du45dad7f1-3b57-4%26crop%3D0%26crop%3D0%26crop%3D1%26crop%3D1%26from%3Dpaste%26height%3D230%26id%3Du97fba3a0%26margin%3D%255Bobject%2520Object%255D%26name%3Dimage.png%26originHeight%3D288%26originWidth%3D987%26originalType%3Dbinary%26ratio%3D1%26rotation%3D0%26showTitle%3Dfalse%26size%3D32504%26status%3Ddone%26style%3Dnone%26taskId%3Du231d6c9b-9f28-497d-9ebd-bf7036925fc%26title%3D%26width%3D789.6" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.nlark.com%2Fyuque%2F0%2F2022%2Fpng%2F2207808%2F1659757078122-00dab523-0f30-4414-8ca7-2f1aeeba018c.png%23clientId%3Du45dad7f1-3b57-4%26crop%3D0%26crop%3D0%26crop%3D1%26crop%3D1%26from%3Dpaste%26height%3D230%26id%3Du97fba3a0%26margin%3D%255Bobject%2520Object%255D%26name%3Dimage.png%26originHeight%3D288%26originWidth%3D987%26originalType%3Dbinary%26ratio%3D1%26rotation%3D0%26showTitle%3Dfalse%26size%3D32504%26status%3Ddone%26style%3Dnone%26taskId%3Du231d6c9b-9f28-497d-9ebd-bf7036925fc%26title%3D%26width%3D789.6" alt="image.png"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h1&gt;
  
  
  7、网络管理
&lt;/h1&gt;

&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  7.1、映射网络
&lt;/h2&gt;

&lt;p&gt;容器中可以运行一些网络应用，要让外部也可以访问这些应用，可以通过 -P 或 -p 参数来指定端口映射。&lt;br&gt;当使用 -P 标记时，Docker 会随机映射一个 49000~49900 的端口到内部容器开放的网络端口。 &lt;br&gt;使用 docker ps 可以看到，本地主机的 49153 被映射到了容器的 80 端口。此时访问本机的 49153 端口即可访问容器 内 web 应用提供的界面。&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;
&lt;span class="c"&gt;# 指定映射&lt;/span&gt;
docker run &lt;span class="nt"&gt;-dit&lt;/span&gt; &lt;span class="nt"&gt;--name&lt;/span&gt; nginxweb1 &lt;span class="nt"&gt;-p&lt;/span&gt; 8081:80 nginx

&lt;span class="c"&gt;# 随机映射&lt;/span&gt;
docker run &lt;span class="nt"&gt;-dit&lt;/span&gt; &lt;span class="nt"&gt;--name&lt;/span&gt; nginxweb4 &lt;span class="nt"&gt;-P&lt;/span&gt; nginx

&lt;span class="c"&gt;# 查看所有容器&lt;/span&gt;
docker ps &lt;span class="nt"&gt;-a&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.nlark.com%2Fyuque%2F0%2F2022%2Fpng%2F2207808%2F1659757950948-30df3fcf-e15f-49c3-a209-b68a67b6dc92.png%23clientId%3Du45dad7f1-3b57-4%26crop%3D0%26crop%3D0%26crop%3D1%26crop%3D1%26from%3Dpaste%26height%3D546%26id%3Du069573c9%26margin%3D%255Bobject%2520Object%255D%26name%3Dimage.png%26originHeight%3D682%26originWidth%3D1550%26originalType%3Dbinary%26ratio%3D1%26rotation%3D0%26showTitle%3Dfalse%26size%3D102923%26status%3Ddone%26style%3Dnone%26taskId%3Dua21ffcef-519d-47d4-8efa-04e6f135b1f%26title%3D%26width%3D1240" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.nlark.com%2Fyuque%2F0%2F2022%2Fpng%2F2207808%2F1659757950948-30df3fcf-e15f-49c3-a209-b68a67b6dc92.png%23clientId%3Du45dad7f1-3b57-4%26crop%3D0%26crop%3D0%26crop%3D1%26crop%3D1%26from%3Dpaste%26height%3D546%26id%3Du069573c9%26margin%3D%255Bobject%2520Object%255D%26name%3Dimage.png%26originHeight%3D682%26originWidth%3D1550%26originalType%3Dbinary%26ratio%3D1%26rotation%3D0%26showTitle%3Dfalse%26size%3D102923%26status%3Ddone%26style%3Dnone%26taskId%3Dua21ffcef-519d-47d4-8efa-04e6f135b1f%26title%3D%26width%3D1240" alt="image.png"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  7.2、使用主机网络
&lt;/h2&gt;

&lt;p&gt;可以使用 --network=host 参数来直接使用宿主机网络&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker run &lt;span class="nt"&gt;-dit&lt;/span&gt; &lt;span class="nt"&gt;--network&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;host &lt;span class="nt"&gt;--name&lt;/span&gt; nginx-host nginx
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.nlark.com%2Fyuque%2F0%2F2022%2Fpng%2F2207808%2F1659758003644-cbf61970-4aa6-4ca8-907e-5106bb33f1cc.png%23clientId%3Du45dad7f1-3b57-4%26crop%3D0%26crop%3D0%26crop%3D1%26crop%3D1%26from%3Dpaste%26height%3D545%26id%3Du053136a1%26margin%3D%255Bobject%2520Object%255D%26name%3Dimage.png%26originHeight%3D681%26originWidth%3D1462%26originalType%3Dbinary%26ratio%3D1%26rotation%3D0%26showTitle%3Dfalse%26size%3D98231%26status%3Ddone%26style%3Dnone%26taskId%3Du90d680b3-97e4-4a15-a4b6-adc82024191%26title%3D%26width%3D1169.6" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.nlark.com%2Fyuque%2F0%2F2022%2Fpng%2F2207808%2F1659758003644-cbf61970-4aa6-4ca8-907e-5106bb33f1cc.png%23clientId%3Du45dad7f1-3b57-4%26crop%3D0%26crop%3D0%26crop%3D1%26crop%3D1%26from%3Dpaste%26height%3D545%26id%3Du053136a1%26margin%3D%255Bobject%2520Object%255D%26name%3Dimage.png%26originHeight%3D681%26originWidth%3D1462%26originalType%3Dbinary%26ratio%3D1%26rotation%3D0%26showTitle%3Dfalse%26size%3D98231%26status%3Ddone%26style%3Dnone%26taskId%3Du90d680b3-97e4-4a15-a4b6-adc82024191%26title%3D%26width%3D1169.6" alt="image.png"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  7.3、容器互联
&lt;/h2&gt;

&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  7.3.1、新建网络
&lt;/h3&gt;

&lt;p&gt;-d 参数指定 Docker 网络类型，有 bridge overlay 。其中 overlay 网络 类型用于 Swarm mode，在本小节中你可以忽略它。&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker network create &lt;span class="nt"&gt;-d&lt;/span&gt; bridge new-net
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  7.3.2、容器互联
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker run &lt;span class="nt"&gt;-dit&lt;/span&gt; &lt;span class="nt"&gt;--name&lt;/span&gt; box1 &lt;span class="nt"&gt;--network&lt;/span&gt; new-net busybox
docker run &lt;span class="nt"&gt;-dit&lt;/span&gt; &lt;span class="nt"&gt;--name&lt;/span&gt; box2 &lt;span class="nt"&gt;--network&lt;/span&gt; new-net busybox
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  7.3.3、ping测试
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# 进入box1容器&lt;/span&gt;
docker &lt;span class="nb"&gt;exec&lt;/span&gt; &lt;span class="nt"&gt;-it&lt;/span&gt; box1 sh

&lt;span class="c"&gt;# ping测试&lt;/span&gt;
ping box2
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.nlark.com%2Fyuque%2F0%2F2022%2Fpng%2F2207808%2F1659761438344-c50837c0-baf8-463b-8abd-53ed931927e7.png%23clientId%3Du45dad7f1-3b57-4%26crop%3D0%26crop%3D0%26crop%3D1%26crop%3D1%26from%3Dpaste%26height%3D294%26id%3Dubbf72f26%26margin%3D%255Bobject%2520Object%255D%26name%3Dimage.png%26originHeight%3D368%26originWidth%3D1689%26originalType%3Dbinary%26ratio%3D1%26rotation%3D0%26showTitle%3Dfalse%26size%3D65322%26status%3Ddone%26style%3Dnone%26taskId%3Du74614c23-2493-411e-87ce-726a91b9e34%26title%3D%26width%3D1351.2" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.nlark.com%2Fyuque%2F0%2F2022%2Fpng%2F2207808%2F1659761438344-c50837c0-baf8-463b-8abd-53ed931927e7.png%23clientId%3Du45dad7f1-3b57-4%26crop%3D0%26crop%3D0%26crop%3D1%26crop%3D1%26from%3Dpaste%26height%3D294%26id%3Dubbf72f26%26margin%3D%255Bobject%2520Object%255D%26name%3Dimage.png%26originHeight%3D368%26originWidth%3D1689%26originalType%3Dbinary%26ratio%3D1%26rotation%3D0%26showTitle%3Dfalse%26size%3D65322%26status%3Ddone%26style%3Dnone%26taskId%3Du74614c23-2493-411e-87ce-726a91b9e34%26title%3D%26width%3D1351.2" alt="image.png"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  7.4、自定义docker0网络
&lt;/h2&gt;

&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  7.4.1、移除原有网络
&lt;/h3&gt;

&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h4&gt;
  
  
  7.4.1.1、安装btctl命令
&lt;/h4&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;yum &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-y&lt;/span&gt; bridge-utils
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h4&gt;
  
  
  7.4.1.2、查询网桥信息
&lt;/h4&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;brctl  show
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.nlark.com%2Fyuque%2F0%2F2022%2Fpng%2F2207808%2F1659762023826-98544de6-568b-4e09-956d-03c2f5e9d48d.png%23clientId%3Du45dad7f1-3b57-4%26crop%3D0%26crop%3D0%26crop%3D1%26crop%3D1%26from%3Dpaste%26height%3D175%26id%3Dube51530a%26margin%3D%255Bobject%2520Object%255D%26name%3Dimage.png%26originHeight%3D219%26originWidth%3D779%26originalType%3Dbinary%26ratio%3D1%26rotation%3D0%26showTitle%3Dfalse%26size%3D22987%26status%3Ddone%26style%3Dnone%26taskId%3Du5269b4d2-2916-4846-ae6b-48826e23f85%26title%3D%26width%3D623.2" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.nlark.com%2Fyuque%2F0%2F2022%2Fpng%2F2207808%2F1659762023826-98544de6-568b-4e09-956d-03c2f5e9d48d.png%23clientId%3Du45dad7f1-3b57-4%26crop%3D0%26crop%3D0%26crop%3D1%26crop%3D1%26from%3Dpaste%26height%3D175%26id%3Dube51530a%26margin%3D%255Bobject%2520Object%255D%26name%3Dimage.png%26originHeight%3D219%26originWidth%3D779%26originalType%3Dbinary%26ratio%3D1%26rotation%3D0%26showTitle%3Dfalse%26size%3D22987%26status%3Ddone%26style%3Dnone%26taskId%3Du5269b4d2-2916-4846-ae6b-48826e23f85%26title%3D%26width%3D623.2" alt="image.png"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h4&gt;
  
  
  7.4.1.3、关闭docker服务
&lt;/h4&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;systemctl stop docker
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h4&gt;
  
  
  7.4.1.4、停止docker0网桥
&lt;/h4&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ip &lt;span class="nb"&gt;link set &lt;/span&gt;dev docker0 down
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h4&gt;
  
  
  7.4.1.5、删除docker0网桥
&lt;/h4&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;brctl delbr docker0
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h4&gt;
  
  
  7.4.1.6、查询所有网桥信息
&lt;/h4&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;brctl show
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.nlark.com%2Fyuque%2F0%2F2022%2Fpng%2F2207808%2F1659762074029-a4c3cfcd-34fa-4f03-bf4f-24fab07017f1.png%23clientId%3Du45dad7f1-3b57-4%26crop%3D0%26crop%3D0%26crop%3D1%26crop%3D1%26from%3Dpaste%26height%3D138%26id%3Du89b442c4%26margin%3D%255Bobject%2520Object%255D%26name%3Dimage.png%26originHeight%3D172%26originWidth%3D774%26originalType%3Dbinary%26ratio%3D1%26rotation%3D0%26showTitle%3Dfalse%26size%3D12239%26status%3Ddone%26style%3Dnone%26taskId%3Du1719ff94-6584-4d4a-b424-38706fc8eab%26title%3D%26width%3D619.2" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.nlark.com%2Fyuque%2F0%2F2022%2Fpng%2F2207808%2F1659762074029-a4c3cfcd-34fa-4f03-bf4f-24fab07017f1.png%23clientId%3Du45dad7f1-3b57-4%26crop%3D0%26crop%3D0%26crop%3D1%26crop%3D1%26from%3Dpaste%26height%3D138%26id%3Du89b442c4%26margin%3D%255Bobject%2520Object%255D%26name%3Dimage.png%26originHeight%3D172%26originWidth%3D774%26originalType%3Dbinary%26ratio%3D1%26rotation%3D0%26showTitle%3Dfalse%26size%3D12239%26status%3Ddone%26style%3Dnone%26taskId%3Du1719ff94-6584-4d4a-b424-38706fc8eab%26title%3D%26width%3D619.2" alt="image.png"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  7.4.2、自定义新网络
&lt;/h3&gt;

&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h4&gt;
  
  
  7.4.2.1、创建新网桥bridge0
&lt;/h4&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;brctl addbr bridge0
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h4&gt;
  
  
  7.4.2.2、查询创建的bridge0
&lt;/h4&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;brctl show
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.nlark.com%2Fyuque%2F0%2F2022%2Fpng%2F2207808%2F1659762111508-4d0d4ef9-9ebf-45dd-81b3-8bdb1c04c9c4.png%23clientId%3Du45dad7f1-3b57-4%26crop%3D0%26crop%3D0%26crop%3D1%26crop%3D1%26from%3Dpaste%26height%3D123%26id%3Du2833aadc%26margin%3D%255Bobject%2520Object%255D%26name%3Dimage.png%26originHeight%3D154%26originWidth%3D723%26originalType%3Dbinary%26ratio%3D1%26rotation%3D0%26showTitle%3Dfalse%26size%3D16976%26status%3Ddone%26style%3Dnone%26taskId%3Du30b97521-7a9d-41b9-abea-94699e5af18%26title%3D%26width%3D578.4" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.nlark.com%2Fyuque%2F0%2F2022%2Fpng%2F2207808%2F1659762111508-4d0d4ef9-9ebf-45dd-81b3-8bdb1c04c9c4.png%23clientId%3Du45dad7f1-3b57-4%26crop%3D0%26crop%3D0%26crop%3D1%26crop%3D1%26from%3Dpaste%26height%3D123%26id%3Du2833aadc%26margin%3D%255Bobject%2520Object%255D%26name%3Dimage.png%26originHeight%3D154%26originWidth%3D723%26originalType%3Dbinary%26ratio%3D1%26rotation%3D0%26showTitle%3Dfalse%26size%3D16976%26status%3Ddone%26style%3Dnone%26taskId%3Du30b97521-7a9d-41b9-abea-94699e5af18%26title%3D%26width%3D578.4" alt="image.png"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h4&gt;
  
  
  7.4.2.3、设置新网桥的网络段地址
&lt;/h4&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ip addr add 192.168.0.1/24 dev bridge0
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h4&gt;
  
  
  7.4.2.4、启动bridge0网桥
&lt;/h4&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ip &lt;span class="nb"&gt;link set &lt;/span&gt;dev bridge0 up
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h4&gt;
  
  
  7.4.2.5、查询bridge0网桥信息
&lt;/h4&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ifconfig bridge0
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.nlark.com%2Fyuque%2F0%2F2022%2Fpng%2F2207808%2F1659762165196-e45dde2b-4e0b-47e4-9b68-9d73f2394c62.png%23clientId%3Du45dad7f1-3b57-4%26crop%3D0%26crop%3D0%26crop%3D1%26crop%3D1%26from%3Dpaste%26height%3D307%26id%3Du6be17c9e%26margin%3D%255Bobject%2520Object%255D%26name%3Dimage.png%26originHeight%3D384%26originWidth%3D810%26originalType%3Dbinary%26ratio%3D1%26rotation%3D0%26showTitle%3Dfalse%26size%3D54361%26status%3Ddone%26style%3Dnone%26taskId%3Du335c8683-223d-4417-b8e8-acb17a3fefc%26title%3D%26width%3D648" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.nlark.com%2Fyuque%2F0%2F2022%2Fpng%2F2207808%2F1659762165196-e45dde2b-4e0b-47e4-9b68-9d73f2394c62.png%23clientId%3Du45dad7f1-3b57-4%26crop%3D0%26crop%3D0%26crop%3D1%26crop%3D1%26from%3Dpaste%26height%3D307%26id%3Du6be17c9e%26margin%3D%255Bobject%2520Object%255D%26name%3Dimage.png%26originHeight%3D384%26originWidth%3D810%26originalType%3Dbinary%26ratio%3D1%26rotation%3D0%26showTitle%3Dfalse%26size%3D54361%26status%3Ddone%26style%3Dnone%26taskId%3Du335c8683-223d-4417-b8e8-acb17a3fefc%26title%3D%26width%3D648" alt="image.png"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h4&gt;
  
  
  7.4.2.6、添加新网桥到配置文件
&lt;/h4&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;vi /etc/sysconfig/docker
&lt;span class="c"&gt;# 添加 -b=bridge0 到 OPTIONS 中&lt;/span&gt;
&lt;span class="nv"&gt;OPTIONS&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;'-b=bridge0'&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h4&gt;
  
  
  7.4.2.7、加载配置文件，重启docker服务
&lt;/h4&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;systemctl daemon-reload
systemctl restart docker
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.nlark.com%2Fyuque%2F0%2F2022%2Fpng%2F2207808%2F1659762269420-02a3dd09-44fb-459e-a7f9-8fbcdceec321.png%23clientId%3Du45dad7f1-3b57-4%26crop%3D0%26crop%3D0%26crop%3D1%26crop%3D1%26from%3Dpaste%26height%3D329%26id%3Dud4383cba%26margin%3D%255Bobject%2520Object%255D%26name%3Dimage.png%26originHeight%3D411%26originWidth%3D751%26originalType%3Dbinary%26ratio%3D1%26rotation%3D0%26showTitle%3Dfalse%26size%3D55729%26status%3Ddone%26style%3Dnone%26taskId%3Du4492c82a-6adf-4447-9e12-45af9a0c231%26title%3D%26width%3D600.8" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.nlark.com%2Fyuque%2F0%2F2022%2Fpng%2F2207808%2F1659762269420-02a3dd09-44fb-459e-a7f9-8fbcdceec321.png%23clientId%3Du45dad7f1-3b57-4%26crop%3D0%26crop%3D0%26crop%3D1%26crop%3D1%26from%3Dpaste%26height%3D329%26id%3Dud4383cba%26margin%3D%255Bobject%2520Object%255D%26name%3Dimage.png%26originHeight%3D411%26originWidth%3D751%26originalType%3Dbinary%26ratio%3D1%26rotation%3D0%26showTitle%3Dfalse%26size%3D55729%26status%3Ddone%26style%3Dnone%26taskId%3Du4492c82a-6adf-4447-9e12-45af9a0c231%26title%3D%26width%3D600.8" alt="image.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  7.4.3、使用新网络部署应用
&lt;/h3&gt;

&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h4&gt;
  
  
  7.4.3.1、创建一个nginx容器
&lt;/h4&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker run &lt;span class="nt"&gt;-dit&lt;/span&gt; &lt;span class="nt"&gt;--name&lt;/span&gt; nginx-net nginx
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h4&gt;
  
  
  7.4.3.2、查看容器的状态
&lt;/h4&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker ps &lt;span class="nt"&gt;-a&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.nlark.com%2Fyuque%2F0%2F2022%2Fpng%2F2207808%2F1659762409925-20bd985e-be97-4717-ae22-594b0cc34d7f.png%23clientId%3Du45dad7f1-3b57-4%26crop%3D0%26crop%3D0%26crop%3D1%26crop%3D1%26from%3Dpaste%26height%3D222%26id%3Du5c839099%26margin%3D%255Bobject%2520Object%255D%26name%3Dimage.png%26originHeight%3D278%26originWidth%3D1689%26originalType%3Dbinary%26ratio%3D1%26rotation%3D0%26showTitle%3Dfalse%26size%3D58991%26status%3Ddone%26style%3Dnone%26taskId%3Du8aaf1349-c5aa-430d-87fa-fafa54cecdc%26title%3D%26width%3D1351.2" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.nlark.com%2Fyuque%2F0%2F2022%2Fpng%2F2207808%2F1659762409925-20bd985e-be97-4717-ae22-594b0cc34d7f.png%23clientId%3Du45dad7f1-3b57-4%26crop%3D0%26crop%3D0%26crop%3D1%26crop%3D1%26from%3Dpaste%26height%3D222%26id%3Du5c839099%26margin%3D%255Bobject%2520Object%255D%26name%3Dimage.png%26originHeight%3D278%26originWidth%3D1689%26originalType%3Dbinary%26ratio%3D1%26rotation%3D0%26showTitle%3Dfalse%26size%3D58991%26status%3Ddone%26style%3Dnone%26taskId%3Du8aaf1349-c5aa-430d-87fa-fafa54cecdc%26title%3D%26width%3D1351.2" alt="image.png"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h4&gt;
  
  
  7.4.3.3、查看容器的bridge
&lt;/h4&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker inspect &lt;span class="nt"&gt;-f&lt;/span&gt; &lt;span class="o"&gt;{{&lt;/span&gt;.NetworkSettings.Networks.bridge&lt;span class="o"&gt;}}&lt;/span&gt; nginx-net
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.nlark.com%2Fyuque%2F0%2F2022%2Fpng%2F2207808%2F1659762371582-e371ef41-8e5f-4c49-99bb-15374acc1136.png%23clientId%3Du45dad7f1-3b57-4%26crop%3D0%26crop%3D0%26crop%3D1%26crop%3D1%26from%3Dpaste%26height%3D109%26id%3Du975dc73d%26margin%3D%255Bobject%2520Object%255D%26name%3Dimage.png%26originHeight%3D136%26originWidth%3D1720%26originalType%3Dbinary%26ratio%3D1%26rotation%3D0%26showTitle%3Dfalse%26size%3D26592%26status%3Ddone%26style%3Dnone%26taskId%3Du3d3a1a51-fb25-4e36-88d1-25882c4b372%26title%3D%26width%3D1376" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.nlark.com%2Fyuque%2F0%2F2022%2Fpng%2F2207808%2F1659762371582-e371ef41-8e5f-4c49-99bb-15374acc1136.png%23clientId%3Du45dad7f1-3b57-4%26crop%3D0%26crop%3D0%26crop%3D1%26crop%3D1%26from%3Dpaste%26height%3D109%26id%3Du975dc73d%26margin%3D%255Bobject%2520Object%255D%26name%3Dimage.png%26originHeight%3D136%26originWidth%3D1720%26originalType%3Dbinary%26ratio%3D1%26rotation%3D0%26showTitle%3Dfalse%26size%3D26592%26status%3Ddone%26style%3Dnone%26taskId%3Du3d3a1a51-fb25-4e36-88d1-25882c4b372%26title%3D%26width%3D1376" alt="image.png"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h1&gt;
  
  
  8、Nginx负载均衡(轮询)
&lt;/h1&gt;

&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  8.1、创建测试网页
&lt;/h2&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# 创建web1文件夹 以及页面&lt;/span&gt;
&lt;span class="nb"&gt;mkdir&lt;/span&gt; /root/web1
&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"This is website 1 Page 11111111111111111"&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; /root/web1/index.html

&lt;span class="c"&gt;# 创建web2文件夹 以及页面&lt;/span&gt;
&lt;span class="nb"&gt;mkdir&lt;/span&gt; /root/web2
&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"This is website 2 Page 22222222222222222"&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; /root/web2/index.html
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.nlark.com%2Fyuque%2F0%2F2022%2Fpng%2F2207808%2F1659770617871-bd3391bc-3c0a-44ee-95d3-2147bbc3ea52.png%23clientId%3Du7a5576a2-b3cc-4%26crop%3D0%26crop%3D0%26crop%3D1%26crop%3D1%26from%3Dpaste%26height%3D258%26id%3Duf6709375%26margin%3D%255Bobject%2520Object%255D%26name%3Dimage.png%26originHeight%3D322%26originWidth%3D693%26originalType%3Dbinary%26ratio%3D1%26rotation%3D0%26showTitle%3Dfalse%26size%3D47047%26status%3Ddone%26style%3Dnone%26taskId%3Du9f2d6add-f985-4476-92fb-8c1260c4f4e%26title%3D%26width%3D554.4" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.nlark.com%2Fyuque%2F0%2F2022%2Fpng%2F2207808%2F1659770617871-bd3391bc-3c0a-44ee-95d3-2147bbc3ea52.png%23clientId%3Du7a5576a2-b3cc-4%26crop%3D0%26crop%3D0%26crop%3D1%26crop%3D1%26from%3Dpaste%26height%3D258%26id%3Duf6709375%26margin%3D%255Bobject%2520Object%255D%26name%3Dimage.png%26originHeight%3D322%26originWidth%3D693%26originalType%3Dbinary%26ratio%3D1%26rotation%3D0%26showTitle%3Dfalse%26size%3D47047%26status%3Ddone%26style%3Dnone%26taskId%3Du9f2d6add-f985-4476-92fb-8c1260c4f4e%26title%3D%26width%3D554.4" alt="image.png"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  8.2、创建测试容器 nginx1 nginx2
&lt;/h2&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# 创建nginx1容器挂载 web1页面&lt;/span&gt;
docker run &lt;span class="nt"&gt;-dit&lt;/span&gt; &lt;span class="nt"&gt;--name&lt;/span&gt; nginx1 &lt;span class="nt"&gt;-v&lt;/span&gt; /root/web1/index.html:/usr/share/nginx/html/index.html &lt;span class="nt"&gt;-p&lt;/span&gt; 8091:80 nginx
&lt;span class="c"&gt;# 创建nginx2容器挂载 web2页面&lt;/span&gt;
docker run &lt;span class="nt"&gt;-dit&lt;/span&gt; &lt;span class="nt"&gt;--name&lt;/span&gt; nginx2 &lt;span class="nt"&gt;-v&lt;/span&gt; /root/web2/index.html:/usr/share/nginx/html/index.html &lt;span class="nt"&gt;-p&lt;/span&gt; 8092:80 nginx
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.nlark.com%2Fyuque%2F0%2F2022%2Fpng%2F2207808%2F1659770677929-88cd3c80-d8f4-4f94-9d46-26cfc89261ab.png%23clientId%3Du7a5576a2-b3cc-4%26crop%3D0%26crop%3D0%26crop%3D1%26crop%3D1%26from%3Dpaste%26height%3D245%26id%3Due6013c6d%26margin%3D%255Bobject%2520Object%255D%26name%3Dimage.png%26originHeight%3D306%26originWidth%3D1398%26originalType%3Dbinary%26ratio%3D1%26rotation%3D0%26showTitle%3Dfalse%26size%3D59041%26status%3Ddone%26style%3Dnone%26taskId%3Du323145a4-c033-4330-9b59-6544f7a7910%26title%3D%26width%3D1118.4" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.nlark.com%2Fyuque%2F0%2F2022%2Fpng%2F2207808%2F1659770677929-88cd3c80-d8f4-4f94-9d46-26cfc89261ab.png%23clientId%3Du7a5576a2-b3cc-4%26crop%3D0%26crop%3D0%26crop%3D1%26crop%3D1%26from%3Dpaste%26height%3D245%26id%3Due6013c6d%26margin%3D%255Bobject%2520Object%255D%26name%3Dimage.png%26originHeight%3D306%26originWidth%3D1398%26originalType%3Dbinary%26ratio%3D1%26rotation%3D0%26showTitle%3Dfalse%26size%3D59041%26status%3Ddone%26style%3Dnone%26taskId%3Du323145a4-c033-4330-9b59-6544f7a7910%26title%3D%26width%3D1118.4" alt="image.png"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  8.3、创建nginx.conf配置文件
&lt;/h2&gt;

&lt;p&gt;:::info&lt;br&gt;
配置文件中的 172.31.36.113 为宿主机的内网IP地址，请按实际情况修改&lt;br&gt;
:::&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;user  nginx&lt;span class="p"&gt;;&lt;/span&gt;
worker_processes  1&lt;span class="p"&gt;;&lt;/span&gt;

error_log  /var/log/nginx/error.log warn&lt;span class="p"&gt;;&lt;/span&gt;
pid        /var/run/nginx.pid&lt;span class="p"&gt;;&lt;/span&gt;




events &lt;span class="o"&gt;{&lt;/span&gt;
    worker_connections  1024&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;


http &lt;span class="o"&gt;{&lt;/span&gt;
    include       /etc/nginx/mime.types&lt;span class="p"&gt;;&lt;/span&gt;
    default_type  application/octet-stream&lt;span class="p"&gt;;&lt;/span&gt;

    log_format  main  &lt;span class="s1"&gt;'$remote_addr - $remote_user [$time_local] "$request" '&lt;/span&gt;
                      &lt;span class="s1"&gt;'$status $body_bytes_sent "$http_referer" '&lt;/span&gt;
                      &lt;span class="s1"&gt;'"$http_user_agent" "$http_x_forwarded_for"'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    access_log  /var/log/nginx/access.log  main&lt;span class="p"&gt;;&lt;/span&gt;

    sendfile        on&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="c"&gt;#tcp_nopush     on;&lt;/span&gt;

    keepalive_timeout  65&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="c"&gt;#gzip  on;&lt;/span&gt;


    include /etc/nginx/conf.d/&lt;span class="k"&gt;*&lt;/span&gt;.conf&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="c"&gt;# 定义Tomcat服务的负载均衡&lt;/span&gt;
upstream tomcat_alb &lt;span class="o"&gt;{&lt;/span&gt;

    server 172.31.36.113:8091&lt;span class="p"&gt;;&lt;/span&gt;

    server 172.31.36.113:8092&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="o"&gt;}&lt;/span&gt;
server &lt;span class="o"&gt;{&lt;/span&gt;
    listen       80&lt;span class="p"&gt;;&lt;/span&gt;
    server_name  172.31.36.113&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="c"&gt;#宿主机的内网IP&lt;/span&gt;

    &lt;span class="c"&gt;#charset koi8-r;&lt;/span&gt;
    &lt;span class="c"&gt;#access_log  /var/log/nginx/host.access.log  main;&lt;/span&gt;
&lt;span class="c"&gt;# 这个是调用Tomcat服务的负载均衡&lt;/span&gt;
    location / &lt;span class="o"&gt;{&lt;/span&gt;
        proxy_pass http://tomcat_alb&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  8.4、创建nginx负载均衡容器
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# -v 标记挂载本地的 /root/nginx.conf 文件&lt;/span&gt;
docker run &lt;span class="nt"&gt;-dit&lt;/span&gt; &lt;span class="nt"&gt;--name&lt;/span&gt; nginx-alb &lt;span class="nt"&gt;-v&lt;/span&gt; /root/nginx.conf:/etc/nginx/nginx.conf &lt;span class="nt"&gt;-p&lt;/span&gt; 80:80 nginx

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.nlark.com%2Fyuque%2F0%2F2022%2Fpng%2F2207808%2F1659770797203-ce04dc59-c54e-40a4-9304-fa0aa737b76c.png%23clientId%3Du7a5576a2-b3cc-4%26crop%3D0%26crop%3D0%26crop%3D1%26crop%3D1%26from%3Dpaste%26height%3D135%26id%3Dudead61c2%26margin%3D%255Bobject%2520Object%255D%26name%3Dimage.png%26originHeight%3D169%26originWidth%3D1552%26originalType%3Dbinary%26ratio%3D1%26rotation%3D0%26showTitle%3Dfalse%26size%3D39421%26status%3Ddone%26style%3Dnone%26taskId%3Du77295aef-03d2-4f10-83f1-64ca8ba6e78%26title%3D%26width%3D1241.6" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.nlark.com%2Fyuque%2F0%2F2022%2Fpng%2F2207808%2F1659770797203-ce04dc59-c54e-40a4-9304-fa0aa737b76c.png%23clientId%3Du7a5576a2-b3cc-4%26crop%3D0%26crop%3D0%26crop%3D1%26crop%3D1%26from%3Dpaste%26height%3D135%26id%3Dudead61c2%26margin%3D%255Bobject%2520Object%255D%26name%3Dimage.png%26originHeight%3D169%26originWidth%3D1552%26originalType%3Dbinary%26ratio%3D1%26rotation%3D0%26showTitle%3Dfalse%26size%3D39421%26status%3Ddone%26style%3Dnone%26taskId%3Du77295aef-03d2-4f10-83f1-64ca8ba6e78%26title%3D%26width%3D1241.6" alt="image.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  8.5、负载测试
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# 循环测试&lt;/span&gt;
&lt;span class="k"&gt;for &lt;/span&gt;i &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="sb"&gt;`&lt;/span&gt;&lt;span class="nb"&gt;seq &lt;/span&gt;1 6&lt;span class="sb"&gt;`&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="k"&gt;do &lt;/span&gt;curl 172.31.36.113&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="k"&gt;done&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.nlark.com%2Fyuque%2F0%2F2022%2Fpng%2F2207808%2F1659770832552-e88b6b51-6bd0-4cef-92c5-27b07ec03791.png%23clientId%3Du7a5576a2-b3cc-4%26crop%3D0%26crop%3D0%26crop%3D1%26crop%3D1%26from%3Dpaste%26height%3D159%26id%3Du636dce1f%26margin%3D%255Bobject%2520Object%255D%26name%3Dimage.png%26originHeight%3D199%26originWidth%3D803%26originalType%3Dbinary%26ratio%3D1%26rotation%3D0%26showTitle%3Dfalse%26size%3D18743%26status%3Ddone%26style%3Dnone%26taskId%3Du9dce26b9-1bb8-481e-be55-e236850f2e7%26title%3D%26width%3D642.4" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.nlark.com%2Fyuque%2F0%2F2022%2Fpng%2F2207808%2F1659770832552-e88b6b51-6bd0-4cef-92c5-27b07ec03791.png%23clientId%3Du7a5576a2-b3cc-4%26crop%3D0%26crop%3D0%26crop%3D1%26crop%3D1%26from%3Dpaste%26height%3D159%26id%3Du636dce1f%26margin%3D%255Bobject%2520Object%255D%26name%3Dimage.png%26originHeight%3D199%26originWidth%3D803%26originalType%3Dbinary%26ratio%3D1%26rotation%3D0%26showTitle%3Dfalse%26size%3D18743%26status%3Ddone%26style%3Dnone%26taskId%3Du9dce26b9-1bb8-481e-be55-e236850f2e7%26title%3D%26width%3D642.4" alt="image.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>docker</category>
      <category>awscommunitybuilder</category>
    </item>
    <item>
      <title>Install Minikube on your Ubuntu 18.04(AWS)</title>
      <dc:creator>Maverick Fung</dc:creator>
      <pubDate>Sat, 11 Jun 2022 13:28:35 +0000</pubDate>
      <link>https://dev.to/mavr/install-minikube-on-your-ubuntu-1804aws-5hnh</link>
      <guid>https://dev.to/mavr/install-minikube-on-your-ubuntu-1804aws-5hnh</guid>
      <description>&lt;h2&gt;
  
  
  Step1.Lanuch EC2 Instance
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcommunity.ops.io%2Fremoteimages%2Fuploads%2Farticles%2Fczvrsli0m84ayivqbd69.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcommunity.ops.io%2Fremoteimages%2Fuploads%2Farticles%2Fczvrsli0m84ayivqbd69.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  1.Choose Image(Ubuntu 18.04)
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcommunity.ops.io%2Fremoteimages%2Fuploads%2Farticles%2Fnkqpg4acb84eq43iwbvy.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcommunity.ops.io%2Fremoteimages%2Fuploads%2Farticles%2Fnkqpg4acb84eq43iwbvy.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  2.Choose Instance Type(T3.medium)
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcommunity.ops.io%2Fremoteimages%2Fuploads%2Farticles%2Fd373si7xwcx1ez76auh8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcommunity.ops.io%2Fremoteimages%2Fuploads%2Farticles%2Fd373si7xwcx1ez76auh8.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  3.Add Storage(Least 10GiB)
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcommunity.ops.io%2Fremoteimages%2Fuploads%2Farticles%2F4dfuyb9q5msnan7qwr5r.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcommunity.ops.io%2Fremoteimages%2Fuploads%2Farticles%2F4dfuyb9q5msnan7qwr5r.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  4.Add Tags(Options)
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcommunity.ops.io%2Fremoteimages%2Fuploads%2Farticles%2Fa5qglwz28jqwm8xjq0xj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcommunity.ops.io%2Fremoteimages%2Fuploads%2Farticles%2Fa5qglwz28jqwm8xjq0xj.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  5.Add SecurityGroup
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcommunity.ops.io%2Fremoteimages%2Fuploads%2Farticles%2F5l6zyexrui1uhbay9nm1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcommunity.ops.io%2Fremoteimages%2Fuploads%2Farticles%2F5l6zyexrui1uhbay9nm1.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  6.Check and lanuch
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcommunity.ops.io%2Fremoteimages%2Fuploads%2Farticles%2Fxv2bydcnumbc340y2fmo.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcommunity.ops.io%2Fremoteimages%2Fuploads%2Farticles%2Fxv2bydcnumbc340y2fmo.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  7.View Your Instance
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcommunity.ops.io%2Fremoteimages%2Fuploads%2Farticles%2Fxu9h8vv0d9v8ailijqi1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcommunity.ops.io%2Fremoteimages%2Fuploads%2Farticles%2Fxu9h8vv0d9v8ailijqi1.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Step2.Login into your Instance
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1.Open SecureCRT Connect Tool
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcommunity.ops.io%2Fremoteimages%2Fuploads%2Farticles%2F4ohw8nac9pt25huvylzo.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcommunity.ops.io%2Fremoteimages%2Fuploads%2Farticles%2F4ohw8nac9pt25huvylzo.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  2.Add .PEM key
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcommunity.ops.io%2Fremoteimages%2Fuploads%2Farticles%2Freq1iox0bak4adcd7efv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcommunity.ops.io%2Fremoteimages%2Fuploads%2Farticles%2Freq1iox0bak4adcd7efv.png" alt="Image description"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcommunity.ops.io%2Fremoteimages%2Fuploads%2Farticles%2Fgslpgcnf2f7ggjo42grv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcommunity.ops.io%2Fremoteimages%2Fuploads%2Farticles%2Fgslpgcnf2f7ggjo42grv.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  3.Login use ubuntu User
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcommunity.ops.io%2Fremoteimages%2Fuploads%2Farticles%2Fmv8n6ap6dpjpcet3e72g.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcommunity.ops.io%2Fremoteimages%2Fuploads%2Farticles%2Fmv8n6ap6dpjpcet3e72g.png" alt="Image description"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcommunity.ops.io%2Fremoteimages%2Fuploads%2Farticles%2Fgb5cbfu9kkzognv2hqw3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcommunity.ops.io%2Fremoteimages%2Fuploads%2Farticles%2Fgb5cbfu9kkzognv2hqw3.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Step3.Install Kubectl(Use ubuntu User)
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-LO&lt;/span&gt; https://storage.googleapis.com/kubernetes-release/release/&lt;span class="sb"&gt;`&lt;/span&gt;curl &lt;span class="nt"&gt;-s&lt;/span&gt; https://storage.googleapis.com/kubernetes-release/release/stable.txt&lt;span class="sb"&gt;`&lt;/span&gt;/bin/linux/amd64/kubectl
&lt;span class="nb"&gt;chmod&lt;/span&gt; +x ./kubectl
&lt;span class="nb"&gt;sudo mv&lt;/span&gt; ./kubectl /usr/local/bin/kubectl
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcommunity.ops.io%2Fremoteimages%2Fuploads%2Farticles%2Fprxdcv9g5dug0njhgny9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcommunity.ops.io%2Fremoteimages%2Fuploads%2Farticles%2Fprxdcv9g5dug0njhgny9.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Step4.Install Docker(Use ubuntu User)
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;apt-get update &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nb"&gt;sudo &lt;/span&gt;apt-get &lt;span class="nb"&gt;install &lt;/span&gt;docker.io &lt;span class="nt"&gt;-y&lt;/span&gt;
&lt;span class="nb"&gt;sudo &lt;/span&gt;systemctl start docker
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcommunity.ops.io%2Fremoteimages%2Fuploads%2Farticles%2F9sj8donlxvvy1d0krcrx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcommunity.ops.io%2Fremoteimages%2Fuploads%2Farticles%2F9sj8donlxvvy1d0krcrx.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Step5.Install and check Minikube
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1.Install conntrack(Root User)
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo&lt;/span&gt; &lt;span class="nt"&gt;-i&lt;/span&gt;
apt &lt;span class="nb"&gt;install &lt;/span&gt;conntrack
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcommunity.ops.io%2Fremoteimages%2Fuploads%2Farticles%2Fupfkqck3ahx8g1skzn05.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcommunity.ops.io%2Fremoteimages%2Fuploads%2Farticles%2Fupfkqck3ahx8g1skzn05.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  2.Install Minikube
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-Lo&lt;/span&gt; minikube https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64 &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nb"&gt;chmod&lt;/span&gt; +x minikube &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nb"&gt;sudo mv &lt;/span&gt;minikube /usr/local/bin/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcommunity.ops.io%2Fremoteimages%2Fuploads%2Farticles%2F30rqgvu2fui6pzu6jgyy.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcommunity.ops.io%2Fremoteimages%2Fuploads%2Farticles%2F30rqgvu2fui6pzu6jgyy.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Step6.Start and check Minikube
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;minikube start &lt;span class="nt"&gt;--vm-driver&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;none
minikube status
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcommunity.ops.io%2Fremoteimages%2Fuploads%2Farticles%2F632iau7owxnxf1uhdw9d.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcommunity.ops.io%2Fremoteimages%2Fuploads%2Farticles%2F632iau7owxnxf1uhdw9d.png" alt="Image description"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcommunity.ops.io%2Fremoteimages%2Fuploads%2Farticles%2Fvvn24jyjcqhkhiatt2ew.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcommunity.ops.io%2Fremoteimages%2Fuploads%2Farticles%2Fvvn24jyjcqhkhiatt2ew.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>aws</category>
      <category>docker</category>
      <category>kubernetes</category>
      <category>minikube</category>
    </item>
    <item>
      <title>AWS uses EC2 to reduce the training cost of deep racer. Practical operation of deepracer-for-cloud</title>
      <dc:creator>Maverick Fung</dc:creator>
      <pubDate>Thu, 19 May 2022 08:20:37 +0000</pubDate>
      <link>https://dev.to/mavr/aws-uses-ec2-to-reduce-the-training-cost-of-deep-racer-practical-operation-of-deepracer-for-cloud-42kp</link>
      <guid>https://dev.to/mavr/aws-uses-ec2-to-reduce-the-training-cost-of-deep-racer-practical-operation-of-deepracer-for-cloud-42kp</guid>
      <description>&lt;h1&gt;
  
  
  AWS uses EC2 to reduce the training cost of deep racer. Practical operation of deepracer-for-cloud
&lt;/h1&gt;

&lt;p&gt;The operation video here:&lt;a href="https://youtu.be/ADbhcXwQzDY"&gt;https://youtu.be/ADbhcXwQzDY&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The official AWS Deepracer-for-Cloud blog document：&lt;br&gt;
&lt;a href="https://aws.amazon.com/cn/blogs/china/use-amazon-ec2-to-further-reduce-the-cost-of-deepracer-training/"&gt;The direct link&lt;/a&gt;：&lt;a href="https://aws.amazon.com/cn/blogs/china/use-amazon-ec2-to-further-reduce-the-cost-of-deepracer-training/"&gt;https://aws.amazon.com/cn/blogs/china/use-amazon-ec2-to-further-reduce-the-cost-of-deepracer-training/&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  comes first
&lt;/h2&gt;

&lt;p&gt;** As the blog has written a specific program, here will be extracted from the script, and the corresponding problems to solve **&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Deep Learning AMI (Ubuntu 18.04) Version 60.1&lt;/strong&gt; is used&lt;/p&gt;

&lt;p&gt;Example preparation, I see the article mentioned using G and P system instances, as follows:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;g4dn.2xlarge：Cost-effective training method, based on GPU acceleration, training speed slightly faster than DeepRacer Console training
p3.2xlarge：Training speed is much faster than DeepRacer Console training, fast iteration model, achieve training results
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;g4dn.2xlarge&lt;/strong&gt; is used again in this practice&lt;br&gt;
So I'm using the &lt;strong&gt;spot&lt;/strong&gt; request instance instead of the &lt;strong&gt;on-demand&lt;/strong&gt;, which reduces the cost by &lt;strong&gt;70%&lt;/strong&gt; or more,But also can appear some problems, it is US - area of the US-EAST-1 G and P series of serious shortage of instance, may be running for a while will be stopped, so we could start with the basic environment deployment good, direct &lt;strong&gt;Make AMI&lt;/strong&gt;, so can quickly pull up instances when used in the back, do not need to be on the basis of environment too much&lt;/p&gt;

&lt;p&gt;Note that you need to check your &lt;strong&gt;EC2 limit&lt;/strong&gt;, by default there is no capacity for G and P series, you need to submit the case to raise limit, do not submit too many requests when submitting the limit, it may be rejected by you&lt;/p&gt;

&lt;p&gt;For convenience, I made an EC2 startup template here, which is also a foundation for the subsequent training, so as not to have to manually configure each time&lt;/p&gt;

&lt;p&gt;Article directory structure:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;One、Create IAM roles for EC2

&lt;ul&gt;
&lt;li&gt;1.Access the IAM console&lt;/li&gt;
&lt;li&gt;2.Select EC2 and click Next&lt;/li&gt;
&lt;li&gt;3.Add permissions&lt;/li&gt;
&lt;li&gt;4.Name, view, and create&lt;/li&gt;
&lt;li&gt;5.View the created role&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Two、Create a storage bucket

&lt;ul&gt;
&lt;li&gt;1.Access the S3 console&lt;/li&gt;
&lt;li&gt;2.Create a storage bucket&lt;/li&gt;
&lt;li&gt;3.View the created storage bucket&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Three、Create a Lanuch template

&lt;ul&gt;
&lt;li&gt;1.Define the template name&lt;/li&gt;
&lt;li&gt;2.Select a mirror&lt;/li&gt;
&lt;li&gt;3.Set the instance type and key pair&lt;/li&gt;
&lt;li&gt;4.Define subnets and security groups&lt;/li&gt;
&lt;li&gt;5.Configure storage&lt;/li&gt;
&lt;li&gt;6.Advanced details&lt;/li&gt;
&lt;li&gt;7.View the summary and create a template&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Four、Create an instance

&lt;ul&gt;
&lt;li&gt;1.Select start the instance from the template&lt;/li&gt;
&lt;li&gt;2.View spot requests&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Five、Connect instances and build the base environment

&lt;ul&gt;
&lt;li&gt;Basic.Connect to your instance&lt;/li&gt;
&lt;li&gt;①.SecureCRT Imports the key&lt;/li&gt;
&lt;li&gt;②.SecureCRT connection example&lt;/li&gt;
&lt;li&gt;Next, the setup of the base environment&lt;/li&gt;
&lt;li&gt;Step-1.Pull code from Github&lt;/li&gt;
&lt;li&gt;Step-2.Install the base components required for DeepRacer local training&lt;/li&gt;
&lt;li&gt;Error scenario 1, solution&lt;/li&gt;
&lt;li&gt;Error scenario 2, solution&lt;/li&gt;
&lt;li&gt;Step-3.Reconnect the EC2 instance and execute the second-stage environment initialization code&lt;/li&gt;
&lt;li&gt;Step-4.Load the scripts required to train DeepRacer&lt;/li&gt;
&lt;li&gt;Step-5.Edit reward function, training information, vehicle information&lt;/li&gt;
&lt;li&gt;Step-6.Edit the environment file run.env&lt;/li&gt;
&lt;li&gt;①.Add bucket information&lt;/li&gt;
&lt;li&gt;②.Edit track information&lt;/li&gt;
&lt;li&gt;Step-7.Update the Python version&lt;/li&gt;
&lt;li&gt;Step-8.Update the configuration&lt;/li&gt;
&lt;li&gt;Step-9.Upload dr-upload-custom-files to S3 buckets&lt;/li&gt;
&lt;li&gt;Step-10.Start training&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Six、Follow-up Operations (retraining)

&lt;ul&gt;
&lt;li&gt;1.If the instance terminates, pull the instance again and continue the last training&lt;/li&gt;
&lt;li&gt;①.Modify the run.env file&lt;/li&gt;
&lt;li&gt;②.Updates the configuration to take effect&lt;/li&gt;
&lt;li&gt;③.If you have modified the custom_files file, run the following command to upload the custom_files file again&lt;/li&gt;
&lt;li&gt;④.start training&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Seven、Parameter and command definition&lt;/li&gt;
&lt;li&gt;Eight、Problems encountered

&lt;ul&gt;
&lt;li&gt;1.NO PUBKEY&lt;/li&gt;
&lt;li&gt;2.Python3.6 fails and the Python version is updated&lt;/li&gt;
&lt;li&gt;3.The lock cannot be obtained&lt;/li&gt;
&lt;li&gt;4.Sagemaker is not running&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The following is the specific operation scheme&lt;/p&gt;
&lt;h2&gt;
  
  
  One、Create IAM role for EC2
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;As stated in the official AWS blog, we use EC2 to train models using the following three services&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;AmazonKinesisVideoStreams
CloudWatch
S3
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;So here is a demonstration of creating a new EC2 role and empowering it&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Access the IAM console
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://us-east-1.console.aws.amazon.com/iamv2/home#/roles/create?step=selectEntities"&gt;IAM_console&lt;/a&gt;:&lt;a href="https://us-east-1.console.aws.amazon.com/iamv2/home#/roles/create?step=selectEntities"&gt;https://us-east-1.console.aws.amazon.com/iamv2/home#/roles/create?step=selectEntities&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Select EC2 and click Next
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--smEj5mpE--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/d1hjnz85j0lhkwl7u70i.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--smEj5mpE--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/d1hjnz85j0lhkwl7u70i.png" alt="console-1" width="800" height="428"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Add permissions
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Search S3, cloudwatch and Amazon kinesisvideostreams in turn, as shown in the following figure&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;You need to select the end of fullaccess to represent full access&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--ui16sa9B--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/yjxqk32mqrw3exs1ri0e.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ui16sa9B--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/yjxqk32mqrw3exs1ri0e.png" alt="add-permission-S3" width="800" height="428"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Mqtqiu6A--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/bc4tbh5mqoo8f9jt0ncz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Mqtqiu6A--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/bc4tbh5mqoo8f9jt0ncz.png" alt="add-permission-cloudwatch" width="800" height="426"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--CJc05E04--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/orexdsd00c3szcccf3uy.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--CJc05E04--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/orexdsd00c3szcccf3uy.png" alt="add-permission-AmazonKinesisVideoStreams" width="800" height="367"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;After adding all three permissions, click next&lt;/strong&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  4. Name, view, and create
&lt;/h3&gt;
&lt;h4&gt;
  
  
  ①.Setting the Role Name
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--dakBiBGc--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/pxlgjanhbtqlebjzole7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--dakBiBGc--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/pxlgjanhbtqlebjzole7.png" alt="SetRoleName" width="800" height="451"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h4&gt;
  
  
  ②.View the additional rights of a role
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--tXagIC7J--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/nxi263qe0pel8yv3lxes.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--tXagIC7J--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/nxi263qe0pel8yv3lxes.png" alt="Check-role-attach-policy" width="800" height="230"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h4&gt;
  
  
  ③.Ready to create
&lt;/h4&gt;

&lt;p&gt;&lt;strong&gt;Whether to add labels according to their own needs (optional)&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--bZK_IuKn--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/dxihr8masb4ad05elkow.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--bZK_IuKn--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/dxihr8masb4ad05elkow.png" alt="Define-tag" width="800" height="254"&gt;&lt;/a&gt; &lt;/p&gt;
&lt;h3&gt;
  
  
  5.View created roles
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--8xI97J7Z--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/2rz1xlhy416z6gt8yjug.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--8xI97J7Z--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/2rz1xlhy416z6gt8yjug.png" alt="Check_create_role" width="800" height="344"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Two、Creating a Storage Bucket
&lt;/h2&gt;
&lt;h3&gt;
  
  
  1.Accessing the S3 Console
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://s3.console.aws.amazon.com/s3/"&gt;S3 Bucket control panel&lt;/a&gt;:&lt;a href="https://s3.console.aws.amazon.com/s3/"&gt;https://s3.console.aws.amazon.com/s3/&lt;/a&gt;&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--h30fMKn8--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/qgzowzhbjrtpwbjyhix3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--h30fMKn8--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/qgzowzhbjrtpwbjyhix3.png" alt="prepare_create_s3_bucket" width="800" height="378"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  2.Creating a Storage Bucket
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Here, you only need to set the bucket name and area, and other settings can remain the default&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--rlgLsC9J--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ih83lnh926lw09u378uj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--rlgLsC9J--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ih83lnh926lw09u378uj.png" alt="Define_BucketName_choose_region" width="800" height="495"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Slide to the bottom and click Create bucket&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--PK5kp_wm--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ajhq23rxav1fknupqw7z.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--PK5kp_wm--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ajhq23rxav1fknupqw7z.png" alt="Click_Create_Bucket" width="800" height="544"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  3.View the created storage bucket
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--68BzLf5Y--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/wxzmb8r68y2hld1gvf40.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--68BzLf5Y--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/wxzmb8r68y2hld1gvf40.png" alt="Check_created_bucket" width="800" height="331"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Three、Creating a Lanuch Template
&lt;/h2&gt;

&lt;p&gt;EC2启动模板控制面板:&lt;a href="https://us-east-1.console.aws.amazon.com/ec2/v2/home?region=us-east-1#LaunchTemplates"&gt;https://us-east-1.console.aws.amazon.com/ec2/v2/home?region=us-east-1#LaunchTemplates&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--2h13BjSL--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/rqcyd9r3aa9txrsda3f1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--2h13BjSL--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/rqcyd9r3aa9txrsda3f1.png" alt="Prepare_create_ins_tp" width="800" height="338"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  1.Defining template names
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--T4EZKTM8--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/d3t9qvw00jgmws4xzda5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--T4EZKTM8--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/d3t9qvw00jgmws4xzda5.png" alt="Define_lanuch_temp_name" width="800" height="486"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  2.First you need to select the mirror
&lt;/h3&gt;

&lt;p&gt;Please select &lt;strong&gt;Deep Learning AMI(Ubuntu 18.04)&lt;/strong&gt; image&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--RXnDCZum--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/pr7zizxjg7xapvdwvu83.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--RXnDCZum--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/pr7zizxjg7xapvdwvu83.png" alt="Choose_ami" width="800" height="569"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  3.Set the instance type and key pair
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Although the official tip is not to include these two parameters in the template, this experiment is to save time for multiple deployments later, so it is defined in the template in advance&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--_K3L-xAS--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/cnwoxlont5tnu2eox7t1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--_K3L-xAS--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/cnwoxlont5tnu2eox7t1.png" alt="choose_ins_type_and_keypair" width="800" height="426"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  4.Define subnets and security groups
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Since I need to use spot requests this time, I will not set the subnet. Later spot will make requests in any area of US-EAST-1&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Y88OHPVc--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/o9ym6dralaa3vlv7trgv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Y88OHPVc--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/o9ym6dralaa3vlv7trgv.png" alt="choose_subnet_sg" width="800" height="481"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  5.Configure storage
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;The configuration instructions given by the official blog are: the root volume must be at least higher than 150gib. Here, it is set to 160gib. We can also see that AMI has a storage volume with 225gb&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Bk4mYJFa--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/dr60lhmlioot3h0go8un.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Bk4mYJFa--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/dr60lhmlioot3h0go8un.png" alt="define_storage" width="800" height="513"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  6.Advanced details
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Here I checked the request spot instance. In order to reduce the cost, you can check it according to the user's own situation&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;Then, in the Iam role, we need to select the role we created in advance for EC2&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--LRKgNgi6--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/x0jehjmplzzbox4l9gf6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--LRKgNgi6--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/x0jehjmplzzbox4l9gf6.png" alt="Advance_details" width="800" height="597"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  7.View summary and create template
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Check the created template and click create if there is no error&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--lzuDJEHj--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/13bz3v5j5cou8r1is76g.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--lzuDJEHj--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/13bz3v5j5cou8r1is76g.png" alt="Check_and_create_tp" width="800" height="431"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Mh_tgvAf--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://ucc.alicdn.com/pic/developer-ecology/8a6784136b8444a190285f0d668a8b6d.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Mh_tgvAf--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://ucc.alicdn.com/pic/developer-ecology/8a6784136b8444a190285f0d668a8b6d.png" alt="Check_created_template" width="800" height="161"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Four、Create Instance
&lt;/h2&gt;

&lt;p&gt;EC2 instance console:&lt;a href="https://us-east-1.console.aws.amazon.com/ec2/v2/home?region=us-east-1#Instances"&gt;https://us-east-1.console.aws.amazon.com/ec2/v2/home?region=us-east-1#Instances&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  1.Select Lanuch instance from template
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Here, select the template you created earlier&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--PU9Zfzxt--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/zoz77fhh49hax7hknc5i.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--PU9Zfzxt--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/zoz77fhh49hax7hknc5i.png" alt="Create_ins_from_tp" width="800" height="369"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;After confirmation, start the instance&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--5GGP0nOC--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/dlafu0mrt689khskasfm.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--5GGP0nOC--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/dlafu0mrt689khskasfm.png" alt="Confirm_and_create" width="800" height="493"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;View successfully created instances&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;If you check the spot request instance, and an error is reported when starting the instance, indicating that there is no spot quota, and you are ensuring that your account has sufficient limit, there may be no spot instances available for you in this period of time in this area. Please use the on-demand instance to create&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--IEhDcrb0--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/digrz0lskkl4djm8za8e.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--IEhDcrb0--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/digrz0lskkl4djm8za8e.png" alt="Check_created_instance" width="800" height="344"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  2.View spot requests
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;If you checked the spot request instance in the instance template and started it successfully, you can see your instance in the spot request control panel&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--5N1Tykrj--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/rwk6i1n3q314jmc4cztx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--5N1Tykrj--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/rwk6i1n3q314jmc4cztx.png" alt="Check_Spot_instance" width="800" height="462"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Five、Connect instances and build the underlying environment
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Here is the installation procedure given in the official AWS blog&lt;/strong&gt;&lt;br&gt;
I'd like to show you how to connect EC2. I use the &lt;strong&gt;SecureCRT&lt;/strong&gt; connection tool here&lt;/p&gt;
&lt;h3&gt;
  
  
  Basic. Connect your instance
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Here only supports the use of PEM type key (shared with openssh), if you are For PPK type, please use putty to connect&lt;/strong&gt;&lt;/p&gt;
&lt;h4&gt;
  
  
  ①.SecureCRT import key
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--ivBR1Di9--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://ucc.alicdn.com/pic/developer-ecology/7e631ef0c65140fd94275d70466fe6f6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ivBR1Di9--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://ucc.alicdn.com/pic/developer-ecology/7e631ef0c65140fd94275d70466fe6f6.png" alt="SecureCRT import key-1" width="800" height="409"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--7SewciFO--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://ucc.alicdn.com/pic/developer-ecology/d4672bc34f9145109ddab2b966e8e9dd.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--7SewciFO--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://ucc.alicdn.com/pic/developer-ecology/d4672bc34f9145109ddab2b966e8e9dd.png" alt="SecureCRT import key-2" width="662" height="413"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--m324DWT_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://ucc.alicdn.com/pic/developer-ecology/cd64f9ed0e204dcf8ee8b399cbe27622.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--m324DWT_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://ucc.alicdn.com/pic/developer-ecology/cd64f9ed0e204dcf8ee8b399cbe27622.png" alt="SecureCRT import key-3" width="669" height="421"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h4&gt;
  
  
  ②.SecureCRT connection instance
&lt;/h4&gt;

&lt;p&gt;&lt;strong&gt;Please note that since we are using the image of Ubuntu, the user name used here is Ubuntu&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--gDM8vOdx--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://ucc.alicdn.com/pic/developer-ecology/99f910eb1364414f80a13a1933e037bd.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--gDM8vOdx--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://ucc.alicdn.com/pic/developer-ecology/99f910eb1364414f80a13a1933e037bd.png" alt="SecureCRT connection instance" width="800" height="591"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;After connecting, if a prompt box pops up, please click accept and save&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--HJ_4ACp_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://ucc.alicdn.com/pic/developer-ecology/98f5eadfa9c4480fb0436a0910fade54.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--HJ_4ACp_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://ucc.alicdn.com/pic/developer-ecology/98f5eadfa9c4480fb0436a0910fade54.png" alt="SecureCRT connection instance-Successed" width="800" height="443"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  Next, enter the construction of the basic environment
&lt;/h3&gt;
&lt;h3&gt;
  
  
  The installation and training script of AWS deep racer for cloud is as follows
&lt;/h3&gt;
&lt;h3&gt;
  
  
  &lt;strong&gt;Step-1. Pull code&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Enter the created EC2 instance and execute the following command to pull the code from GitHub:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone https://github.com/aws-deepracer-community/deepracer-for-cloud.git
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--S1ms8sHQ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://ucc.alicdn.com/pic/developer-ecology/6a7a7d209aa246d086863d31be2f885f.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--S1ms8sHQ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://ucc.alicdn.com/pic/developer-ecology/6a7a7d209aa246d086863d31be2f885f.png" alt="git code" width="800" height="171"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Step-2. Install the basic components required for deep Racer local training&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Execute the environment pre configuration code in the first stage, which will install the basic components required for deeperacer local training, and then restart the EC2 instance:&lt;br&gt;
&lt;strong&gt;There are only 2 lines of code officially given in this step, so in the actual implementation process, some new problems are derived due to the change of version&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cd &lt;/span&gt;deepracer-for-cloud &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; ./bin/prepare.sh
&lt;span class="nb"&gt;sudo &lt;/span&gt;reboot
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Cjfaq6-i--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://ucc.alicdn.com/pic/developer-ecology/34e682608a0446e6a40f36a98464965b.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Cjfaq6-i--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://ucc.alicdn.com/pic/developer-ecology/34e682608a0446e6a40f36a98464965b.png" alt="Base_env-1" width="800" height="453"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Because the scenario that will make mistakes is considered here, additional operations are carried out here&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;The actual error reporting scenario 1 is posted here to prompt No_ PUBKEY&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--kgQJIAlK--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://ucc.alicdn.com/pic/developer-ecology/818ba495572a4c2d80a677bab6855ed6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--kgQJIAlK--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://ucc.alicdn.com/pic/developer-ecology/818ba495572a4c2d80a677bab6855ed6.png" alt="Base_Error-1" width="800" height="387"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h4&gt;
  
  
  Error scenario 1, solution
&lt;/h4&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;### Add pubkey&lt;/span&gt;
wget &lt;span class="nt"&gt;-qO&lt;/span&gt; - http://developer.download.nvidia.com/compute/machine-learning/repos/ubuntu1804/x86_64/7fa2af80.pub | &lt;span class="nb"&gt;sudo &lt;/span&gt;apt-key add -
&lt;span class="c"&gt;### update&lt;/span&gt;
&lt;span class="nb"&gt;sudo &lt;/span&gt;apt-get update
&lt;span class="c"&gt;### Re execute. Please make sure you are not in the deep for cloud directory. Please go back to the home directory of Ubuntu&lt;/span&gt;
&lt;span class="nb"&gt;cd &lt;/span&gt;deepracer-for-cloud &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; ./bin/prepare.sh
&lt;span class="c"&gt;### reboot&lt;/span&gt;
&lt;span class="nb"&gt;sudo &lt;/span&gt;reboot
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--QN6xS2Au--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://ucc.alicdn.com/pic/developer-ecology/9e75479f4b444d3ea65b33912f03c72c.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--QN6xS2Au--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://ucc.alicdn.com/pic/developer-ecology/9e75479f4b444d3ea65b33912f03c72c.png" alt="baseError-1-deal" width="800" height="219"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--RAKgGZfA--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://ucc.alicdn.com/pic/developer-ecology/1e1e60afe0e5465f90adbe63b1a0ec77.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--RAKgGZfA--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://ucc.alicdn.com/pic/developer-ecology/1e1e60afe0e5465f90adbe63b1a0ec77.png" alt="baseError-1-deal-retry-1" width="800" height="315"&gt;&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;If the following progress bar appears, it indicates that the error has been fixed and the basic environment is being installed&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--9JRqCjvj--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://ucc.alicdn.com/pic/developer-ecology/13c98b57d9914fa8a4e8f9eecdd3a8aa.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--9JRqCjvj--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://ucc.alicdn.com/pic/developer-ecology/13c98b57d9914fa8a4e8f9eecdd3a8aa.png" alt="baseError-1-deal-retry-2" width="800" height="43"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h4&gt;
  
  
  Error scenario 2, solution
&lt;/h4&gt;

&lt;p&gt;&lt;strong&gt;If the progress bar does not appear and the following errors appear, it may appear many times&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;E: Could not get lock /var/lib/dpkg/lock-frontend - open &lt;span class="o"&gt;(&lt;/span&gt;11: Resource temporarily unavailable&lt;span class="o"&gt;)&lt;/span&gt;
E: Unable to acquire the dpkg frontend lock &lt;span class="o"&gt;(&lt;/span&gt;/var/lib/dpkg/lock-frontend&lt;span class="o"&gt;)&lt;/span&gt;, is another process using it?
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Please run the code solution and re execute the basic environment installation command&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo rm&lt;/span&gt; /var/lib/dpkg/lock-frontend
&lt;span class="nb"&gt;sudo rm&lt;/span&gt; /var/lib/dpkg/lock
&lt;span class="c"&gt;### Re execute. Please make sure you are not in the deep for cloud directory. Please go back to the home directory of Ubuntu&lt;/span&gt;
&lt;span class="nb"&gt;cd &lt;/span&gt;deepracer-for-cloud &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; ./bin/prepare.sh
&lt;span class="c"&gt;### Reboot&lt;/span&gt;
&lt;span class="nb"&gt;sudo &lt;/span&gt;reboot
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  &lt;strong&gt;Step-3. Reconnect the EC2 instance and execute the environment initialization code in the second stage&lt;/strong&gt;
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;### Please make sure you are in the home directory of Ubuntu at this time&lt;/span&gt;
&lt;span class="nb"&gt;cd &lt;/span&gt;deepracer-for-cloud/ &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; bin/init.sh &lt;span class="nt"&gt;-c&lt;/span&gt; aws &lt;span class="nt"&gt;-a&lt;/span&gt; gpu
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;At this time, the environment initialization needs to pull many container images. Please wait patiently for completion&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--zif_bD0I--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://ucc.alicdn.com/pic/developer-ecology/eb7d07c4e3eb46b183c1db3230b885a6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--zif_bD0I--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://ucc.alicdn.com/pic/developer-ecology/eb7d07c4e3eb46b183c1db3230b885a6.png" alt="env-init" width="800" height="210"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The environment initialization is completed as follows&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--6hRn6nnm--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://ucc.alicdn.com/pic/developer-ecology/bea65f03f98a40839ae6f5bf88f4c0e2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--6hRn6nnm--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://ucc.alicdn.com/pic/developer-ecology/bea65f03f98a40839ae6f5bf88f4c0e2.png" alt="env-init-done" width="800" height="463"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  &lt;strong&gt;Step-4. Load scripts required for training deepracer&lt;/strong&gt;
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;source &lt;/span&gt;bin/activate.sh
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Step-5. Edit reward function, training information and car information&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;There is a custom in the deep for cloud directory_ The files directory contains three files:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;reward_function.py &lt;span class="c"&gt;#Reward function file&lt;/span&gt;
hyperparameters.json &lt;span class="c"&gt;#Training information file&lt;/span&gt;
model_metadata.json &lt;span class="c"&gt;#Car information file&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Edit reward function in &lt;strong&gt;dealer-for-cloud/custom_files/reward_function.py&lt;/strong&gt; file&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;    def reward_function&lt;span class="o"&gt;(&lt;/span&gt;params&lt;span class="o"&gt;)&lt;/span&gt;:
    &lt;span class="s1"&gt;'''
    Example of penalize steering, which helps mitigate zig-zag behaviors
    '''&lt;/span&gt;

    &lt;span class="c"&gt;# Read input parameters&lt;/span&gt;
    distance_from_center &lt;span class="o"&gt;=&lt;/span&gt; params[&lt;span class="s1"&gt;'distance_from_center'&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;
    track_width &lt;span class="o"&gt;=&lt;/span&gt; params[&lt;span class="s1"&gt;'track_width'&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;
    steering &lt;span class="o"&gt;=&lt;/span&gt; abs&lt;span class="o"&gt;(&lt;/span&gt;params[&lt;span class="s1"&gt;'steering_angle'&lt;/span&gt;&lt;span class="o"&gt;])&lt;/span&gt; &lt;span class="c"&gt;# Only need the absolute steering angle&lt;/span&gt;

    &lt;span class="c"&gt;# Calculate 3 marks that are farther and father away from the center line&lt;/span&gt;
    marker_1 &lt;span class="o"&gt;=&lt;/span&gt; 0.1 &lt;span class="k"&gt;*&lt;/span&gt; track_width
    marker_2 &lt;span class="o"&gt;=&lt;/span&gt; 0.25 &lt;span class="k"&gt;*&lt;/span&gt; track_width
    marker_3 &lt;span class="o"&gt;=&lt;/span&gt; 0.5 &lt;span class="k"&gt;*&lt;/span&gt; track_width

    &lt;span class="c"&gt;# Give higher reward if the car is closer to center line and vice versa&lt;/span&gt;
    &lt;span class="k"&gt;if &lt;/span&gt;distance_from_center &amp;lt;&lt;span class="o"&gt;=&lt;/span&gt; marker_1:
        reward &lt;span class="o"&gt;=&lt;/span&gt; 1
    &lt;span class="k"&gt;elif &lt;/span&gt;distance_from_center &amp;lt;&lt;span class="o"&gt;=&lt;/span&gt; marker_2:
        reward &lt;span class="o"&gt;=&lt;/span&gt; 0.5
    &lt;span class="k"&gt;elif &lt;/span&gt;distance_from_center &amp;lt;&lt;span class="o"&gt;=&lt;/span&gt; marker_3:
        reward &lt;span class="o"&gt;=&lt;/span&gt; 0.1
    &lt;span class="k"&gt;else&lt;/span&gt;:
        reward &lt;span class="o"&gt;=&lt;/span&gt; 1e-3  &lt;span class="c"&gt;# likely crashed/ close to off track&lt;/span&gt;

    &lt;span class="c"&gt;# Steering penality threshold, change the number based on your action space setting&lt;/span&gt;
    ABS_STEERING_THRESHOLD &lt;span class="o"&gt;=&lt;/span&gt; 15

    &lt;span class="c"&gt;# Penalize reward if the car is steering too much&lt;/span&gt;
    &lt;span class="k"&gt;if &lt;/span&gt;steering &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; ABS_STEERING_THRESHOLD:
        reward &lt;span class="k"&gt;*&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt; 0.8

    &lt;span class="k"&gt;return &lt;/span&gt;float&lt;span class="o"&gt;(&lt;/span&gt;reward&lt;span class="o"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In &lt;strong&gt;deepracer-for-cloud/custom_files/hyperparameters.json&lt;/strong&gt; file edit training information, such as:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;    &lt;span class="o"&gt;{&lt;/span&gt;
    &lt;span class="s2"&gt;"batch_size"&lt;/span&gt;: 64,
    &lt;span class="s2"&gt;"beta_entropy"&lt;/span&gt;: 0.01,
    &lt;span class="s2"&gt;"discount_factor"&lt;/span&gt;: 0.995,
    &lt;span class="s2"&gt;"e_greedy_value"&lt;/span&gt;: 0.05,
    &lt;span class="s2"&gt;"epsilon_steps"&lt;/span&gt;: 10000,
    &lt;span class="s2"&gt;"exploration_type"&lt;/span&gt;: &lt;span class="s2"&gt;"categorical"&lt;/span&gt;,
    &lt;span class="s2"&gt;"loss_type"&lt;/span&gt;: &lt;span class="s2"&gt;"huber"&lt;/span&gt;,
    &lt;span class="s2"&gt;"lr"&lt;/span&gt;: 0.0003,
    &lt;span class="s2"&gt;"num_episodes_between_training"&lt;/span&gt;: 20,
    &lt;span class="s2"&gt;"num_epochs"&lt;/span&gt;: 10,
    &lt;span class="s2"&gt;"stack_size"&lt;/span&gt;: 1,
    &lt;span class="s2"&gt;"term_cond_avg_score"&lt;/span&gt;: 350.0,
    &lt;span class="s2"&gt;"term_cond_max_episodes"&lt;/span&gt;: 1000,
    &lt;span class="s2"&gt;"sac_alpha"&lt;/span&gt;: 0.2
  &lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Edit vehicle information in &lt;strong&gt;deepracer-for-cloud/custom_files/model_metadata.json&lt;/strong&gt; file, including action space, sensor and neural network type, for example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;    &lt;span class="o"&gt;{&lt;/span&gt;
    &lt;span class="s2"&gt;"action_space"&lt;/span&gt;: &lt;span class="o"&gt;[&lt;/span&gt;
        &lt;span class="o"&gt;{&lt;/span&gt;
            &lt;span class="s2"&gt;"steering_angle"&lt;/span&gt;: &lt;span class="nt"&gt;-30&lt;/span&gt;,
            &lt;span class="s2"&gt;"speed"&lt;/span&gt;: 0.6
        &lt;span class="o"&gt;}&lt;/span&gt;,
        &lt;span class="o"&gt;{&lt;/span&gt;
            &lt;span class="s2"&gt;"steering_angle"&lt;/span&gt;: &lt;span class="nt"&gt;-15&lt;/span&gt;,
            &lt;span class="s2"&gt;"speed"&lt;/span&gt;: 0.6
        &lt;span class="o"&gt;}&lt;/span&gt;,
        &lt;span class="o"&gt;{&lt;/span&gt;
            &lt;span class="s2"&gt;"steering_angle"&lt;/span&gt;: 0,
            &lt;span class="s2"&gt;"speed"&lt;/span&gt;: 0.6
        &lt;span class="o"&gt;}&lt;/span&gt;,
        &lt;span class="o"&gt;{&lt;/span&gt;
            &lt;span class="s2"&gt;"steering_angle"&lt;/span&gt;: 15,
            &lt;span class="s2"&gt;"speed"&lt;/span&gt;: 0.6
        &lt;span class="o"&gt;}&lt;/span&gt;,
        &lt;span class="o"&gt;{&lt;/span&gt;
            &lt;span class="s2"&gt;"steering_angle"&lt;/span&gt;: 30,
            &lt;span class="s2"&gt;"speed"&lt;/span&gt;: 0.6
        &lt;span class="o"&gt;}&lt;/span&gt;
    &lt;span class="o"&gt;]&lt;/span&gt;,
    &lt;span class="s2"&gt;"sensor"&lt;/span&gt;: &lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"FRONT_FACING_CAMERA"&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;,
    &lt;span class="s2"&gt;"neural_network"&lt;/span&gt;: &lt;span class="s2"&gt;"DEEP_CONVOLUTIONAL_NETWORK_SHALLOW"&lt;/span&gt;,
    &lt;span class="s2"&gt;"training_algorithm"&lt;/span&gt;: &lt;span class="s2"&gt;"clipped_ppo"&lt;/span&gt;,
    &lt;span class="s2"&gt;"action_space_type"&lt;/span&gt;: &lt;span class="s2"&gt;"discrete"&lt;/span&gt;,
    &lt;span class="s2"&gt;"version"&lt;/span&gt;: &lt;span class="s2"&gt;"3"&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  &lt;strong&gt;Step-6. Edit the environment file run env&lt;/strong&gt;
&lt;/h3&gt;

&lt;h4&gt;
  
  
  ①. Add bucket information
&lt;/h4&gt;

&lt;p&gt;Edit &lt;strong&gt;deepracer-for-cloud/run.env&lt;/strong&gt; file, &lt;strong&gt;add&lt;/strong&gt; as follows:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;DR_LOCAL_S3_BUCKET&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&amp;lt;YOU_CREATED_BUCKET_NAME&amp;gt;
&lt;span class="nv"&gt;DR_UPLOAD_S3_BUCKET&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&amp;lt;YOU_CREATED_BUCKET_NAME&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;You can also use the command, please put &lt;code&gt;&amp;lt;YOU_CREATED_BUCKET_NAME&amp;gt;&lt;/code&gt; replace with the name of the S3 bucket you created earlier&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sed&lt;/span&gt; &lt;span class="nt"&gt;-i&lt;/span&gt; &lt;span class="s1"&gt;'1i\DR_LOCAL_S3_BUCKET=&amp;lt;YOU_CREATED_BUCKET_NAME&amp;gt;'&lt;/span&gt; run.env
&lt;span class="nb"&gt;sed&lt;/span&gt; &lt;span class="nt"&gt;-i&lt;/span&gt; &lt;span class="s1"&gt;'1i\DR_UPLOAD_S3_BUCKET=&amp;lt;YOU_CREATED_BUCKET_NAME&amp;gt;'&lt;/span&gt; run.env
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;The bucket name I created here is: deepracer-demo-bk, as a demonstration&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Sx9TbgXT--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://ucc.alicdn.com/pic/developer-ecology/35921c9e838d44b9a666ff52f21971aa.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Sx9TbgXT--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://ucc.alicdn.com/pic/developer-ecology/35921c9e838d44b9a666ff52f21971aa.png" alt="add_bucket_info" width="800" height="503"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h4&gt;
  
  
  ②.Edit track information
&lt;/h4&gt;

&lt;p&gt;&lt;strong&gt;I use re: invent 2018 track here, and its DR_WORLD_NAME is reinvent_ base&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;Please in run.env file found &lt;code&gt;DR_WORLD_NAME&lt;/code&gt; modify its value&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--CYRWDgWD--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://ucc.alicdn.com/pic/developer-ecology/4fbd343aef1d4a9eba7edb9cbcf21056.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--CYRWDgWD--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://ucc.alicdn.com/pic/developer-ecology/4fbd343aef1d4a9eba7edb9cbcf21056.png" alt="Change_WORLD_INFO" width="800" height="186"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  &lt;strong&gt;Step-7. Update Python version&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Since the image comes with Python 3.6, it is no longer supported here, so you need to update the python version&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;Please execute the python 3 command&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;### install python 3.8&lt;/span&gt;
&lt;span class="nb"&gt;sudo &lt;/span&gt;apt-get &lt;span class="nt"&gt;-y&lt;/span&gt; &lt;span class="nb"&gt;install &lt;/span&gt;python3.8

&lt;span class="nb"&gt;sudo &lt;/span&gt;update-alternatives &lt;span class="nt"&gt;--install&lt;/span&gt; /usr/bin/python3 python3 /usr/bin/python3.8 2
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--7lQBajUr--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://ucc.alicdn.com/pic/developer-ecology/f616ff44cf134ec0afec1264e0f2ccde.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--7lQBajUr--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://ucc.alicdn.com/pic/developer-ecology/f616ff44cf134ec0afec1264e0f2ccde.png" alt="install python3.8" width="710" height="122"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Step-8. Update configuration&lt;/strong&gt;
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;### Execute the following code to make the configuration here effective&lt;/span&gt;
dr-update
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--7hjj8O53--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://ucc.alicdn.com/pic/developer-ecology/26623cfb507a42c781b214c384c1acaa.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--7hjj8O53--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://ucc.alicdn.com/pic/developer-ecology/26623cfb507a42c781b214c384c1acaa.png" alt="dr-update" width="626" height="125"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Step-9. Upload dr-upload-custom-files to S3 bucket&lt;/strong&gt;
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;dr-upload-custom-files
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--q_c5fUT_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://ucc.alicdn.com/pic/developer-ecology/91a1f34a3d8643f6b1875bc5f7e2ea52.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--q_c5fUT_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://ucc.alicdn.com/pic/developer-ecology/91a1f34a3d8643f6b1875bc5f7e2ea52.png" alt="dr-up-files" width="800" height="144"&gt;&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;At this time, the custom files in the S3 bucket should contain the following files&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--M4g0yhmr--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://ucc.alicdn.com/pic/developer-ecology/a81e542efa294f5cb9794b910fe552d6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--M4g0yhmr--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://ucc.alicdn.com/pic/developer-ecology/a81e542efa294f5cb9794b910fe552d6.png" alt="s3-files" width="800" height="355"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  &lt;strong&gt;Step-10. Start training&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Execute the following command to start training&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;dr-start-training
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--JzY9JdzZ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://ucc.alicdn.com/pic/developer-ecology/6e2a209464714b3b88e473aa2224d6fe.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--JzY9JdzZ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://ucc.alicdn.com/pic/developer-ecology/6e2a209464714b3b88e473aa2224d6fe.png" alt="training-1" width="800" height="340"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Normal training is shown in the figure&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--RIMIsB5p--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://ucc.alicdn.com/pic/developer-ecology/e8e2e0023866499d8251798877278819.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--RIMIsB5p--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://ucc.alicdn.com/pic/developer-ecology/e8e2e0023866499d8251798877278819.png" alt="training-2" width="800" height="451"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  At this point, your model has started training on EC2
&lt;/h3&gt;
&lt;h2&gt;
  
  
  Six、Follow-up Operations (retraining)
&lt;/h2&gt;
&lt;h3&gt;
  
  
  1.If the instance terminates, pull the instance again, and then the last training
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Please do the following&lt;/strong&gt;&lt;/p&gt;
&lt;h4&gt;
  
  
  ①.Edit run.env file
&lt;/h4&gt;

&lt;p&gt;&lt;strong&gt;Modify the following parameters&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;### This is the last training storage folder. Please check the folder name in S3 bucket&lt;/span&gt;
&lt;span class="nv"&gt;DR_LOCAL_S3_MODEL_PREFIX&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&amp;lt;Directory of S3 storage bucket &lt;span class="k"&gt;for &lt;/span&gt;this training&amp;gt;
&lt;span class="c"&gt;### Determine whether the training or assessment should be based on the model created in the previous session&lt;/span&gt;
&lt;span class="nv"&gt;DR_LOCAL_S3_PRETRAINED&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;True
&lt;span class="c"&gt;### Set the directory of this training&lt;/span&gt;
&lt;span class="nv"&gt;DR_LOCAL_S3_PRETRAINED_PREFIX&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&amp;lt;Directory of S3 bucket stored &lt;span class="k"&gt;in &lt;/span&gt;the last training&amp;gt;
&lt;span class="c"&gt;### This training defaults to last from the checkpoint setting of the previous training&lt;/span&gt;
&lt;span class="nv"&gt;DR_LOCAL_S3_PRETRAINED_CHECKPOINT&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;best
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;This is before the modification&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--P4wiKwqY--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://ucc.alicdn.com/pic/developer-ecology/7a8c098ab7c049578f7524a4ba9f76ee.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--P4wiKwqY--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://ucc.alicdn.com/pic/developer-ecology/7a8c098ab7c049578f7524a4ba9f76ee.png" alt="base-1" width="800" height="125"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;This is a modified version&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--anGwHm7M--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://ucc.alicdn.com/pic/developer-ecology/3c38be2d499c475b82fa69f5d172a338.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--anGwHm7M--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://ucc.alicdn.com/pic/developer-ecology/3c38be2d499c475b82fa69f5d172a338.png" alt="base-1-CHANGED-dp1" width="769" height="159"&gt;&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;Take a look at the files in the S3 bucket&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--zwG-TJac--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://ucc.alicdn.com/pic/developer-ecology/0521b63659a24333b08fdc6356eab501.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--zwG-TJac--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://ucc.alicdn.com/pic/developer-ecology/0521b63659a24333b08fdc6356eab501.png" alt="s3-files-check-1" width="800" height="336"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h4&gt;
  
  
  ②.Update to make this configuration effective
&lt;/h4&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;dr-update-env
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--qf2LtIpK--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://ucc.alicdn.com/pic/developer-ecology/c66f290d4c6a404dbaf6c7588829f755.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--qf2LtIpK--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://ucc.alicdn.com/pic/developer-ecology/c66f290d4c6a404dbaf6c7588829f755.png" alt="dr-increment-training" width="800" height="192"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h4&gt;
  
  
  ③.If you modify custom_files, please execute the following command to upload custom_files again
&lt;/h4&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;dr-upload-custom-files
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h4&gt;
  
  
  ④.Start training
&lt;/h4&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;dr-start-training
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--KXFC0Jlo--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://ucc.alicdn.com/pic/developer-ecology/8eaecfb0625c46d586893bcda5bb824f.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--KXFC0Jlo--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://ucc.alicdn.com/pic/developer-ecology/8eaecfb0625c46d586893bcda5bb824f.png" alt="training-again" width="800" height="427"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;If &lt;code&gt;sagemaker is not running&lt;/code&gt; is prompted, execute &lt;code&gt;dr-start-training -w&lt;/code&gt;&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;dr-start-training &lt;span class="nt"&gt;-w&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--WGiXiR2U--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://ucc.alicdn.com/pic/developer-ecology/495f96653681441faa59222ca74a1e6a.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--WGiXiR2U--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://ucc.alicdn.com/pic/developer-ecology/495f96653681441faa59222ca74a1e6a.png" alt="training-again-error-deal-1" width="800" height="453"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Seven、run.evn configuration file parameter setting, dr command interpretation
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Refer to for specific parameters&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://aws-deepracer-community.github.io/deepracer-for-cloud/reference.html"&gt;Deepracer-for-Cloud GitHub&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Eight、Problems encountered
&lt;/h2&gt;
&lt;h3&gt;
  
  
  1.NO_PUBKEY
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;W: GPG error: http://developer.download.nvidia.com/compute/machine-learning/repos/ubuntu1804/x86_64  Release: The following signatures couldn&lt;span class="s1"&gt;'t be verified because the public key is not available: NO_PUBKEY F60F4B3D7FA2AF80
E: The repository '&lt;/span&gt;http://developer.download.nvidia.com/compute/machine-learning/repos/ubuntu1804/x86_64  Release&lt;span class="s1"&gt;' is not signed.
N: Updating from such a repository can'&lt;/span&gt;t be &lt;span class="k"&gt;done &lt;/span&gt;securely, and is therefore disabled by default.
N: See apt-secure&lt;span class="o"&gt;(&lt;/span&gt;8&lt;span class="o"&gt;)&lt;/span&gt; manpage &lt;span class="k"&gt;for &lt;/span&gt;repository creation and user configuration details.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;&lt;strong&gt;Treatment scheme&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;Due to the use of Ubuntu 18.04&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;So use the following solution&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;wget &lt;span class="nt"&gt;-qO&lt;/span&gt; - http://developer.download.nvidia.com/compute/machine-learning/repos/ubuntu1804/x86_64/7fa2af80.pub | &lt;span class="nb"&gt;sudo &lt;/span&gt;apt-key add -

&lt;span class="nb"&gt;sudo &lt;/span&gt;apt-get update
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--8anndClJ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://ucc.alicdn.com/pic/developer-ecology/c0c7c9bd58d9483d880d46a1d314bed7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--8anndClJ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://ucc.alicdn.com/pic/developer-ecology/c0c7c9bd58d9483d880d46a1d314bed7.png" alt="image.png" width="800" height="153"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  2.Python3. 6. Report an error and update the python version
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;apt-get &lt;span class="nb"&gt;install &lt;/span&gt;python3.8
&lt;span class="nb"&gt;sudo &lt;/span&gt;update-alternatives &lt;span class="nt"&gt;--install&lt;/span&gt; /usr/bin/python3 python3 /usr/bin/python3.8 2

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;The first parameter --install indicates that the service name is registered with update-alternatives.


The second parameter is to register the final address. After success, the command will be used as the soft chain of real commands at this fixed destination address. Later management is to manage this soft chain;

( --install link name path priority)

Where link is the public link directory of software with the same function in the system, such as /usr/bin/java (absolute directory is required); Name is the name of the command linker. For example, Java path is the directory where you want to use the new command and new software. Priority is the priority. When the command link already exists, it needs to be higher than the current value, because when alternative is in automatic mode, the system enables the link with high priority by default# Integer the priority set according to the version number (the changed priority needs to be greater than the current one)

The third parameter: service name, which will be used as the association basis for future management.

The fourth parameter is the absolute path of the managed command.

The fifth parameter is priority. The higher the number, the higher the priority.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  3.Unable to obtain lock
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;E: Could not get lock /var/lib/dpkg/lock-frontend - open &lt;span class="o"&gt;(&lt;/span&gt;11: Resource temporarily unavailable&lt;span class="o"&gt;)&lt;/span&gt;
E: Unable to acquire the dpkg frontend lock &lt;span class="o"&gt;(&lt;/span&gt;/var/lib/dpkg/lock-frontend&lt;span class="o"&gt;)&lt;/span&gt;, is another process using it?
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;resolvent:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;sudo rm&lt;/span&gt; /var/lib/dpkg/lock-frontend
&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;sudo rm&lt;/span&gt; /var/lib/dpkg/lock
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--UQzchivh--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://ucc.alicdn.com/pic/developer-ecology/5936ca6811e746fab8f35bc8f78b116e.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--UQzchivh--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://ucc.alicdn.com/pic/developer-ecology/5936ca6811e746fab8f35bc8f78b116e.png" alt="problem-3" width="738" height="168"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  4.&lt;strong&gt;If &lt;code&gt;sagemaker is not running&lt;/code&gt; is prompted, execute &lt;code&gt;dr-start-training -w&lt;/code&gt;&lt;/strong&gt;
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;dr-start-training &lt;span class="nt"&gt;-w&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--WGiXiR2U--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://ucc.alicdn.com/pic/developer-ecology/495f96653681441faa59222ca74a1e6a.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--WGiXiR2U--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://ucc.alicdn.com/pic/developer-ecology/495f96653681441faa59222ca74a1e6a.png" alt="training-again-error-deal-1" width="800" height="453"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  I hope this basic tutorial can help you
&lt;/h1&gt;

</description>
      <category>deepracer</category>
      <category>aws</category>
      <category>awsec2</category>
    </item>
    <item>
      <title>Spark programming basics (Python version)</title>
      <dc:creator>Maverick Fung</dc:creator>
      <pubDate>Tue, 29 Mar 2022 08:20:15 +0000</pubDate>
      <link>https://dev.to/mavr/spark-programming-basics-python-version-1kmj</link>
      <guid>https://dev.to/mavr/spark-programming-basics-python-version-1kmj</guid>
      <description>&lt;h1&gt;
  
  
  1.Master the installation and environment configuration of spark
&lt;/h1&gt;

&lt;h1&gt;
  
  
  2.Master the installation and environment configuration of spark
&lt;/h1&gt;

&lt;h1&gt;
  
  
  3.Master Python version management and third-party installation under Ubuntu
&lt;/h1&gt;

&lt;h1&gt;
  
  
  4.Master the synchronous connection between pychar and Ubuntu under Windows
&lt;/h1&gt;

&lt;h1&gt;
  
  
  5.Master the data read by spark from the file system
&lt;/h1&gt;

&lt;h3&gt;
  
  
  Reference website:
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://spark.apache.org/docs/1.1.1/quick-start.html"&gt;https://spark.apache.org/docs/1.1.1/quick-start.html&lt;/a&gt;&lt;/p&gt;

&lt;h2 id="1"&gt;1.Write first: experimental environment&lt;/h2&gt;

&lt;h4&gt;
  
  
  You Must be have Hadoop environment,You can read my other blog:&lt;a href="https://dev.to/leifengflying/build-hadoop-2x-fully-distributed-environment-by-ubuntu-1604-173c"&gt;Click Here&lt;/a&gt;
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;
Operating system: Ubuntu 16 04；
Spark version: 2.4.6&lt;span class="p"&gt;;&lt;/span&gt;
Hadoop version: 2.7.2.
Python version: 3.5.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Click Here Download:&lt;a href="https://archive.apache.org/dist/spark/spark-2.4.6/spark-2.4.6-bin-without-hadoop.tgz"&gt;spark-2.4.6-bin-without-hadoop.tgz&lt;/a&gt;&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--VVR_gbBH--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://img-blog.csdnimg.cn/614428ffedd94c15b8815a11f0c76155.png%3Fx-oss-process%3Dimage/watermark%2Ctype_d3F5LXplbmhlaQ%2Cshadow_50%2Ctext_Q1NETiBA5oyH5YmR%2Csize_20%2Ccolor_FFFFFF%2Ct_70%2Cg_se%2Cx_16" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--VVR_gbBH--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://img-blog.csdnimg.cn/614428ffedd94c15b8815a11f0c76155.png%3Fx-oss-process%3Dimage/watermark%2Ctype_d3F5LXplbmhlaQ%2Cshadow_50%2Ctext_Q1NETiBA5oyH5YmR%2Csize_20%2Ccolor_FFFFFF%2Ct_70%2Cg_se%2Cx_16" alt="在这里插入图片描述" width="800" height="222"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2 id="2"&gt;2.Master the installation and environment configuration of spark&lt;/h2&gt;
&lt;h4&gt;
  
  
  1. Unzip the spark package and move it
&lt;/h4&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="n"&gt;ubuntu&lt;/span&gt;&lt;span class="err"&gt;@&lt;/span&gt;&lt;span class="nx"&gt;adserver:~&lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;tar&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;zxf&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;spark-2.4.6-bin-without-hadoop.tgz&lt;/span&gt;&lt;span class="w"&gt; 
&lt;/span&gt;&lt;span class="n"&gt;ubuntu&lt;/span&gt;&lt;span class="err"&gt;@&lt;/span&gt;&lt;span class="nx"&gt;adserver:~&lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;ls&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-lh&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;total&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;536M&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="nt"&gt;-rw-rw-r&lt;/span&gt;&lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ubuntu&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;ubuntu&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;203M&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;Mar&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;28&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;09:59&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;hadoop-2.7.2.tar.gz&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="nt"&gt;-rw-rw-r&lt;/span&gt;&lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ubuntu&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;ubuntu&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;173M&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;Mar&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;28&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;09:11&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;jdk-8u77-linux-x64.tar.gz&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="nt"&gt;-rw-rw-r&lt;/span&gt;&lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ubuntu&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;ubuntu&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nx"&gt;458&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;Mar&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;28&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;13:31&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;jps&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;drwxr-xr-x&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;13&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;ubuntu&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;ubuntu&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;4.0K&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;May&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;30&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nx"&gt;2020&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;spark-2.4.6-bin-without-hadoop&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="nt"&gt;-rw-rw-r&lt;/span&gt;&lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ubuntu&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;ubuntu&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;161M&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;Mar&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;26&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;19:34&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;spark-2.4.6-bin-without-hadoop.tgz&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;ubuntu&lt;/span&gt;&lt;span class="err"&gt;@&lt;/span&gt;&lt;span class="nx"&gt;adserver:~&lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;sudo&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;mv&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;spark-2.4.6-bin-without-hadoop&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;/usr/local/&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;ubuntu&lt;/span&gt;&lt;span class="err"&gt;@&lt;/span&gt;&lt;span class="nx"&gt;adserver:~&lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;cd&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;/usr/local/&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;ubuntu&lt;/span&gt;&lt;span class="err"&gt;@&lt;/span&gt;&lt;span class="nx"&gt;adserver:/usr/local&lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;sudo&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;mv&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;spark-2.4.6-bin-without-hadoop/&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;spark&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;ubuntu&lt;/span&gt;&lt;span class="err"&gt;@&lt;/span&gt;&lt;span class="nx"&gt;adserver:/usr/local&lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;ls&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-lh&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;spark/&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--6VihahtT--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://img-blog.csdnimg.cn/a5201436beb246f8a25fe6cded6c7af5.png%3Fx-oss-process%3Dimage/watermark%2Ctype_d3F5LXplbmhlaQ%2Cshadow_50%2Ctext_Q1NETiBA5oyH5YmR%2Csize_20%2Ccolor_FFFFFF%2Ct_70%2Cg_se%2Cx_16" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--6VihahtT--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://img-blog.csdnimg.cn/a5201436beb246f8a25fe6cded6c7af5.png%3Fx-oss-process%3Dimage/watermark%2Ctype_d3F5LXplbmhlaQ%2Cshadow_50%2Ctext_Q1NETiBA5oyH5YmR%2Csize_20%2Ccolor_FFFFFF%2Ct_70%2Cg_se%2Cx_16" alt="在这里插入图片描述" width="800" height="613"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h4&gt;
  
  
  2.Modify spark environment variable file
&lt;/h4&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="n"&gt;ubuntu&lt;/span&gt;&lt;span class="err"&gt;@&lt;/span&gt;&lt;span class="nx"&gt;adserver:~&lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;cd&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;/usr/local/spark/conf/&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;ubuntu&lt;/span&gt;&lt;span class="err"&gt;@&lt;/span&gt;&lt;span class="nx"&gt;adserver:/usr/local/spark/conf&lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;pwd&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;/usr/local/spark/conf&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="nx"&gt;ubuntu&lt;/span&gt;&lt;span class="err"&gt;@&lt;/span&gt;&lt;span class="nx"&gt;adserver:/usr/local/spark/conf&lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;cp&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;spark-env.sh.template&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;spark-env.sh&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;ubuntu&lt;/span&gt;&lt;span class="err"&gt;@&lt;/span&gt;&lt;span class="nx"&gt;adserver:/usr/local/spark/conf&lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;vi&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;spark-env.sh&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Edit spark env SH file (vi ./conf/spark-env.sh), add the following configuration information on the first line:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="n"&gt;export&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;SPARK_DIST_CLASSPATH&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;/usr/local/hadoop-2.7.2/bin/hadoop&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;classpath&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--JnlZuPRe--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://img-blog.csdnimg.cn/a8a0a38d8ba6455ea1a0e9f0ffb76cef.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--JnlZuPRe--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://img-blog.csdnimg.cn/a8a0a38d8ba6455ea1a0e9f0ffb76cef.png" alt="在这里插入图片描述" width="784" height="174"&gt;&lt;/a&gt;&lt;br&gt;
With the above configuration information, spark can store data in Hadoop distributed file system HDFS or read data from HDFS. If the above information is not configured, spark can only read and write local data, but cannot read and write HDFS data. After configuration, it can be used directly without running the startup command like Hadoop. Verify whether spark is successfully installed by running the example provided by spark.&lt;br&gt;
During execution, a lot of running information will be output, and the output result is not easy to find. It can be filtered through the grep command (2 &amp;gt; &amp;amp; 1 in the command can output all information to stdout, otherwise it will be output to the screen due to the nature of the output log):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="n"&gt;ubuntu&lt;/span&gt;&lt;span class="err"&gt;@&lt;/span&gt;&lt;span class="nx"&gt;adserver:/usr/local/spark&lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;/bin/run-example&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;SparkPi&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;2&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="nx"&gt;1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;grep&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Pi is"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--acInHMqQ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://img-blog.csdnimg.cn/d062eeb42e374a128bae0b92ec105d59.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--acInHMqQ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://img-blog.csdnimg.cn/d062eeb42e374a128bae0b92ec105d59.png" alt="在这里插入图片描述" width="800" height="114"&gt;&lt;/a&gt;&lt;br&gt;
Modify the contents of /usr/local/spark/bin/pyspark file&lt;br&gt;
Change line 45 Python to python3&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--wj-9jJtX--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://img-blog.csdnimg.cn/28ec23d4410047b88f0a62fc8677c36a.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--wj-9jJtX--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://img-blog.csdnimg.cn/28ec23d4410047b88f0a62fc8677c36a.png" alt="在这里插入图片描述" width="800" height="47"&gt;&lt;/a&gt;&lt;br&gt;
Execute command&lt;code&gt;sudo update-alternatives --install /usr/bin/python python /usr/bin/python3 150&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="n"&gt;ubuntu&lt;/span&gt;&lt;span class="err"&gt;@&lt;/span&gt;&lt;span class="nx"&gt;adserver:/usr/local/spark/bin&lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;sudo&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;update-alternatives&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;--install&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;/usr/bin/python&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;python&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;/usr/bin/python3&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;150&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--NDLItFI---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://img-blog.csdnimg.cn/c38d98bbf6be4be583b722510cf528ea.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--NDLItFI---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://img-blog.csdnimg.cn/c38d98bbf6be4be583b722510cf528ea.png" alt="在这里插入图片描述" width="800" height="38"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2 id="3"&gt;3.Master Python version management and third-party installation under Ubuntu&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="n"&gt;whereis&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;python3&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="c"&gt;#  Confirm Python 3 directory&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;cd&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nx"&gt;/usr/lib/python3.5&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c"&gt;# Switch directory &lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;sudo&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;apt-get&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;install&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;python3-pip&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c"&gt;#  install pip &lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;sudo&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;pip3&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;install&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-i&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;https://pypi.doubanio.com/simple&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;matplotlib&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="c"&gt;#  install matplotlib &lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="n"&gt;ubuntu&lt;/span&gt;&lt;span class="err"&gt;@&lt;/span&gt;&lt;span class="nx"&gt;adserver:~&lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;whereis&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;python3&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;python3:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;/usr/bin/python3&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;/usr/bin/python3.5&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;/usr/bin/python3.5m&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;/usr/lib/python3&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;/usr/lib/python3.5&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;/etc/python3&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;/etc/python3.5&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;/usr/local/lib/python3.5&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;/usr/share/python3&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;/usr/share/man/man1/python3.1.gz&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;ubuntu&lt;/span&gt;&lt;span class="err"&gt;@&lt;/span&gt;&lt;span class="nx"&gt;adserver:~&lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;cd&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;/usr/lib/python3.5/&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;ubuntu&lt;/span&gt;&lt;span class="err"&gt;@&lt;/span&gt;&lt;span class="nx"&gt;adserver:/usr/lib/python3.5&lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;sudo&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;apt-get&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;install&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;python3-pip&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;ubuntu&lt;/span&gt;&lt;span class="err"&gt;@&lt;/span&gt;&lt;span class="nx"&gt;adserver:/usr/lib/python3.5&lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;sudo&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;pip3&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;install&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-i&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;https://pypi.doubanio.com/simple&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;matplotlib&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--14VsHj0r--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://img-blog.csdnimg.cn/22abd7f6f86c4f988a576f60cc0a3fd4.png%3Fx-oss-process%3Dimage/watermark%2Ctype_d3F5LXplbmhlaQ%2Cshadow_50%2Ctext_Q1NETiBA5oyH5YmR%2Csize_20%2Ccolor_FFFFFF%2Ct_70%2Cg_se%2Cx_16" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--14VsHj0r--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://img-blog.csdnimg.cn/22abd7f6f86c4f988a576f60cc0a3fd4.png%3Fx-oss-process%3Dimage/watermark%2Ctype_d3F5LXplbmhlaQ%2Cshadow_50%2Ctext_Q1NETiBA5oyH5YmR%2Csize_20%2Ccolor_FFFFFF%2Ct_70%2Cg_se%2Cx_16" alt="在这里插入图片描述" width="800" height="275"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--TQuJVXHF--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://img-blog.csdnimg.cn/977f1089aaa94ded8ed776752a958fac.png%3Fx-oss-process%3Dimage/watermark%2Ctype_d3F5LXplbmhlaQ%2Cshadow_50%2Ctext_Q1NETiBA5oyH5YmR%2Csize_20%2Ccolor_FFFFFF%2Ct_70%2Cg_se%2Cx_16" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--TQuJVXHF--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://img-blog.csdnimg.cn/977f1089aaa94ded8ed776752a958fac.png%3Fx-oss-process%3Dimage/watermark%2Ctype_d3F5LXplbmhlaQ%2Cshadow_50%2Ctext_Q1NETiBA5oyH5YmR%2Csize_20%2Ccolor_FFFFFF%2Ct_70%2Cg_se%2Cx_16" alt="在这里插入图片描述" width="800" height="225"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2 id="4"&gt;4.Master the synchronous connection between pychar and Ubuntu under Windows&lt;/h2&gt;
&lt;h4&gt;
  
  
  1) Open pychart and open file -- &amp;gt; settings -- &amp;gt;
&lt;/h4&gt;

&lt;p&gt;Click the + sign, and then select SSH interpreter to set the server; Enter the IP address, user name and password of the virtual machine Ubuntu&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Mk_pYojc--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://img-blog.csdnimg.cn/e425647624284797be7c0820f7e74a48.png%3Fx-oss-process%3Dimage/watermark%2Ctype_d3F5LXplbmhlaQ%2Cshadow_50%2Ctext_Q1NETiBA5oyH5YmR%2Csize_20%2Ccolor_FFFFFF%2Ct_70%2Cg_se%2Cx_16" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Mk_pYojc--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://img-blog.csdnimg.cn/e425647624284797be7c0820f7e74a48.png%3Fx-oss-process%3Dimage/watermark%2Ctype_d3F5LXplbmhlaQ%2Cshadow_50%2Ctext_Q1NETiBA5oyH5YmR%2Csize_20%2Ccolor_FFFFFF%2Ct_70%2Cg_se%2Cx_16" alt="在这里插入图片描述" width="692" height="468"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--23zIqRGN--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://img-blog.csdnimg.cn/bfabc1ec96e445eaa2d7dd789e447d9d.png%3Fx-oss-process%3Dimage/watermark%2Ctype_d3F5LXplbmhlaQ%2Cshadow_50%2Ctext_Q1NETiBA5oyH5YmR%2Csize_20%2Ccolor_FFFFFF%2Ct_70%2Cg_se%2Cx_16" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--23zIqRGN--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://img-blog.csdnimg.cn/bfabc1ec96e445eaa2d7dd789e447d9d.png%3Fx-oss-process%3Dimage/watermark%2Ctype_d3F5LXplbmhlaQ%2Cshadow_50%2Ctext_Q1NETiBA5oyH5YmR%2Csize_20%2Ccolor_FFFFFF%2Ct_70%2Cg_se%2Cx_16" alt="在这里插入图片描述" width="692" height="468"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2 id="5"&gt;5.Master the data read by spark from the file system&lt;/h2&gt;
&lt;h4&gt;
  
  
  1）Read the local file "/home/Hadoop/test.txt" of Linux system in pyspark, and then count the number of lines of the file;
&lt;/h4&gt;

&lt;p&gt;First create the test file&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;vi&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;/home/hadoop/test.txt&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;this&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;is&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;line&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;this&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;is&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;line&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;2&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;this&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;is&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;line&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;3&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;this&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;is&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;line&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;4&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--oeDBJXPL--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://img-blog.csdnimg.cn/4ee8312e9ac148c3b9dfce8795cd5e7d.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--oeDBJXPL--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://img-blog.csdnimg.cn/4ee8312e9ac148c3b9dfce8795cd5e7d.png" alt="在这里插入图片描述" width="528" height="146"&gt;&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="n"&gt;ubuntu&lt;/span&gt;&lt;span class="err"&gt;@&lt;/span&gt;&lt;span class="nx"&gt;adserver:/usr/local/spark/bin&lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;pwd&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;/usr/local/spark/bin&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="nx"&gt;ubuntu&lt;/span&gt;&lt;span class="err"&gt;@&lt;/span&gt;&lt;span class="nx"&gt;adserver:/usr/local/spark/bin&lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;/pyspark&lt;/span&gt;&lt;span class="w"&gt; 
&lt;/span&gt;&lt;span class="n"&gt;Python&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;3.5.2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;default&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;Jan&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;26&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;2021&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;13:30:48&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; 
&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;GCC&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;5.4&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;20160609&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;on&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;linux&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="kr"&gt;Type&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"help"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"copyright"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"credits"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;or&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"license"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;for&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;more&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;information.&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="mi"&gt;22&lt;/span&gt;&lt;span class="n"&gt;/03/28&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;15:57:23&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;WARN&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;util.NativeCodeLoader:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;Unable&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;to&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;load&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;native-hadoop&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;library&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;for&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;your&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;platform...&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;using&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;builtin-java&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;classes&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;where&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;applicable&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;Setting&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;default&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;level&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;to&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"WARN"&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;To&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;adjust&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;logging&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;level&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;use&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;sc.setLogLevel&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;newLevel&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kr"&gt;For&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;SparkR&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;use&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;setLogLevel&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;newLevel&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;Welcome&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;to&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="err"&gt;____&lt;/span&gt;&lt;span class="w"&gt;              &lt;/span&gt;&lt;span class="err"&gt;__&lt;/span&gt;&lt;span class="w"&gt;
     &lt;/span&gt;&lt;span class="n"&gt;/&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;__/__&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nx"&gt;___&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;_____/&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;/__&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="err"&gt;_&lt;/span&gt;&lt;span class="n"&gt;\&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;\/&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;_&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;\/&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;_&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="se"&gt;`/&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;__/&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="s1"&gt;'_/
   /__ / .__/\_,_/_/ /_/\_\   version 2.4.6
      /_/

Using Python version 3.5.2 (default, Jan 26 2021 13:30:48)
SparkSession available as '&lt;/span&gt;&lt;span class="nx"&gt;spark&lt;/span&gt;&lt;span class="s1"&gt;'.
&amp;gt;&amp;gt;&amp;gt; lines = sc.textFile("file:/home/hadoop/test.txt")
&amp;gt;&amp;gt;&amp;gt; lines.count()
4
&amp;gt;&amp;gt;&amp;gt; 
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--SwXyFoNd--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://img-blog.csdnimg.cn/079959dc452a4f3f8d05b397790c0ba2.png%3Fx-oss-process%3Dimage/watermark%2Ctype_d3F5LXplbmhlaQ%2Cshadow_50%2Ctext_Q1NETiBA5oyH5YmR%2Csize_20%2Ccolor_FFFFFF%2Ct_70%2Cg_se%2Cx_16" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--SwXyFoNd--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://img-blog.csdnimg.cn/079959dc452a4f3f8d05b397790c0ba2.png%3Fx-oss-process%3Dimage/watermark%2Ctype_d3F5LXplbmhlaQ%2Cshadow_50%2Ctext_Q1NETiBA5oyH5YmR%2Csize_20%2Ccolor_FFFFFF%2Ct_70%2Cg_se%2Cx_16" alt="在这里插入图片描述" width="800" height="273"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  2）Read the HDFS system file "/user/Hadoop/test.txt" (if the file does not exist, please create it first), and then count the number of lines of the file;
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="n"&gt;ubuntu&lt;/span&gt;&lt;span class="err"&gt;@&lt;/span&gt;&lt;span class="nx"&gt;adserver:~&lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;cd&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;/home/hadoop/&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;ubuntu&lt;/span&gt;&lt;span class="err"&gt;@&lt;/span&gt;&lt;span class="nx"&gt;adserver:/home/hadoop&lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;hadoop&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;fs&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-ls&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;/&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;Found&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;items&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;drwxrwx---&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;ubuntu&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;supergroup&lt;/span&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="nx"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;2022-03-28&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;17:15&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;/tmp&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;ubuntu&lt;/span&gt;&lt;span class="err"&gt;@&lt;/span&gt;&lt;span class="nx"&gt;adserver:/home/hadoop&lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;hadoop&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;fs&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-mkdir&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-p&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;/user/hadoop&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;ubuntu&lt;/span&gt;&lt;span class="err"&gt;@&lt;/span&gt;&lt;span class="nx"&gt;adserver:/home/hadoop&lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;hadoop&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;fs&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-put&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;test.txt&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;/user/hadoop/&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;ubuntu&lt;/span&gt;&lt;span class="err"&gt;@&lt;/span&gt;&lt;span class="nx"&gt;adserver:/home/hadoop&lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;hadoop&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;fs&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-ls&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;/user/hadoop/&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;Found&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;items&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="nt"&gt;-rw-r--r&lt;/span&gt;&lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ubuntu&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;supergroup&lt;/span&gt;&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="nx"&gt;60&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;2022-03-28&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;17:17&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;/user/hadoop/test.txt&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;ubuntu&lt;/span&gt;&lt;span class="err"&gt;@&lt;/span&gt;&lt;span class="nx"&gt;adserver:/home/hadoop&lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;/usr/local/spark/bin/pyspark&lt;/span&gt;&lt;span class="w"&gt; 
&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;lines&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;sc.textFile&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"/user/hadoop/test.txt"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;     
&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;lines.count&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--z3b25LoR--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://img-blog.csdnimg.cn/90186245eaa4467cba37344156a5e2c3.png%3Fx-oss-process%3Dimage/watermark%2Ctype_d3F5LXplbmhlaQ%2Cshadow_50%2Ctext_Q1NETiBA5oyH5YmR%2Csize_20%2Ccolor_FFFFFF%2Ct_70%2Cg_se%2Cx_16" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--z3b25LoR--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://img-blog.csdnimg.cn/90186245eaa4467cba37344156a5e2c3.png%3Fx-oss-process%3Dimage/watermark%2Ctype_d3F5LXplbmhlaQ%2Cshadow_50%2Ctext_Q1NETiBA5oyH5YmR%2Csize_20%2Ccolor_FFFFFF%2Ct_70%2Cg_se%2Cx_16" alt="在这里插入图片描述" width="800" height="366"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  3）Write an independent application, read the HDFS system file "/user/Hadoop/test.txt" (if the file does not exist, please create it first), and then count the number of lines of the file;
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;ubuntu&lt;/span&gt;&lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="n"&gt;adserver&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;home&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;hadoop&lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt; &lt;span class="n"&gt;sudo&lt;/span&gt; &lt;span class="n"&gt;vi&lt;/span&gt; &lt;span class="n"&gt;st&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;py&lt;/span&gt;

&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;pyspark&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;SparkContext&lt;/span&gt;

&lt;span class="n"&gt;logFile&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"/user/hadoop/test.txt"&lt;/span&gt;  &lt;span class="c1"&gt;# Should be some file on your system
&lt;/span&gt;&lt;span class="n"&gt;sc&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;SparkContext&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"local"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"Simple App"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;logData&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;sc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;textFile&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;logFile&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="n"&gt;cache&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="k"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"The HDFS file lines : "&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;logData&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;count&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--WjacZaN2--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://img-blog.csdnimg.cn/048b244380e5497181b086f13023da88.png%3Fx-oss-process%3Dimage/watermark%2Ctype_d3F5LXplbmhlaQ%2Cshadow_50%2Ctext_Q1NETiBA5oyH5YmR%2Csize_20%2Ccolor_FFFFFF%2Ct_70%2Cg_se%2Cx_16" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--WjacZaN2--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://img-blog.csdnimg.cn/048b244380e5497181b086f13023da88.png%3Fx-oss-process%3Dimage/watermark%2Ctype_d3F5LXplbmhlaQ%2Cshadow_50%2Ctext_Q1NETiBA5oyH5YmR%2Csize_20%2Ccolor_FFFFFF%2Ct_70%2Cg_se%2Cx_16" alt="在这里插入图片描述" width="800" height="210"&gt;&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="n"&gt;ubuntu&lt;/span&gt;&lt;span class="err"&gt;@&lt;/span&gt;&lt;span class="nx"&gt;adserver:/home/hadoop&lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;/usr/local/spark/bin/spark-submit&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;--master&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;local&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;st-app.py&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;2&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="nx"&gt;1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;grep&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"The HDFS"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--NRUpIoHn--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://img-blog.csdnimg.cn/3da6ffed374649a7ac05ca35cc19dd37.png%3Fx-oss-process%3Dimage/watermark%2Ctype_d3F5LXplbmhlaQ%2Cshadow_50%2Ctext_Q1NETiBA5oyH5YmR%2Csize_20%2Ccolor_FFFFFF%2Ct_70%2Cg_se%2Cx_16" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--NRUpIoHn--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://img-blog.csdnimg.cn/3da6ffed374649a7ac05ca35cc19dd37.png%3Fx-oss-process%3Dimage/watermark%2Ctype_d3F5LXplbmhlaQ%2Cshadow_50%2Ctext_Q1NETiBA5oyH5YmR%2Csize_20%2Ccolor_FFFFFF%2Ct_70%2Cg_se%2Cx_16" alt="在这里插入图片描述" width="800" height="139"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Hey,If you think this blog is useful, please like it and Follow Me. Thank you.Have a nice day!!!!!!
&lt;/h1&gt;

</description>
      <category>awscommunity</category>
      <category>spark</category>
      <category>python</category>
      <category>hadoop</category>
    </item>
    <item>
      <title>Build Hadoop 2.X Fully distributed Environment by Ubuntu 16.04</title>
      <dc:creator>Maverick Fung</dc:creator>
      <pubDate>Tue, 29 Mar 2022 01:30:22 +0000</pubDate>
      <link>https://dev.to/mavr/build-hadoop-2x-fully-distributed-environment-by-ubuntu-1604-173c</link>
      <guid>https://dev.to/mavr/build-hadoop-2x-fully-distributed-environment-by-ubuntu-1604-173c</guid>
      <description>&lt;h1&gt;
  
  
  1.Experimental model and architecture description
&lt;/h1&gt;

&lt;h1&gt;
  
  
  2.Basic environment configuration
&lt;/h1&gt;

&lt;h1&gt;
  
  
  3.JDK Hadoop environment configuration
&lt;/h1&gt;

&lt;h1&gt;
  
  
  4.Hadoop configuration file modification
&lt;/h1&gt;

&lt;h1&gt;
  
  
  5.Start Hadoop cluster (all in AdServer operation)
&lt;/h1&gt;

&lt;h2 id="1"&gt;1.Experimental model and architecture description&lt;/h2&gt;

&lt;h3&gt;
  
  
  Written in the front, these pictures are from another blog of mine. Don't worry
&lt;/h3&gt;

&lt;h3&gt;
  
  
  My Chinese Blog:&lt;a href="https://blog.csdn.net/fly1574"&gt;CSDN Address&lt;/a&gt;
&lt;/h3&gt;

&lt;h5&gt;
  
  
  This experiment uses three Ubuntu 16 04 instance
&lt;/h5&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;HostName&lt;/th&gt;
&lt;th&gt;IPAddress&lt;/th&gt;
&lt;th&gt;OS&lt;/th&gt;
&lt;th&gt;Running Services&lt;/th&gt;
&lt;th&gt;Role&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;adserver&lt;/td&gt;
&lt;td&gt;192.168.200.10&lt;/td&gt;
&lt;td&gt;ubuntu 16.04&lt;/td&gt;
&lt;td&gt;NameNode、SecondaryNameNode、ResourceManager、JobHistoryServer&lt;/td&gt;
&lt;td&gt;Master&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;monserver&lt;/td&gt;
&lt;td&gt;192.168.200.20&lt;/td&gt;
&lt;td&gt;ubuntu 16.04&lt;/td&gt;
&lt;td&gt;DataNode、NodeManager&lt;/td&gt;
&lt;td&gt;Slave&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;osdserver-1&lt;/td&gt;
&lt;td&gt;192.168.200.30&lt;/td&gt;
&lt;td&gt;ubuntu 16.04&lt;/td&gt;
&lt;td&gt;DataNode、NodeManager&lt;/td&gt;
&lt;td&gt;Slave&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2 id="2"&gt;2.Basic environment configuration&lt;/h2&gt;

&lt;h4&gt;
  
  
  Change Hostname and the network interface name
&lt;/h4&gt;

&lt;p&gt;Ubuntu 16.04 static IP address only&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Check the IP address first
&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--P6kcxtUC--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://img-blog.csdnimg.cn/d37f23be25a8415498227acc397b0996.png%3Fx-oss-process%3Dimage/watermark%2Ctype_d3F5LXplbmhlaQ%2Cshadow_50%2Ctext_Q1NETiBA5oyH5YmR%2Csize_20%2Ccolor_FFFFFF%2Ct_70%2Cg_se%2Cx_16" alt="在这里插入图片描述" width="692" height="330"&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Modify the network card configuration file to make it a static IP address. After modification, restart the instance to take effect&lt;br&gt;
&lt;code&gt;$ sudo vi /etc/network/interfaces&lt;/code&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--E4zlGeWX--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://img-blog.csdnimg.cn/aa2034f807374d438efb64b4007bc905.png%3Fx-oss-process%3Dimage/watermark%2Ctype_d3F5LXplbmhlaQ%2Cshadow_50%2Ctext_Q1NETiBA5oyH5YmR%2Csize_20%2Ccolor_FFFFFF%2Ct_70%2Cg_se%2Cx_16" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--E4zlGeWX--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://img-blog.csdnimg.cn/aa2034f807374d438efb64b4007bc905.png%3Fx-oss-process%3Dimage/watermark%2Ctype_d3F5LXplbmhlaQ%2Cshadow_50%2Ctext_Q1NETiBA5oyH5YmR%2Csize_20%2Ccolor_FFFFFF%2Ct_70%2Cg_se%2Cx_16" alt="在这里插入图片描述" width="692" height="326"&gt;&lt;/a&gt;&lt;br&gt;
Modify host name, use here&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;sudo&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;hostnamectl&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;set-hostname&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;YOUR_HOSTNAME&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--3eUzMoVE--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://img-blog.csdnimg.cn/87e23e4df7d846fcacd96cb8a67a8ec0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--3eUzMoVE--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://img-blog.csdnimg.cn/87e23e4df7d846fcacd96cb8a67a8ec0.png" alt="在这里插入图片描述" width="692" height="140"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--xNa04LTp--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://img-blog.csdnimg.cn/2de7104fce08451f826fd96edb60a871.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--xNa04LTp--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://img-blog.csdnimg.cn/2de7104fce08451f826fd96edb60a871.png" alt="在这里插入图片描述" width="448" height="123"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h4&gt;
  
  
  Modify hosts and configure FQDN domain name
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--dOO8EQJz--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://img-blog.csdnimg.cn/ccdd3b3ba0744d60958d02e24c97192f.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--dOO8EQJz--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://img-blog.csdnimg.cn/ccdd3b3ba0744d60958d02e24c97192f.png" alt="在这里插入图片描述" width="634" height="187"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h4&gt;
  
  
  Create Hadoop users and configure password free login. Each node needs to be configured
&lt;/h4&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="n"&gt;sudo&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;useradd&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-d&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;/home/hadoop&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-m&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;hadoop&lt;/span&gt;&lt;span class="w"&gt; 
&lt;/span&gt;&lt;span class="n"&gt;sudo&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;passwd&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;hadoop&lt;/span&gt;&lt;span class="w"&gt; 
&lt;/span&gt;&lt;span class="n"&gt;echo&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"hadoop ALL = (root) NOPASSWD:ALL"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;sudo&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;tee&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;/etc/sudoers.d/hadoop&lt;/span&gt;&lt;span class="w"&gt; 
&lt;/span&gt;&lt;span class="n"&gt;sudo&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;chmod&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;0440&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;/etc/sudoers.d/hadoop&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--RuUqCj6A--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://img-blog.csdnimg.cn/7c45d0e0345041bb96a5a0a7dea5aa0c.png%3Fx-oss-process%3Dimage/watermark%2Ctype_d3F5LXplbmhlaQ%2Cshadow_50%2Ctext_Q1NETiBA5oyH5YmR%2Csize_20%2Ccolor_FFFFFF%2Ct_70%2Cg_se%2Cx_16" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--RuUqCj6A--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://img-blog.csdnimg.cn/7c45d0e0345041bb96a5a0a7dea5aa0c.png%3Fx-oss-process%3Dimage/watermark%2Ctype_d3F5LXplbmhlaQ%2Cshadow_50%2Ctext_Q1NETiBA5oyH5YmR%2Csize_20%2Ccolor_FFFFFF%2Ct_70%2Cg_se%2Cx_16" alt="在这里插入图片描述" width="692" height="211"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;To configure SSH password free login, you need to install openssh-server(sudo apt get install openssh-server) first&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="n"&gt;ubuntu&lt;/span&gt;&lt;span class="err"&gt;@&lt;/span&gt;&lt;span class="nx"&gt;adserver:~&lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;ssh-keygen&lt;/span&gt;&lt;span class="w"&gt; 
&lt;/span&gt;&lt;span class="n"&gt;ubuntu&lt;/span&gt;&lt;span class="err"&gt;@&lt;/span&gt;&lt;span class="nx"&gt;adserver:~&lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;ssh-copy-id&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;adserver&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;ubuntu&lt;/span&gt;&lt;span class="err"&gt;@&lt;/span&gt;&lt;span class="nx"&gt;adserver:~&lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;ssh-copy-id&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;monserver&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;ubuntu&lt;/span&gt;&lt;span class="err"&gt;@&lt;/span&gt;&lt;span class="nx"&gt;adserver:~&lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;ssh-copy-id&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;osdserver-1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--G8b6IgwZ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://img-blog.csdnimg.cn/3aa24b0ab5e344699422a73fcf55f3c5.png%3Fx-oss-process%3Dimage/watermark%2Ctype_d3F5LXplbmhlaQ%2Cshadow_50%2Ctext_Q1NETiBA5oyH5YmR%2Csize_20%2Ccolor_FFFFFF%2Ct_70%2Cg_se%2Cx_16" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--G8b6IgwZ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://img-blog.csdnimg.cn/3aa24b0ab5e344699422a73fcf55f3c5.png%3Fx-oss-process%3Dimage/watermark%2Ctype_d3F5LXplbmhlaQ%2Cshadow_50%2Ctext_Q1NETiBA5oyH5YmR%2Csize_20%2Ccolor_FFFFFF%2Ct_70%2Cg_se%2Cx_16" alt="在这里插入图片描述" width="692" height="543"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--_zG1f588--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://img-blog.csdnimg.cn/0cecff9bdee44214b397678e74d55b2d.png%3Fx-oss-process%3Dimage/watermark%2Ctype_d3F5LXplbmhlaQ%2Cshadow_50%2Ctext_Q1NETiBA5oyH5YmR%2Csize_20%2Ccolor_FFFFFF%2Ct_70%2Cg_se%2Cx_16" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--_zG1f588--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://img-blog.csdnimg.cn/0cecff9bdee44214b397678e74d55b2d.png%3Fx-oss-process%3Dimage/watermark%2Ctype_d3F5LXplbmhlaQ%2Cshadow_50%2Ctext_Q1NETiBA5oyH5YmR%2Csize_20%2Ccolor_FFFFFF%2Ct_70%2Cg_se%2Cx_16" alt="在这里插入图片描述" width="692" height="628"&gt;&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="n"&gt;ubuntu&lt;/span&gt;&lt;span class="err"&gt;@&lt;/span&gt;&lt;span class="nx"&gt;adserver:~&lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;ssh-copy-id&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-i&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;ssh&lt;/span&gt;&lt;span class="nx"&gt;/id_rsa.pub&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;hadoop&lt;/span&gt;&lt;span class="err"&gt;@&lt;/span&gt;&lt;span class="nx"&gt;adserver&lt;/span&gt;&lt;span class="w"&gt;  
&lt;/span&gt;&lt;span class="n"&gt;ubuntu&lt;/span&gt;&lt;span class="err"&gt;@&lt;/span&gt;&lt;span class="nx"&gt;adserver:~&lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;ssh-copy-id&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-i&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;ssh&lt;/span&gt;&lt;span class="nx"&gt;/id_rsa.pub&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;hadoop&lt;/span&gt;&lt;span class="err"&gt;@&lt;/span&gt;&lt;span class="nx"&gt;monserver&lt;/span&gt;&lt;span class="w"&gt;  
&lt;/span&gt;&lt;span class="n"&gt;ubuntu&lt;/span&gt;&lt;span class="err"&gt;@&lt;/span&gt;&lt;span class="nx"&gt;adserver:~&lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;ssh-copy-id&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-i&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;ssh&lt;/span&gt;&lt;span class="nx"&gt;/id_rsa.pub&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;hadoop&lt;/span&gt;&lt;span class="err"&gt;@&lt;/span&gt;&lt;span class="nx"&gt;osdserver-1&lt;/span&gt;&lt;span class="w"&gt; 
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Ks15e7RP--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://img-blog.csdnimg.cn/7bf46ac8daf54943b38a759da9e9f79e.png%3Fx-oss-process%3Dimage/watermark%2Ctype_d3F5LXplbmhlaQ%2Cshadow_50%2Ctext_Q1NETiBA5oyH5YmR%2Csize_20%2Ccolor_FFFFFF%2Ct_70%2Cg_se%2Cx_16" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Ks15e7RP--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://img-blog.csdnimg.cn/7bf46ac8daf54943b38a759da9e9f79e.png%3Fx-oss-process%3Dimage/watermark%2Ctype_d3F5LXplbmhlaQ%2Cshadow_50%2Ctext_Q1NETiBA5oyH5YmR%2Csize_20%2Ccolor_FFFFFF%2Ct_70%2Cg_se%2Cx_16" alt="在这里插入图片描述" width="692" height="408"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--tmJDfQuF--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://img-blog.csdnimg.cn/375987dd4766489d9f94db5012fc3637.png%3Fx-oss-process%3Dimage/watermark%2Ctype_d3F5LXplbmhlaQ%2Cshadow_50%2Ctext_Q1NETiBA5oyH5YmR%2Csize_20%2Ccolor_FFFFFF%2Ct_70%2Cg_se%2Cx_16" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--tmJDfQuF--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://img-blog.csdnimg.cn/375987dd4766489d9f94db5012fc3637.png%3Fx-oss-process%3Dimage/watermark%2Ctype_d3F5LXplbmhlaQ%2Cshadow_50%2Ctext_Q1NETiBA5oyH5YmR%2Csize_20%2Ccolor_FFFFFF%2Ct_70%2Cg_se%2Cx_16" alt="在这里插入图片描述" width="692" height="631"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2 id="3"&gt;3.JDK Hadoop environment&lt;/h2&gt;
&lt;h3&gt;
  
  
  1. Configure JDK environment. Jdk-8u77 is used here
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Download JDK&lt;/strong&gt;    &lt;a href="https://www.oracle.com/java/technologies/javase/javase8-archive-downloads.html"&gt;jdk-8u77-linux-x64.tar.gz&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.oracle.com/java/technologies/javase/javase8-archive-downloads.html"&gt;https://www.oracle.com/java/technologies/javase/javase8-archive-downloads.html&lt;/a&gt;&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--rAMjp0UF--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://img-blog.csdnimg.cn/57b71e87f95a477db5a9ca99a0e284da.png%3Fx-oss-process%3Dimage/watermark%2Ctype_d3F5LXplbmhlaQ%2Cshadow_50%2Ctext_Q1NETiBA5oyH5YmR%2Csize_20%2Ccolor_FFFFFF%2Ct_70%2Cg_se%2Cx_16" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--rAMjp0UF--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://img-blog.csdnimg.cn/57b71e87f95a477db5a9ca99a0e284da.png%3Fx-oss-process%3Dimage/watermark%2Ctype_d3F5LXplbmhlaQ%2Cshadow_50%2Ctext_Q1NETiBA5oyH5YmR%2Csize_20%2Ccolor_FFFFFF%2Ct_70%2Cg_se%2Cx_16" alt="在这里插入图片描述" width="692" height="333"&gt;&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="n"&gt;ubuntu&lt;/span&gt;&lt;span class="err"&gt;@&lt;/span&gt;&lt;span class="nx"&gt;adserver:~&lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;ls&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-lh&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;total&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;173M&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="nt"&gt;-rw-rw-r&lt;/span&gt;&lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ubuntu&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;ubuntu&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;173M&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;Mar&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;28&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;09:11&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;jdk-8u77-linux-x64.tar.gz&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;ubuntu&lt;/span&gt;&lt;span class="err"&gt;@&lt;/span&gt;&lt;span class="nx"&gt;adserver:~&lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;tar&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-zxf&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;jdk-8u77-linux-x64.tar.gz&lt;/span&gt;&lt;span class="w"&gt; 
&lt;/span&gt;&lt;span class="n"&gt;ubuntu&lt;/span&gt;&lt;span class="err"&gt;@&lt;/span&gt;&lt;span class="nx"&gt;adserver:~&lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;ls&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-lh&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;total&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;173M&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;drwxr-xr-x&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;8&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;ubuntu&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;ubuntu&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;4.0K&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;Mar&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;21&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nx"&gt;2016&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;jdk1.8.0_77&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="nt"&gt;-rw-rw-r&lt;/span&gt;&lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ubuntu&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;ubuntu&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;173M&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;Mar&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;28&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;09:11&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;jdk-8u77-linux-x64.tar.gz&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--stMNV4aF--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://img-blog.csdnimg.cn/83da128844b04615955d746f29972a05.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--stMNV4aF--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://img-blog.csdnimg.cn/83da128844b04615955d746f29972a05.png" alt="在这里插入图片描述" width="693" height="196"&gt;&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="n"&gt;ubuntu&lt;/span&gt;&lt;span class="err"&gt;@&lt;/span&gt;&lt;span class="nx"&gt;adserver:~&lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;sudo&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;mkdir&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;/usr/lib/jdk&lt;/span&gt;&lt;span class="w"&gt;      
&lt;/span&gt;&lt;span class="n"&gt;ubuntu&lt;/span&gt;&lt;span class="err"&gt;@&lt;/span&gt;&lt;span class="nx"&gt;adserver:~&lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;sudo&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;mv&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;jdk1.8.0_77/&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;/usr/lib/jdk/&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;ubuntu&lt;/span&gt;&lt;span class="err"&gt;@&lt;/span&gt;&lt;span class="nx"&gt;adserver:~&lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;sudo&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;ls&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;/usr/lib/jdk/&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;jdk1.8.0_77&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--7mhuQx82--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://img-blog.csdnimg.cn/431cedb44ae94f7fb1e60a455d54a807.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--7mhuQx82--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://img-blog.csdnimg.cn/431cedb44ae94f7fb1e60a455d54a807.png" alt="在这里插入图片描述" width="647" height="123"&gt;&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="n"&gt;ubuntu&lt;/span&gt;&lt;span class="err"&gt;@&lt;/span&gt;&lt;span class="nx"&gt;adserver:~&lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;sudo&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;vi&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;/etc/profile&lt;/span&gt;&lt;span class="w"&gt; 
&lt;/span&gt;&lt;span class="n"&gt;Add&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;JDK&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;environment&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="c"&gt;#JDK&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;export&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;JAVA_HOME&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;/usr/lib/jdk/jdk1.8.0_77&lt;/span&gt;&lt;span class="w"&gt; 
&lt;/span&gt;&lt;span class="n"&gt;export&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;JRE_HOME&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nv"&gt;${JAVA_HOME}&lt;/span&gt;&lt;span class="n"&gt;/jre&lt;/span&gt;&lt;span class="w"&gt;  
&lt;/span&gt;&lt;span class="n"&gt;export&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;CLASSPATH&lt;/span&gt;&lt;span class="o"&gt;=.&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nv"&gt;${JAVA_HOME}&lt;/span&gt;&lt;span class="n"&gt;/lib:&lt;/span&gt;&lt;span class="nv"&gt;${JRE_HOME}&lt;/span&gt;&lt;span class="nx"&gt;/lib&lt;/span&gt;&lt;span class="w"&gt;  
&lt;/span&gt;&lt;span class="n"&gt;export&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;PATH&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nv"&gt;${JAVA_HOME}&lt;/span&gt;&lt;span class="n"&gt;/bin:&lt;/span&gt;&lt;span class="nv"&gt;$PATH&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--YqAaDlY5--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://img-blog.csdnimg.cn/7d1970de82c44d9e9daed0f6f297619e.png%3Fx-oss-process%3Dimage/watermark%2Ctype_d3F5LXplbmhlaQ%2Cshadow_50%2Ctext_Q1NETiBA5oyH5YmR%2Csize_20%2Ccolor_FFFFFF%2Ct_70%2Cg_se%2Cx_16" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--YqAaDlY5--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://img-blog.csdnimg.cn/7d1970de82c44d9e9daed0f6f297619e.png%3Fx-oss-process%3Dimage/watermark%2Ctype_d3F5LXplbmhlaQ%2Cshadow_50%2Ctext_Q1NETiBA5oyH5YmR%2Csize_20%2Ccolor_FFFFFF%2Ct_70%2Cg_se%2Cx_16" alt="在这里插入图片描述" width="692" height="552"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--AoVs1auO--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://img-blog.csdnimg.cn/4310ef8b3a80435890ba29e7a1173088.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--AoVs1auO--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://img-blog.csdnimg.cn/4310ef8b3a80435890ba29e7a1173088.png" alt="在这里插入图片描述" width="692" height="122"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--W1DLBuC5--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://img-blog.csdnimg.cn/e58eb0d53f9c417d821011e37ecf15ff.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--W1DLBuC5--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://img-blog.csdnimg.cn/e58eb0d53f9c417d821011e37ecf15ff.png" alt="在这里插入图片描述" width="692" height="163"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  2. Configure Hadoop environment
&lt;/h3&gt;

&lt;p&gt;Download Hadoop&lt;a href="https://archive.apache.org/dist/hadoop/core/hadoop-2.7.2/hadoop-2.7.2.tar.gz"&gt;Hadoop-2.7.2&lt;/a&gt;&lt;br&gt;
Download Link：&lt;br&gt;
&lt;a href="https://archive.apache.org/dist/hadoop/core/hadoop-2.7.2/hadoop-2.7.2.tar.gz"&gt;https://archive.apache.org/dist/hadoop/core/hadoop-2.7.2/hadoop-2.7.2.tar.gz&lt;/a&gt;&lt;/p&gt;
&lt;h4&gt;
  
  
  Unzip：
&lt;/h4&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="n"&gt;ubuntu&lt;/span&gt;&lt;span class="err"&gt;@&lt;/span&gt;&lt;span class="nx"&gt;adserver:~&lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;tar&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-zxf&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;hadoop-2.7.2.tar.gz&lt;/span&gt;&lt;span class="w"&gt; 
&lt;/span&gt;&lt;span class="n"&gt;ubuntu&lt;/span&gt;&lt;span class="err"&gt;@&lt;/span&gt;&lt;span class="nx"&gt;adserver:~&lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;ls&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-lh&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--gi6SURbt--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://img-blog.csdnimg.cn/5c5fe6a266ef40229f6fe74830936012.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--gi6SURbt--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://img-blog.csdnimg.cn/5c5fe6a266ef40229f6fe74830936012.png" alt="在这里插入图片描述" width="692" height="167"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h4&gt;
  
  
  Move Hadoop to /usr/local/ directory&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--u0jXQONJ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://img-blog.csdnimg.cn/5e8f57b974294ef0ab04f723ad527857.png" alt="在这里插入图片描述" width="680" height="173"&gt;
&lt;/h4&gt;
&lt;h4&gt;
  
  
  Add Hadoop environment variable
&lt;/h4&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;sudo&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;vi&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;/etc/profile&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;span class="c"&gt;#HADOOP&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;export&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;HADOOP_HOME&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;/usr/local/hadoop-2.7.2&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="nx"&gt;export&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;PATH&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nv"&gt;$HADOOP_HOME&lt;/span&gt;&lt;span class="n"&gt;/bin:&lt;/span&gt;&lt;span class="nv"&gt;$HADOOP_HOME&lt;/span&gt;&lt;span class="nx"&gt;/sbin:&lt;/span&gt;&lt;span class="nv"&gt;$PATH&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;export&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;HADOOP_CONF_DIR&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nv"&gt;$HADOOP_HOME&lt;/span&gt;&lt;span class="n"&gt;/etc/hadoop&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--56ZWNPBQ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://img-blog.csdnimg.cn/797b9650ceb24d76b2f152b2507f4ccc.png%3Fx-oss-process%3Dimage/watermark%2Ctype_d3F5LXplbmhlaQ%2Cshadow_50%2Ctext_Q1NETiBA5oyH5YmR%2Csize_20%2Ccolor_FFFFFF%2Ct_70%2Cg_se%2Cx_16" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--56ZWNPBQ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://img-blog.csdnimg.cn/797b9650ceb24d76b2f152b2507f4ccc.png%3Fx-oss-process%3Dimage/watermark%2Ctype_d3F5LXplbmhlaQ%2Cshadow_50%2Ctext_Q1NETiBA5oyH5YmR%2Csize_20%2Ccolor_FFFFFF%2Ct_70%2Cg_se%2Cx_16" alt="在这里插入图片描述" width="692" height="603"&gt;&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;vi&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;~/.bashrc&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="c"&gt;#HADOOP&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;export&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;HADOOP_HOME&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;/usr/local/hadoop-2.7.2&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="nx"&gt;export&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;PATH&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nv"&gt;$HADOOP_HOME&lt;/span&gt;&lt;span class="n"&gt;/bin:&lt;/span&gt;&lt;span class="nv"&gt;$HADOOP_HOME&lt;/span&gt;&lt;span class="nx"&gt;/sbin:&lt;/span&gt;&lt;span class="nv"&gt;$PATH&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;export&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;HADOOP_CONF_DIR&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nv"&gt;$HADOOP_HOME&lt;/span&gt;&lt;span class="n"&gt;/etc/hadoop&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--9X7NjiBD--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://img-blog.csdnimg.cn/7351717330864c88b83c47a9ac8b7da3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--9X7NjiBD--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://img-blog.csdnimg.cn/7351717330864c88b83c47a9ac8b7da3.png" alt="在这里插入图片描述" width="692" height="109"&gt;&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;source&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;/etc/profile&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;source&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;~/.bashrc&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;hadoop&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;version&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--2Yj_b6rs--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://img-blog.csdnimg.cn/57d372f23d2b4109bfdc25758a2878cc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--2Yj_b6rs--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://img-blog.csdnimg.cn/57d372f23d2b4109bfdc25758a2878cc.png" alt="在这里插入图片描述" width="692" height="184"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2 id="4"&gt;4.Hadoop configuration file modification&lt;/h2&gt;

&lt;h3&gt;
  
  
  Modify Hadoop configuration file
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Modify the /hadoop-2.7.2/etc/hadoop directory hadoop-env.sh、yarn-env.sh、slaves、core-site.xml、hdfs-site.xml、mapred-site.xml、yarn-site.xml&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Create the tmp folder and its subdirectories under the Hadoop directory
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="n"&gt;ubuntu&lt;/span&gt;&lt;span class="err"&gt;@&lt;/span&gt;&lt;span class="nx"&gt;adserver:~&lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;sudo&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;mkdir&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-p&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;/usr/local/hadoop-2.7.2/tmp/dfs/data&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;ubuntu&lt;/span&gt;&lt;span class="err"&gt;@&lt;/span&gt;&lt;span class="nx"&gt;adserver:~&lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;sudo&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;mkdir&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-p&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;/usr/local/hadoop-2.7.2/tmp/dfs/name&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--lTYwNcaQ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://img-blog.csdnimg.cn/16fd695fec634ddd877847de9f9c2698.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--lTYwNcaQ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://img-blog.csdnimg.cn/16fd695fec634ddd877847de9f9c2698.png" alt="在这里插入图片描述" width="692" height="148"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Modify profile:
&lt;/h2&gt;

&lt;h4&gt;
  
  
  First enter the corresponding folder
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="n"&gt;ubuntu&lt;/span&gt;&lt;span class="err"&gt;@&lt;/span&gt;&lt;span class="nx"&gt;adserver:~&lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;cd&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;/usr/local/hadoop-2.7.2/etc/hadoop/&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--uChYDGLT--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://img-blog.csdnimg.cn/8c49417fe2fc42779397763b275f2b42.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--uChYDGLT--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://img-blog.csdnimg.cn/8c49417fe2fc42779397763b275f2b42.png" alt="在这里插入图片描述" width="692" height="136"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Add Java_ Home to Hadoop environment profile
&lt;/h3&gt;

&lt;h5&gt;
  
  
  ① Add Java home to Hadoop env sh
&lt;/h5&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="n"&gt;export&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;JAVA_HOME&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;/usr/lib/jdk/jdk1.8.0_77&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--3GE3F76h--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://img-blog.csdnimg.cn/74898c59ace947fa929e38d1705c7233.png%3Fx-oss-process%3Dimage/watermark%2Ctype_d3F5LXplbmhlaQ%2Cshadow_50%2Ctext_Q1NETiBA5oyH5YmR%2Csize_20%2Ccolor_FFFFFF%2Ct_70%2Cg_se%2Cx_16" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--3GE3F76h--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://img-blog.csdnimg.cn/74898c59ace947fa929e38d1705c7233.png%3Fx-oss-process%3Dimage/watermark%2Ctype_d3F5LXplbmhlaQ%2Cshadow_50%2Ctext_Q1NETiBA5oyH5YmR%2Csize_20%2Ccolor_FFFFFF%2Ct_70%2Cg_se%2Cx_16" alt="在这里插入图片描述" width="692" height="509"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h5&gt;
  
  
  ② Add Java home to yarn env SH, just add it directly in the first line
&lt;/h5&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="n"&gt;export&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;JAVA_HOME&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;/usr/lib/jdk/jdk1.8.0_77&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--SE8MT_ED--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://img-blog.csdnimg.cn/113bea062e014d59af4f33423b89c381.png%3Fx-oss-process%3Dimage/watermark%2Ctype_d3F5LXplbmhlaQ%2Cshadow_50%2Ctext_Q1NETiBA5oyH5YmR%2Csize_20%2Ccolor_FFFFFF%2Ct_70%2Cg_se%2Cx_16" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--SE8MT_ED--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://img-blog.csdnimg.cn/113bea062e014d59af4f33423b89c381.png%3Fx-oss-process%3Dimage/watermark%2Ctype_d3F5LXplbmhlaQ%2Cshadow_50%2Ctext_Q1NETiBA5oyH5YmR%2Csize_20%2Ccolor_FFFFFF%2Ct_70%2Cg_se%2Cx_16" alt="在这里插入图片描述" width="692" height="209"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h5&gt;
  
  
  ③ Add slave hostname to slave
&lt;/h5&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="n"&gt;ubuntu&lt;/span&gt;&lt;span class="err"&gt;@&lt;/span&gt;&lt;span class="nx"&gt;adserver:/usr/local/hadoop-2.7.2/etc/hadoop&lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;vi&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;slaves&lt;/span&gt;&lt;span class="w"&gt; 
&lt;/span&gt;&lt;span class="n"&gt;monserver&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="nx"&gt;osdserver-1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--arGO7T-4--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://img-blog.csdnimg.cn/2e6f40e9ca52438f9a92879cb3496aeb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--arGO7T-4--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://img-blog.csdnimg.cn/2e6f40e9ca52438f9a92879cb3496aeb.png" alt="在这里插入图片描述" width="692" height="148"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Modify the corresponding configuration file
&lt;/h3&gt;

&lt;h5&gt;
  
  
  ④Modification core-site.xml
&lt;/h5&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="n"&gt;ubuntu&lt;/span&gt;&lt;span class="err"&gt;@&lt;/span&gt;&lt;span class="nx"&gt;adserver:/usr/local/hadoop-2.7.2/etc/hadoop&lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;vi&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;core-site.xml&lt;/span&gt;&lt;span class="w"&gt; 
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Add the following contents to &lt;code&gt;&amp;lt;configuration&amp;gt;&amp;lt;/configuration&amp;gt;&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="err"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;property&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt;
                &lt;/span&gt;&lt;span class="err"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;&lt;/span&gt;&lt;span class="nx"&gt;fs.defaultFS&lt;/span&gt;&lt;span class="err"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;/name&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt;
                &lt;/span&gt;&lt;span class="err"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;value&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;&lt;/span&gt;&lt;span class="nx"&gt;hdfs://adserver:8020&lt;/span&gt;&lt;span class="err"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;/value&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt;
       &lt;/span&gt;&lt;span class="err"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;/property&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt;
       &lt;/span&gt;&lt;span class="err"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;property&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt;
               &lt;/span&gt;&lt;span class="err"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;&lt;/span&gt;&lt;span class="nx"&gt;hadoop.tmp.dir&lt;/span&gt;&lt;span class="err"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;/name&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt;
               &lt;/span&gt;&lt;span class="err"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;value&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;&lt;/span&gt;&lt;span class="nx"&gt;file:/usr/local/hadoop-2.7.2/tmp&lt;/span&gt;&lt;span class="err"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;/value&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt;
               &lt;/span&gt;&lt;span class="err"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;description&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;&lt;/span&gt;&lt;span class="nx"&gt;Abase&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;for&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;other&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;temporary&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="nx"&gt;directories.&lt;/span&gt;&lt;span class="err"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;/description&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt;
       &lt;/span&gt;&lt;span class="err"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;/property&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--OyWI1bNe--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://img-blog.csdnimg.cn/8b42e28996f24e1ba9632724f694bdff.png%3Fx-oss-process%3Dimage/watermark%2Ctype_d3F5LXplbmhlaQ%2Cshadow_50%2Ctext_Q1NETiBA5oyH5YmR%2Csize_20%2Ccolor_FFFFFF%2Ct_70%2Cg_se%2Cx_16" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--OyWI1bNe--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://img-blog.csdnimg.cn/8b42e28996f24e1ba9632724f694bdff.png%3Fx-oss-process%3Dimage/watermark%2Ctype_d3F5LXplbmhlaQ%2Cshadow_50%2Ctext_Q1NETiBA5oyH5YmR%2Csize_20%2Ccolor_FFFFFF%2Ct_70%2Cg_se%2Cx_16" alt="在这里插入图片描述" width="693" height="515"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h5&gt;
  
  
  ⑤Modify hdfs-site.xml file,
&lt;/h5&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="n"&gt;ubuntu&lt;/span&gt;&lt;span class="err"&gt;@&lt;/span&gt;&lt;span class="nx"&gt;adserver:/usr/local/hadoop-2.7.2/etc/hadoop&lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;vi&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;hdfs-site.xml&lt;/span&gt;&lt;span class="w"&gt; 
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Add the following contents to &lt;code&gt;&amp;lt;configuration&amp;gt;&amp;lt;/configuration&amp;gt;&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="err"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;property&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt;
                &lt;/span&gt;&lt;span class="err"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;&lt;/span&gt;&lt;span class="nx"&gt;dfs.namenode.secondary.http-address&lt;/span&gt;&lt;span class="err"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;/name&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt;
               &lt;/span&gt;&lt;span class="err"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;value&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;&lt;/span&gt;&lt;span class="nx"&gt;adserver:50090&lt;/span&gt;&lt;span class="err"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;/value&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt;
       &lt;/span&gt;&lt;span class="err"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;/property&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt;
     &lt;/span&gt;&lt;span class="err"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;property&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt;
             &lt;/span&gt;&lt;span class="err"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;&lt;/span&gt;&lt;span class="nx"&gt;dfs.namenode.name.dir&lt;/span&gt;&lt;span class="err"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;/name&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt;
             &lt;/span&gt;&lt;span class="err"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;value&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;&lt;/span&gt;&lt;span class="nx"&gt;file:/usr/local/hadoop-2.7.2/tmp/dfs/name&lt;/span&gt;&lt;span class="err"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;/value&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt;
       &lt;/span&gt;&lt;span class="err"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;/property&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="err"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;property&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt;
              &lt;/span&gt;&lt;span class="err"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;&lt;/span&gt;&lt;span class="nx"&gt;dfs.datanode.data.dir&lt;/span&gt;&lt;span class="err"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;/name&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt;
              &lt;/span&gt;&lt;span class="err"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;value&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;&lt;/span&gt;&lt;span class="nx"&gt;file:/usr/local/hadoop-2.7.2/tmp/dfs/data&lt;/span&gt;&lt;span class="err"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;/value&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt;
       &lt;/span&gt;&lt;span class="err"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;/property&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt;
       &lt;/span&gt;&lt;span class="err"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;property&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt;
               &lt;/span&gt;&lt;span class="err"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;&lt;/span&gt;&lt;span class="nx"&gt;dfs.replication&lt;/span&gt;&lt;span class="err"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;/name&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt;
               &lt;/span&gt;&lt;span class="err"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;value&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;&lt;/span&gt;&lt;span class="nx"&gt;3&lt;/span&gt;&lt;span class="err"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;/value&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="err"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;/property&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="err"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;property&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt;
                 &lt;/span&gt;&lt;span class="err"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;&lt;/span&gt;&lt;span class="nx"&gt;dfs.webhdfs.enabled&lt;/span&gt;&lt;span class="err"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;/name&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt;
                  &lt;/span&gt;&lt;span class="err"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;value&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;&lt;/span&gt;&lt;span class="nx"&gt;true&lt;/span&gt;&lt;span class="err"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;/value&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt;
         &lt;/span&gt;&lt;span class="err"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;/property&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--suc1ZoSr--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://img-blog.csdnimg.cn/84f72f20a0a64aff92e2f9a25141cfeb.png%3Fx-oss-process%3Dimage/watermark%2Ctype_d3F5LXplbmhlaQ%2Cshadow_50%2Ctext_Q1NETiBA5oyH5YmR%2Csize_20%2Ccolor_FFFFFF%2Ct_70%2Cg_se%2Cx_16" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--suc1ZoSr--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://img-blog.csdnimg.cn/84f72f20a0a64aff92e2f9a25141cfeb.png%3Fx-oss-process%3Dimage/watermark%2Ctype_d3F5LXplbmhlaQ%2Cshadow_50%2Ctext_Q1NETiBA5oyH5YmR%2Csize_20%2Ccolor_FFFFFF%2Ct_70%2Cg_se%2Cx_16" alt="在这里插入图片描述" width="692" height="594"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h5&gt;
  
  
  ⑥Modify mapred-site,xml, you need to copy the file as mapred-site.xml, and then
&lt;/h5&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="n"&gt;ubuntu&lt;/span&gt;&lt;span class="err"&gt;@&lt;/span&gt;&lt;span class="nx"&gt;adserver:/usr/local/hadoop-2.7.2/etc/hadoop&lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;cp&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;mapred-site.xml.template&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;mapred-site.xml&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;ubuntu&lt;/span&gt;&lt;span class="err"&gt;@&lt;/span&gt;&lt;span class="nx"&gt;adserver:/usr/local/hadoop-2.7.2/etc/hadoop&lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;vi&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;mapred-site.xml&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Add the following contents to &lt;code&gt;&amp;lt;configuration&amp;gt;&amp;lt;/configuration&amp;gt;&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="err"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;property&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt;
                &lt;/span&gt;&lt;span class="err"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;&lt;/span&gt;&lt;span class="nx"&gt;mapreduce.framework.name&lt;/span&gt;&lt;span class="err"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;/name&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt;
                &lt;/span&gt;&lt;span class="err"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;value&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;&lt;/span&gt;&lt;span class="nx"&gt;yarn&lt;/span&gt;&lt;span class="err"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;/value&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="err"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;/property&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="err"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;property&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt;
                &lt;/span&gt;&lt;span class="err"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;&lt;/span&gt;&lt;span class="nx"&gt;mapreduce.jobhistory.address&lt;/span&gt;&lt;span class="err"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;/name&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt;
                &lt;/span&gt;&lt;span class="err"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;value&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;&lt;/span&gt;&lt;span class="nx"&gt;adserver:10020&lt;/span&gt;&lt;span class="err"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;/value&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="err"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;/property&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="err"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;property&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt;
                &lt;/span&gt;&lt;span class="err"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;&lt;/span&gt;&lt;span class="nx"&gt;mapreduce.jobhistory.webapp.address&lt;/span&gt;&lt;span class="err"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;/name&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt;
                &lt;/span&gt;&lt;span class="err"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;value&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;&lt;/span&gt;&lt;span class="nx"&gt;adserver:19888&lt;/span&gt;&lt;span class="err"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;/value&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="err"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;/property&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--xQaPJTM4--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://img-blog.csdnimg.cn/0d544b1a0ce8435e9f2d342591fc1fc8.png%3Fx-oss-process%3Dimage/watermark%2Ctype_d3F5LXplbmhlaQ%2Cshadow_50%2Ctext_Q1NETiBA5oyH5YmR%2Csize_20%2Ccolor_FFFFFF%2Ct_70%2Cg_se%2Cx_16" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--xQaPJTM4--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://img-blog.csdnimg.cn/0d544b1a0ce8435e9f2d342591fc1fc8.png%3Fx-oss-process%3Dimage/watermark%2Ctype_d3F5LXplbmhlaQ%2Cshadow_50%2Ctext_Q1NETiBA5oyH5YmR%2Csize_20%2Ccolor_FFFFFF%2Ct_70%2Cg_se%2Cx_16" alt="在这里插入图片描述" width="692" height="561"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h5&gt;
  
  
  ⑦、Modify yarn-site.xml
&lt;/h5&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="n"&gt;ubuntu&lt;/span&gt;&lt;span class="err"&gt;@&lt;/span&gt;&lt;span class="nx"&gt;adserver:/usr/local/hadoop-2.7.2/etc/hadoop&lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;vi&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;yarn-site.xml&lt;/span&gt;&lt;span class="w"&gt; 
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Add the following contents to &lt;code&gt;&amp;lt;configuration&amp;gt;&amp;lt;/configuration&amp;gt;&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="err"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;property&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="err"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;&lt;/span&gt;&lt;span class="nx"&gt;yarn.nodemanager.aux-services&lt;/span&gt;&lt;span class="err"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;/name&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="err"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;value&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;&lt;/span&gt;&lt;span class="nx"&gt;mapreduce_shuffle&lt;/span&gt;&lt;span class="err"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;/value&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="err"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;/property&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="err"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;property&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="err"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;&lt;/span&gt;&lt;span class="nx"&gt;yarn.resourcemanager.scheduler.address&lt;/span&gt;&lt;span class="err"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;/name&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="err"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;value&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;&lt;/span&gt;&lt;span class="nx"&gt;adserver:8030&lt;/span&gt;&lt;span class="err"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;/value&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="err"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;/property&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="err"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;property&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="err"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;&lt;/span&gt;&lt;span class="nx"&gt;yarn.resourcemanager.address&lt;/span&gt;&lt;span class="err"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;/name&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="err"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;value&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;&lt;/span&gt;&lt;span class="nx"&gt;adserver:8032&lt;/span&gt;&lt;span class="err"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;/value&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="err"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;/property&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="err"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;property&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="err"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;&lt;/span&gt;&lt;span class="nx"&gt;yarn.resourcemanager.resource-tracker.address&lt;/span&gt;&lt;span class="err"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;/name&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="err"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;value&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;&lt;/span&gt;&lt;span class="nx"&gt;adserver:8031&lt;/span&gt;&lt;span class="err"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;/value&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="err"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;/property&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="err"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;property&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="err"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;&lt;/span&gt;&lt;span class="nx"&gt;yarn.resourcemanager.admin.address&lt;/span&gt;&lt;span class="err"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;/name&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="err"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;value&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;&lt;/span&gt;&lt;span class="nx"&gt;adserver:8033&lt;/span&gt;&lt;span class="err"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;/value&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="err"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;/property&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="err"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;property&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt;
     &lt;/span&gt;&lt;span class="err"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;&lt;/span&gt;&lt;span class="nx"&gt;yarn.resourcemanager.webapp.address&lt;/span&gt;&lt;span class="err"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;/name&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt;
     &lt;/span&gt;&lt;span class="err"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;value&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;&lt;/span&gt;&lt;span class="nx"&gt;adserver:8088&lt;/span&gt;&lt;span class="err"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;/value&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="err"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;/property&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--V5WjYj6P--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://img-blog.csdnimg.cn/ad4ab8a57c8e4e52b87d51ac25d515b4.png%3Fx-oss-process%3Dimage/watermark%2Ctype_d3F5LXplbmhlaQ%2Cshadow_50%2Ctext_Q1NETiBA5oyH5YmR%2Csize_20%2Ccolor_FFFFFF%2Ct_70%2Cg_se%2Cx_16" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--V5WjYj6P--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://img-blog.csdnimg.cn/ad4ab8a57c8e4e52b87d51ac25d515b4.png%3Fx-oss-process%3Dimage/watermark%2Ctype_d3F5LXplbmhlaQ%2Cshadow_50%2Ctext_Q1NETiBA5oyH5YmR%2Csize_20%2Ccolor_FFFFFF%2Ct_70%2Cg_se%2Cx_16" alt="在这里插入图片描述" width="693" height="447"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  4.Use the SCP command to add /etc/hosts, /etc/profile, ~/.bashrc, JDK and Hadoop are distributed to two slave nodes respectively. Here is only a demonstration of copying to monserver
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="n"&gt;ubuntu&lt;/span&gt;&lt;span class="err"&gt;@&lt;/span&gt;&lt;span class="nx"&gt;adserver:~&lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;scp&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;/etc/hosts&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;ubuntu&lt;/span&gt;&lt;span class="err"&gt;@&lt;/span&gt;&lt;span class="nx"&gt;monserver:~/&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;ubuntu&lt;/span&gt;&lt;span class="err"&gt;@&lt;/span&gt;&lt;span class="nx"&gt;adserver:~&lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;scp&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-r&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;/etc/profile&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;ubuntu&lt;/span&gt;&lt;span class="err"&gt;@&lt;/span&gt;&lt;span class="nx"&gt;monserver:~/&lt;/span&gt;&lt;span class="w"&gt;           
&lt;/span&gt;&lt;span class="n"&gt;ubuntu&lt;/span&gt;&lt;span class="err"&gt;@&lt;/span&gt;&lt;span class="nx"&gt;adserver:~&lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;scp&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-r&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;bashrc&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nx"&gt;ubuntu&lt;/span&gt;&lt;span class="err"&gt;@&lt;/span&gt;&lt;span class="nx"&gt;monserver:~/&lt;/span&gt;&lt;span class="w"&gt;                 
&lt;/span&gt;&lt;span class="n"&gt;ubuntu&lt;/span&gt;&lt;span class="err"&gt;@&lt;/span&gt;&lt;span class="nx"&gt;adserver:~&lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;scp&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-r&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;/usr/local/hadoop-2.7.2/&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nx"&gt;ubuntu&lt;/span&gt;&lt;span class="err"&gt;@&lt;/span&gt;&lt;span class="nx"&gt;monserver:~/&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;ubuntu&lt;/span&gt;&lt;span class="err"&gt;@&lt;/span&gt;&lt;span class="nx"&gt;adserver:~&lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;scp&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-r&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;/usr/lib/jdk/&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nx"&gt;ubuntu&lt;/span&gt;&lt;span class="err"&gt;@&lt;/span&gt;&lt;span class="nx"&gt;monserver:~/&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--AGtFvQc7--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://img-blog.csdnimg.cn/0adfd1eb6c2049ba8cde10cdf0a6aa35.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--AGtFvQc7--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://img-blog.csdnimg.cn/0adfd1eb6c2049ba8cde10cdf0a6aa35.png" alt="在这里插入图片描述" width="692" height="33"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Qv3IBmp---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://img-blog.csdnimg.cn/be3ad94f262c4507bc1c1b1c991b76fb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Qv3IBmp---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://img-blog.csdnimg.cn/be3ad94f262c4507bc1c1b1c991b76fb.png" alt="在这里插入图片描述" width="692" height="180"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--xWeAEOFw--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://img-blog.csdnimg.cn/0e761e981a3947a8b8dd1af425d98e9d.png%3Fx-oss-process%3Dimage/watermark%2Ctype_d3F5LXplbmhlaQ%2Cshadow_50%2Ctext_Q1NETiBA5oyH5YmR%2Csize_20%2Ccolor_FFFFFF%2Ct_70%2Cg_se%2Cx_16" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--xWeAEOFw--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://img-blog.csdnimg.cn/0e761e981a3947a8b8dd1af425d98e9d.png%3Fx-oss-process%3Dimage/watermark%2Ctype_d3F5LXplbmhlaQ%2Cshadow_50%2Ctext_Q1NETiBA5oyH5YmR%2Csize_20%2Ccolor_FFFFFF%2Ct_70%2Cg_se%2Cx_16" alt="在这里插入图片描述" width="692" height="246"&gt;&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="n"&gt;ubuntu&lt;/span&gt;&lt;span class="err"&gt;@&lt;/span&gt;&lt;span class="nx"&gt;monserver:~&lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;sudo&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;mv&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;hosts&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;/etc/hosts&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;ubuntu&lt;/span&gt;&lt;span class="err"&gt;@&lt;/span&gt;&lt;span class="nx"&gt;monserver:~&lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;sudo&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;mv&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;hadoop-2.7.2/&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;/usr/local/&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;ubuntu&lt;/span&gt;&lt;span class="err"&gt;@&lt;/span&gt;&lt;span class="nx"&gt;monserver:~&lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;sudo&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;mv&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;jdk/&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;/usr/lib/&lt;/span&gt;&lt;span class="w"&gt;           
&lt;/span&gt;&lt;span class="n"&gt;ubuntu&lt;/span&gt;&lt;span class="err"&gt;@&lt;/span&gt;&lt;span class="nx"&gt;monserver:~&lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;sudo&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;update-alternatives&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;--install&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;/usr/bin/java&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;java&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;/usr/lib/jdk/jdk1.8.0_77/bin/java&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;300&lt;/span&gt;&lt;span class="w"&gt; 
&lt;/span&gt;&lt;span class="n"&gt;ubuntu&lt;/span&gt;&lt;span class="err"&gt;@&lt;/span&gt;&lt;span class="nx"&gt;monserver:~&lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;sudo&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;update-alternatives&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;--install&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;/usr/bin/javac&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;javac&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;/usr/lib/jdk/jdk1.8.0_77/bin/javac&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;300&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;ubuntu&lt;/span&gt;&lt;span class="err"&gt;@&lt;/span&gt;&lt;span class="nx"&gt;monserver:~&lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;source&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;/etc/profile&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;ubuntu&lt;/span&gt;&lt;span class="err"&gt;@&lt;/span&gt;&lt;span class="nx"&gt;monserver:~&lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;source&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;bashrc&lt;/span&gt;&lt;span class="w"&gt;     
&lt;/span&gt;&lt;span class="n"&gt;ubuntu&lt;/span&gt;&lt;span class="err"&gt;@&lt;/span&gt;&lt;span class="nx"&gt;monserver:~&lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;java&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-version&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;ubuntu&lt;/span&gt;&lt;span class="err"&gt;@&lt;/span&gt;&lt;span class="nx"&gt;monserver:~&lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;hadoop&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;version&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--5K5ytEAB--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://img-blog.csdnimg.cn/b057c5ed66ce467c91c2e1d57bc97a41.png%3Fx-oss-process%3Dimage/watermark%2Ctype_d3F5LXplbmhlaQ%2Cshadow_50%2Ctext_Q1NETiBA5oyH5YmR%2Csize_20%2Ccolor_FFFFFF%2Ct_70%2Cg_se%2Cx_16" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--5K5ytEAB--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://img-blog.csdnimg.cn/b057c5ed66ce467c91c2e1d57bc97a41.png%3Fx-oss-process%3Dimage/watermark%2Ctype_d3F5LXplbmhlaQ%2Cshadow_50%2Ctext_Q1NETiBA5oyH5YmR%2Csize_20%2Ccolor_FFFFFF%2Ct_70%2Cg_se%2Cx_16" alt="在这里插入图片描述" width="692" height="291"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--LnucOEzn--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://img-blog.csdnimg.cn/82e6cee3c57a4c37b1d5bb90be80b8e0.png%3Fx-oss-process%3Dimage/watermark%2Ctype_d3F5LXplbmhlaQ%2Cshadow_50%2Ctext_Q1NETiBA5oyH5YmR%2Csize_20%2Ccolor_FFFFFF%2Ct_70%2Cg_se%2Cx_16" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--LnucOEzn--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://img-blog.csdnimg.cn/82e6cee3c57a4c37b1d5bb90be80b8e0.png%3Fx-oss-process%3Dimage/watermark%2Ctype_d3F5LXplbmhlaQ%2Cshadow_50%2Ctext_Q1NETiBA5oyH5YmR%2Csize_20%2Ccolor_FFFFFF%2Ct_70%2Cg_se%2Cx_16" alt="在这里插入图片描述" width="692" height="311"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h4&gt;
  
  
  Set the folder permissions of all nodes hadoop-2.7.2 to 0777：
&lt;/h4&gt;
&lt;h4&gt;
  
  
  Set the folder permissions of all nodes hadoop-2.7.2 to 0777：
&lt;/h4&gt;
&lt;h4&gt;
  
  
  Set the folder permissions of all nodes hadoop-2.7.2 to 0777：
&lt;/h4&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="n"&gt;ubuntu&lt;/span&gt;&lt;span class="err"&gt;@&lt;/span&gt;&lt;span class="nx"&gt;adserver:~&lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nx"&gt;sudo&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;chmod&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-R&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;0777&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;/usr/local/hadoop-2.7.2&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;ubuntu&lt;/span&gt;&lt;span class="err"&gt;@&lt;/span&gt;&lt;span class="nx"&gt;monserver:~&lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nx"&gt;sudo&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;chmod&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-R&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;0777&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;/usr/local/hadoop-2.7.2&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;ubuntu&lt;/span&gt;&lt;span class="err"&gt;@&lt;/span&gt;&lt;span class="nx"&gt;osdserver-1:~&lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nx"&gt;sudo&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;chmod&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-R&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;0777&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;/usr/local/hadoop-2.7.2&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--6i78R2Ql--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://img-blog.csdnimg.cn/2d75d739d1fa4d4b9659990cc030f847.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--6i78R2Ql--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://img-blog.csdnimg.cn/2d75d739d1fa4d4b9659990cc030f847.png" alt="在这里插入图片描述" width="692" height="135"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2 id="5"&gt;5.Start Hadoop cluster (all in AdServer operation)&lt;/h2&gt;
&lt;h3&gt;
  
  
  ① initialization namenode
&lt;/h3&gt;

&lt;p&gt;ubuntu@adserver:~$ hadoop namenode -format &lt;br&gt;
Note: initialization is required for the first run, but not after.&lt;br&gt;
If it runs successfully, it should return exiting with status 0 and prompt shutting down namenode at AdServer/xxx.xxx.xxx.XX (IP address of AdServer). The specific results are shown in the figure below：&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--rP0zFThg--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://img-blog.csdnimg.cn/9b24d6a5116749cdb148116e82a47501.png%3Fx-oss-process%3Dimage/watermark%2Ctype_d3F5LXplbmhlaQ%2Cshadow_50%2Ctext_Q1NETiBA5oyH5YmR%2Csize_20%2Ccolor_FFFFFF%2Ct_70%2Cg_se%2Cx_16" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--rP0zFThg--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://img-blog.csdnimg.cn/9b24d6a5116749cdb148116e82a47501.png%3Fx-oss-process%3Dimage/watermark%2Ctype_d3F5LXplbmhlaQ%2Cshadow_50%2Ctext_Q1NETiBA5oyH5YmR%2Csize_20%2Ccolor_FFFFFF%2Ct_70%2Cg_se%2Cx_16" alt="在这里插入图片描述" width="692" height="433"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  ②Start Hadoop daemons (namenode, datanode, ResourceManager, nodemanager, etc.)）
&lt;/h3&gt;
&lt;h4&gt;
  
  
  A、Start namenode, secondarynamenode and datanode first
&lt;/h4&gt;
&lt;h5&gt;
  
  
  Execute on the AdServer node
&lt;/h5&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="n"&gt;ubuntu&lt;/span&gt;&lt;span class="err"&gt;@&lt;/span&gt;&lt;span class="nx"&gt;adserver:~&lt;/span&gt;&lt;span class="nv"&gt;$start&lt;/span&gt;&lt;span class="nt"&gt;-dfs&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;sh&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--V9sG9kDM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://img-blog.csdnimg.cn/90904b2e309246e0a41e80983c14261c.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--V9sG9kDM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://img-blog.csdnimg.cn/90904b2e309246e0a41e80983c14261c.png" alt="在这里插入图片描述" width="692" height="107"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h5&gt;
  
  
  At this time, the processes running on the master node are：NameNode、SecondaryNameNode
&lt;/h5&gt;
&lt;h5&gt;
  
  
  At this time, the processes running on the slave node are：DataNode
&lt;/h5&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--o0QDkDKK--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://img-blog.csdnimg.cn/9e3f90f0b6c6401a92b3dc27cd6febc4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--o0QDkDKK--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://img-blog.csdnimg.cn/9e3f90f0b6c6401a92b3dc27cd6febc4.png" alt="在这里插入图片描述" width="599" height="178"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Vm_tis0F--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://img-blog.csdnimg.cn/fd01774fcabb4d9bb815e2b693ede09c.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Vm_tis0F--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://img-blog.csdnimg.cn/fd01774fcabb4d9bb815e2b693ede09c.png" alt="在这里插入图片描述" width="554" height="144"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h4&gt;
  
  
  B、Start ResourceManager、NodeManager
&lt;/h4&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;start-yarn.sh&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--4zgYXimz--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://img-blog.csdnimg.cn/57ad6bc23bdd4d8ea16a8b0e7fb256af.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--4zgYXimz--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://img-blog.csdnimg.cn/57ad6bc23bdd4d8ea16a8b0e7fb256af.png" alt="在这里插入图片描述" width="692" height="66"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h5&gt;
  
  
  Yarn is separated from MapReduce and is responsible for resource management and task scheduling. Yarn runs on MapReduce and provides high availability and scalability
&lt;/h5&gt;
&lt;h5&gt;
  
  
  At this time, the processes running on the master node are：NameNode、SecondaryNameNode、ResourceManager
&lt;/h5&gt;
&lt;h5&gt;
  
  
  The processes running on the slave node are：DataNode、NodeManager
&lt;/h5&gt;
&lt;h4&gt;
  
  
  C、Start JobHistoryServer
&lt;/h4&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;mr-jobhistory-daemon.sh&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;start&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;historyserver&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h5&gt;
  
  
  Note: a jobhistoryserver process will be added to the master node
&lt;/h5&gt;
&lt;h3&gt;
  
  
  After TMP and logP directories on each node are created several times, be sure to delete them again
&lt;/h3&gt;

&lt;p&gt;View the operation status of three nodes&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="n"&gt;ubuntu&lt;/span&gt;&lt;span class="err"&gt;@&lt;/span&gt;&lt;span class="nx"&gt;adserver:~&lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;jps&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;ubuntu&lt;/span&gt;&lt;span class="err"&gt;@&lt;/span&gt;&lt;span class="nx"&gt;adserver:~&lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;ssh&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;monserver&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"/usr/lib/jdk/jdk1.8.0_77/bin/jps"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;ubuntu&lt;/span&gt;&lt;span class="err"&gt;@&lt;/span&gt;&lt;span class="nx"&gt;adserver:~&lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;ssh&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;osdserver-1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"/usr/lib/jdk/jdk1.8.0_77/bin/jps"&lt;/span&gt;&lt;span class="w"&gt;   
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--UfIyLByc--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://img-blog.csdnimg.cn/8bf1b4b4943d4edf82e37852f5391fa0.png%3Fx-oss-process%3Dimage/watermark%2Ctype_d3F5LXplbmhlaQ%2Cshadow_50%2Ctext_Q1NETiBA5oyH5YmR%2Csize_20%2Ccolor_FFFFFF%2Ct_70%2Cg_se%2Cx_16" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--UfIyLByc--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://img-blog.csdnimg.cn/8bf1b4b4943d4edf82e37852f5391fa0.png%3Fx-oss-process%3Dimage/watermark%2Ctype_d3F5LXplbmhlaQ%2Cshadow_50%2Ctext_Q1NETiBA5oyH5YmR%2Csize_20%2Ccolor_FFFFFF%2Ct_70%2Cg_se%2Cx_16" alt="在这里插入图片描述" width="800" height="442"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--unx-P0xY--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://img-blog.csdnimg.cn/ea1d8b53460a4ebf87be7c2cd158b6b9.png%3Fx-oss-process%3Dimage/watermark%2Ctype_d3F5LXplbmhlaQ%2Cshadow_50%2Ctext_Q1NETiBA5oyH5YmR%2Csize_20%2Ccolor_FFFFFF%2Ct_70%2Cg_se%2Cx_16" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--unx-P0xY--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://img-blog.csdnimg.cn/ea1d8b53460a4ebf87be7c2cd158b6b9.png%3Fx-oss-process%3Dimage/watermark%2Ctype_d3F5LXplbmhlaQ%2Cshadow_50%2Ctext_Q1NETiBA5oyH5YmR%2Csize_20%2Ccolor_FFFFFF%2Ct_70%2Cg_se%2Cx_16" alt="在这里插入图片描述" width="800" height="415"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  If this article is helpful to you, please like it and Follow Me. Thank you,Have a Nice Day!!!!!
&lt;/h1&gt;

</description>
      <category>awscommunity</category>
      <category>ubuntu</category>
      <category>hadoop</category>
    </item>
    <item>
      <title>How To SSH Your ECS Server(Running Fargate)</title>
      <dc:creator>Maverick Fung</dc:creator>
      <pubDate>Wed, 12 Jan 2022 15:38:30 +0000</pubDate>
      <link>https://dev.to/mavr/how-to-ssh-your-ecs-serverrunning-fargate-4587</link>
      <guid>https://dev.to/mavr/how-to-ssh-your-ecs-serverrunning-fargate-4587</guid>
      <description>&lt;h1&gt;
  
  
  1.Install ACLI V2
&lt;/h1&gt;

&lt;h1&gt;
  
  
  2.Install and Run Docker On EC2
&lt;/h1&gt;

&lt;h1&gt;
  
  
  3.Use ECR create repository
&lt;/h1&gt;

&lt;h1&gt;
  
  
  4.Attach IAM Role To EC2
&lt;/h1&gt;

&lt;h1&gt;
  
  
  5.Build and Push Image to Repository
&lt;/h1&gt;

&lt;h1&gt;
  
  
  6.Create ECS Task Definition
&lt;/h1&gt;

&lt;h1&gt;
  
  
  7.Create Cluster
&lt;/h1&gt;

&lt;h1&gt;
  
  
  8.Create Service
&lt;/h1&gt;

&lt;h1&gt;
  
  
  9.Use SSH Tool connect your container
&lt;/h1&gt;

&lt;h2 id="1"&gt;1.Install ACLI V2 On Ami-2&lt;/h2&gt;

&lt;p&gt;In here,I use Amazon Linux 2, t3.micro instance type.&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F81pft0xoa0r89hoks191.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F81pft0xoa0r89hoks191.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;First,We need give the instance right IAM Role&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnxx7bsi71q1aimqpnodb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnxx7bsi71q1aimqpnodb.png" alt="Image description"&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;Install ACLI V2,I will put the code&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;rm -rf /bin/aws
rm -rf /bin/aws*
curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
unzip awscliv2.zip
sudo ./aws/install
ln -s /usr/local/bin/aws /bin/aws

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxmtwqlreo80fsp6fm4fj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxmtwqlreo80fsp6fm4fj.png" alt="Image description"&gt;&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;[root@ip-172-31-43-69 ~]# yum install docker &amp;amp;&amp;amp; systemctl start docker
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxwkknrdgze3hn1vo5yo1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxwkknrdgze3hn1vo5yo1.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2 id="3"&gt;Use ECR create repository&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4o1id8d4n5ynxcg7ibc1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4o1id8d4n5ynxcg7ibc1.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2 id="4"&gt;Attach IAM Role To EC2&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://docs.amazonaws.cn/en_us/AmazonECR/latest/userguide/registry-permissions-create.html" rel="noopener noreferrer"&gt;https://docs.amazonaws.cn/en_us/AmazonECR/latest/userguide/registry-permissions-create.html&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fl3weecswiqbo0z2b790z.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fl3weecswiqbo0z2b790z.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2 id="5"&gt;Build and Push Image to Repository&lt;/h2&gt;

&lt;h3&gt;1.Write Dockerfile&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;FROM centos:7

RUN yum install -y openssh-server sudo
RUN sed -i 's/UsePAM yes/UsePAM no/g' /etc/ssh/sshd_config 
RUN useradd admin  
RUN echo "admin:123456" | chpasswd
RUN echo "admin   ALL=(ALL)       ALL" &amp;gt;&amp;gt; /etc/sudoers 

RUN ssh-keygen -t dsa -f /etc/ssh/ssh_host_dsa_key
RUN ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key

RUN mkdir /var/run/sshd
EXPOSE 22
CMD ["/usr/sbin/sshd", "-D"]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;2.Build Image&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;[root@ip-172-31-43-69 ~]# docker build -t sshd .
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fp452clp1etpj627x0q83.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fp452clp1etpj627x0q83.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;3.Tag and Push Image&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;aws ecr get-login-password --region region | docker login --username AWS --password-stdin aws_account_id.dkr.ecr.region.amazonaws.com
docker tag sshd:latest aws_account_id.dkr.ecr.region.amazonaws.com/sshd:latest
docker push aws_account_id.dkr.ecr.region.amazonaws.com/sshd:latest
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftm9446iu7y010ovqrauj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftm9446iu7y010ovqrauj.png" alt="Image description"&gt;&lt;/a&gt;&lt;br&gt;
 &lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fslqv4fl5d8opyxk5l2py.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fslqv4fl5d8opyxk5l2py.png" alt="Image description"&gt;&lt;/a&gt;&lt;br&gt;
 &lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fk5ad541y5y2qep0pm94e.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fk5ad541y5y2qep0pm94e.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2 id="6"&gt;Create Fargate Task Definitions(I put my json code)&lt;/h2&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Notice:Replace the capital letter identification part&lt;/strong&gt;
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{
  "ipcMode": null,
  "executionRoleArn": "YOUR_EXEC_ROLE_ARN": [
    {
      "dnsSearchDomains": null,
      "environmentFiles": null,
      "logConfiguration": {
        "logDriver": "awslogs",
        "secretOptions": null,
        "options": {
          "awslogs-group": "/ecs/sshd_task",
          "awslogs-region": "YOUR_REGION",
          "awslogs-stream-prefix": "ecs"
        }
      },
      "entryPoint": null,
      "portMappings": [
        {
          "hostPort": 22,
          "protocol": "tcp",
          "containerPort": 22
        }
      ],
      "command": null,
      "linuxParameters": null,
      "cpu": 0,
      "environment": [],
      "resourceRequirements": null,
      "ulimits": null,
      "dnsServers": null,
      "mountPoints": [],
      "workingDirectory": null,
      "secrets": null,
      "dockerSecurityOptions": null,
      "memory": null,
      "memoryReservation": 2048,
      "volumesFrom": [],
      "stopTimeout": null,
      "image": "YOU_CREATE_IMG_URL",
      "startTimeout": null,
      "firelensConfiguration": null,
      "dependsOn": null,
      "disableNetworking": null,
      "interactive": null,
      "healthCheck": null,
      "essential": true,
      "links": null,
      "hostname": null,
      "extraHosts": null,
      "pseudoTerminal": null,
      "user": null,
      "readonlyRootFilesystem": null,
      "dockerLabels": null,
      "systemControls": null,
      "privileged": null,
      "name": "sshd_container"
    }
  ],
  "placementConstraints": [],
  "memory": "2048",
  "taskRoleArn": "USE_YOURSELF_TASK_ROLE",
  "compatibilities": [
    "EC2",
    "FARGATE"
  ],
  "taskDefinitionArn": "USE_YOURSELF_ARN",
  "family": "sshd_task",
  "requiresAttributes": [
    {
      "targetId": null,
      "targetType": null,
      "value": null,
      "name": "com.amazonaws.ecs.capability.logging-driver.awslogs"
    },
    {
      "targetId": null,
      "targetType": null,
      "value": null,
      "name": "ecs.capability.execution-role-awslogs"
    },
    {
      "targetId": null,
      "targetType": null,
      "value": null,
      "name": "com.amazonaws.ecs.capability.ecr-auth"
    },
    {
      "targetId": null,
      "targetType": null,
      "value": null,
      "name": "com.amazonaws.ecs.capability.docker-remote-api.1.19"
    },
    {
      "targetId": null,
      "targetType": null,
      "value": null,
      "name": "com.amazonaws.ecs.capability.docker-remote-api.1.21"
    },
    {
      "targetId": null,
      "targetType": null,
      "value": null,
      "name": "com.amazonaws.ecs.capability.task-iam-role"
    },
    {
      "targetId": null,
      "targetType": null,
      "value": null,
      "name": "ecs.capability.execution-role-ecr-pull"
    },
    {
      "targetId": null,
      "targetType": null,
      "value": null,
      "name": "com.amazonaws.ecs.capability.docker-remote-api.1.18"
    },
    {
      "targetId": null,
      "targetType": null,
      "value": null,
      "name": "ecs.capability.task-eni"
    }
  ],
  "pidMode": null,
  "requiresCompatibilities": [
    "FARGATE"
  ],
  "networkMode": "awsvpc",
  "cpu": "1024",
  "revision": 2,
  "status": "ACTIVE",
  "inferenceAccelerators": null,
  "proxyConfiguration": null,
  "volumes": []
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2 id="7"&gt;7.Create Cluster&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fva9r3tuqpedo2ldxhq7c.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fva9r3tuqpedo2ldxhq7c.png" alt="Image description"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzbi032ei7aq65a0cdke7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzbi032ei7aq65a0cdke7.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2 id="8"&gt;8.Create Service&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fchokwk702qpzpyn9xxjd.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fchokwk702qpzpyn9xxjd.png" alt="Image description"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyle8xd0usrvhvw6eyyag.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyle8xd0usrvhvw6eyyag.png" alt="Image description"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fchgnxux3g7prrg3oxocf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fchgnxux3g7prrg3oxocf.png" alt="Image description"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9k871ha9832c2vsne7lo.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9k871ha9832c2vsne7lo.png" alt="Image description"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fssufpsgouoi87z09r5cb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fssufpsgouoi87z09r5cb.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2 id="9"&gt;9.Use SSH Tool connect your container&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0v9qn3kjczvz6nkzgx5x.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0v9qn3kjczvz6nkzgx5x.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>aws</category>
      <category>ecs</category>
      <category>docker</category>
    </item>
    <item>
      <title>Use Python+AWS Create Sentiment Analysis Application</title>
      <dc:creator>Maverick Fung</dc:creator>
      <pubDate>Mon, 10 Jan 2022 14:02:31 +0000</pubDate>
      <link>https://dev.to/mavr/use-pythonaws-create-sentiment-analysis-tool-3lnj</link>
      <guid>https://dev.to/mavr/use-pythonaws-create-sentiment-analysis-tool-3lnj</guid>
      <description>&lt;h2&gt;
  
  
  Hi,Today I will share my experience to you,It's about Use Python And Amazon Comprehend ,and I also use Lambda,Api Gateway togather build the tool
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Python Stage(I will put my code in this stage)
#### Notice:I use Qtdesigner and PYUIC
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file '1.ui'
#
# Created by: PyQt5 UI code generator 5.15.6
#
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
# run again.  Do not edit this file unless you know what you are doing.


import sys

import openpyxl
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtWidgets import QFileDialog, QWidget
from PyQt5.QtWidgets import QApplication
import requests
import json
import datetime
import ctypes
import images

#Change Task manager icon
ctypes.windll.shell32.SetCurrentProcessExplicitAppUserModelID("myappid")

filename = '1'#Waiting analysis file name
flag = 1 #analysis flag

class About_page(QWidget):
    def __init__(self):
        super(About_page, self).__init__()
        self.resize(400,300)
        self.setWindowTitle("About")
        icon = QtGui.QIcon()
        icon.addPixmap(QtGui.QPixmap(':/Image-2.ico'), QtGui.QIcon.Normal)
        self.setWindowIcon(icon)
        self.label = QtWidgets.QLabel(self)
        self.label.setGeometry(QtCore.QRect(30, 40, 161, 21))
        self.label.setObjectName("label")
        self.label_2 = QtWidgets.QLabel(self)
        self.label_2.setGeometry(QtCore.QRect(30, 75, 161, 21))
        self.label_2.setObjectName("label_2")
        self.label_3 = QtWidgets.QLabel(self)
        self.label_3.setGeometry(QtCore.QRect(30, 110, 91, 21))
        self.label_3.setObjectName("label_3")
        self.label_4 = QtWidgets.QLabel(self)
        self.label_4.setGeometry(QtCore.QRect(130, 110, 221, 21))
        self.label_4.setObjectName("label_4")

        self.retranslateUi(self)
        QtCore.QMetaObject.connectSlotsByName(self)

    def retranslateUi(self,About_page):
        _translate = QtCore.QCoreApplication.translate
        self.setWindowTitle(_translate("Form", "About"))
        self.label.setText(_translate("Form", "Copyright ownership:T-UniStar"))
        self.label_2.setText(_translate("Form", "User:Lei Feng"))
        self.label_3.setText(_translate("Form", "Powered by"))
        self.label_4.setText(_translate("Form",
                                        u'&amp;lt;a href="https://aws.amazon.com/cn/" style="color:#0000ff;"&amp;gt;&amp;lt;b&amp;gt;Amazon Web Services, Inc.&amp;lt;/b&amp;gt;&amp;lt;/a&amp;gt;'))
        self.label_4.setOpenExternalLinks(True)

class Ui_Form(object):
    def setupUi(self, Form):
        Form.setObjectName("Form")
        Form.resize(750, 548)
        Form.setFixedSize(QtCore.QSize(780, 548))
        Form.setMaximumSize(QtCore.QSize(750, 548))
        icon = QtGui.QIcon()
        icon.addPixmap(QtGui.QPixmap(':/Image-1.ico'), QtGui.QIcon.Normal)
        Form.setWindowIcon(icon)
        self.label = QtWidgets.QLabel(Form)
        self.label.setGeometry(QtCore.QRect(220, 10, 261, 61))
        font = QtGui.QFont()
        font.setFamily("Arial")
        font.setPointSize(26)
        self.label.setFont(font)
        self.label.setObjectName("label")
        self.label_2 = QtWidgets.QLabel(Form)
        self.label_2.setGeometry(QtCore.QRect(250, 70, 211, 21))
        font = QtGui.QFont()
        font.setFamily("Arial")
        font.setPointSize(12)
        self.label_2.setFont(font)
        self.label_2.setObjectName("label_2")
        self.pushButton = QtWidgets.QPushButton(Form)
        self.pushButton.setGeometry(QtCore.QRect(20, 140, 111, 28))
        self.pushButton.setObjectName("pushButton")
        self.pushButton.clicked.connect(self.RealTime_analysis)
        self.textEdit = QtWidgets.QTextEdit(Form)
        self.textEdit.setGeometry(QtCore.QRect(160, 140, 291, 31))
        self.textEdit.setObjectName("textEdit")
        self.label_3 = QtWidgets.QLabel(Form)
        self.label_3.setGeometry(QtCore.QRect(20, 100, 201, 31))
        font = QtGui.QFont()
        font.setFamily("Arial")
        font.setPointSize(20)
        self.label_3.setFont(font)
        self.label_3.setObjectName("label_3")
        self.label_4 = QtWidgets.QLabel(Form)
        self.label_4.setGeometry(QtCore.QRect(20, 200, 481, 31))
        font = QtGui.QFont()
        font.setFamily("Arial")
        font.setPointSize(18)
        self.label_4.setFont(font)
        self.label_4.setObjectName("label_4")
        self.pushButton_2 = QtWidgets.QPushButton(Form)
        self.pushButton_2.setGeometry(QtCore.QRect(40, 420, 111, 28))
        self.pushButton_2.setObjectName("pushButton_2")
        self.pushButton_2.clicked.connect(self.multWordsAy)
        self.label_5 = QtWidgets.QLabel(Form)
        self.label_5.setGeometry(QtCore.QRect(20, 250, 171, 31))
        font = QtGui.QFont()
        font.setFamily("Arial")
        font.setPointSize(10)
        font.setBold(True)
        font.setWeight(75)
        self.label_5.setFont(font)
        self.label_5.setObjectName("label_5")
        self.label_6 = QtWidgets.QLabel(Form)
        self.label_6.setGeometry(QtCore.QRect(20, 330, 171, 31))
        font = QtGui.QFont()
        font.setFamily("Arial")
        font.setPointSize(10)
        font.setBold(True)
        font.setWeight(75)
        self.label_6.setFont(font)
        self.label_6.setObjectName("label_6")
        self.label_7 = QtWidgets.QLabel(Form)
        self.label_7.setGeometry(QtCore.QRect(80, 280, 31, 51))
        font = QtGui.QFont()
        font.setFamily("Arial")
        font.setPointSize(20)
        font.setBold(False)
        font.setWeight(50)
        self.label_7.setFont(font)
        self.label_7.setObjectName("label_7")
        self.label_8 = QtWidgets.QLabel(Form)
        self.label_8.setGeometry(QtCore.QRect(80, 360, 31, 51))
        font = QtGui.QFont()
        font.setFamily("Arial")
        font.setPointSize(20)
        font.setBold(False)
        font.setWeight(50)
        self.label_8.setFont(font)
        self.label_8.setObjectName("label_8")
        self.label_9 = QtWidgets.QLabel(Form)
        self.label_9.setGeometry(QtCore.QRect(200, 250, 561, 31))
        self.label_9.setObjectName("label_9")
        self.textBrowser = QtWidgets.QTextBrowser(Form)
        self.textBrowser.setGeometry(QtCore.QRect(190, 410, 351, 131))
        self.textBrowser.setObjectName("textBrowser")
        self.lineEdit = QtWidgets.QLineEdit(Form)
        self.lineEdit.setGeometry(QtCore.QRect(180, 330, 301, 31))
        self.lineEdit.setObjectName("lineEdit")
        self.lineEdit.setEnabled(False)
        self.pushButton_3 = QtWidgets.QPushButton(Form)
        self.pushButton_3.setGeometry(QtCore.QRect(510, 330, 111, 31))
        self.pushButton_3.setObjectName("pushButton_3")
        self.pushButton_3.clicked.connect(self.openFile)
        self.label_10 = QtWidgets.QLabel(Form)
        self.label_10.setGeometry(QtCore.QRect(470, 110, 72, 21))
        self.label_10.setObjectName("label_10")
        self.label_11 = QtWidgets.QLabel(Form)
        self.label_11.setGeometry(QtCore.QRect(560, 110, 72, 21))
        self.label_11.setObjectName("label_11")
        self.label_12 = QtWidgets.QLabel(Form)
        self.label_12.setGeometry(QtCore.QRect(650, 110, 72, 21))
        self.label_12.setObjectName("label_12")
        self.textEdit_2 = QtWidgets.QTextEdit(Form)
        self.textEdit_2.setGeometry(QtCore.QRect(460, 140, 81, 31))
        self.textEdit_2.setObjectName("textEdit_2")
        self.textEdit_2.setEnabled(False)
        self.textEdit_3 = QtWidgets.QTextEdit(Form)
        self.textEdit_3.setGeometry(QtCore.QRect(550, 140, 81, 31))
        self.textEdit_3.setObjectName("textEdit_3")
        self.textEdit_3.setEnabled(False)
        self.textEdit_4 = QtWidgets.QTextEdit(Form)
        self.textEdit_4.setGeometry(QtCore.QRect(640, 140, 81, 31))
        self.textEdit_4.setObjectName("textEdit_4")
        self.textEdit_4.setEnabled(False)
        self.pushButton_4 = QtWidgets.QPushButton(Form)
        self.pushButton_4.setGeometry(QtCore.QRect(650, 500, 93, 28))
        self.pushButton_4.setObjectName("pushButton_4")
        self.pushButton_4.clicked.connect(self.open_About_page)

        self.retranslateUi(Form)
        QtCore.QMetaObject.connectSlotsByName(Form)

    def retranslateUi(self, Form):
        _translate = QtCore.QCoreApplication.translate
        Form.setWindowTitle(_translate("Form", "Sentiment Analysis System"))
        self.label.setText(_translate("Form", "Sentiment Analysis System"))
        self.label_2.setText(_translate("Form", "Please follow the stage work"))
        self.pushButton.setText(_translate("Form", "Start Single words Analysis"))
        self.textEdit.setHtml(_translate("Form", "&amp;lt;!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0//EN\" \"http://www.w3.org/TR/REC-html40/strict.dtd\"&amp;gt;\n"
"&amp;lt;html&amp;gt;&amp;lt;head&amp;gt;&amp;lt;meta name=\"qrichtext\" content=\"1\" /&amp;gt;&amp;lt;style type=\"text/css\"&amp;gt;\n"
"p, li { white-space: pre-wrap; }\n"
"&amp;lt;/style&amp;gt;&amp;lt;/head&amp;gt;&amp;lt;body style=\" font-family:\'SimSun\'; font-size:9pt; font-weight:400; font-style:normal;\"&amp;gt;\n"
"&amp;lt;p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"&amp;gt;&amp;lt;span style=\" font-style:italic;\"&amp;gt;Please Input Need Analysis words&amp;lt;/span&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/body&amp;gt;&amp;lt;/html&amp;gt;"))
        self.label_3.setText(_translate("Form", "Single Words Analysis"))
        self.label_4.setText(_translate("Form", "More Words Analysis(Only support XLSX format)"))
        self.pushButton_2.setText(_translate("Form", "Start More Words Analysis"))
        self.label_5.setText(_translate("Form", "Stage 1、Format head"))
        self.label_6.setText(_translate("Form", "Stage 2、Choose File"))
        self.label_7.setText(_translate("Form", "↓"))
        self.label_8.setText(_translate("Form", "↓"))
        self.label_9.setText(_translate("Form", "The First head is：Text、Positive、Negative、Neutral、Emotion judgment、Language"))
        self.pushButton_3.setText(_translate("Form", "Choose File"))
        self.label_10.setText(_translate("Form", "Positive"))
        self.label_11.setText(_translate("Form", "Negative"))
        self.label_12.setText(_translate("Form", "Emotion Judgment"))
        self.pushButton_4.setText(_translate("Form", "About"))

    def RealTime_analysis(self):
        stat_words = self.textEdit.toPlainText()
        #print(stat_words)
        #print(data)
        url = "https://yuzcb6dtb3.execute-api.us-east-1.amazonaws.com/endpoint"
        payload = json.dumps({
            "Text": stat_words
        })
        headers = {
            'Content-Type':'application/json'
        }

        RTResponse = requests.request('POST',url,headers=headers,data=payload)
        RTRp_text = RTResponse.text

        RT_Positive = json.loads(RTRp_text)['body']['SentimentScore']['Positive']
        RT_Negative = json.loads(RTRp_text)['body']['SentimentScore']['Negative']
        RT_Neutral = json.loads(RTRp_text)['body']['SentimentScore']['Neutral']
        # print(float(str(json.loads(RTRp_text)['body']['SentimentScore']['Positive'])))
        # self.textEdit_2.setText(RT_Positive)
        # self.textEdit_3.setText(RT_Negative)
        if RT_Positive &amp;gt; RT_Negative and RT_Positive &amp;gt; RT_Neutral:
            self.textEdit_2.setText(str(float(RT_Positive) * 100)[:8])
            self.textEdit_3.setText(str(float(RT_Negative)*10)[:8])
            self.textEdit_4.setText('Postive')
        elif RT_Positive &amp;lt; RT_Negative and RT_Neutral &amp;lt; RT_Negative:
            self.textEdit_2.setText(str(float(RT_Positive)*10)[:8])
            self.textEdit_3.setText(str(float(RT_Negative)*100)[:8])
            self.textEdit_4.setText('Negative')
        else:
            self.textEdit_2.setText(str(float(RT_Positive) * 10)[:8])
            self.textEdit_3.setText(str(RT_Negative)[:8])

            self.textEdit_4.setText('Neutral')

        print(RTRp_text)


    def openFile(self):
        openFileName = QFileDialog.getOpenFileName(None,'Choose File', '', 'Excel files(*.xlsx)')
        print(openFileName)
        openF = openFileName[0].split('/')
        global filename;
        filename = openFileName[0];
        name = openF[len(openF) - 1];
        self.lineEdit.setText(str(name))


    def stopAnalysis(self):
        self.pushButton_2.setText("Start More Words Analysis")
        self.pushButton_2.clicked.disconnect(self.stopAnalysis)
        self.pushButton_2.clicked.connect(self.multWordsAy)
        self.textBrowser.append("Stopped by user：" + datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S'))
        global flag;
        flag = -1;
        return

    def multWordsAy(self):
        #Check file exist
        global flag;
        flag = 1
        import os
        if (not os.path.exists(filename)):
            self.textBrowser.append('This file not exist！')
            return;
        self.pushButton_2.setText("Stop Analysis")
        self.textBrowser.append("Start Analysis：" + datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S'))
        self.pushButton_2.clicked.disconnect(self.multWordsAy)
        self.pushButton_2.clicked.connect(self.stopAnalysis)

        def getMultResult(text):
            senment_words = text
            # print(stat_words)
            # print(data)
            url = "https://yuzcb6dtb3.execute-api.us-east-1.amazonaws.com/endpoint"
            mult_payload = json.dumps({
                "Text": senment_words
            })
            headers = {
                'Content-Type': 'application/json'
            }

            multResponse = requests.request('POST', url, headers=headers, data=mult_payload)
            mult_resp_text = multResponse.text
            mu_Positive = json.loads(mult_resp_text)['body']['SentimentScore']['Positive']
            mu_Negative = json.loads(mult_resp_text)['body']['SentimentScore']['Negative']
            mu_Neutral = json.loads(mult_resp_text)['body']['SentimentScore']['Neutral']
            LanguageCode = json.loads(mult_resp_text)['LanguageCode']
            return [mu_Positive,mu_Negative,mu_Neutral,LanguageCode]



        book = openpyxl.load_workbook(filename)
        sheet = book.get_sheet_by_name(book.get_sheet_names()[0])
        rows = sheet.max_row
        showText = "Read file successful，amount"+str(rows-1)+"records waiting analysis。。。\nCurrent Time："+datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')
        self.textBrowser.append(showText)
        if (sheet.cell(1, 1).value != 'Text' or sheet.cell(1, 2).value != 'Positive' or sheet.cell(1,3).value != 'Negative' or sheet.cell(1, 4).value != 'Negative' or sheet.cell(1, 5).value != 'Emotion judgment' or sheet.cell(1,6).value != 'Language'):
            self.textBrowser.append('The execl not stand format！')
            return;
        for i in range(2,rows+1):
            detectWords = sheet.cell(i,1).value
            detectResult = getMultResult(detectWords)
            self.textBrowser.append(f'Analysising {i-1}Record,Current Time:{datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")}')
            print(f'Analysising{i-1}Record,Current Time:{datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")}')
            sheet.cell(i,2,detectResult[0])
            sheet.cell(i,3,detectResult[1])
            sheet.cell(i,4,detectResult[2])
            sheet.cell(i,6,detectResult[3])
            if detectResult[0] &amp;gt; detectResult[1] and detectResult[0] &amp;gt; detectResult[2]:
                sheet.cell(i,5,"Positive")
            elif detectResult[1] &amp;gt; detectResult[0] and detectResult[1] &amp;gt; detectResult[2]:
                sheet.cell(i,5,"Negative")
            else:
                sheet.cell(i,5,"Neutral")
            QApplication.processEvents()
        book.save(filename)
        self.textBrowser.append('Analysis ended')

        self.textBrowser.append(str(rows - 1) + "Records analysis done！")
        self.pushButton_2.setText("Strat Analysis")
        self.pushButton_2.clicked.disconnect(self.stopAnalysis)
        self.pushButton_2.clicked.connect(self.multWordsAy)

    def open_About_page(self):
        self.about_form = About_page()
        self.about_form.show()




if __name__=="__main__":
    app=QtWidgets.QApplication(sys.argv)
    widget=QtWidgets.QMainWindow()
    # widget.setFixedSize(widget.width(), widget.height()-80) #ban max
    ui=Ui_Form()
    ui.setupUi(widget)
    widget.showMaximized()
    sys.exit(app.exec_())
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Lambda And Api Gateway Stage
#### Notice You need give right IAM
&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--qH5tlEQ3--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/xk2smazy6o4rilbe4v3v.png" alt="Lambda Image" width="800" height="208"&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Here is the Lambda Code&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import json
import boto3

comprehend = boto3.client(service_name='comprehend', region_name='ap')

def lambda_handler(event, context):
    # TODO implement
    LanguageCode = comprehend.detect_dominant_language(Text=event['Text'])
    comprehend_sentiment = comprehend.detect_sentiment(Text = event['Text'],LanguageCode=LanguageCode['Languages'][0]['LanguageCode'])
    print(LanguageCode)
    return {
        'statusCode': 200,
        'body': comprehend_sentiment,
        'LanguageCode':LanguageCode['Languages'][0]['LanguageCode']
    }
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  This is Apigateway(When you finished,You need deploy it and use postman to test)
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--V9y_vFbY--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/te7g9jlpdaa8pzwtol80.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--V9y_vFbY--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/te7g9jlpdaa8pzwtol80.png" alt="Apigateway" width="800" height="353"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;The Final display
&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--RkKkmkZE--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/odjjvuh3la2cnlxz7ire.png" alt="Build Done display" width="781" height="578"&gt;
&lt;/li&gt;
&lt;/ol&gt;

</description>
      <category>aws</category>
      <category>python</category>
      <category>lambda</category>
      <category>apigateway</category>
    </item>
    <item>
      <title>Use AWS EC2 create VPN(SSR)(Chinese and English description)</title>
      <dc:creator>Maverick Fung</dc:creator>
      <pubDate>Wed, 25 Aug 2021 02:56:31 +0000</pubDate>
      <link>https://dev.to/mavr/use-aws-ec2-create-vpn-ssr-5d9e</link>
      <guid>https://dev.to/mavr/use-aws-ec2-create-vpn-ssr-5d9e</guid>
      <description>&lt;p&gt;Hi,guys,Today I will show you how to use aws ec2 to create ShadowsocksR&lt;/p&gt;

&lt;h1&gt;
  
  
  First,You should launch a server by aws ec2
&lt;/h1&gt;

&lt;h3&gt;
  
  
  1.Launch a ec2 server
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Famf0cnmtq66tr1vcz2e8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Famf0cnmtq66tr1vcz2e8.png" alt="image"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  2.Choose what you want instance type
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fetmkbz76ydjjwpxzpaez.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fetmkbz76ydjjwpxzpaez.png" alt="image"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  3.Open the instance security group ports,such as 22
&lt;/h3&gt;

&lt;p&gt;(Notice:When the shadowsocksr is deployed later, the corresponding port will be opened)&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgs2vzchfv1aitlix4o9q.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgs2vzchfv1aitlix4o9q.png" alt="image"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  4.Connect to you create ec2-instance
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frru0k4jyot79m6r0gynb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frru0k4jyot79m6r0gynb.png" alt="image"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Second,Install ShadowsocksR Script
&lt;/h1&gt;

&lt;h3&gt;
  
  
  1.Login root user
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;[ec2-user@ip-172-31-95-56 ~]$ sudo -i&lt;/code&gt;&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0lx27zejpu7re6zeinj2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0lx27zejpu7re6zeinj2.png" alt="image"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  2.git and run ShadowsocksR script
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;wget -N --no-check-certificate https://raw.githubusercontent.com/ToyoDAdoubi/doubi/master/ssr.sh &amp;amp;&amp;amp; chmod +x ssr.sh &amp;amp;&amp;amp; bash ssr.sh&lt;br&gt;
&lt;/code&gt;&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0q73tysmpe8s8fame5j0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0q73tysmpe8s8fame5j0.png" alt="image"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Congiure the ShadowSocksR config
&lt;/h3&gt;

&lt;h5&gt;
  
  
  1.First you will see this
&lt;/h5&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F52asmog58yjxgnojfq1j.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F52asmog58yjxgnojfq1j.png" alt="image"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  You need type the number &lt;code&gt;1&lt;/code&gt; to install ShadowSocksR
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F99sq7928w0jr8wko1qvl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F99sq7928w0jr8wko1qvl.png" alt="image"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  2.Choose the ShadowSocksR server port,and you need open the ec2 security group inbound port
&lt;/h3&gt;

&lt;p&gt;(default: 2333)&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fv78c2zvkqj3sh66bxrff.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fv78c2zvkqj3sh66bxrff.png" alt="image"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  3.Set the shadowsocksR server connect password
&lt;/h3&gt;

&lt;p&gt;(Default: doub.io)&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fz4cn8qcmhndwp5pn5oi4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fz4cn8qcmhndwp5pn5oi4.png" alt="image"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  4.Choose the Encryption Mode
&lt;/h3&gt;

&lt;p&gt;[Note] if auth is used_ chain_ A protocol, please select none as the encryption method, and confusion is optional (recommended)&lt;br&gt;
[Note] the salsa20 / chachacha20 - * series encryption method requires additional installation (depends on libsodium, otherwise shadowsocksr cannot be started!)&lt;br&gt;
(Default: 5. aes-128-ctr)&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2otjdlxbupoxmeo01cp5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2otjdlxbupoxmeo01cp5.png" alt="image"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  5.Choose Protocol plug-in
&lt;/h3&gt;

&lt;p&gt;[Note] if auth is used_ chain_ A protocol, please select none as the encryption method, and confusion is optional (recommended)&lt;/p&gt;

&lt;p&gt;(Default: 2. auth_sha1_v4)&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwek57nn9zotqy562j52y.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwek57nn9zotqy562j52y.png" alt="image"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  6.Choose Confusion plug-in
&lt;/h3&gt;

&lt;p&gt;[note] if you use shadowsocksr to accelerate the game, please select obfuscation compatible with the original or plain obfuscation, and then the client selects plain, otherwise the delay will be increased!&lt;br&gt;
In addition, if you select tls1.2_ ticket_ Auth, then the client can choose tls1.2_ ticket_ Fastauth, so you can disguise without adding delay!&lt;br&gt;
If you are building in popular areas such as Japan and the United States, you may have a lower chance of being blocked by the wall!&lt;/p&gt;

&lt;p&gt;(Default: 1. plain)&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Farsqrp3tkmkrvcg9g362.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Farsqrp3tkmkrvcg9g362.png" alt="image"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  7.Set Connect client numbers,Single thread speed,Single port total speed
&lt;/h3&gt;

&lt;p&gt;Please enter the number of devices (auth) to be limited by the shadowsocksr account to be set_* Series protocols are incompatible (only the original version is valid)&lt;br&gt;
[Note] device number limit: the number of clients that can be linked at the same time on each port (multi port mode, each port is calculated independently). It is recommended that there be at least 2.&lt;br&gt;
(Default: No-limit)&lt;/p&gt;

&lt;p&gt;Please enter the upper limit of single thread speed limit per port to be set (unit: KB / s)&lt;br&gt;
[note] single thread speed limit: the upper limit of single thread speed limit on each port, and multithreading is invalid.&lt;br&gt;
(Default: No-limit)&lt;/p&gt;

&lt;p&gt;Please enter the upper limit of the total speed limit of each port to be set (unit: KB / s)&lt;br&gt;
[note] total speed limit of ports: the upper limit of total speed limit of each port, and the overall speed limit of a single port.&lt;br&gt;
(Default: No-limit)&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F28wp39wo4g8n6lewzh4r.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F28wp39wo4g8n6lewzh4r.png" alt="image"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  8.Well done,You can see this ,which means you already install and run the shadowsocksR server,And you can use SSR-client to connect
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fz2dnan6aq51fhnkln9eq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fz2dnan6aq51fhnkln9eq.png" alt="image"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>aws</category>
      <category>ec2</category>
      <category>vpn</category>
      <category>ssr</category>
    </item>
  </channel>
</rss>
