【Docker】安装及使用

1. 安装Docker Desktop

Docker Desktop是官方提供的桌面版Docker客户端,在Mac上使用Docker需要安装这个工具。

  1. 访问 Docker官方页面 并下载Docker Desktop for Mac。
  2. 打开下载的.dmg文件,并拖动Docker图标到应用程序文件夹。
  3. 安装完成后,打开Docker Desktop,等待Docker启动(菜单栏会出现一个鲸鱼图标)。

要验证安装是否成功,可以打开Terminal并运行以下命令:

bash 复制代码
docker --version

你应该看到Docker版本信息,例如:Docker version 20.10.7, build f0df350

1.1 配置 Docker Desktop

  • 在"Resources"选项中可以调整Docker使用的资源(CPU、内存等),根据你的需求适当配置。

2. Docker基本概念

在使用Docker前,了解以下几个核心概念非常重要:

  • 镜像(Image): 镜像是一个包含程序运行环境和代码的只读模板。类似于虚拟机的快照。
  • 容器(Container): 容器是镜像的运行实例。它是独立的、隔离的应用程序执行环境。
  • Dockerfile: 用于定义如何构建一个Docker镜像的文件,里面包含了构建镜像的步骤。
  • Docker Hub: 类似于GitHub,是Docker官方提供的镜像仓库,用户可以从这里下载镜像或上传自定义镜像。

3. Docker常用命令

以下是一些常用的Docker命令,后面会详细介绍这些命令在开发中的具体应用:

  • docker pull <镜像>:从Docker Hub拉取指定镜像。
  • docker build -t <镜像名> .:根据当前目录的Dockerfile构建镜像。
  • docker run <镜像>:运行镜像创建容器。
  • docker ps:查看正在运行的容器。
  • docker stop <容器ID>:停止一个运行中的容器。
  • docker rm <容器ID>:删除一个容器。
  • docker rmi <镜像ID>:删除一个镜像。
  • docker exec -it <容器ID> /bin/bash:进入一个运行中的容器。

4. Java后端开发中使用Docker

假设我们有一个Java Spring Boot项目,我们可以通过Docker来运行它。

4.1 创建Dockerfile

首先,在项目的根目录下创建一个名为Dockerfile的文件,并编写以下内容:

dockerfile 复制代码
# 使用OpenJDK镜像作为基础镜像
FROM openjdk:11-jdk-slim

# 设置工作目录
WORKDIR /app

# 将当前目录下的所有文件复制到容器中的/app目录
COPY . /app

# 编译Spring Boot应用程序
RUN ./mvnw package

# 暴露Spring Boot的默认端口8080
EXPOSE 8080

# 运行应用程序
CMD ["java", "-jar", "target/your-app.jar"]

4.2 构建镜像并运行容器

  1. 在项目根目录打开终端,运行以下命令构建镜像:
bash 复制代码
docker build -t springboot-app .
  1. 构建完成后,运行镜像并创建容器:
bash 复制代码
docker run -p 8080:8080 springboot-app

此时,Java Spring Boot应用程序已经在Docker容器中运行,可以通过访问http://localhost:8080来访问服务。

5. Python后端开发中使用Docker

假设我们有一个Flask应用程序,以下是如何使用Docker来运行它。

5.1 创建Dockerfile

同样的,我们在Flask项目的根目录下创建一个Dockerfile文件:

dockerfile 复制代码
# 使用python镜像作为基础镜像
FROM python:3.9-slim

# 设置工作目录
WORKDIR /app

# 复制当前目录下的所有文件到容器中的/app目录
COPY . /app

# 安装Flask依赖
RUN pip install -r requirements.txt

# 暴露Flask默认端口5000
EXPOSE 5000

# 运行Flask应用程序
CMD ["flask", "run", "--host=0.0.0.0"]

5.2 构建镜像并运行容器

  1. 构建镜像:
bash 复制代码
docker build -t flask-app .
  1. 运行镜像并创建容器:
bash 复制代码
docker run -p 5000:5000 flask-app

此时,Flask应用程序已经在Docker容器中运行,可以通过访问http://localhost:5000来访问服务。

6. Docker Compose使用

如果你的项目需要多个服务(例如,后端、数据库、缓存等),可以使用Docker Compose来管理多个容器。

6.1 创建docker-compose.yml

在项目根目录下创建一个docker-compose.yml文件。以下是一个Spring Boot和MySQL的示例:

yaml 复制代码
version: '3'
services:
  app:
    image: springboot-app
    build:
      context: .
    ports:
      - "8080:8080"
    depends_on:
      - db
  db:
    image: mysql:8.0
    environment:
      MYSQL_ROOT_PASSWORD: rootpassword
      MYSQL_DATABASE: mydatabase
    ports:
      - "3306:3306"

6.2 使用Docker Compose

  1. 启动所有服务:
bash 复制代码
docker-compose up --build
  1. 停止并删除所有服务:
bash 复制代码
docker-compose down

7. 常见问题及解决方法

7.1 容器端口无法访问

  • 确认容器的端口映射是否正确,使用docker ps查看容器运行状态,确保-p <host_port>:<container_port>映射存在。
  • 检查防火墙或网络设置,确保端口是开放状态。

7.2 容器内存不足

  • 可以通过Docker Desktop的"Preferences" -> "Resources"来增加分配给Docker的内存。

7.3 镜像或容器清理

  • 使用docker system prune命令来清理无用的镜像和容器,释放空间:
bash 复制代码
docker system prune -a
相关推荐
直饮水观察哨7 小时前
商用净水器亲测对比,哪个更专业?
容器
Suchadar8 小时前
Docker基础命令(二)——数据卷管理端口映射与容器互联
运维·docker·容器
firstacui8 小时前
Docker容器网络管理与容器数据卷管理
运维·docker·容器
codeRichLife9 小时前
docker拷贝,导入/导出等常用命令
docker
努力搬砖的咸鱼10 小时前
部署你的第一个应用到 K8s
微服务·云原生·容器·kubernetes
lpruoyu11 小时前
【Docker进阶-01】Docker隔离原理与可视化界面-Portainer
docker
舰长11511 小时前
使用 kubeadm搭建生产环境的单 master 节点 K8S 集群(一)
云原生·容器·kubernetes
Swift社区12 小时前
Docker 构建 Python FastAPI 镜像最佳实践
python·docker·fastapi
API开发12 小时前
CentOS 单独安装Docker Compose v2
linux·docker·centos·docker compose
hwj运维之路12 小时前
Docker面试题汇总系列
运维·docker·云原生·容器