本文导览本文是为“容器化小白”量身定制的 Docker 一站式教程涵盖 Ubuntu 系统的完整安装配置、国内镜像加速、常用命令以及6大主流镜像Nginx、MySQL、PostgreSQL、MongoDB、Java、Go的使用案例手把手带你从零上手 Docker。一、Docker 是什么为什么要用容器Docker 是一种基于 Linux 内核的轻量级虚拟化技术它把应用程序及其运行依赖库、配置文件、环境变量等一起打包成一个可移植的容器。无论在开发机、测试机还是生产服务器只要部署了 Docker容器就能“开箱即用”。传统部署中“本地能跑线上报错”的痛点几乎人人都遇到过。Docker 正是用来解决这个问题的——把环境放进容器里和宿主机彻底隔离。相比传统虚拟机Docker 是进程级隔离启动仅需秒级资源占用不到虚拟机的 20%。一句话总结Docker ≈ 把应用程序和它的运行环境打包成一个“轻量级虚拟机”随处运行。二、Ubuntu 系统上安装 Docker2026最新实战本文全程使用Docker 官方仓库进行安装适合 Ubuntu 20.04/22.04/24.04 LTS确保稳定与安全。⚠️前置要求拥有sudo权限且系统能访问外网若内网环境需配置离线安装或镜像源。步骤1更新系统并安装依赖bashsudo apt update sudo apt install -y ca-certificates curl gnupg lsb-release这一步安装后续用到的下载工具和加密验证工具。-y表示自动确认无需手动按回车。步骤2添加 Docker 官方 GPG 密钥安全验证bashcurl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpgGPG 密钥确保下载的 Docker 是官方原版没有被篡改。步骤3添加 Docker 官方软件源bashecho deb [arch$(dpkg --print-architecture) signed-by/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable | sudo tee /etc/apt/sources.list.d/docker.list /dev/null这条命令会告诉 Ubuntu 去哪里下载 Docker系统版本会被自动识别。步骤4再次更新源并安装 Docker 引擎bashsudo apt update sudo apt install -y docker-ce docker-ce-cli containerd.iodocker-ceDocker 社区版完全免费docker-ce-cli命令行工具containerd.io容器运行时步骤5把当前用户加入 docker 组无需每次输入 sudobashsudo usermod -aG docker $USER newgrp docker默认情况下必须使用sudo才能运行 Docker 命令。把用户加入docker组后就可以直接使用 Docker 了。步骤6验证安装成功bashdocker --version # 查看版本号 docker run hello-world # 运行官方测试容器如果终端输出 “Hello from Docker!”说明安装配置成功。步骤7可选设置开机自启动bashsudo systemctl enable docker服务器用户强烈建议开启这样服务器重启后 Docker 会自动运行。三、配置国内镜像加速器解决拉取慢/失败问题截至 2026 年国内从 Docker Hub 直接拉取镜像依然面临速度缓慢、连接超时等挑战。配置国内镜像加速源是必备优化步骤。 配置方法编辑或创建 Docker 守护进程配置文件/etc/docker/daemon.jsonbashsudo mkdir -p /etc/docker sudo tee /etc/docker/daemon.json -EOF { registry-mirrors: [ https://docker.xuanyuan.me, https://docker.1ms.run, https://docker.m.daocloud.io ] } EOF然后重启 Docker 服务bashsudo systemctl restart docker2026 年最新实测可用的国内镜像源推荐镜像源地址特点轩辕镜像免费https://docker.xuanyuan.me全平台支持更新及时免费毫秒镜像https://docker.1ms.run速度极快实测可达 10MB/sDaoCloudhttps://docker.m.daocloud.io国内最早的服务之一稳定可靠配置完成后docker pull命令会自动走加速器拉取镜像。四、Docker 核心概念速览小白必读在进入实战之前先花 2 分钟理解这三个核心概念镜像Image一个只读的“模板”里面打包了应用程序及其运行环境。比如 Nginx 镜像、MySQL 镜像。容器Container镜像的运行实例。如果把镜像比作一个“光盘”容器就是光盘上正在运行的“程序”。仓库Registry存放镜像的地方类似于 GitHub 之于代码。Docker Hub 是官方公共仓库。常用命令快速参考bashdocker pull 镜像名 # 拉取镜像 docker images # 查看本地镜像列表 docker run 镜像名 # 运行容器 docker ps # 查看运行中的容器 docker ps -a # 查看所有容器含已停止 docker stop 容器名 # 停止容器 docker rm 容器名 # 删除容器 docker rmi 镜像名 # 删除镜像五、 实战案例一拉取并运行 Web 服务器 Nginx场景需求部署一个静态网站或反向代理服务。bash# 1. 拉取 Nginx 官方镜像 docker pull nginx:alpine # 2. 运行 Nginx 容器 docker run -d --name my-nginx -p 8080:80 nginx:alpine-d后台运行--name指定容器名称-p 8080:80将宿主机的 8080 端口映射到容器的 80 端口现在打开浏览器访问http://localhost:8080就能看到 Nginx 的欢迎页面。生产级配置持久化bashdocker run -d --name prod-nginx \ -p 80:80 \ -v ~/nginx-conf/conf.d:/etc/nginx/conf.d \ -v ~/nginx-conf/html:/usr/share/nginx/html \ -m 256m \ # 限制内存 256MB --cpus1.0 \ # 限制 CPU 1 核 nginx:alpine选择说明alpine版本体积仅 20MB 左右适合资源受限环境。官方标准版nginx:latest约 142MB。六、实战案例二MySQL 数据库容器化部署场景需求快速启动一个 MySQL 8.0 数据库用于开发或测试。bash# 1. 拉取 MySQL 8.0 镜像 docker pull mysql:8.0 # 2. 创建数据持久化目录防止数据丢失 mkdir -p ~/docker/mysql8_data # 3. 运行 MySQL 容器 docker run -d \ --name mysql-8 \ -p 3306:3306 \ -v ~/docker/mysql8_data:/var/lib/mysql \ -e MYSQL_ROOT_PASSWORDmysecretpass \ mysql:8.0-v ~/docker/mysql8_data:/var/lib/mysql将宿主机目录挂载到容器实现数据持久化。即使容器被删除数据依然安全。-e MYSQL_ROOT_PASSWORD...通过环境变量设置 root 密码运行后可以用数据库客户端连接localhost:3306用户名为root密码为mysecretpass。环境变量扩展MySQL 镜像还支持MYSQL_DATABASE自动创建数据库、MYSQL_USER/MYSQL_PASSWORD创建新用户等环境变量。七、实战案例三PostgreSQL 数据库容器化部署场景需求使用 PostgreSQL 作为关系型数据库。bash# 1. 拉取 PostgreSQL 轻量版镜像 docker pull postgres:16-alpine # 2. 创建数据卷持久化 docker volume create pgdata # 3. 运行 PostgreSQL 容器 docker run -d \ --name postgres \ -p 5432:5432 \ -v pgdata:/var/lib/postgresql/data \ -e POSTGRES_PASSWORDSecurePass123 \ -e POSTGRES_USERapp_user \ -e POSTGRES_DBapp_db \ -e TZAsia/Shanghai \ --restart unless-stopped \ postgres:16使用alpine版本可大幅减小镜像体积数据卷pgdata使得容器即使删除重建数据仍可恢复POSTGRES_USER和POSTGRES_DB分别指定数据库用户和默认数据库--restart unless-stopped表示容器退出后自动重启除非手动停止八、实战案例四MongoDB NoSQL 数据库容器化部署场景需求运行一个 MongoDB 文档数据库。bash# 1. 拉取 MongoDB 镜像 docker pull mongo:6.0 # 2. 运行 MongoDB 容器 docker run -d \ --name mongodb \ -p 27017:27017 \ -v ~/docker/mongo_data:/data/db \ -e MONGO_INITDB_ROOT_USERNAMEadmin \ -e MONGO_INITDB_ROOT_PASSWORDadminpass \ mongo:6.0MONGO_INITDB_ROOT_USERNAME和MONGO_INITDB_ROOT_PASSWORD设置管理员账号密码默认端口 27017MongoDB 官方建议使用 6.0.x LTS 版本连接方式mongodb://admin:adminpasslocalhost:27017九、实战案例五Java 应用容器化部署附 Dockerfile环境依赖说明Java 应用需要 JDK/JRE 环境才能运行。Docker 容器通过基础镜像如openjdk提供这一依赖宿主机无需预先安装 JDK。这就是 Docker 的核心价值宿主机不需要安装任何开发环境容器自带所有依赖。方式一使用官方 Java 运行镜像体积小dockerfile# Dockerfile FROM openjdk:11-jre-slim # JRE 瘦身版体积小 WORKDIR /app COPY target/your-app.jar /app/app.jar EXPOSE 8080 ENTRYPOINT [java, -jar, /app/app.jar]方式二多阶段构建推荐镜像更小更干净dockerfile# Dockerfile多阶段构建 # 第一阶段编译打包 FROM maven:3.8-openjdk-11 AS build WORKDIR /app COPY . . RUN mvn clean package -DskipTests # 第二阶段运行只需要 JRE不包含编译工具 FROM openjdk:11-jre-slim WORKDIR /app COPY --frombuild /app/target/your-app.jar /app/app.jar EXPOSE 8080 ENTRYPOINT [java, -jar, /app/app.jar]构建与运行bashdocker build -t my-java-app:1.0 . docker run -d -p 8080:8080 --name java-app my-java-app:1.0FROM openjdk:*基础镜像自带 JRE 运行环境宿主机完全不需要安装 Java多阶段构建的优点最终镜像只包含 JRE JAR 包不包含 Maven、源码等构建产物镜像体积大幅减小十、实战案例六Go 应用容器化部署附 Dockerfile环境依赖说明Go 应用编译后是独立的二进制可执行文件运行时不需要Go 编译环境。因此可以利用这个特性做多阶段构建得到非常小的镜像。dockerfile# Dockerfile多阶段构建 - Go 专属 # 第一阶段编译 Go 代码 FROM golang:1.21-alpine AS builder WORKDIR /app COPY go.mod go.sum ./ RUN go mod download COPY . . RUN CGO_ENABLED0 GOOSlinux go build -o myapp . # 第二阶段运行仅包含二进制文件约 10-30MB FROM alpine:latest WORKDIR /root/ COPY --frombuilder /app/myapp . EXPOSE 8080 CMD [./myapp]构建与运行bashdocker build -t my-go-app:1.0 . docker run -d -p 8080:8080 my-go-app:1.0Go 编译后的二进制文件不依赖任何运行时环境因此可以用极小的alpine基础镜像运行最终镜像大小通常只有 10-30 MB是所有语言中最小的容器镜像之一宿主机完全不需要安装 Go 环境十一、网络篇多容器互联容器间通信在实际项目中一个应用往往需要连接数据库。让多个容器在同一个自定义网络中通信是最佳实践bash# 1. 创建自定义网络 docker network create mynetwork # 2. 启动数据库容器加入该网络 docker run -d --name mysql --network mynetwork -e MYSQL_ROOT_PASSWORDpass mysql:8.0 # 3. 启动 Java 应用容器同样加入该网络 docker run -d --name java-app --network mynetwork -p 8080:8080 my-java-app:1.0在 Java 应用代码中直接使用容器名称作为主机名连接数据库java// 不需要写 localhost 或 IP直接用容器名 mysql 即可 String url jdbc:mysql://mysql:3306/mydb;这样应用就通过容器名mysql访问数据库无需关心 IP 地址变化。十二、Docker Compose一键启动多容器应用当应用涉及多个容器前端 后端 数据库 Redis时手写多条docker run命令会变得非常繁琐。Docker Compose让你用一个docker-compose.yml文件定义所有服务然后一条命令启动整个应用。示例Java MySQL Nginx 一体化配置yaml# docker-compose.yml version: 3.8 services: mysql: image: mysql:8.0 environment: MYSQL_ROOT_PASSWORD: rootpass MYSQL_DATABASE: appdb volumes: - mysql_data:/var/lib/mysql networks: - app-network redis: image: redis:7-alpine networks: - app-network java-app: build: . ports: - 8080:8080 depends_on: - mysql - redis environment: SPRING_DATASOURCE_URL: jdbc:mysql://mysql:3306/appdb SPRING_DATASOURCE_USERNAME: root SPRING_DATASOURCE_PASSWORD: rootpass networks: - app-network nginx: image: nginx:alpine ports: - 80:80 volumes: - ./nginx.conf:/etc/nginx/nginx.conf depends_on: - java-app networks: - app-network volumes: mysql_data: networks: app-network:使用方式bashdocker compose up -d # 后台启动所有服务 docker compose down # 停止并移除所有服务 docker compose logs -f # 查看实时日志十三、常见环境依赖对照表理解 Docker自带环境依赖的特性很重要——宿主机不需要安装任何依赖一切都封装在镜像里应用类型所需环境依赖镜像示例说明Java 应用JDK / JREopenjdk:11-jre-slim宿主机不需要 JavaGo 应用编译阶段Go编译后不依赖golang:1.21-alpine构建 →alpine:latest运行最终二进制文件不依赖 GoNginx无nginx:alpine自带运行环境MySQL无mysql:8.0自带数据库引擎PostgreSQL无postgres:16-alpine自带数据库引擎MongoDB无mongo:6.0自带数据库引擎核心感悟Docker 的“环境依赖”是由基础镜像FROM ...提供的。宿主机上的环境除了 Docker 之外其他什么都不用装。这就是“一次打包处处运行”的真正含义。十四、总结与下一步本文从零开始带你在 Ubuntu 上完成了 Docker 的完整安装与配置、镜像加速器的设置并通过6 个实战案例Nginx、MySQL、PostgreSQL、MongoDB、Java、Go演示了主流镜像仓库的使用方法。掌握的核心技能✅ Docker 的安装与配置含国内镜像加速✅ 核心命令的使用pull、run、ps、stop、rm✅ 数据持久化挂载数据卷✅ 容器间互联自定义网络✅ Docker Compose 编排多容器应用✅ 不同语言的 Dockerfile 编写Java、Go扩展学习方向学习docker build构建自定义镜像学习推送镜像到 Docker Hub / 私有仓库学习 KubernetesK8s容器编排了解 Docker Swarm 集群管理如果本文对你有帮助欢迎点赞、收藏、转发支持有问题欢迎在评论区交流讨论
从零入门:Docker在Ubuntu上的安装、使用与主流镜像仓库实战(Java/Go/MySQL/PostgreSQL/MongoDB/Nginx
发布时间:2026/6/14 23:33:10
本文导览本文是为“容器化小白”量身定制的 Docker 一站式教程涵盖 Ubuntu 系统的完整安装配置、国内镜像加速、常用命令以及6大主流镜像Nginx、MySQL、PostgreSQL、MongoDB、Java、Go的使用案例手把手带你从零上手 Docker。一、Docker 是什么为什么要用容器Docker 是一种基于 Linux 内核的轻量级虚拟化技术它把应用程序及其运行依赖库、配置文件、环境变量等一起打包成一个可移植的容器。无论在开发机、测试机还是生产服务器只要部署了 Docker容器就能“开箱即用”。传统部署中“本地能跑线上报错”的痛点几乎人人都遇到过。Docker 正是用来解决这个问题的——把环境放进容器里和宿主机彻底隔离。相比传统虚拟机Docker 是进程级隔离启动仅需秒级资源占用不到虚拟机的 20%。一句话总结Docker ≈ 把应用程序和它的运行环境打包成一个“轻量级虚拟机”随处运行。二、Ubuntu 系统上安装 Docker2026最新实战本文全程使用Docker 官方仓库进行安装适合 Ubuntu 20.04/22.04/24.04 LTS确保稳定与安全。⚠️前置要求拥有sudo权限且系统能访问外网若内网环境需配置离线安装或镜像源。步骤1更新系统并安装依赖bashsudo apt update sudo apt install -y ca-certificates curl gnupg lsb-release这一步安装后续用到的下载工具和加密验证工具。-y表示自动确认无需手动按回车。步骤2添加 Docker 官方 GPG 密钥安全验证bashcurl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpgGPG 密钥确保下载的 Docker 是官方原版没有被篡改。步骤3添加 Docker 官方软件源bashecho deb [arch$(dpkg --print-architecture) signed-by/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable | sudo tee /etc/apt/sources.list.d/docker.list /dev/null这条命令会告诉 Ubuntu 去哪里下载 Docker系统版本会被自动识别。步骤4再次更新源并安装 Docker 引擎bashsudo apt update sudo apt install -y docker-ce docker-ce-cli containerd.iodocker-ceDocker 社区版完全免费docker-ce-cli命令行工具containerd.io容器运行时步骤5把当前用户加入 docker 组无需每次输入 sudobashsudo usermod -aG docker $USER newgrp docker默认情况下必须使用sudo才能运行 Docker 命令。把用户加入docker组后就可以直接使用 Docker 了。步骤6验证安装成功bashdocker --version # 查看版本号 docker run hello-world # 运行官方测试容器如果终端输出 “Hello from Docker!”说明安装配置成功。步骤7可选设置开机自启动bashsudo systemctl enable docker服务器用户强烈建议开启这样服务器重启后 Docker 会自动运行。三、配置国内镜像加速器解决拉取慢/失败问题截至 2026 年国内从 Docker Hub 直接拉取镜像依然面临速度缓慢、连接超时等挑战。配置国内镜像加速源是必备优化步骤。 配置方法编辑或创建 Docker 守护进程配置文件/etc/docker/daemon.jsonbashsudo mkdir -p /etc/docker sudo tee /etc/docker/daemon.json -EOF { registry-mirrors: [ https://docker.xuanyuan.me, https://docker.1ms.run, https://docker.m.daocloud.io ] } EOF然后重启 Docker 服务bashsudo systemctl restart docker2026 年最新实测可用的国内镜像源推荐镜像源地址特点轩辕镜像免费https://docker.xuanyuan.me全平台支持更新及时免费毫秒镜像https://docker.1ms.run速度极快实测可达 10MB/sDaoCloudhttps://docker.m.daocloud.io国内最早的服务之一稳定可靠配置完成后docker pull命令会自动走加速器拉取镜像。四、Docker 核心概念速览小白必读在进入实战之前先花 2 分钟理解这三个核心概念镜像Image一个只读的“模板”里面打包了应用程序及其运行环境。比如 Nginx 镜像、MySQL 镜像。容器Container镜像的运行实例。如果把镜像比作一个“光盘”容器就是光盘上正在运行的“程序”。仓库Registry存放镜像的地方类似于 GitHub 之于代码。Docker Hub 是官方公共仓库。常用命令快速参考bashdocker pull 镜像名 # 拉取镜像 docker images # 查看本地镜像列表 docker run 镜像名 # 运行容器 docker ps # 查看运行中的容器 docker ps -a # 查看所有容器含已停止 docker stop 容器名 # 停止容器 docker rm 容器名 # 删除容器 docker rmi 镜像名 # 删除镜像五、 实战案例一拉取并运行 Web 服务器 Nginx场景需求部署一个静态网站或反向代理服务。bash# 1. 拉取 Nginx 官方镜像 docker pull nginx:alpine # 2. 运行 Nginx 容器 docker run -d --name my-nginx -p 8080:80 nginx:alpine-d后台运行--name指定容器名称-p 8080:80将宿主机的 8080 端口映射到容器的 80 端口现在打开浏览器访问http://localhost:8080就能看到 Nginx 的欢迎页面。生产级配置持久化bashdocker run -d --name prod-nginx \ -p 80:80 \ -v ~/nginx-conf/conf.d:/etc/nginx/conf.d \ -v ~/nginx-conf/html:/usr/share/nginx/html \ -m 256m \ # 限制内存 256MB --cpus1.0 \ # 限制 CPU 1 核 nginx:alpine选择说明alpine版本体积仅 20MB 左右适合资源受限环境。官方标准版nginx:latest约 142MB。六、实战案例二MySQL 数据库容器化部署场景需求快速启动一个 MySQL 8.0 数据库用于开发或测试。bash# 1. 拉取 MySQL 8.0 镜像 docker pull mysql:8.0 # 2. 创建数据持久化目录防止数据丢失 mkdir -p ~/docker/mysql8_data # 3. 运行 MySQL 容器 docker run -d \ --name mysql-8 \ -p 3306:3306 \ -v ~/docker/mysql8_data:/var/lib/mysql \ -e MYSQL_ROOT_PASSWORDmysecretpass \ mysql:8.0-v ~/docker/mysql8_data:/var/lib/mysql将宿主机目录挂载到容器实现数据持久化。即使容器被删除数据依然安全。-e MYSQL_ROOT_PASSWORD...通过环境变量设置 root 密码运行后可以用数据库客户端连接localhost:3306用户名为root密码为mysecretpass。环境变量扩展MySQL 镜像还支持MYSQL_DATABASE自动创建数据库、MYSQL_USER/MYSQL_PASSWORD创建新用户等环境变量。七、实战案例三PostgreSQL 数据库容器化部署场景需求使用 PostgreSQL 作为关系型数据库。bash# 1. 拉取 PostgreSQL 轻量版镜像 docker pull postgres:16-alpine # 2. 创建数据卷持久化 docker volume create pgdata # 3. 运行 PostgreSQL 容器 docker run -d \ --name postgres \ -p 5432:5432 \ -v pgdata:/var/lib/postgresql/data \ -e POSTGRES_PASSWORDSecurePass123 \ -e POSTGRES_USERapp_user \ -e POSTGRES_DBapp_db \ -e TZAsia/Shanghai \ --restart unless-stopped \ postgres:16使用alpine版本可大幅减小镜像体积数据卷pgdata使得容器即使删除重建数据仍可恢复POSTGRES_USER和POSTGRES_DB分别指定数据库用户和默认数据库--restart unless-stopped表示容器退出后自动重启除非手动停止八、实战案例四MongoDB NoSQL 数据库容器化部署场景需求运行一个 MongoDB 文档数据库。bash# 1. 拉取 MongoDB 镜像 docker pull mongo:6.0 # 2. 运行 MongoDB 容器 docker run -d \ --name mongodb \ -p 27017:27017 \ -v ~/docker/mongo_data:/data/db \ -e MONGO_INITDB_ROOT_USERNAMEadmin \ -e MONGO_INITDB_ROOT_PASSWORDadminpass \ mongo:6.0MONGO_INITDB_ROOT_USERNAME和MONGO_INITDB_ROOT_PASSWORD设置管理员账号密码默认端口 27017MongoDB 官方建议使用 6.0.x LTS 版本连接方式mongodb://admin:adminpasslocalhost:27017九、实战案例五Java 应用容器化部署附 Dockerfile环境依赖说明Java 应用需要 JDK/JRE 环境才能运行。Docker 容器通过基础镜像如openjdk提供这一依赖宿主机无需预先安装 JDK。这就是 Docker 的核心价值宿主机不需要安装任何开发环境容器自带所有依赖。方式一使用官方 Java 运行镜像体积小dockerfile# Dockerfile FROM openjdk:11-jre-slim # JRE 瘦身版体积小 WORKDIR /app COPY target/your-app.jar /app/app.jar EXPOSE 8080 ENTRYPOINT [java, -jar, /app/app.jar]方式二多阶段构建推荐镜像更小更干净dockerfile# Dockerfile多阶段构建 # 第一阶段编译打包 FROM maven:3.8-openjdk-11 AS build WORKDIR /app COPY . . RUN mvn clean package -DskipTests # 第二阶段运行只需要 JRE不包含编译工具 FROM openjdk:11-jre-slim WORKDIR /app COPY --frombuild /app/target/your-app.jar /app/app.jar EXPOSE 8080 ENTRYPOINT [java, -jar, /app/app.jar]构建与运行bashdocker build -t my-java-app:1.0 . docker run -d -p 8080:8080 --name java-app my-java-app:1.0FROM openjdk:*基础镜像自带 JRE 运行环境宿主机完全不需要安装 Java多阶段构建的优点最终镜像只包含 JRE JAR 包不包含 Maven、源码等构建产物镜像体积大幅减小十、实战案例六Go 应用容器化部署附 Dockerfile环境依赖说明Go 应用编译后是独立的二进制可执行文件运行时不需要Go 编译环境。因此可以利用这个特性做多阶段构建得到非常小的镜像。dockerfile# Dockerfile多阶段构建 - Go 专属 # 第一阶段编译 Go 代码 FROM golang:1.21-alpine AS builder WORKDIR /app COPY go.mod go.sum ./ RUN go mod download COPY . . RUN CGO_ENABLED0 GOOSlinux go build -o myapp . # 第二阶段运行仅包含二进制文件约 10-30MB FROM alpine:latest WORKDIR /root/ COPY --frombuilder /app/myapp . EXPOSE 8080 CMD [./myapp]构建与运行bashdocker build -t my-go-app:1.0 . docker run -d -p 8080:8080 my-go-app:1.0Go 编译后的二进制文件不依赖任何运行时环境因此可以用极小的alpine基础镜像运行最终镜像大小通常只有 10-30 MB是所有语言中最小的容器镜像之一宿主机完全不需要安装 Go 环境十一、网络篇多容器互联容器间通信在实际项目中一个应用往往需要连接数据库。让多个容器在同一个自定义网络中通信是最佳实践bash# 1. 创建自定义网络 docker network create mynetwork # 2. 启动数据库容器加入该网络 docker run -d --name mysql --network mynetwork -e MYSQL_ROOT_PASSWORDpass mysql:8.0 # 3. 启动 Java 应用容器同样加入该网络 docker run -d --name java-app --network mynetwork -p 8080:8080 my-java-app:1.0在 Java 应用代码中直接使用容器名称作为主机名连接数据库java// 不需要写 localhost 或 IP直接用容器名 mysql 即可 String url jdbc:mysql://mysql:3306/mydb;这样应用就通过容器名mysql访问数据库无需关心 IP 地址变化。十二、Docker Compose一键启动多容器应用当应用涉及多个容器前端 后端 数据库 Redis时手写多条docker run命令会变得非常繁琐。Docker Compose让你用一个docker-compose.yml文件定义所有服务然后一条命令启动整个应用。示例Java MySQL Nginx 一体化配置yaml# docker-compose.yml version: 3.8 services: mysql: image: mysql:8.0 environment: MYSQL_ROOT_PASSWORD: rootpass MYSQL_DATABASE: appdb volumes: - mysql_data:/var/lib/mysql networks: - app-network redis: image: redis:7-alpine networks: - app-network java-app: build: . ports: - 8080:8080 depends_on: - mysql - redis environment: SPRING_DATASOURCE_URL: jdbc:mysql://mysql:3306/appdb SPRING_DATASOURCE_USERNAME: root SPRING_DATASOURCE_PASSWORD: rootpass networks: - app-network nginx: image: nginx:alpine ports: - 80:80 volumes: - ./nginx.conf:/etc/nginx/nginx.conf depends_on: - java-app networks: - app-network volumes: mysql_data: networks: app-network:使用方式bashdocker compose up -d # 后台启动所有服务 docker compose down # 停止并移除所有服务 docker compose logs -f # 查看实时日志十三、常见环境依赖对照表理解 Docker自带环境依赖的特性很重要——宿主机不需要安装任何依赖一切都封装在镜像里应用类型所需环境依赖镜像示例说明Java 应用JDK / JREopenjdk:11-jre-slim宿主机不需要 JavaGo 应用编译阶段Go编译后不依赖golang:1.21-alpine构建 →alpine:latest运行最终二进制文件不依赖 GoNginx无nginx:alpine自带运行环境MySQL无mysql:8.0自带数据库引擎PostgreSQL无postgres:16-alpine自带数据库引擎MongoDB无mongo:6.0自带数据库引擎核心感悟Docker 的“环境依赖”是由基础镜像FROM ...提供的。宿主机上的环境除了 Docker 之外其他什么都不用装。这就是“一次打包处处运行”的真正含义。十四、总结与下一步本文从零开始带你在 Ubuntu 上完成了 Docker 的完整安装与配置、镜像加速器的设置并通过6 个实战案例Nginx、MySQL、PostgreSQL、MongoDB、Java、Go演示了主流镜像仓库的使用方法。掌握的核心技能✅ Docker 的安装与配置含国内镜像加速✅ 核心命令的使用pull、run、ps、stop、rm✅ 数据持久化挂载数据卷✅ 容器间互联自定义网络✅ Docker Compose 编排多容器应用✅ 不同语言的 Dockerfile 编写Java、Go扩展学习方向学习docker build构建自定义镜像学习推送镜像到 Docker Hub / 私有仓库学习 KubernetesK8s容器编排了解 Docker Swarm 集群管理如果本文对你有帮助欢迎点赞、收藏、转发支持有问题欢迎在评论区交流讨论