<!DOCTYPE html>
    <html lang="vi" xmlns="http://www.w3.org/1999/xhtml" prefix="og: http://ogp.me/ns#">
    <head>
<title>Cách container hóa app Rust bằng Docker</title>
<meta name="description" content="Cách container hóa app Rust bằng Docker - Savefile - Tin Tức -...">
<meta name="author" content=".: Nguoicodonvn2008.info - Cõi lòng người cô đơn :.">
<meta name="copyright" content=".: Nguoicodonvn2008.info - Cõi lòng người cô đơn :. [admin@nguoicodonvn2008.info]">
<meta name="robots" content="index, archive, follow, noodp">
<meta name="googlebot" content="index,archive,follow,noodp">
<meta name="msnbot" content="all,index,follow">
<meta name="generator" content="NukeViet v4.5">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta property="og:title" content="Cách container hóa app Rust bằng Docker">
<meta property="og:type" content="website">
<meta property="og:description" content="Savefile - Tin Tức - https&#x3A;&#x002F;&#x002F;www.nguoicodonvn2008.info&#x002F;vi&#x002F;news&#x002F;savefile&#x002F;kien-thuc-may-tinh&#x002F;cach-container-hoa-app-rust-bang-docker-7424.html">
<meta property="og:site_name" content=".&#x3A; Nguoicodonvn2008.info - Cõi lòng người cô đơn &#x3A;.">
<meta property="og:url" content="https://www.nguoicodonvn2008.info/vi/news/savefile/kien-thuc-may-tinh/cach-container-hoa-app-rust-bang-docker-7424.html">
<link rel="shortcut icon" href="https://nguoicodonvn2008.info/favicon.ico">
<link rel="canonical" href="https://www.nguoicodonvn2008.info/vi/news/savefile/kien-thuc-may-tinh/cach-container-hoa-app-rust-bang-docker-7424.html">
<link rel="alternate" href="https://nguoicodonvn2008.info/vi/news/rss/" title="Tin Tức" type="application/rss+xml">
<link rel="alternate" href="https://nguoicodonvn2008.info/vi/news/rss/karaoke-dual/" title="Tin Tức - Karaoke Dual" type="application/rss+xml">
<link rel="alternate" href="https://nguoicodonvn2008.info/vi/news/rss/nhac-tre/" title="Tin Tức - Nhạc trẻ" type="application/rss+xml">
<link rel="alternate" href="https://nguoicodonvn2008.info/vi/news/rss/tru-tinh/" title="Tin Tức - Trữ tình" type="application/rss+xml">
<link rel="alternate" href="https://nguoicodonvn2008.info/vi/news/rss/nuoc-ngoai/" title="Tin Tức - Nước ngoài" type="application/rss+xml">
<link rel="alternate" href="https://nguoicodonvn2008.info/vi/news/rss/remix/" title="Tin Tức - Remix" type="application/rss+xml">
<link rel="alternate" href="https://nguoicodonvn2008.info/vi/news/rss/tam-su-tinh-yeu/" title="Tin Tức - Tâm sự tình yêu" type="application/rss+xml">
<link rel="alternate" href="https://nguoicodonvn2008.info/vi/news/rss/tho-suu-tam/" title="Tin Tức - Thơ sưu tầm" type="application/rss+xml">
<link rel="alternate" href="https://nguoicodonvn2008.info/vi/news/rss/cuoc-song/" title="Tin Tức - Cuộc sống" type="application/rss+xml">
<link rel="alternate" href="https://nguoicodonvn2008.info/vi/news/rss/phan-mem/" title="Tin Tức - Phần mềm" type="application/rss+xml">
<link rel="alternate" href="https://nguoicodonvn2008.info/vi/news/rss/kien-thuc-may-tinh/" title="Tin Tức - Kiến thức máy tính" type="application/rss+xml">
<link rel="alternate" href="https://nguoicodonvn2008.info/vi/news/rss/hoc-tap/" title="Tin Tức - Học tập" type="application/rss+xml">
<link rel="alternate" href="https://nguoicodonvn2008.info/vi/news/rss/tai-lieu/" title="Tin Tức - Tài liệu" type="application/rss+xml">
<link rel="alternate" href="https://nguoicodonvn2008.info/vi/news/rss/de-thi/" title="Tin Tức - Đề thi" type="application/rss+xml">
<link rel="preload" as="style" href="https://nguoicodonvn2008.info/assets/css/font-awesome.min.css" type="text/css">
<link rel="preload" as="style" href="https://nguoicodonvn2008.info/themes/default/css/bootstrap.non-responsive.css" type="text/css">
<link rel="preload" as="style" href="https://nguoicodonvn2008.info/themes/default/css/style.css" type="text/css">
<link rel="preload" as="style" href="https://nguoicodonvn2008.info/themes/default/css/style.non-responsive.css" type="text/css">
<link rel="preload" as="style" href="https://nguoicodonvn2008.info/themes/default/css/news.css" type="text/css">
<link rel="preload" as="style" href="https://nguoicodonvn2008.info/themes/default/css/custom.css" type="text/css">
<link rel="preload" as="script" href="https://nguoicodonvn2008.info/assets/js/jquery/jquery.min.js" type="text/javascript">
<link rel="preload" as="script" href="https://nguoicodonvn2008.info/assets/js/language/vi.js" type="text/javascript">
<link rel="preload" as="script" href="https://nguoicodonvn2008.info/assets/js/DOMPurify/purify3.js" type="text/javascript">
<link rel="preload" as="script" href="https://nguoicodonvn2008.info/assets/js/global.js" type="text/javascript">
<link rel="preload" as="script" href="https://nguoicodonvn2008.info/assets/js/site.js" type="text/javascript">
<link rel="preload" as="script" href="https://nguoicodonvn2008.info/themes/default/js/news.js" type="text/javascript">
<link rel="preload" as="script" href="https://nguoicodonvn2008.info/themes/default/js/main.js" type="text/javascript">
<link rel="preload" as="script" href="https://nguoicodonvn2008.info/themes/default/js/custom.js" type="text/javascript">
<link rel="preload" as="script" href="https://nguoicodonvn2008.info/themes/default/js/bootstrap.min.js" type="text/javascript">
<link rel="stylesheet" href="https://nguoicodonvn2008.info/assets/css/font-awesome.min.css">
<link rel="stylesheet" href="https://nguoicodonvn2008.info/themes/default/css/bootstrap.non-responsive.css">
<link rel="stylesheet" href="https://nguoicodonvn2008.info/themes/default/css/style.css">
<link rel="stylesheet" href="https://nguoicodonvn2008.info/themes/default/css/style.non-responsive.css">
<link rel="StyleSheet" href="https://nguoicodonvn2008.info/themes/default/css/news.css">
<link rel="stylesheet" href="https://nguoicodonvn2008.info/themes/default/css/custom.css">
<style type="text/css">
	body{background: #fff;}
</style>
    </head>
    <body>
<div id="print">
	<div id="hd_print">
		<h2 class="pull-left">.&#x3A; Nguoicodonvn2008.info - Cõi lòng người cô đơn &#x3A;.</h2>
		<p class="pull-right"><a title=".&#x3A; Nguoicodonvn2008.info - Cõi lòng người cô đơn &#x3A;." href="https://nguoicodonvn2008.info/">https://nguoicodonvn2008.info</a></p>
	</div>
	<div class="clear"></div>
	<hr />
	<div id="content">
		<h1>Cách container hóa app Rust bằng Docker</h1>
		<ul class="list-inline">
			<li>Thứ sáu - 18/08/2023 10:01</li>
			<li class="hidden-print txtrequired"><em class="fa fa-print">&nbsp;</em><a title="In ra" href="javascript:;" onclick="window.print()">In ra</a></li>
			<li class="hidden-print txtrequired"><em class="fa fa-power-off">&nbsp;</em><a title="Đóng cửa sổ này" href="javascript:;" onclick="window.close()">Đóng cửa sổ này</a></li>
		</ul>
		<div class="clear"></div>
		<div id="hometext">
		</div>
				<div class="imghome">
			<img alt="Cách container hóa app Rust bằng Docker" src="https://st.quantrimang.com/photos/image/2023/07/10/Rust-Docker-7.jpg" width="460" class="img-thumbnail" />
		</div>
		<div class="clear"></div>
		<div id="bodytext" class="clearfix">
			<p><strong>Container hóa ứng dụng Rust với Docker&nbsp;</strong>để đơn giản hóa quá trình triển khai và đảm bảo tính nhất quán trên các môi trường khác nhau.</p>

<p><img alt="Container hóa app Rust với Docker" data-i="0" data-src="https://st.quantrimang.com/photos/image/2023/07/10/Rust-Docker-7.jpg" data-was-processed="true" height="340" src="https://st.quantrimang.com/photos/image/2023/07/10/Rust-Docker-7.jpg" width="650" /></p>

<p>Container hóa cung cấp những lợi ích cần thiết về mặt di động, cách li và hiệu quả. Nó cho phép triển khai nhất quán ứng dụng trên những môi trường khác nhau, đồng thời, đảm bảo độ an toàn và ổn định thông qua cách ly ứng dụng. Nó cũng tối ưu hóa sử dụng tài nguyên, đơn giản hóa quá trình phát triển và quản lý, đồng thời nâng cao khả năng mở rộng.</p>

<p><strong>Container hóa app Rust với Docker&nbsp;</strong>cung cấp một phương pháp đáng tin cậy và hiệu quả trong việc đóng gói ứng dụng và các phần phụ thuộc vào môi trường độc lập và di động. Nó cho phép triển khai liền mạch trên nhiều hệ thống khác nhau mà không quan tâm tới cơ sở hạ tầng bên dưới.</p>

<h2>Thiết lập web server đơn giản trong Rust với Actix</h2>

<p>Bạn có thể thiết lập một web server đơn giản trong Rust với Actix và container hóa ứng dụng với Docker. Bạn sẽ hiện một cổng mới tại nơi sẽ truy cập server để nhận các truy vấn.</p>

<p>Chạy lệnh này để tạo dự án Rust mới với trình quản lý gói Cargo:</p>

<pre id="pre0">
<code>cargo new my-app</code></pre>

<p>Khi tạo dự án Rust mới, Cargo thêm file&nbsp;<strong>cargo.toml&nbsp;</strong>vào thư mục gốc của dự án. Mở file cargo.toml và thêm crate Actix vào phần&nbsp;<strong>dependencies</strong>&nbsp;như sau:</p>

<pre id="pre1">
<code>&#91;dependencies&#93;
actix-web = &quot;4.3.1&quot;</code></pre>

<p>Đây là cách bạn có thể thiết lập một server đơn giản trong Rust với crate Actix:</p>

<pre id="pre2">
<code>use actix_web::{get, App, HttpResponse, HttpServer, Responder};

// Nhập các phần phụ thuộc cần thiết từ framework Actix Web 

#&#91;get(&quot;/&quot;)&#93;
async fn hello() -&gt; impl Responder {
    // Xác định hàm xử lý cho truy vấn GET tới đường dẫn gốc (&quot;/&quot;)
    // Hàm này trả về một kiểu triển khai trait Responder 

    HttpResponse::Ok().body(&quot;Hello, World!&quot;)
    // Trả về phản hồi HTTP với mã trạng thái 200 (OK)
    // và nội dung của phản hồi là &quot;Hello, World!&quot;
}

#&#91;actix_web::main&#93;
async fn main() -&gt; std::io::Result&lt;()&gt; {
    // Điểm nhập của ứng dụng
    HttpServer::new(|| {
        // Tạo phiên bản mới của HttpServer

        App::new().service(hello)
        // Tạo phiên bản mới của App và đăng ký hàm hello 

    }).bind(&quot;127.0.0.1:8080&quot;)?.run().await
    // Liên kết server tới địa chỉ IP và cổng này
    // Khởi động server và đợi quá trình hoàn tất
}</code></pre>

<p>Chương trình này thiết lập một HTTP Web Server cơ bản với Actix. Hàm&nbsp;<strong>hello</strong>&nbsp;là một hàm xử lý phản hồi với truy vấn GET trên cổng&nbsp;<strong>8080</strong>&nbsp;với “Hello, World!”.</p>

<p>Hàm main thiết lập một phiên bản server với hàm&nbsp;<strong>HttpServer::new</strong>&nbsp;và liên kết server để chạy trên địa chỉ localhost<strong>&nbsp;127.0.0.1:8080.</strong></p>

<p>Giờ, chạy lệnh cargo run để chạy web server. Đây là kết quả mở địa chỉ trên trình duyệt web.</p>

<p><img alt="Kết quả container hóa app Rust" data-i="1" data-src="https://st.quantrimang.com/photos/image/2023/07/10/container-rust-docker1.jpg" data-was-processed="true" height="406" src="https://st.quantrimang.com/photos/image/2023/07/10/container-rust-docker1.jpg" width="650" /></p>

<h2>Viết Dockerfile cho app Rust</h2>

<p>Để container hóa app Rust với Docker, bạn phải tạo một Dockerfile và xác định các lệnh cho quá trình container hóa.</p>

<p>Dockerfile không có extension. Bạn chỉ cần tạo file&nbsp;<strong>Dockerfile</strong>. Bạn cũng có thể tạo tệp.dockerignor thành những file trừu tượng trong thư mục đang hoạt động từ quá trình xây dựng.</p>

<h3>Xác định lệnh trong Dockerfile</h3>

<p><strong>Docker</strong><strong>file</strong>&nbsp;sẽ chứa các lệnh kéo một ảnh cơ sở từ repository Docker, đặt thư mục đang làm việc, sao chép file, xây dựng phần phụ thuộc/ ứng dụng và tạo ảnh nhỏ tối thiểu, xuất cổng và chạy ứng dụng.</p>

<pre id="pre3">
<code># Dùng bản mới nhất của ảnh cơ sở Rust 
FROM rust:latest

# Đặt thư mục đang hoạt động trong container sang container to /my
WORKDIR /usr/src/my-app

# Sao chép file dự án Rust sang thư mục đang hoạt động
COPY . .

# Xây dựng app Rust
RUN cargo build

# Đặt lệnh này để chạy app Rust
CMD cargo run</code></pre>

<p>Sau khi xác định các lệnh được yêu cầu cho container hóa app, bạn có thể xây dựng một container bằng lệnh này:</p>

<pre id="pre4">
<code>docker build -t my-app .</code></pre>

<p>Lệnh này xây dựng một ảnh Docker cho app&nbsp;<strong>my-app</strong>&nbsp;với tag&nbsp;<strong>my-app</strong>&nbsp;từ thư mục hiện tại.</p>

<p>Bạn có thể dùng lệnh dockerrun để chạy ảnh Docker.</p>

<pre id="pre5">
<code>docker run -p 8080:8080 my-app</code></pre>

<p>Tùy chọn<strong>&nbsp;-p 8080:8080&nbsp;</strong>ánh xạ cổng 8080 của máy host tới cổng 8080 của container. Docker sẽ chuyển tiếp lưu lượng được chuyển hướng đến cổng 8080 trên máy chủ đến cổng 8080 trong container.</p>

<p><img alt="Màn hình kết quả" data-i="2" data-src="https://st.quantrimang.com/photos/image/2023/07/10/container-rust-docker2.jpg" data-was-processed="true" height="299" src="https://st.quantrimang.com/photos/image/2023/07/10/container-rust-docker2.jpg" width="650" /></p>

<p>Bạn có thể gửi các truy vấn tới container này qua cổng localhost 8080 để gọi dịch vụ web.</p>

<p>Trên đây là&nbsp;<strong>cách container hóa app Rust bằng Docker</strong>. Hi vọng bài viết hữu ích với các bạn</p>
&nbsp;
		</div>
				<div id="author">
						<p>
				<strong>Nguồn tin:</strong>
				Quantrimang.com
			</p>
		</div>
	</div>
	<div id="footer" class="clearfix">
		<div id="url">
			<strong>URL của bản tin này: </strong><a href="https://www.nguoicodonvn2008.info/vi/news/savefile/kien-thuc-may-tinh/cach-container-hoa-app-rust-bang-docker-7424.html" title="Cách container hóa app Rust bằng Docker">https://www.nguoicodonvn2008.info/vi/news/savefile/kien-thuc-may-tinh/cach-container-hoa-app-rust-bang-docker-7424.html</a>

		</div>
		<div class="clear"></div>
		<div class="copyright">
			&copy; .&#x3A; Nguoicodonvn2008.info - Cõi lòng người cô đơn &#x3A;.
		</div>
		<div id="contact">
			<a href="mailto:admin@nguoicodonvn2008.info">admin@nguoicodonvn2008.info</a>
		</div>
	</div>
</div>
        <div id="timeoutsess" class="chromeframe">
            Bạn đã không sử dụng Site, <a onclick="timeoutsesscancel();" href="https://nguoicodonvn2008.info/#">Bấm vào đây để duy trì trạng thái đăng nhập</a>. Thời gian chờ: <span id="secField"> 60 </span> giây
        </div>
        <div id="openidResult" class="nv-alert" style="display:none"></div>
        <div id="openidBt" data-result="" data-redirect=""></div>
		</script>
		<div class="car-top">
  <span><img src="https://nguoicodonvn2008.info/themes/default/images/car.png" alt=""></span>
</div>
<script src="https://nguoicodonvn2008.info/assets/js/jquery/jquery.min.js"></script>
<script>var nv_base_siteurl="/",nv_lang_data="vi",nv_lang_interface="vi",nv_name_variable="nv",nv_fc_variable="op",nv_lang_variable="language",nv_module_name="news",nv_func_name="savefile",nv_is_user=0, nv_my_ofs=-4,nv_my_abbr="EDT",nv_cookie_prefix="nv4c_e856T",nv_check_pass_mstime=1738000,nv_area_admin=0,nv_safemode=0,theme_responsive=0,nv_recaptcha_ver=2,nv_recaptcha_sitekey="",nv_recaptcha_type="image",XSSsanitize=1;</script>
<script src="https://nguoicodonvn2008.info/assets/js/language/vi.js"></script>
<script src="https://nguoicodonvn2008.info/assets/js/DOMPurify/purify3.js"></script>
<script src="https://nguoicodonvn2008.info/assets/js/global.js"></script>
<script src="https://nguoicodonvn2008.info/assets/js/site.js"></script>
<script src="https://nguoicodonvn2008.info/themes/default/js/news.js"></script>
<script src="https://nguoicodonvn2008.info/themes/default/js/main.js"></script>
<script src="https://nguoicodonvn2008.info/themes/default/js/custom.js"></script>
<script type="application/ld+json">
        {
            "@context": "https://schema.org",
            "@type": "Organization",
            "url": "https://nguoicodonvn2008.info",
            "logo": "https://nguoicodonvn2008.info/uploads/angel.gif"
        }
        </script>
<script src="https://nguoicodonvn2008.info/themes/default/js/bootstrap.min.js"></script>
<script type="text/javascript">
var $scrolltop = $('.car-top');
$scrolltop.on('click', function () {
    $('html,body').animate({
        scrollTop: 0
    }, 800);
    $(this).addClass("car-run");
    setTimeout(function(){ $scrolltop.removeClass('car-run');}, 1000);
    return false;
});
$(window).on('scroll', function ()
{ 
    if($(window).scrollTop() >= 200)
    {
        $scrolltop.addClass("show");
        $scrolltop.addClass("car-down");
    }
    else
    {
       $scrolltop.removeClass("show");
       setTimeout(function(){ $scrolltop.removeClass('car-down');}, 300);
    }
});
</script>
</body>
</html>