DockerFile和DockerCompose使用总结

DockerFile

基本结构

# 1、第一行必须是 FROM 基础镜像信息
FROM ubuntu
 
# 2、维护者信息
MAINTAINER docker_user docker_user@email.com
 
# 3、镜像操作指令
RUN echo "deb http://archive.ubuntu.com/ubuntu/ raring main universe" >> /etc/apt/sources.list
RUN apt-get update && apt-get install -y nginx
RUN echo "\ndaemon off;" >> /etc/nginx/nginx.conf
 
# 4、容器启动执行指令
CMD /usr/sbin/nginx

Dockerfile 基本就长这样,当然这是一个很简单的例子,还有很多其他命令会在下个小节介绍。

有几点需要注意,第一行必须是 FROM 命令,表示是基于哪个基础镜像来创建镜像的。第二行一般是 MAINTAINER 命令,表示维护人信息,但不做硬性要求。最后一行是 CMD 命令,表示启动容器执行的命令,CMD 命令必须在最后一行,如果有多个 CMD 命令,则只有最后一个生效。

常用指令

FROM: 必须是 Dockerfile 的首个命令,定义了使用哪个基础镜像启动构建流程。

MAINTAINER: 声明镜像作者。

COPY: 将宿主机的文件拷贝到镜像内的指定路径。

ADD: 作用类似于 COPY

COPYADD 的区别是:ADD 命令功能更多,比如拷贝一个压缩包,ADD 可以将压缩包解压到镜像内,如果是下载链接,ADD 会先下载文件,然后再拷贝。

但现在 docker 官方更推荐使用 COPY 命令,一个命令只做一件事。

WORKDIR: 指定 Dockerfile 中该命令下的操作所在的工作目录。

RUN: 执行命令行命令。

ENV: 设置环境变量。

VOLUME: 挂载数据卷。

EXPOSE: 暴露端口。

CMD: 服务启动命令。

创建镜像

有了 Dockerfile 之后,在 Dockerfile 所在目录执行命令:

# docker build -t <image_name> .

就这么简单,镜像就创建好了。

DockerCompose

使用 docker-compose 部署 Redis 服务

项目 Docker 化部署的最后一步,就差 Redis 了。本来以为是一件很简单的事,没想到折腾了我大半天的时间,下面就来分享分享我的采坑经历。

docker-compose 文件:

version: '3'

services:
  redis:
    image: redis:3.2.12
    container_name: redis
    restart: always
    network_mode: host
    command: redis-server /etc/redis.conf
    ports:
      - 6379:6379
    volumes:
      - /data:/data
      - ./redis.conf:/etc/redis.conf

当前目录下执行:

# docker-compose up

本来以为服务一启,事情就这么愉快的结束了,但是,报错。

Can’t open the log file: No such file or directory

原因就是 redis.conf 文件直接用的是在物理机上部署时用的,logfile 参数配的是 /var/lib/redis,但 docker 容器里没有这个目录,但是有 /data 目录,所以,把 logfile 配置成 /data 即可。

改完之后再一启,没有任何信息输出,看来是成功了。

docker ps 看看,没有容器。

这下给我整懵了,咋回事呢?其实报错都不怕,就怕启动不成功,还没有报错信息。

就这个问题给我折腾了好久,突然灵光一闪,想到 redis 会不会是以后台进程起的,导致容器直接退出。

检查一下配置文件中的 daemonize 参数,果然是 yes。改成 no 之后,就可以正常启动了。

就这么个破问题,卡了这么长时间,而且这类问题之前还遇到过,真是让人郁闷。

至此,项目中的所有服务就都 Docker 化部署了。

### 使用DockerfileDocker Compose部署SpringBoot项目的教程 #### 一、使用Dockerfile部署SpringBoot项目 创建并配置`Dockerfile`是构建SpringBoot项目的基础。以下是具体的操作流程: 1. **准备SpringBoot项目** 创建一个简单的SpringBoot项目,例如以下代码片段展示了一个基本的控制器类[^2]: ```java @SpringBootApplication @RestController public class DockerTestApplication { public static void main(String[] args) { SpringApplication.run(DockerTestApplication.class, args); } @GetMapping("/docker") public String docker() { return "Hello Docker!"; } } ``` 2. **编写Dockerfile** 在项目的根目录下创建名为`Dockerfile`的文件,并添加以下内容[^5]: ```dockerfile # 基础镜像 开发所使用的Java版本 (此处假设为Java17) FROM openjdk:17-jdk-slim # 维护者信息 MAINTAINER YourName <your.email@example.com> # 设置容器时区为当前时区 RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo Asia/Shanghai > /etc/timezone # 将目标JAR包复制到镜像中 ADD target/your-application-name.jar app.jar # 容器启动执行命令 ENTRYPOINT ["java", "-Xmx128m", "-Djava.security.egd=file:/dev/./urandom", "-jar", "/app.jar"] # 声明容器提供服务端口 EXPOSE 8080 ``` 3. **构建Docker镜像** 执行以下命令完成镜像的构建[^4]: ```bash docker build -t your-image-name:version . ``` 4. **运行容器** 构建完成后,可以通过以下命令启动容器: ```bash docker run -d -p 8080:8080 your-image-name:version ``` --- #### 二、使用Docker Compose部署SpringBoot项目 Docker Compose是一种工具,允许开发者定义共享多容器的应用程序。以下是具体的步骤: 1. **安装Docker Compose** 如果尚未安装Docker Compose,请先按照官方文档进行安装。 2. **创建`docker-compose.yml`文件** 在项目的根目录下创建`docker-compose.yml`文件,并填写相关内容[^3]: ```yaml version: '3' services: springboot-app: image: your-image-name:version container_name: springboot-container ports: - "8080:8080" environment: - SPRING_PROFILES_ACTIVE=prod volumes: - ./logs:/var/logs ``` 3. **启动服务** 使用以下命令启动服务[^4]: ```bash docker-compose up -d ``` 4. **验证部署成功** 访问浏览器中的`http://localhost:8080/docker`,如果返回`Hello Docker!`则表示部署成功。 --- #### 总结 通过以上两种方式,可以分别实现基于DockerfileDocker Compose的SpringBoot项目部署。前者适合单体应用的简单场景,而后者更适合复杂的微服务架构或多容器环境下的管理需求。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值