什么是docker
当你部署一个项目在一个服务器时是否有过因项目依赖缺失,版本不对而苦苦调试,浪费了很多时间在项目部署上,而docker正是为我们解决这一烦恼的工具,它将一个应用程序所依赖的环境打包在一个容器中,每个容器都是一个独立的容器,无需因为外部环境的改变而改变,大大降低了开发者部署的效率。
ps:安装可以看下面的文章;
Docker 安装 (完整详细版)_docker安装-CSDN博客
基础命令
运行命令拆解:
docker run -d --name myDocker -p 3306:3306 mysql
//-d是让容器在后台运行
//--name是指定创建的容器的名称
//-p 是设置端口映射,外部访问端口/内部真实端口
//最后的参数是指定运行的镜像的名字
docker常见命令:
//启动停止docker服务
start docker
version
stop docker
restart docker
//查看版本
docker --version
//搜索镜像
docker search 镜像名
//拉取镜像
docker pull <image_name>:<tag>
//列出本地镜像
docker images
//删除镜像
docker rmi <image_name_or_id>
//列出运行中的容器
docker ps
docker ps -a(列出所有的运行的和不运行的docker容器)
//停止启动容器
docker stop <container_id_or_name>
docker start <container_id_or_name>
//删除容器
docker stop <container_id_or_name>
//查看容器日志
docker logs <container_id_or_name>
//进入正在运行的容器
docker exec -it <container_id_or_name> /bin/bash
数据卷:
数据卷是 Docker 实现数据持久化和共享的重要技术。数据卷位于 Docker 容器的文件系统之外,存储在宿主机(服务器)的文件系统中。Docker 通过将数据卷挂载到容器内的指定目录,实现数据的持久化和共享。一个数据卷可以被多个 Docker 容器同时挂载和访问,保证了数据的一致性和共享性。
数据卷管理命令:
//挂载数据卷
docker run -d --name my_nginx -v /root/data/html:/usr/share/nginx/html -p 80:80 nginx
//列出数据卷
docker volume ls
//查看数据卷详情
docker volume inspect <volume_name>
//删除数据卷
docker volume rm <volume_name>
构建镜像
基本框架(这里引用了黑马Docker快速入门视频的资料)
dockerfile文件示例(构建基于jdk22的springBoot项目)
# 使用 JDK 22 基础镜像
FROM openjdk:22-jdk
# 维护者信息
LABEL maintainer="youremail@example.com"
# 创建应用目录
RUN mkdir -p /app
# 设置工作目录
WORKDIR /app
# 复制项目的 pom.xml 和其他依赖文件到工作目录
COPY pom.xml /app
# 下载项目的依赖包(利用 Docker 的缓存功能,加速后续构建)
RUN ./mvnw dependency:go-offline -B
# 复制项目的源代码到工作目录
COPY src /app/src
# 构建 Spring Boot 应用
RUN ./mvnw package -DskipTests
# 暴露端口
EXPOSE 8080
# 运行 Spring Boot 应用
CMD ["java", "-jar", "target/your-springboot-app.jar"]
docker build -t myapp:v1 /path/to/your/Dockerfile//构建镜像命令
docker网络管理(实现容器之间的通信)
docker容器通信
默认情况下,Docker 使用桥接网络模式。当你在宿主机上运行多个容器时,它们会连接到一个虚拟的桥接网络(bridge
网络)。容器之间可以通过以下方式进行通信:
- 通过容器名称: 默认的桥接网络模式支持容器名称解析。容器可以通过其他容器的名称访问它们。例如,如果有两个容器
web
和db
,web
容器可以通过db
的名称访问db
容器。 - 通过 IP 地址: 容器在桥接网络中会被分配一个 IP 地址,容器可以通过 IP 地址进行通信。可以使用
docker inspect <container_name>
命令查找容器的 IP 地址。
docker网络管理命令
//列出docker网络
docker network ls
//创建docker网络
docker network create <network_name>
//连接docker网络
docker network connect <network_name> <container_id_or_name>
//断开docker网络
docker network disconnect <network_name> <container_id_or_name>
Docker Compose
Docker Compose 是一个用于定义和运行多容器 Docker 应用的工具。它允许你使用一个名为 docker-compose.yml
的配置文件来定义应用的服务、网络和数据卷,然后通过简单的命令启动所有这些服务。这使得管理和配置多容器应用变得更加方便和高效。
示例:
version: '3.8'
services:
web:
image: nginx:latest
ports:
- "8080:80"
volumes:
- ./html:/usr/share/nginx/html
db:
image: mysql:latest
environment:
MYSQL_ROOT_PASSWORD: example
MYSQL_DATABASE: mydb
volumes:
- db_data:/var/lib/mysql
volumes:
db_data:
Dockercompose常用命令
//启动服务
docker-compose up
//启动服务,后台运行
docker-compose up -d
//停止服务
docker-compose down
//查看状态
docker-compose ps