1. 安装Docker和Docker Compose
首先,先介绍一下Docker与Docker Compose。
1、Docker:
功能:Docker是一个开源的容器化平台,用于开发、打包和运行应用程序。它利用容器技术(如Docker容器)来打包应用及其所有依赖项,以确保应用在任何环境中都能以相同的方式运行。
2、Docker Compose:
Docker Compose是一个用于定义和运行多容器Docker应用程序的工具。它使用YAML文件(docker-compose.yml)来配置应用程序的服务,并通过一个命令集合来启动、停止和管理多个Docker容器。
安装Docker
# 更新apt包索引
sudo apt-get update# 安装依赖包,以便可以通过HTTPS使用repository
sudo apt-get install \apt-transport-https \ca-certificates \curl \gnupg \lsb-release# 添加Docker的官方GPG key
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg# 设置stable repository
echo \"deb [arch=amd64 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# 安装Docker Engine
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io
安装Docker Compose
# 下载最新的Docker Compose二进制文件
sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose# 授予执行权限
sudo chmod +x /usr/local/bin/docker-compose# 创建软链接
sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose# 验证安装
docker-compose --version
2. 编写Dockerfile
在Web应用的根目录下创建一个Dockerfile,用来定义应用的环境和运行时配置。以下是一个示例Dockerfile(适用于Node.js应用):
# 基础镜像
FROM node:14# 设置工作目录
WORKDIR /app# 复制依赖描述文件并安装依赖
COPY package.json package-lock.json ./
RUN npm install# 复制应用代码
COPY . .# 暴露应用端口
EXPOSE 3000# 启动应用
CMD ["npm", "start"]
3. 编写docker-compose.yml
使用docker-compose可以更方便地定义和管理多个Docker容器的服务。在项目根目录创建一个docker-compose.yml文件,定义你的服务配置:
version: '3'
services:web:build:context: .dockerfile: Dockerfileports:- "3000:3000"depends_on:- dbdb:image: mysql:5.7environment:MYSQL_ROOT_PASSWORD: exampleMYSQL_DATABASE: myappMYSQL_USER: userMYSQL_PASSWORD: passwordports:- "3306:3306"
4. 构建和运行应用
现在可以构建和运行你的Web应用了:
构建镜像
docker-compose build
启动服务
这会启动包含你的Web应用和数据库服务的Docker容器。其中,-d
参数表示以后台模式运行。
docker-compose up -d
或者
构建镜像并运行容器
构建 Docker 镜像:
docker build -t my-web-app .
运行 Docker 容器:
docker run -d -p 8000:3000 my-web-app
在上述命令中,-p 8000:3000
将容器的 3000 端口映射到主机的 8000 端口,可以根据实际需要进行调整。打开浏览器,在地址栏输入 http://localhost:8000
,即可访问部署在 Docker 容器中的 Web 应用程序。
这两个方法的核心目标都是构建和运行你的 Web 应用程序,但它们的实现方式略有不同:
-
使用 docker-compose:
docker-compose build
会根据你项目中的docker-compose.yml
文件构建所有服务的镜像,包括定义在该文件中的所有服务(例如 Web 应用和数据库)。docker-compose up -d
会启动所有定义在docker-compose.yml
文件中的服务容器。这种方法更适合于复杂的应用,因为它能够管理多个服务之间的依赖关系和启动顺序。
-
单独使用 Docker 命令:
docker build -t my-web-app .
这个命令只会构建当前目录下的 Dockerfile 所定义的单个镜像,你需要手动管理每个服务的构建和依赖关系。docker run -d -p 8000:3000 my-web-app
会基于刚构建的镜像运行一个容器,并将容器的端口映射到主机的指定端口。这种方式更适合简单的单一容器应用部署。
区别总结:
- 使用
docker-compose
更适合于复杂的多容器应用部署,它能够集中管理所有服务的构建和运行,确保它们按需启动并正确交互。 - 单独使用 Docker 命令适合于简单的应用部署,或者在需要手动控制每个服务的启动和停止时使用。
因此,选择使用哪种方法取决于你的应用复杂度和管理需求。
讲一下区别:
docker-compose build与docker build -t mydjangoapp .
docker-compose build
- 作用:用于根据
docker-compose.yml
文件中的定义构建多个服务的 Docker 镜像。
- 使用场景:适用于包含多个服务的应用,每个服务在项目中可能有自己的 Dockerfile 和依赖关系,通过
docker-compose.yml
文件统一管理。
docker build -t mydjangoapp .
- 作用:用于构建单个 Docker 镜像,并为该镜像指定一个名称和标签(tag)。
- 使用场景:适用于单个服务或应用的构建,例如只有一个应用需要打包成 Docker 镜像。
区别总结:
多服务 vs 单服务:
docker-compose build
适用于同时构建多个相关服务的镜像,通过 docker-compose.yml
管理服务之间的依赖关系。
docker build
更适合于单个服务或应用的镜像构建,简单直接。