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
控制台输出:
[root@iZ2ze895xh98oa4skpbtiuZ hello]# docker run -d -p 8080:8080 20a76c5f6685
4e3881ca9f99bbf59852a1b54131783ceec264334d708d4f8ddbfdf0f9fcf306
查看镜像
[root@iZ2ze895xh98oa4skpbtiuZ 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镜像已经有了
查看正在运行的镜像
[root@iZ2ze895xh98oa4skpbtiuZ 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镜像所在的容器
[root@iZ2ze895xh98oa4skpbtiuZ hello]# docker exec -it 4e3881ca9f99 /bin/bash
root@4e3881ca9f99:/#
查看容器中的信息
root@4e3881ca9f99:/# 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
Docker入门-docker运行springboot应用(二)的更多相关文章
- docker入门篇 部署springboot项目
安装docker Ubuntu16.04安装Docker 使用docker 注册docker服务 systemctl enable docker systemctl status docker 然后在 ...
- docker 入门(docker 镜像 、容器、仓库)
一.关于docker 镜像 .容器.仓库之间的关系 镜像(Image): 类似于虚拟机 的镜像 容器(Container): 类似于操作系统(或者说是独立的软件), 由镜像可以创建大量的容器. 仓库( ...
- Docker入门-docker compose的使用
Compose简介 Compose项目是Docker官方的开源项目,负责实现对Docker容器集群的快速编排.其代码目前在https://github.com/docker/compose 上开源. ...
- Docker学习第一天(Docker入门&&Docker镜像管理)
简介 今天小区的超市买零食老板给我说再过几天可能就卖完了我有点诧异,老板又说厂家不生产了emmm 今天总算开始docker了! 1.Docker? 1.什么是Docker Docker 是一个开源的应 ...
- Docker入门与应用系列(二)镜像管理
1.1 什么是镜像 简单说,Docker镜像是一个不包含Linux内核而又精简的Linux操作系统. 1.2 镜像从哪里来 Docker Hub是由Docker公司负责维护的公共注册中心,包含大量的容 ...
- docker入门-docker应用场景和优势
一.什么是docker Docker是一个使用 Go 语言开发的,并且开源的应用容器引擎,基于LXC(Linux Container)内核虚拟化技术实现,提供一系列更强的功能,比如镜像.Dockerf ...
- redis哨兵集群、docker入门
redis-sentinel主从复制高可用 Redis-Sentinel Redis-Sentinel是redis官方推荐的高可用性解决方案,当用redis作master-slave的高可用时,如果m ...
- Docker入门-笔记-1
Docker入门 Docker 是 Golang 编写的, 自 2013 年推出以来,受到越来越多的开发者的关注.如果你关注最新的技术发展,那么你一定听说过 Docker.不管是云服务还是微服务(Mi ...
- .NET Core + docker入门
下载安装docker docker客户端,今天vpn小水管实在是受不了,于是找了国内的下载地址 配置docker加速器 参考博文Docker for windows10 配置阿里云镜像 docker入 ...
随机推荐
- scratch2.0的教材视频,王木头系列
在线视频 http://v.qq.com/vplus/d05a62f676f6f3b6b87401b4530cff9a?page=cover 理论辩证 https://www.sohu.com/a/1 ...
- 201671030122 杨凡亿 实验十四 团队项目评审&课程学习总结
项目 内容 课程名称 2016级计算机科学与工程学院软件工程(西北师范大学) 作业要求 实验十四 团队项目评审&课程学习总结 课程学习目标 (1)掌握软件项目评审会流程(2)反思总结课程学习内 ...
- 利用python jieba库统计政府工作报告词频
1.安装jieba库 舍友帮装的,我也不会( ╯□╰ ) 2.上网寻找政府工作报告 3.参照课本三国演义词频统计代码编写 import jieba txt = open("D:\政府工作报告 ...
- What is Babel?---JSX and React
Babel is a JavaScript compiler Babel is a toolchain that is mainly used to convert ECMAScript 2015+ ...
- vue 自定义过滤器
vue允许自定义过滤器,被用作一些常见文本的格式化.由“管道符”指示,格式如下: <!-- 在两个大括号中 --> {{message | capitalize}} <!-- 在 ...
- [Git] --amend
Change a Commit Message that Hasn't Been Pushed Yet If you make a mistake in a commit message but HA ...
- 【转载】java.util.ServiceConfigurationError: com.sun.tools.attach.spi.AttachProvider
https://blog.csdn.net/zqz_zqz/article/details/80922164 window上运行以下代码获取jvm进程: List<VirtualMachineD ...
- ent 基本使用七 Config
通过config 我们可以自定义表相关的选项 参考配置 package schema import ( "github.com/facebookincubator/ent" & ...
- apache-maven安装
1.下载maven 网址:http://maven.apache.org 2.下载maven和安装 由于最新版的可能会有问题,我选择下载旧版本 一般都下载二进制的zip文件 解压后文件夹apache- ...
- kafk设计要点
kafka的设计目标是高吞吐量,所以kafka自己设计了一套高性能但是不通用的协议,他是仿照AMQP( Advanced Message Queuing Protocol 高级消息队列协议)设计的 ...