赞
踩
Dockerfile 是用于定义和构建 Docker 镜像的文本文件。它包含一系列的指令和配置,用于指导 Docker 引擎在构建过程中自动化地执行一系列操作,从而创建一个可运行的容器镜像。
使用 Dockerfile 的主要原因是为了实现容器化应用程序的可移植性和可重复性。下面列举了一些使用 Dockerfile 的好处:
创建一个名为hello的文件:
[root@localhost df]# touch hello
[root@localhost df]# vim hello
编辑该文件,基本规则如下:(原文链接:https://blog.csdn.net/m0_46090675/article/details/121846718)
FROM
:设置基础镜像,tag或digest是可选的,如果不使用这两个值时,会使用latest版本的基础镜像。
FROM <image>
FROM <image>:<tag>
FROM <image>@<digest>
MAINTAINER
:设置镜像维护者信息。
MAINTAINER <name>
RUN
:在镜像中执行命令。
shell执行 格式: RUN <command>
exec执行 格式: RUN ["executable", "param1", "param2"]
ENV
:设置环境变量。
ENV <key> <value> #<key>之后的所有内容均会被视为其<value>的组成部分,因此,一次只能设置一个变量
ENV <key>=<value> ... #可以设置多个变量,每个变量为一个"<key>=<value>"的键值对,如果<key>中包含空格,可以使用\来进行转义,也可以通过""来进行标示;另外,反斜线也可以用于续行
ADD
:将本地文件添加到容器中,tar类型文件会自动解压(网络压缩资源不会被解压),可以访问网络资源,类似wget
ADD <src>... <dest>
ADD ["<src>",... "<dest>"] 用于支持包含空格的路径
CMD:构建镜像后调用,也就是在容器启动时才进行调用。
CMD ["executable","param1","param2"] (执行可执行文件,优先)
CMD ["param1","param2"] (设置了ENTRYPOINT,则直接调用ENTRYPOINT添加参数)
CMD command param1 param2 (执行shell内部命令)
ENTRYPOINT:配置容器,使其可执行化。配合CMD可省去"application",只使用参数。
ENTRYPOINT ["executable", "param1", "param2"] (可执行文件, 优先)
ENTRYPOINT command param1 param2 (shell内部命令)
LABEL:用于为镜像添加元数据
LABEL <key>=<value> <key>=<value> <key>=<value> ...
EXPOSE
:声明容器内部的应用程序要使用的网络端口。
EXPOSE <port> [<port>...]
VOLUME:用于指定持久化目录(指定此目录可以被挂载出去)
VOLUME ["/path/to/dir"]
WORKDIR
:设置工作目录。
WORKDIR /path/to/workdir
USER
:设置运行镜像时的用户名。
USER user
USER user:group
USER uid
USER uid:gid
USER user:gid
USER uid:group
ARG:用于指定传递给构建运行时的变量(给dockerfile传参),相当于构建镜像时可以在外部为里面传参
ARG <name>[=<default value>]
ONBUILD:用于设置镜像触发器
ONBUILD [INSTRUCTION]
下面是一个示例:
FROM anapsix/alpine-java
MAINTAINER lyx
EXPOSE 9090
ADD target/hello-docker-1.0-SNAPSHOT.jar /app.jar
ENTRYPOINT ["java","-jar","/app.jar"]
docker build -t 镜像名称:版本(tag) -f 文件名称 .
[root@localhost df]# docker build -t redis:latest -f hello .
[root@localhost df]# vim /lib/systemd/system/docker.service
修改部分如下:
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock
[root@localhost df]# systemctl daemon-reload
[root@localhost df]# systemctl restart docker.service
[root@localhost df]# netstat -nplt|grep 2375
tcp6 0 0 :::2375 :::* LISTEN 25908/dockerd
[root@localhost df]# curl http://192.168.118.129:2375/info
[root@localhost df]# firewall-cmd --add-port=2375/tcp --permanent
success
[root@localhost df]# firewall-cmd --reload
success
[root@localhost df]# firewall-cmd --list-ports
2375/tcp
systemctl daemon-reload
:重新加载 systemd 的配置,以便识别最新的配置更改。systemctl restart docker.service
:重启 Docker 服务,以使配置更改生效。netstat -nplt|grep 2375
:通过 netstat 命令检查是否有进程在监听 2375 端口。结果显示 Docker 守护进程(dockerd)正在监听该端口。curl http://192.168.118.129:2375/info
:使用 curl 命令尝试访问 192.168.118.129 的 2375 端口,获取 Docker 服务的信息。firewall-cmd --add-port=2375/tcp --permanent
:向防火墙添加一个永久的规则,允许 2375 端口的 TCP 连接。firewall-cmd --reload
:重新加载防火墙的配置,使新的规则生效。firewall-cmd --list-ports
:列出当前防火墙规则中开放的端口,其中包括刚刚添加的 2375/tcp 端口。安装Docker插件
POM: Project Object Model(项目管理模型)
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.wnhz.springboot</groupId> <artifactId>hello-docker</artifactId> <version>1.0-SNAPSHOT</version> <properties> <maven.compiler.source>8</maven.compiler.source> <maven.compiler.target>8</maven.compiler.target> </properties> <!-- dependencemanagement :maven的继承特性--> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.6.13</version> </parent> <!-- 依赖--> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> </dependencies> <!-- springboot打包插件---> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>
/usr/local/software/jdk
tar -zxvf jdk-8u341-linux-x64.tar.gz
JAVA_HOME, PATH, CLASS_PATH
vim /etc/profile
JAVA_HOME=/usr/local/software/jdk/jdk1.8.0_341
CLASSPATH=.:$JAVA_HOME/lib
PATH=$JAVA_HOME/bin:$PATH
export JAVA_HOME CLASSPATH PATH
/etc/profile
文件,使修改后的环境变量和配置生效source /etc/profile
java -version
[root@localhost jdk1.8.0_341]# firewall-cmd --add-port=9090/tcp --permanent
success
[root@localhost jdk1.8.0_341]# firewall-cmd --reload
java -jar hello-docker-1.0-SNAPSHOT.jar
window与linux环境变量配置区别
序列 | 符号 | Windows | Linux |
---|---|---|---|
1 | 分隔符 | ; | : |
2 | 文件夹分割 | \ | / |
3 | 取值符号 | %变量% | $变量 |
FROM anapsix/alpine-java
MAINTAINER ohb
EXPOSE 9090
ADD target/hello-docker-1.0-SNAPSHOT.jar /app.jar
ENTRYPOINT ["java","-jar","/app.jar"]
最后,试着访问以下网址:
http://linux里的IP地址/api接口路径
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。