在DockerFile中加入以下内容
发布时间:2025-06-24 18:32:56 作者:北方职教升学中心 阅读量:628
demo源码放在仓库了,有需要的小伙伴自行下载。端口映射、
2.3 运行容器
使用以下命令来运行基于构建的镜像的容器:
docker run -d --name container_name -p host_port:container_port image_name:tag
- docker run: 运行 Docker 容器的命令。
5.4. 运行容器
docker run -d --name springboot-docker-deploy-nginx -p 80:80 docker.mawenda.cn/docekr/springboot-docker-deploy-nginx:latest
5.4.1 查看正在运行的docker进程
可以看到,两个镜像都在运行中。- 示例:docker system prune
docker inspect
docker inspect: 显示有关容器或镜像的详细信息,包括配置、
- -d: 表示以“守护进程”模式后台运行容器,这样容器就可以在后台持续运行而不会占用你的终端。在推送镜像之前,你需要先登录到目标镜像仓库,可以使用 docker login 命令来进行身份验证。容器名称、
- 示例:docker ps
docker stop
docker stop: 停止一个正在运行的容器。
- -t image_name:tagt: 使用 -t 参数来给构建的镜像打标签。依赖项和配置。
在DockerFile中加入以下内容。 - –name container_name: 为容器指定一个名称,在这里容器被命名为"container_name"。
5.3 开始构建Nginx镜像
在项目根目录中执行以下命令。
- image_name:tag: 指定要推送的镜像的名称及标签。通过这些配置,用户可以轻松地在不同的环境中部署他们的应用程序,并且能够确保在不同机器上具有相同的运行方式。根据实际需求,可能需要进行更多的配置和管理,例如网络设置、数据卷挂载等。
- 示例:docker build -t myimage:1.0 .
docker network ls
docker network ls: 列出所有网络。另外,可以使用 Docker Compose 或 Kubernetes 等工具来简化和管理多个容器的部署。
6.2 编写docker-compose.yml文件
在根目录创建docker-compose.yml文件,将如下内容添加至文件中。端口映射、
- -p host_port:container_port: 将主机的端口映射到容器的端口。复制文件等操作。
- COMMAND: 容器启动时执行的命令。未被使用的卷和网络等。
通过执行 docker push image_name:tag 命令,Docker 会上传本地的镜像到配置好的镜像仓库,使其可供他人或其他机器访问和使用。
2 构建流程
2.1 编写 Dockerfile
创建一个文本文件,名为 Dockerfile,其中定义了构建镜像所需的指令、
- 示例:docker start mycontainer
docker restart
docker restart: 重启一个正在运行的容器。
docker ps
参数解释:
- CONTAINER ID: 容器的唯一标识符。指定主机上的端口(host_port),当有流量请求到达该端口时,Docker 将把请求转发到容器内部的指定端口(container_port)。数据卷等信息。
源码地址:https://gitee.com/wenda_repository/springboot-docker-deploy.git
可以看到,我们应用的端口为8081,并且在HelloController中提供了一个Get类型路径为 “/hello” 的接口,并且返回了 “Hello Docker”。
这是一个基本的 Docker 构建和部署流程。
4.2 测试API
在浏览器或API测试工具直接访问我们写好的API。
- 示例:docker-compose up -d
docker docker-compose down
docker-compose down: 使用 Docker Compose 停止并移除服务。这对于复杂的应用程序,如Web应用程序、在这里,-t image_name 是镜像的名称,tag 是版本号。
- 示例:docker pull nginx
docker rmi
docker rmi: 删除一个本地的镜像。
2.4.2 拉取镜像
在其他服务器上部署:在目标服务器上,使用以下命令从镜像仓库中拉取镜像并运行容器:
docker pull image_name:tagdocker run -d --name container_name -p host_port:container_port image_name:tag
- docker pull: 从镜像仓库拉取镜像的命令。
通过执行 docker pull image_name:tag 命令,Docker 会从配置好的镜像仓库中下载指定标签的镜像到本地。安装软件包、
- 示例:docker network ls
docker network create
docker network create: 创建一个新的网络。
mvn clean install -Dmaven.test.skip=true
jar包已经放在我们项目中target目录下。这样的命名约定通常表示这是该镜像的最新版本。
- 示例:docker network create mynetwork
docker volume ls
docker volume ls: 列出所有卷。
- 示例:docker restart mycontainer
docker rm
docker rm: 删除一个停止的容器。例如,如果你要推送到 Docker Hub 上的公共仓库,镜像名称应该是类似于 docker.io/username/image_name:tag 的形式。
version: '3'services: springboot-docker-deploy-nginx: image: docker.mawenda.cn/docekr/springboot-docker-deploy-nginx:latest build: ./nginx restart: always ports: - 80:80 volumes: - /data/tmp:/data/tmp # 构建名为springboot-docker-deploy-nginx的服务 springboot-docker-deploy: # 镜像地址 image: docker.mawenda.cn/docekr/springboot-docker-deploy:latest # Dockerfile所在目录 build: ./ # 容器停止后重新启动 restart: always # 对外暴露端口与容器内部端口 ports: - 8081:8081 # 容器内部访问代理IP hostname: api-server # 声明/data/tmp的卷,并将主机上的/data/tmp目录与容器内的/data/tmp目录进行了绑定 volumes: - /data/tmp:/data/tmp
6.3 修改nginx配置
因为我们在docker-compose.yml中配置了springboot-docker-deploy服务的hostname,我们可以在nginx中将请求代理到这个hostname上边。
docker build -t docker.mawenda.cn/docekr/springboot-docker-deploy-nginx:latest nginx
这里可以自行通过docker images 查看构建好的镜像,此处不在赘述。停止和管理整个应用程序。
- 示例:docker rmi nginx
docker exec
docker exec: 在一个正在运行的容器中执行命令。通过一个单独的配置文件,用户可以定义一组相关的服务、
4.1 查看docker容器的进程
执行如下命令。
需要注意的是,推送镜像的镜像名称需要包含仓库地址。
docker build -t docker.mawenda.cn/docekr/springboot-docker-deploy:latest .
命令解释可参考文章中2.2部分
3.3.2 查看构建好的镜像
docker images
可以看到,已经构建出名为docker.mawenda.cn/docekr/springboot-docker-deploy的镜像。
2.2 构建镜像
在包含 Dockerfile 的目录中运行以下命令来构建镜像:
docker build -t image_name:tag .
- docker build: 这是 Docker 命令行工具中用于构建镜像的命令。可以将多个 -p 参数添加到命令中以进行多个端口的映射。
- NAMES: 容器的名称。
6.1 环境准备
除了安装Docker,还需要安装一下Docker Compose,这里不展示安装细节,自行学习。
Docker Compose的配置文件使用YAML语法,其中包含了服务的定义、5.1 编写DockerFile
在根目录下创建nginx目录,用于存储nginx.conf与前端静态资源与DockerFile,如下所示。在这个例子中,镜像名称为 image_name,标签为 tag。
- 示例:docker logs mycontainer
docker docker system prune
docker system prune: 清理不再使用的资源,如停止的容器、
- CREATED: 容器的创建时间。
3 开始构建
3.1 编写DockerFile
在项目根目录创建DockerFile文件,并将如下命令添加至DockerFile中。4 运行容器
执行如下命令。
docker run -d --name springboot-docker-deploy -p 8081:8081 docker.mawenda.cn/docekr/springboot-docker-deploy:latest
命令解释可参考文章中2.3部分。
1 前期准备
1.1 基础环境
名称 版本 说明 Java 8 开发 Maven 3.6.3 打包 Docker 23.0.5 部署 作者以在本地安装并配置好以上基础环境,非Java得小伙伴安装各自语言的环境即可。
2.4 部署到远程服务器(可选)
2.4.1 推送镜像
如果需要将镜像部署到远程服务器上,可以使用以下命令将镜像推送到 Docker Hub 或其他镜像仓库:
docker push image_name:tag
- docker push: 将本地的 Docker 镜像推送到镜像仓库的命令。环境变量等信息。
- PORTS: 容器所映射的端口。
使用Docker Compose,用户可以将多个容器打包在一起,以便它们能够相互通信并协同工作。容器映像、- 示例:docker inspect mycontainer
docker build
docker build: 根据 Dockerfile 构建一个镜像。可以指定要使用的镜像、在这个例子中,镜像名称为 image_name,标签为 tag。
5.5 测试
5.5.1 测试静态资源
在浏览器中访问80端口,如下所示。
- 示例:docker rm mycontainer
docker images
docker images: 列出所有本地的镜像。
修改nginx.conf配置如下,添加了 location /api/的配置。- 示例:docker run -d --name mycontainer -p 8080:80 nginx
docker ps
docker ps: 列出正在运行的容器。
- 示例:docker exec -it mycontainer bash
docker logs
docker logs: 查看容器的日志输出。
5 构建Nginx
正常项目中不仅有后端应用,还需要一个前端服务与Nginx,那么基于我们现在的结构,简单实现下。
1.2 SpringBoot项目
需要准备一个springboot项目,确保项目可以正常启动,并且有可访问的接口,后续用于测试。
# 当前镜像将以 sgrio/java:jdk_8_alpine 作为基础进行构建# 可以本地搭建一个镜像库,引用镜像即可# 这里作者引用的是github上一位作者的镜像FROM sgrio/java:jdk_8_alpine# 建了一个目录 /springboot-docker-deploy,用于存放后续的文件和代码RUN mkdir -p /springboot-docker-deploy# 指定了在接下来的命令中,工作目录都是 /springboot-docker-deployWORKDIR /springboot-docker-deploy# 定义了构建参数 JAR_FILE,并且给了它一个默认值 target/springboot-docker-deploy-1.0-SNAPSHOT.jar。
- 示例:docker volume ls
docker volume create
docker volume create: 创建一个新的卷。
- STATUS: 容器的状态,例如 “Up” 表示正在运行,“Exited” 表示已停止。
3.3 构建镜像
3.3.1 构建镜像
在根目录执行以下命令。
# 首次建议执行以下命令,可以看日志,报错信息docker-compose up # 后台启动docker-compose up -d
6.7 测试
6.7.1 静态资源
6.7.2 访问后端接口
7 Docker常用命令
docker docker-compose up
docker-compose up: 使用 Docker Compose 启动服务。
user nginx;worker_processes 2;error_log /var/log/nginx/error.log notice;pid /var/run/nginx.pid;events { worker_connections 1024;}http { include /etc/nginx/mime.types; default_type application/octet-stream; log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log /var/log/nginx/access.log main; sendfile on; keepalive_timeout 120s; gzip on; gzip_comp_level 1; gzip_types text/html text/plain text/css application/x-javascript text/javascript application/xml; client_max_body_size 10m; server { listen 80 default; server_name localhost; location / { root /home/html; index index.html index.htm; } location /api/ { proxy_pass http://api-server:8081/; proxy_connect_timeout 75; proxy_send_timeout 600; proxy_read_timeout 600; proxy_set_header X-Real-IP $remote_addr; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header REMOTE-HOST $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } }}
6.4 项目打包
mvn clean install -Dmaven.test.skip=true
6.5 构建镜像
docker-compose build
6.6 运行容器
此处先使用docker stop [CONTAINER ID] 命令,将刚才启动的服务停止。
- 示例:docker images
docker pull
docker pull: 下载一个镜像到本地。
6 使用DockerCompose部署
Docker Compose是一个用于定义和运行多个Docker容器应用程序的工具。
- 示例:docker volume create myvolume
执行如下命令。# 这个参数可以在构建镜像时被传递,并在后续的命令中使用ARG JAR_FILE=target/springboot-docker-deploy-1.0-SNAPSHOT.jar# 这个命令将构建上下文中的 ${JAR_FILE} 路径下的文件复制到镜像中的 # /springboot-docker-deploy 目录,并且重命名为 app.jarCOPY ${JAR_FILE} app.jar# 声明容器运行时监听的端口号EXPOSE 8081# 设置两个环境变量 TZ 和 JAVA_OPTS# 分别用于指定时区为亚洲/上海,并设置了 Java 虚拟机的参数ENV TZ=Asia/Shanghai JAVA_OPTS="-Xms128m -Xmx256m -Djava.security.egd=file:/dev/./urandom"# 运行 java -jar app.jar 命令,并且传入 $JAVA_OPTS 参数CMD sleep 30; java -jar app.jar $JAVA_OPTS3.2 项目打包
在项目根目录执行以下命令,使用Maven将项目打为jar包。
- 示例:docker stop mycontainer
docker start
docker start: 启动一个已停止的容器。
- 示例:docker-compose down
docker run
docker run: 运行一个容器。环境变量、网络和卷,并使用一个命令启动、在这个例子中,镜像名称为 image_name,标签为 tag。如果未指定标签,默认会拉取 latest 标签的镜像。你可以根据需要自定义容器的名称。
FROM nginx:1.21-alpine as nginxADD nginx.conf /etc/nginx/nginx.confADD html/index.html /home/html/index.html
5.2 编写nginx配置文件
user nginx;worker_processes 2;error_log /var/log/nginx/error.log notice;pid /var/run/nginx.pid;events { worker_connections 1024;}http { include /etc/nginx/mime.types; default_type application/octet-stream; log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log /var/log/nginx/access.log main; sendfile on; keepalive_timeout 120s; gzip on; gzip_comp_level 1; gzip_types text/html text/plain text/css application/x-javascript text/javascript application/xml; client_max_body_size 10m; server { listen 80 default; server_name localhost; location / { root /home/html; index index.html index.htm; } }}
这里不做解释,非本文重点内容,有兴趣小伙伴自行学习。Dockerfile 中包含了构建镜像所需的基础镜像、