293-dockerfile入门









dockerfile入门









dockerfile使用准则
1.大	首字母必须大写
2.空	尽量把dockerfile放到空目录中
3.单	每个容器尽量只有一个功能
4.少	执行的命令越少越好








dockerfile工作流程
1.编写dockerfile	
	学习其中的一些关键字
2.要执行一个docker命令,会根据dockerfile
编写的流程开始制作镜像

===接下来的流程就是自动的了===
3.检测需要的镜像存不存在,如果本地没有,就自动下载
4.将镜像打开 --> 得到一个容器
5.进入到容器内部
6.根据dockerfile编写的步骤,一步步执行
7.成功,得到一个镜像 -> 是从容器导出的








dockerfile基础指令
1.FROM
	FROM 镜像名 -> 原始镜像
	FROM 镜像名:tag

2.MAINTAINER
	dockerfile维护者信息
	MAINTAINER 维护人员信息
	MAINTAINER zhangsan zhangsan@abc.com

3.RUN
	RUN shell命令
	RUN mkdir /home/test/abc -p
	RUN ["mkdir" , "/home/test/abc", "-p"]

4.EXPOSE
	设置对外开放的端口
	EXPOSE 80


举例
创建 Dockerfile
编写
FROM ubuntu
MAINTAINER zhangsan zhangsan@abc.com

RUN mkdir hello
RUN mkdir world
RUN sed -i 's/archive.ubuntu.com/mirrors.ustc.edu.cn/g' /etc/apt/sources.list

EXPOSE 80

编写完成







dockerfile运行时指令
1.CMD
	CMD shell命令
	CMD ["shell命令", "命令参数1", "命令参数2"]

2.

3.VOLUME
	VOLUME ["/data"]








dockerfile触发器指令
1.ONBUILD
	ONBUILD [command]








# 镜像的来源,源镜像
FROM ubuntu

# 作者信息
MAINTAINER zhangsan

# 更换服务器地址
RUN sed -i 's/archive.ubuntu.com/mirrors.aliyun.com/g' /etc/apt/sources.list
RUN sed -i 's/security.ubuntu.com/mirrors.aliyun.com/g' /etc/apt/sources.list

# 更新 
RUN apt-get update
RUN apt-get install gcc libc6-dev git vim lrzsz -y

# 安装go,使用文件拷贝方式
ADD go.tar.gz /usr/local

# 配置go基本环境变量
ENV GOROOT=/usr/local/go
ENV PATH=$PATH:/usr/local/go/bin
ENV GOPATH=/root/go
ENV PATH=$GOPATH/bin/:$PATH

# 拷贝beego代码,放到GOPATH/src
ADD beego.tar.gz /root/go/src

# 创建项目目录
RUN mkdir /root/go/src/myTest
WORKDIR /root/go/src/myTest

# 往当前/root/go/src/myTest 拷贝go文件
COPY test.go /root/go/src/myTest

# 运行go程序
# ENTRYPOINT go run test.go
ENTRYPOINT ["go", "run", "test.go"]









### 3.1 Dockerfile介绍

```shell
# 编写dockfile文件
# 构建一个基于ubuntu的docker定制镜像
# 基础镜像
FROM ubuntu

# 镜像作者
MAINTAINER panda kstwoak47@163.com

# 执行命令
RUN mkdir hello
RUN mkdir world
RUN sed -i 's/archive.ubuntu.com/mirrors.ustc.edu.cn/g' /etc/apt/sources.list
RUN sed -i 's/security.ubuntu.com/mirrors.ustc.edu.cn/g' /etc/apt/sources.list
RUN apt-get update  
RUN apt-get install nginx -y

# 对外端口
EXPOSE 80
```

- 宿主机创建一个空目录, 将上边的dockerfile文件放到里边

- 在dockerfile对应的目录中执行一个命令, 构建新的镜像

  ```shell
  docker build [OPTIONS] PATH | URL | -
  	OPTIONS:
  		-t, --tag: 指定构建出的镜像的名字
  	PATH: dockerfile文件的目录
  ```

### 3.2 Dockerfile基础指令

- FROM

  ```dockerfile
  FROM 镜像名 -> 原始镜像
  FROM 镜像名:tag
  # FROM必须要出现Dockerfile的第一行(除注释), 可以连续写多个FROM创建多个镜像.
  # 如果指定的镜像名本地仓库没有, 会从远程仓库pull到本地, 远程仓库也没有 -> 报错.
  ```

- MAINTAINER

  ```Dockerfile
  dockerfile维护者信息
  MAINTAINER 维护人员信息
  MAINTAINER zhangsan zhangsan@itcast.com
  ```

- RUN

  ```dockerfile
  # 构建镜像时候执行的shell命令, 如果命令有确认操作, 必须要加 -y
  # 如果命令太长需要换行, 行末尾需要加 \
  RUN shell命令
  RUN mkdir /home/go/test -p 
  RUN ["mkdir", "/home/go/test", "-p"]
  ```

- EXPOSE

  ```dockerfile
  # 设置对外开放的端口
  # 容器和外部环境是隔离的, 如何向从外部环境访问到容器内部, 需要容器开发端口
  # 在使用的时候, 让宿主机端口和容器开放端口形成一个映射关系, 就可以访问了
  #     docker run -itd -p 8888:80
  EXPOSE 80
  ```

### 3.3 Dockerfile运行时指令

- CMD

  ```dockerfile
  # 新镜像已经被制作完毕, 启动新镜像-> 得到一个容器
  # 容器启动后默认执行的命令
  # 一个dockerfile文件只能指定一个CMD指令
  # 如果指定多个, 只有最后一个有效
  # 该CMD会被 docker run指定的shell命令覆盖
  CMD shell命令
  CMD ["shell命令", "命令参数1", "命令参数2"]
  ```

- ENTRYPOINT

  ```dockerfile
  # docker容器启动之后执行的命令, 该命令不会被docker run指定的shell指令覆盖
  # ENTRYPOINT只能指定一个, 指定多个, 只有最后一有效
  # ENTRYPOINT 和 CMD可以同时指定
  # 如果想被docker run覆盖, 启动docker容器时可使用docker run --entrypoint
  ENTRYPOINT shell命令
  ENTRYPOINT ["shell命令", "命令参数1", "命令参数2"]
  ```

- CMD ENTRYPOINT 综合使用

  ```dockerfile
  docker run -itd ubuntu 
  # 任何docker run设置的命令参数或者CMD指令的命令,都将作为ENTRYPOINT 指令的命令参数,追加到ENTRYPOINT指令之后
  ENTRYPOINT mkdir /home/go/a/b/c/d/e/f -p
  CMD -p
  mkdir /home/go/a/b/c/d/e/f -p 
  ```

### 3.4 Dockerfile文件编辑指令

- ADD

  ```dockerfile
  # 将宿主机文件拷贝到容器目录中
  # 如果宿主机文件是可识别的压缩包, 会进行解压缩 -> tar.gz tar.bz2
  	rar
  	zip
  ADD 宿主机文件 容器目录/文件
  ADD ["宿主机文件", "容器目录/文件"]
  
  # 实例
  ADD ["宿主机文件", "容器目录"]
  	- 宿主机文件: 一般放到和Dockerfile同一级目录中
  	- 容器目录: 不存在, 会自动创建
  ADD ["a.txt", "/home/go/b.txt"]
  	- a.txt: 放到了和Dockerfile同一级目录中
  	- /home/go/a.txt:
  		如果a.txt存在: 覆盖
  		如果不存在: 直接拷贝到go目录中
  a.tar.gz -> 解压得到mytest目录
  ADD ["a.tar.gz", "/home/go/"]
  	- 会在/home/go中得到一个目录: mytest
  ```

- COPY

  ```dockerfile
  # COPY 指令和ADD 指令功能和使用方式类似。只是COPY 指令不会做自动解压工作。
  # 单纯复制文件场景,Docker 推荐使用COPY
  COPY ["a.tar.gz", "/home/"]
  ```

- VOLUME

  ```dockerfile
  # VOLUME 指令可以在镜像中创建挂载点,这样只要通过该镜像创建的容器都有了挂载点
  # 通过VOLUME 指定挂载点目录是自动生成的。
  VOLUME ["/data"]
  
  # 数据卷容器
  docker run -itd -v /backup --name container ubuntu bash
  	- 当前container可以是一个数据卷容器, 挂载点: /backup
  
  ```

### 3.5 Dockerfile环境指令

- ENV

  ```dockerfile
  # 设置环境变量,可以在RUN 之前使用,然后RUN 命令时调用,容器启动时这些环境变量都会被指定
  ENV <key> <value>                    (一次设置一个环境变量)
  ENV <key>=<value> ...                (一次设置一个或多个环境变量)
  ENV HELLO 12345
  ENV HELLO=12345
  ENV HELLO=12345 WORLD=12345 NIHAO=12345
  ```

- WORKDIR

  ```dockerfile
  # 切换目录,为后续的RUN、CMD、ENTRYPOINT 指令配置工作目录。相当于cd
  # 可以多次切换(相当于cd 命令),
  # 也可以使用多个WORKDIR 指令,后续命令如果参数是相对路径,则会基于之前命令指定的路径。
  WORKDIR /path/to/workdir
  RUN a.sh
  
  WORKDIR /path
  WORKDIR to	# 相对路径
  WORKDIR workdir
  RUN pwd
  /path/to/workdir
  ```

- USER 

  ```dockerfile
  # 指定运行容器时的用户名和UID,后续的RUN 指令也会使用这里指定的用户。
  # 如果不输入任何信息,表示默认使用root 用户
  USER root
  ```

- ARG

  ```dockerfile
  # 通过外部命令向dockerfile传参
  $ docker build [OPTIONS] PATH | URL | -
  docker build --build-arg
  ARG <name>[=<default value>]
  ```

  ```dockerfile
  FROM ubuntu
  
  ARG myname
  ARG index
  ```

  ```shell
  docker build --build-arg myname=hello index=1
  ```

  

### 3.6 Dockerfile触发器指令

- ONBUILD

  ```dockerfile
  # 当一个镜像A被作为其他镜像B的基础镜像时,这个触发器才会被执行,
  # 新镜像B在构建的时候,会插入触发器中的指令。
  ONBUILD [command]
  
  # 原始镜像 -> 纯净版
  	-> 修改 ONBUILD ["echo", "hello,linux"]
  	   
  # 基于原始镜像制作新镜像 -> 镜像A
  	-> 启动镜像A -> 不会输出hello, linux
  	
  # 基于镜像A制作了镜像B
  	-> 启动镜像B -> 会输出 hello, linux
  ```








 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要运行Spring Boot项目的Dockerfile,可以按照以下步骤操作: 1. 首先,确保已经重启了Docker服务,可以使用以下命令重启Docker服务: ``` systemctl restart docker ``` 2. 在Spring Boot项目的根目录下创建一个名为`Dockerfile`的文件,该文件用于定义Docker镜像的构建和运行配置。 3. 打开`Dockerfile`文件,将以下内容复制到文件中: ``` FROM openjdk:8-jdk-alpine COPY target/myproject.jar app.jar ENTRYPOINT ["java","-jar","/app.jar"] ``` 这个Dockerfile使用了基于Alpine Linux的OpenJDK 8镜像,并将构建好的Java项目的jar文件复制到Docker镜像中,然后通过`ENTRYPOINT`指令运行该jar文件。 4. 打开终端,进入到Spring Boot项目的根目录,执行以下命令来构建Docker镜像: ``` docker build -t myproject . ``` 其中,`myproject`是你给Docker镜像起的名字,可以根据需要自行修改。 5. 构建完成后,使用以下命令来运行Docker镜像: ``` docker run -p 8080:8080 myproject ``` 其中,`8080:8080`表示将Docker容器的8080端口映射到宿主机的8080端口,可以根据需要修改端口号。 这样,你就成功地使用Dockerfile来运行Spring Boot项目了。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [docker从零开始-springboot整合Dockerfile](https://blog.csdn.net/qq_36115196/article/details/128391462)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *3* [使用Dockerfile部署springboot项目 (入门级教程 简单易懂)](https://blog.csdn.net/qq_41890624/article/details/126873259)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值