Skip to content

Docker ​

Docker

Installation ​

Windows,直接下载Docker Desktop即可

Docker Desktop

安装后验证

bash
docker --version
  • docker start container-name:启动容器
  • docker run ... :创建并启动容器
  • docker stop container-name:停止容器
  • docker ps -a:显示所有容器的状态

Nginx ​

bash
# 1. 拉取 Nginx 镜像
docker pull nginx

# 2. 运行容器,映射端口 8080 → 80
docker run -d --name my-nginx -p 8080:80 nginx

# 3. 访问 http://localhost:8080 能看到 Nginx 欢迎页

# 4. 查看日志
docker logs my-nginx

# 5. 停止并删除
docker stop my-nginx
docker rm my-nginx

MySQL ​

bash
docker run -d --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -v mysql_data:/var/lib/mysql mysql:latest

Redis ​

bash
docker run -d --name redis -p 6379:6379 redis --requirepass 123456

Dockerfile ​

Dockerfile用来构建镜像,下面以Spring Boot项目来举例

dockerfile
FROM eclipse-temurin:26-jre

WORKDIR /app

COPY target/sky-server.jar app.jar

EXPOSE 8080

ENTRYPOINT ["java", "-jar", "app.jar"]
  • 指定java的版本环境
  • 指定容器的工作目录
  • 把本地打包好的jar包,复制到镜像下的/app目录下的app.jar中
  • 指定Spring Boot的端口号
  • 容器启动时,执行的命令,java -jar app.jar这样就启动项目了

Docker Compose ​

用一个yaml文件,统一定义和启动多个Docker容器

先看存放位置

sky-take-out/
├── docker-compose.yml   ← Compose配置
│
├── sky-server/
│   ├── Dockerfile
│   └── target/
│       └── sky-server.jar
│
└── nginx/
    └── nginx.conf

下面先以Nginx举例

yaml
services:
  nginx:
    image: nginx:latest
    ports:
      - '80:80'

然后在docker-compose.yml所在的目录执行

bash
docker compose up -d

docker就会找到nginx的镜像然后创建nginx的容器并启动

  • services:定义容器
  • image:使用的容器,冒号后面可以指定版本
  • container_name:指定容器的名字
  • ports:格式宿主机端口:容器端口
  • volumes:数据持久化
  • environment:环境变量
  • networks:让不同容器执行能互相访问

服务名可以直接作为域名来使用,例如

yaml
services:
  mysql:
    image: mysql:8.0

  sky-server: ...

Spring Boot:

yaml
spring:
  datasource:
    url: jdbc:mysql://mysql:3306/sky_take_out

以完整的Spring Boot项目为例

yaml
services:
  mysql:
    image: mysql:8.0
    environment:
      MYSQL_ROOT_PASSWORD: 123456
      MYSQL_DATABASE: sky_take_out
    ports:
      - '3306:3306'
    volumes:
      - mysql-data:/var/lib/mysql

  redis:
    image: redis:7
    ports:
      - '6379:6379'
    volumes:
      - redis-data:/data

  sky-server:
    build: ./sky-server
    ports:
      - '8080:8080'
    environment:
      SPRING_PROFILES_ACTIVE: prod
    depends_on:
      - mysql
      - redis

volumes:
  mysql-data:
  redis-data:

注意build,代表去./sky-server目录下找Dockerfile文件,然后根据Dockerfile构建对象,image则是直接使用官方现成的镜像

depends_on,代表在启动sky-server之前,先启动mysql和redis

执行docker compose up -d然后docker compose ps就能看到是否启动成功

后面如果java项目修改后,只要执行docker compose up -d --build sky-server

就会重写构建Spring Boot镜像,其他容器不受影响

  • 第一次启动docker compose up -d --build
  • 查看容器docker compose ps
  • 停止docker compose down