Docker入门-docker运行springboot应用(二)

环境准备

  • jdk8
  • 安装docker
  • 镜像加速器配置
  • docker私有仓库
  • springboot工程的jar包

docker部署项目

dockfile

Dockfile是一种被Docker程序解释的脚本,Dockerfile由一条一条的指令组成,每条指令对应Linux下面的一条命令。Docker程序将这些Dockerfile指令翻译真正的Linux命令。Dockerfile有自己书写格式和支持的命令,Docker程序解决这些命令间的依赖关系,类似于Makefile。Docker程序将读取Dockerfile,根据指令生成定制的image。相比image这种黑盒子,Dockerfile这种显而易见的脚本更容易被使用者接受,它明确的表明image是怎么产生的。有了Dockerfile,当我们需要定制自己额外的需求时,只需在Dockerfile上添加或者修改指令,重新生成image即可,省去了敲命令的麻烦。参考

注意Dockerfile必须和Jar包在同一路径下

创建并编辑dockfile文件

touch Dockerfile

Dockfile

FROM java:8
EXPOSE 8080
VOLUME /slm
ADD helloworld-1.0-SNAPSHOT.jar app.jar
RUN sh -c ‘touch /app.jar‘
ENV JAVA_OPTS=""
ENTRYPOINT [ "sh", "-c", "java $JAVA_OPTS -Djava.security.egd=file:/dev/./urandom -jar /app.jar" ]
  • FROM 基础镜像必要,代表你的项目将构建在这个基础上面
  • EXPOSE 允许指定端口转发
  • VOLUME 创建一个可以从本地主机或其他容器挂载的挂载点,一般用来存放数据库和需要保持的数据等。
  • ADD 将文件从路径
  • ENV 可以用于为docker容器设置环境变量
  • ENTRYPOINT 指定 Docker image 运行成 instance (也就是 Docker container) 时,要执行的命令或者文件。

开始构建:

docker build -t app .

-t boot-docker 代表你要构建的名字

控制台输出:

Sending build context to Docker daemon  14.35MB
Step 1/7 : FROM java:8
8: Pulling from library/java
5040bd298390: Pull complete
fce5728aad85: Pull complete
76610ec20bf5: Pull complete
60170fec2151: Pull complete
e98f73de8f0d: Pull complete
11f7af24ed9c: Pull complete
49e2d6393f32: Pull complete
bb9cdec9c7f3: Pull complete
Digest: sha256:c1ff613e8ba25833d2e1940da0940c3824f03f802c449f3d1815a66b7f8c0e9d
Status: Downloaded newer image for java:8
 ---> d23bdf5b1b1b
Step 2/7 : EXPOSE 8080
 ---> Running in baa4bf07bb14
Removing intermediate container baa4bf07bb14
 ---> f11644c60f39
Step 3/7 : VOLUME /slm
 ---> Running in b9416fbc0df5
Removing intermediate container b9416fbc0df5
 ---> 3f5578b86bca
Step 4/7 : ADD helloworld-1.0-SNAPSHOT.jar app.jar
 ---> 2644a63eee12
Step 5/7 : RUN sh -c ‘touch /app.jar‘
 ---> Running in 287d2c7fea63
Removing intermediate container 287d2c7fea63
 ---> 5eadcec67575
Step 6/7 : ENV JAVA_OPTS=""
 ---> Running in df119f19b273
Removing intermediate container df119f19b273
 ---> 1259b5b9c02a
Step 7/7 : ENTRYPOINT [ "sh", "-c", "java $JAVA_OPTS -Djava.security.egd=file:/dev/./urandom -jar /app.jar" ]
 ---> Running in 7bdbc2046342
Removing intermediate container 7bdbc2046342
 ---> 20a76c5f6685
Successfully built 20a76c5f6685
Successfully tagged app:latest

我们可以看到已经构建完成,Successfully built 20a76c5f6685这句话指明了刚刚构建的镜像ID现在我们可以根据这个ID来进行操作。

docker run -d -p 8080:8080 20a76c5f6685

控制台输出:

[[email protected] hello]# docker run -d -p 8080:8080 20a76c5f6685
4e3881ca9f99bbf59852a1b54131783ceec264334d708d4f8ddbfdf0f9fcf306

查看镜像

[[email protected] hello]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
app                 latest              20a76c5f6685        6 seconds ago       672MB
hello-world         latest              fce289e99eb9        11 months ago       1.84kB
java                8                   d23bdf5b1b1b        2 years ago         643MB

可以看到app镜像已经有了

查看正在运行的镜像

[[email protected] hello]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES
4e3881ca9f99        20a76c5f6685        "sh -c ‘java $JAVA_O…"   10 minutes ago      Up 10 minutes       0.0.0.0:8080->8080/tcp   strange_knuth

可以看到app镜像的CONTAINER的ID为4e3881ca9f99,名称为strange_knuth,映射的端口号为8080

进入app镜像所在的容器

[[email protected] hello]# docker exec -it 4e3881ca9f99 /bin/bash
[email protected]:/#

查看容器中的信息

[email protected]:/# ls
app.jar  bin  boot  dev  etc  home  lib  lib64    media  mnt  opt  proc  root  run  sbin    slm  srv  sys  tmp  usr  var

可以看到app.jar在容器中

宿主机开放8080访问端口,在浏览器中进行访问

访问成功

docker相关命令

目录挂载

我们可以在创建容器的时候,将宿主机的目录与容器内的目录进行映射,这样我们就可以通过修改宿主机某个目录的文件从而去影响容器。

创建容器   添加-v参数,   后边为 宿主机目录:容器目录    --name后边是容器名称     centos:7指的是镜像以及版本号

docker run -di /usr/local/myhtml:/usr/local/myhtml --name=mycentos7 centos:7

如果你共享的是多级的目录,可能会出现权限不足的提示。

 Permission denied

这是因为Centos7中的安全模块selinux把权限禁掉了,我们需要添加参数 -privileged=true来解决挂载目录没有权限的问题

将容器保存为镜像

docker commit contailer_nginx mynginx
contailer_nginx是容器名称   mynginx是新的镜像名称

镜像备份
docker save -o mynginx.tar mynginx

-o 输出到的文件

执行后,运行ls命令即可看到打成的jar包

恢复镜像

doker load -i mynginx.tar

参考网址:

https://www.jb51.net/article/165159.htm

https://www.runoob.com/docker/docker-architecture.html

原文地址:https://www.cnblogs.com/yanduanduan/p/12038490.html

时间: 2024-10-09 06:49:22

Docker入门-docker运行springboot应用(二)的相关文章

docker入门-docker应用场景和优势

一.什么是docker Docker是一个使用 Go 语言开发的,并且开源的应用容器引擎,基于LXC(Linux Container)内核虚拟化技术实现,提供一系列更强的功能,比如镜像.Dockerfile等: Docker理念是将应用及依赖包打包到一个可移植的容器中,可发布到任意Linux发行版的Docker引擎上,使用沙箱机制运行程序,程序之间相互隔离: Docker采用C/S架构,Dcoker daemon作为服务端接受来自客户端请求,并处理这些请求,比如创建.运行容器等;客户端为用户提供

Spring Boot教程34——Docker入门

Spring Data介绍 Spring Data项目是Spring用来解决数据访问问题的一揽子解决方案.Spring Data包含了大量关系型数据库及非关系型数据库的数据访问解决方案.Spring Data使我们可以快速且简单地使用普通的数据访问技术及新的数据访问技术. Spring Data包含的子项目如下: Spring Data JPA org.springframework.data spring-data-jpa 1.8.1.RELEASE Spring Data MongoDB o

.NET Core + docker入门

下载安装docker docker客户端,今天vpn小水管实在是受不了,于是找了国内的下载地址 配置docker加速器 参考博文Docker for windows10 配置阿里云镜像 docker入门 docker入门文档参考 .NET Core + docker 快速上手 详细文档

Docker入门教程(二)命令

Docker入门教程(二)命令 [编者的话]DockerOne组织翻译了Flux7的Docker入门教程,本文是系列入门教程的第二篇,介绍了Docker的基本命令以及命令的用法和功能. 在Docker系列教程的第一篇文章中,我们了解了Docker的基础知识,知道了它是如何工作以及如何安装的.在这篇文章中,我们将学习15个Docker命令,并通过实践来学习它是如何工作的. 首先,让我们通过下面的命令来检查Docker的安装是否正确: docker info  如果没有找到这条命令,则表示Docke

【实战】Docker入门实践二:Docker服务基本操作 和 测试Hello World

操作环境 操作系统:CentOS7.2 内存:1GB CPU:2核 Docker服务常用命令 docker服务操作命令如下 service docker start #启动服务 service docker stop  #停止服务 service docker restart #重启服务 service docker status   #查看服务状态 启动Docker服务 docker是一个CS模型,需要先启动服务端,直接执行 sudo service docker start 启动docker

Docker入门二:容器管理

Docker入门二:容器管理 LinuxDocker time: 2019-12-3 容器管理 docker常用命令 注: 命令中的CONTAINER,可以是conainer_id,也可以是container name docker system info # 查看docker系统信息 docker container ls -a 查看当前已经创建的container docker container ls: -a 显示所有容器 -q 仅显示ID -s 显示container的文件大小 快速启动

Docker入门(二)

一.Docker相关概念 1.Docker: namespace,cgroup: 解决方案: lxc,openvz lxc:linux containers docker最初就是lxc的封装版本. docker engine/docker server:输出一个api,用于接受外部请求 接受到client请求,借助于lxc虚拟化技术,在lxc上创建一个虚拟机实例. docker借助于外部的dockerhub,实现image 后台docker不再使用lxc,使用libcontainer[cento

Docker入门(二)基本操作

(一).容器的使用1.docker客户端命令.输入docker查看docker用法的语法和相关的命令. [[email protected] ~]# docker Usage: docker [OPTIONS] COMMAND A self-sufficient runtime for containers Options: --config string Location of client config files (default "/root/.docker") -D, --d

Docker入门(二):容器与镜像常用指令

零.docker常用命令 #镜像名 版本标签 镜像id 创建时间 镜像大小 REPOSITORY TAG IMAGE ID CREATED SIZE hello-world latest fce289e99eb9 6 months ago 1.84kB docker version/info #查看版本/信息 docker --help #查看说明文档 docker logs -f -t --tail 日志条数 容器ID #查看容器日志 docker inspect #获取容器/镜像的元数据 一