一般安装在linux宿主机上
用镜像创建容器——用模具做糕点
-
镜像:包含了应用程序、程序运行的系统函数库、运行配置等文件的文件包。
-
容器: Docker 运行镜像时创建的轻量级、可移植、隔离的虚拟环境
一、核心
1. 常用命令
-
systemctl start docker 启动 Docker 服务。
-
解释:
systemctl是 Linux 系统中的服务管理工具(属于 systemd 的一部分),用于控制系统的服务(如启动、停止、重启)。start docker表示启动 Docker 服务。
-
-
systemctl status docker 查看 Docker 服务的运行状态。
-
下载镜像:docker pull
-
列举下载过的镜像:docker images
-
删除镜像:docker rmi
-
查看正在运行的容器(ps:进程状况)docker ps
- -a:查看所有容器
-
删除容器:docker rm
-
创建容器:docker start
-
启动容器:docker start
-
停止运行容器:docker stop
-
查看容器信息:docker inspect
-
查看容器日志:docker logs (-f:滚动查看日志)
-
查看容器内的进程情况:docker exec
-
创建并立即启动 容器:docker run [options] [镜像]
【-d】:后台执行 (detached mode 分离模式)不阻塞当前窗口 【-p 80:80】:把宿主机的端口和容器的端口进行映射/绑定 前面是宿主机的端口,后面是容器的端口(先外后内)
为什么要进行端口绑定?
容器内的网络和宿主机是隔离的,
如果在容器中运行 nginx,无法直接通过 localhost:80 访问到的

2. 挂载
绑定:共享宿主机文件(如代码、配置)
挂载卷:相当于 做数据的持久化保存 (备份)
本地挂载
将主机系统的指定目录或文件直接挂载到容器内部,实现主机与容器之间的数据共享。
- 【-v 宿主机目录:容器内目录】—— 把宿主机目录和容器目录进行映射
【注意】:
本地目录必须以/或·/开头,如果直接以名称开头,会被识别为数据卷而非本地目录
-v mysql:/var/lib/mysql 会被识别为一个数据卷,数据卷叫mysql
-v ./mysql:/var/lib/mysql 会被识别为当前目录下的mysql目录
【特点】
- 路径明确:需指定主机上的绝对路径 (如
/home/user/data:/app/data) - 权限控制:容器对主机文件的读写权限取决于主机目录的权限。
- 用途:适合开发环境(如代码热更新)、配置文件同步等
- 代码热更新: 应用程序运行过程中,无需停止或重启服务,即可动态加载、修改和替换部分代码或资源文件,并立即生效的技术。
- 缺点:依赖主机路径,可移植性差(不同环境路径可能不同)
命名卷挂载
-
【-v 卷的名字:容器内目录】创建一个存储空间(命名卷)
-
docker volume create [卷的名字] 创建卷
-
docker volume inspect [卷的名字] 查看卷的详细信息(所在目录等)
-
docker volume ls 列出所有的卷
-
docker volume rm [卷的名字] 删除卷
-
docker volume prune -a 删除没有任何容器在使用的卷
-
【特点】
- 自动管理:Docker 负责创建、备份和清理卷数据。
- 添加容器的时候会自动创建一个匿名数据卷
- 可移植性:卷名称唯一,不依赖主机路径,适合生产环境。
- 性能优化:某些存储驱动(如
overlay2)对卷有性能优化。 - 用途:数据库数据、持久化存储等。
3. 总结:
何时使用本地挂载?
- 需要直接访问主机文件(如配置文件、代码目录)
- 开发阶段快速迭代(修改主机文件后容器内立即生效)
何时使用命名卷?
- 需要持久化数据且不关心主机路径(如数据库、日志)
- 需要跨主机迁移数据(通过
docker cp或备份卷目录) - 需要 Docker 自动管理生命周期(如清理无用卷)
4. docker run 的其他参数
【-e】账号密码

【 --network】指明连接的网络(网卡)
【-it --rm】 一般一起使用,用于临时调试容器
-
-it :让控制台进入容器进行交互
-
–rm:容器停止就删除
【 --restart】容器在停止时的策略,后接策略
-
always:
-
unless-stopped:手动停止的容器就不会重启了
5. 网络
默认下,所有容器都是以bridrge的方式连接到Docker的一个虚拟网桥上:

自定义网路
加入自定义网路的容器可以通过容器名相互访问。【ping 容器名】
| 命令 | 说明 |
|---|---|
| docker network create | 创建一个网络 |
| docker network ls | 查看所有网络 |
| docker network rm | 删除指定网络 |
| docker network prune | 清除未使用的网络 |
| docker network connect | 使指定容器连接加入某网络 |
| docker network disconnect | 使指定容器连接离开某网络 |
| docker network inspect | 查看网络详细信息 |
当启动容器时,使用 --network 将容器连接到指定的网络.
docker run -it --network=my_network alpine sh
二、应用
√ 本地目录挂载
-
创建MySQL容器,并基于本地目录挂载实现MySQL容器数据目录、配置文件、初始化脚本的目录挂载。
-
①挂载/root/mysql/data到容器内的/var/lib/mysql目录
-
②挂载/root/mysql/init到容器内的/docker-entrypoint-initdb.d目录(sql脚本)
-
③挂载/root/mysql/conf到容器内的/etc/mysql/conf.d目录
-
docker run -d \
--name mysql \
-p 3307:3306 \
-e MYSQL_ROOT_PASSWORD=123 \
-e TZ=Asia/Shanghai \
-v /root/mysql/data:/var/lib/mysql \
-v /root/mysql/init:/docker-entrypoint-initdb.d \
-v /root/mysql/conf:/etc/mysql/conf.d \
mysql:8
√ √ 自定义镜像
镜像就是包含了应用程序、程序运行的系统函数库、运行配置等文件的文件包。
- 构建镜像的过程其实就是把上述文件打包的过程。
Dockerfile
Dockerfile reference | Docker Docs
Dockerfile就是一个文本文件,其中包含一个个的指令(Instruction),用指令来说明要执行什么操作来构建镜像。
- Docker可以根据Dockerfile帮我们构建镜像
1. 常用命令:
| 指令 | 说明 | 示例 |
|---|---|---|
| FROM | 指定基础镜像 | FROM centos:7 |
| ENV | 设置环境变量,可在后面指令使用 | ENV key=value |
| COPY | 拷贝本地文件到镜像的指定目录 | COPY ./jdk17.tar.gz /tmp |
| RUN | 执行Linux的shell命令,一般是安装过程的命令 | RUN tar -zxvf /tmp/jdk17.tar.gz |
| EXPOSE | 指定容器运行时监听的端口,是给镜像使用者看的 | EXPOSE 8080 |
| ENTRYPOINT | 镜像中应用的启动命令,容器运行时调用 | ENTRYPOINT java -jar xx.jar |
2. 示例: Dockerfile 描述镜像结构
# 使用 CentOS 7 作为基础镜像
FROM centos:7
# 添加 JDK 到镜像中
COPY jdk17.tar.gz /usr/local/
RUN tar -xzf /usr/local/jdk17.tar.gz -C /usr/local/ && rm /usr/local/jdk17.tar.gz
# 设置环境变量
ENV JAVA_HOME=/usr/local/jdk-17.0.10
ENV PATH=$JAVA_HOME/bin:$PATH
# 创建应用目录
RUN mkdir -p /app
WORKDIR /app
# 复制应用 JAR 文件到容器
COPY app.jar app.jar
# 暴露端口
EXPOSE 8080
# 运行命令
ENTRYPOINT ["java", "-jar", "/app/app.jar"]
构建镜像
docker build -t myImage:1.0 .
-
-t:target 是给镜像起名,格式依然是repository:tag的格式,不指定tag时,默认为latest -
·:是指定Dockerfile所在目录,如果就在当前目录,则指定为"."
三、项目部署
部署服务端
-
需求:将我们开发的
tlias-web-management项目打包为镜像,并部署。 -
步骤:
1.准备MySQL容器,并创建tlias数据库及表结构。(已完成)
2. 准备java应用(tlias项目)镜像,部署Docker容器,运行测试。-
修改tlias项目的配置文件,修改数据库服务地址及logback日志文件存放地址,打jar包。
-
编写Dockerfile文件。
-
构建Docker镜像。
-
部署Docker容器。
-
1. 修改配置文件:

2. 打包成jar包:
3. 编写dockerfile:
# 使用 CentOS 7 作为基础镜像
FROM centos:7
# 添加 JDK 到镜像中
COPY jdk17.tar.gz /usr/local/
RUN tar -xzf /usr/local/jdk17.tar.gz -C /usr/local/ && rm /usr/local/jdk17.tar.gz
# 设置环境变量
ENV JAVA_HOME=/usr/local/jdk-17.0.10
ENV PATH=$JAVA_HOME/bin:$PATH
ENV OSS_ACCESS_KEY_ID=LTAI5tP6dc4cvccdvvySE39X
ENV OSS_ACCESS_KEY_SECRET=ZSyIT31qhxIkS0dH1H9WzHqPiyM3Ot
#统一编码
ENV LANG=en_US.UTF-8
ENV LANGUAGE=en_US:en
ENV LC_ALL=en_US.UTF-8
# 创建应用目录
RUN mkdir -p /tlias
WORKDIR /tlias
# 复制应用 JAR 文件到容器
COPY tlias.jar tlias.jar
# 暴露端口
EXPOSE 8080
# 运行命令
ENTRYPOINT ["java","-jar","/tlias/tlias.jar"]
4. 部署容器
docker run 部署到相应网关
docker logs -f tlias 滚动查看容器运行日志
部署前端
-
创建一个新的nginx容器,将资料中提供的前端项目的静态资源部署到nginx中
-
步骤:
-
部署nginx容器(设置目录映射)
-v /root/tlias-nginx/html:/usr/share/nginx/html -v /root/tlias-nginx/conf/nginx.conf:/etc/nginx/nginx.conf -
将部署的前端资源文件及配置文件上传至服务器,执行命令创建nginx容器。
-
注意:nginx.conf 中也需要更改为服务端的容器名
部署nginx:
docker run -d \
--name nginx-tlias \
-v /root/tlias-nginx/html:/usr/share/nginx/html \
-v /root/tlias-nginx/conf/nginx.conf:/etc/nginx/nginx.conf \
--network itheima \
-p 80:80 \
nginx:1.20.2
√ √ DockerCompose
DockerCompose通过一个单独的docker-compose.yml模板文件来定义一组相关联的应用容器,帮助我们实现多个相互关联的Docker容器的快速部署。
示例:
services:
nginx-tlias:
image: "nginx:1.20.2"
container_name: nginx-tlias
volumes:
- "/usr/local/app/html:/usr/share/nginx/html"
- "/usr/local/app/conf/nginx.conf:/etc/nginx/nginx.conf"
networks:
- itheima
ports:
- "80:80"
# 自定义网络
networks:
itheima:
name: itheima
部署项目
-
涉及到的服务:MySQL数据库、服务端、前端nginx
-
步骤:
-
准备资源(
tlias.sql,服务端的jdk17、jar包、Dockerfile,前端项目打包文件html、nginx.conf) -
准备
docker-compose.yml配置文件 -
根据绑定挂载的目录,将资源放在相应的目录下 /usr/local/app/
-
基于
DockerCompose快速构建项目 docker compose -d up
-
常见命令:
docker compose 【options】【commands】
| 类型 | 参数或指令 | 说明 |
|---|---|---|
| Options | -f | 指定 compose 文件的路径和名称。例如,docker-compose -f docker-compose.prod.yml up 用于指定使用 docker-compose.prod.yml 文件。 |
-p | 指定 project 名称。这有助于在同一环境中管理多个不同的 Compose 项目,避免服务名称冲突。例如,docker-compose -p myproject up 会将项目命名为 myproject。 | |
| Commands | up | 创建并启动所有 service 容器。它会按照 docker-compose.yml 文件中定义的服务,拉取镜像(如果本地不存在)、创建容器并启动它们。可以加上 -d 选项在后台运行,如 docker-compose up -d。 |
down | 停止并移除所有容器、网络。它会停止所有运行的容器,并删除与这些容器相关的网络等资源。通常在清理环境时使用,例如 docker-compose down。 | |
ps | 列出所有启动的容器。显示当前由 Docker Compose 管理的正在运行的容器列表,包括容器名称、状态等信息,如 docker-compose ps。 | |
logs | 查看指定容器的日志可以查看一个或多个服务的日志输出,帮助调试和监控容器运行情况。例如,docker-compose logs web 查看名为 web 的服务的日志;docker-compose logs -f 可以持续跟踪日志输出。 | |
stop | 停止容器。停止由 Docker Compose 管理的所有正在运行的容器,但不会删除容器,如 docker-compose stop。也可以指定特定服务停止,如 docker-compose stop web 停止 web 服务对应的容器。 | |
start | 启动容器。重新启动已经创建但处于停止状态的容器,如 docker-compose start。同样可以指定特定服务启动,如 docker-compose start web。 | |
restart | 重启容器。相当于先执行 stop 操作,再执行 start 操作,用于重启容器,如 docker-compose restart。也可以针对特定服务进行重启,如 docker-compose restart web。 | |
top | 查看运行的进程。显示在由 Docker Compose 管理的容器中正在运行的进程信息,如 docker-compose top。 | |
启动容器。重新启动已经创建但处于停止状态的容器,如 docker-compose start。同样可以指定特定服务启动,如 docker-compose start web。 | ||
restart | 重启容器。相当于先执行 stop 操作,再执行 start 操作,用于重启容器,如 docker-compose restart。也可以针对特定服务进行重启,如 docker-compose restart web。 | |
top | 查看运行的进程。显示在由 Docker Compose 管理的容器中正在运行的进程信息,如 docker-compose top。 |

被折叠的 条评论
为什么被折叠?



