docker
docker
基本概念
仓库(Repository)
类似于 git,可看做是一个代码控制中心,用来保存镜像
镜像(Image)
相当于是一个 root 文件系统
容器(Container)
镜像和容器的关系,java 中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实例,容器可以被创建、启动、停止、删除、暂停等
在 centos-7 上安装 Docker 和 Docker Compose
一、安装 Docker
1. 卸载旧版本(若有)
sudo yum remove docker
docker-client
docker-client-latest
docker-common
docker-latest
docker-latest-logrotate
docker-logrotate
docker-engine
2. 安装依赖包
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
3. 添加 Docker 仓库
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
4. 安装 Docker Engine
sudo yum install -y docker-ce docker-ce-cli containerd.io
5. 配置 docker 镜像加速器(常常不可用,若如此,则替换其他可用源地址)
i. 编辑文件 /etc/docker/daemon.json (若无 daemon.json 文件则在此目录下创建)
{
"registry-mirrors": [
"https://docker.1ms.run",
"https://mirror.baidubce.com"
]
}
ii. 若 docker 已启动,则重启,使其生效
sudo systemctl start docker
5. 启动 Docker
sudo systemctl start docker
6. 设置开机自启
sudo systemctl enable docker
7. 验证安装
sudo docker --version
二、安装 Docker Compose
1. 下载 Docker Compose 二进制文件.[版本号可替换为最新稳定版(参考官网:https://github.com/docker/compose/releases)]
sudo curl -L "https://github.com/docker/compose/releases/download/v2.24.6/docker-compose-linux-x86_64" -o /usr/local/bin/docker-compose
2. 赋予执行权限
sudo chmod +x /usr/local/bin/docker-compose
3. 创建软链接(可选)
sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
说明:
Linux 系统会从 PATH 环境变量指定的目录中查找可执行命令。默认情况下:
1. /usr/bin 是系统级命令的标准存放目录,已包含在 PATH 中,任何用户都能直接调用该目录下的命令。
2. /usr/local/bin 通常用于存放用户手动安装的软件,虽然大部分系统也会将其加入 PATH,但少数情况下可能存在路径识别问题。
创建软链接后,无论系统是否识别 /usr/local/bin,都能通过 /usr/bin/docker-compose 找到并执行命令,避免出现 “docker-compose: command not found” 的错误。
简单说:这一步是为了让系统更可靠地识别 docker-compose 命令,确保在任何目录下都能直接使用 docker-compose 而不报错。
4. 验证安装
docker compose version
安装应用
创建编排文件: docker-compose.yaml (yaml 文件内容中不要有 tab(idea 提示会红色波浪线),若有,使用空格)
version: '3.1'
services:
wordpress:
image: wordpress
container_name: wordpress_app
restart: always
ports:
# 映射端口,外部通过宿主机端口访问容器内的应用
# 第 1 个端口: 宿主机的端口
# 第 2 个端口: 应用在容器内部的端口(wordpress 默认 80 端口)
- "80:80"
environment:
# 数据库地址
WORDPRESS_DB_HOST: wordpress_db
# 数据库用户名
WORDPRESS_DB_USER: wordpress
# 数据库密码
WORDPRESS_DB_PASSWORD: wordpress
# 数据库名称
WORDPRESS_DB_NAME: wordpress
# 数据卷 volume /ˈvɒljuːm/ n.卷,册,书卷. docker 持久化数据的方式: 宿主机路径挂载容器路径,和容器解耦,删除容器时不会自动删除 volume
volumes:
# - 宿主机路径:容器路径
- /usr/local/test/my_wordpress:/var/www/html
db:
image: mysql:5.7
container_name: wordpress_db
restart: always
ports:
- "3306:3306"
environment:
# 数据库名称
MYSQL_DATABASE: wordpress
# 数据库用户名
MYSQL_USER: wordpress
# 数据库密码
MYSQL_PASSWORD: wordpress
# 数据库ROOT用户密码
MYSQL_RANDOM_ROOT_PASSWORD: root
volumes:
- /usr/local/test/my_mysql:/var/lib/mysql
启动容器
docker compose -f docker-compose.yaml up -d
浏览器访问 wordpress
ip:80
docker 部署 springboot
https://blog.csdn.net/m0_70590680/article/details/147140603
准备工作
-
创建目录: /usr/local/test/docker-springboot 和 /usr/local/test/docker-springboot/logs
-
logback 中指定的日志文件使用相对目录
logs/app.log ... -
将构建好的 demo.jar 包上传到 /usr/local/test/docker-springboot 目录下.(这里为方便测试,手动构建,手动上传)
-
pom.xml 指定主类时,skip 不能为 true
通过 maven 打包时,若设置 skip 为 true,则生成的是普通的 jar 文件,而不是可执行的Spring Boot fat jar,因此这里不能设置为 true
扩展: 什么时候可以设置为 true? -> 生成普通的 jar 供其他模块依赖时
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>${spring-boot.version}</version>
<configuration>
<!-- 指定主类 -->
<mainClass>com.example.MyApplication</mainClass>
<!-- skip 为 true 时,执行 java -jar xxx.jar 会报错:no main manifest attribute -->
<!-- <skip>true</skip> -->
</configuration>
<executions>
<execution>
<id>repackage</id>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
创建 Dockerfile 文件(文件名: Dockerfile,没有文件后缀名)
# 选择基础镜像
FROM openjdk:11-jre-slim
# 设置工作目录
WORKDIR /app
# 复制 jar 文件到容器中
COPY demo.jar test.jar
# 设置容器启动时执行的命令
ENTRYPOINT ["java", "-jar", "test.jar"]
基于 Dockerfile 构建镜像,并定义镜像 id,命令: docker build -t <镜像名> <Dockerfile 路径>
docker build -t my_image . // . 表示当前目录
运行容器
docker run -d -p 8088:8080 --name my_container -v /usr/local/test/docker-springboot/logs:/app/logs my_image
-d: 后台运行
-p 8088:8080:映射端口,外部通过宿主机端口访问容器内的应用.8088: 宿主机端口,8080: 应用在容器内的端口,对于 springboot 应用,在主配置文件中配置
--name my_container: 定义容器名称
-v /usr/local/test/docker-springboot/logs:/app/logs: 目录挂载,容器内该目录的日志会实时同步到宿主机,避免容器删除后日志丢失
my_image: 指定镜像(需确保本地已存在该镜像,或镜像仓库已存在)
查看日志
docker logs -f my_container
常用 docker 命令
容器启停
创建并启动容器(-d: 后台运行,--name: 命名容器id)
docker run -itd --name my_container image_name
启动/停止/重启容器
docker start/stop/restart container_id
删除运行中的容器(需先停止)
docker rm container_id
状态监控
查看运行中的容器
docker ps
查看容器资源占用
docker stats container_id
查看容器详细信息(包括IP、挂载等)
docker inspect container_id
镜像管理
拉取镜像(:tag 指定版本)
docker pull nginx:alpine
推送本地镜像到远程镜像仓库(如: Docker Hub、私有仓库等)
docker push [OPTIONS] NAME[:TAG]
查看本地镜像列表
docker images
删除镜像(需先删除依赖容器)
docker rmi image_id
镜像构建
通过 Dockerfile 构建镜像(.表示当前目录,因此要先进入 Dockerfile 所在目录)
docker build -t my_image .
导出/导入镜像
docker save -o nginx.tar nginx:latest
docker load -i nginx.tar
网络配置(未测试)
创建自定义网络
docker network create my_network
查看网络列表
docker network ls
将容器连接到网络
docker network connect my_network container_id
端口映射
启动时映射端口(宿主机端口:容器端口)
docker run -p 8080:80 nginx
查看端口绑定情况
docker port container_id
数据持久化
创建简单卷
docker volume create my_volume
查看数据卷
docker volume inspect my_volume
[
{
"CreatedAt": "2025-10-06T21:31:40+08:00",
"Driver": "local",
"Labels": null,
"Mountpoint": "/var/lib/docker/volumes/my_volume/_data", // 该数据卷存储在宿主机的目录
"Name": "my_volume",
"Options": null,
"Scope": "local"
}
]
挂载宿主机数据卷到容器内目录(若 my_volume 不存在,则先创建,相当于先执行 docker volume create my_volume)
docker run -v my_volume:容器内目录 image_name # 容器内目录示例: /aaa/bbb/ccc
- 双向同步,任何一边变更,立刻同步到另一边
- 适合生产环境(宿主机卷数据存储在 /var/lib/docker/volumes/ 目录下,普通用户无权限直接修改,需 sudo 或加入 docker 用户组)
绑定宿主机目录到容器内目录
docker run -v 宿主机目录:容器内目录 image_name
- 双向同步,任何一边变更,立刻同步到另一边
- 适合开发环境
调试与维护
进入容器内部
docker exec -it container_id /bin/bash
退出容器内部
exit 或者 Ctrl + D
查看容器日志
docker logs -f container_id

浙公网安备 33010602011771号