Very large docker image size optimisations
without cross compiling to linux-musl, optimise image by compiling it on a slim rust image and then transferring only the binary over to a debian-slim image.
This commit is contained in:
parent
b279578b51
commit
0a31ae482b
@ -1,5 +1,8 @@
|
|||||||
target
|
target/
|
||||||
.vscode
|
.vscode
|
||||||
tests
|
tests/
|
||||||
.git
|
.git
|
||||||
.gitignore
|
.gitignore
|
||||||
|
.env
|
||||||
|
Dockerfile
|
||||||
|
migrations/
|
16
Dockerfile
16
Dockerfile
@ -1,11 +1,21 @@
|
|||||||
FROM rust:1.56
|
FROM rust:1.56-slim AS builder
|
||||||
|
|
||||||
WORKDIR /app
|
WORKDIR /app
|
||||||
|
|
||||||
COPY . .
|
COPY . .
|
||||||
|
|
||||||
ENV SQLX_OFFLINE true
|
ENV SQLX_OFFLINE true
|
||||||
RUN cargo build --release
|
RUN cargo build --release
|
||||||
|
|
||||||
|
FROM debian:bullseye-slim AS runtime
|
||||||
|
|
||||||
|
WORKDIR /app
|
||||||
|
|
||||||
|
# Install dependancies required
|
||||||
|
RUN apt update -y && apt install -y --no-install-recommends openssl && apt autoremove -y && apt clean -y && rm -rf /var/lib/apt/lists/*
|
||||||
|
|
||||||
|
# Copy the fully built binary and configuration to the image
|
||||||
|
COPY --from=builder /app/target/release/mail_app mail_app
|
||||||
|
COPY configuration configuration
|
||||||
ENV APP_ENVIRONMENT production
|
ENV APP_ENVIRONMENT production
|
||||||
|
|
||||||
ENTRYPOINT ["./target/release/mail_app"]
|
ENTRYPOINT ["./mail_app"]
|
10
src/main.rs
10
src/main.rs
@ -1,8 +1,10 @@
|
|||||||
|
use std::net::TcpListener;
|
||||||
|
use sqlx::PgPool;
|
||||||
|
use sqlx::postgres::PgPoolOptions;
|
||||||
|
|
||||||
use mail_app::startup::run;
|
use mail_app::startup::run;
|
||||||
use mail_app::configuration::get_configuration;
|
use mail_app::configuration::get_configuration;
|
||||||
use mail_app::telemetry::{get_subscriber, init_subscriber};
|
use mail_app::telemetry::{get_subscriber, init_subscriber};
|
||||||
use std::net::TcpListener;
|
|
||||||
use sqlx::PgPool;
|
|
||||||
|
|
||||||
#[actix_web::main]
|
#[actix_web::main]
|
||||||
async fn main() -> std::io::Result<()> {
|
async fn main() -> std::io::Result<()> {
|
||||||
@ -13,7 +15,9 @@ async fn main() -> std::io::Result<()> {
|
|||||||
let configuration = get_configuration().expect("Failed to read configuration data.");
|
let configuration = get_configuration().expect("Failed to read configuration data.");
|
||||||
|
|
||||||
// Configure connection to database for our startup
|
// Configure connection to database for our startup
|
||||||
let connection_pool = PgPool::connect_lazy(&configuration.database.connection_string())
|
let connection_pool = PgPool::new()
|
||||||
|
.connect_timeout(std::time::Duration::from_secs(2))
|
||||||
|
.connect(&configuration.database.connection_string())
|
||||||
.expect("Failed to connect to Postgres.");
|
.expect("Failed to connect to Postgres.");
|
||||||
|
|
||||||
// Take port from settings file
|
// Take port from settings file
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
use actix_web::{web, App, HttpServer};
|
use actix_web::{web, App, HttpServer};
|
||||||
use actix_web::dev::Server;
|
use actix_web::dev::Server;
|
||||||
use actix_web::web::Data;
|
// use actix_web::web::Data;
|
||||||
use std::net::TcpListener;
|
use std::net::TcpListener;
|
||||||
use sqlx::PgPool;
|
use sqlx::PgPool;
|
||||||
use tracing_actix_web::TracingLogger;
|
use tracing_actix_web::TracingLogger;
|
||||||
|
Loading…
Reference in New Issue
Block a user