Docker学习及部署SpringBoot项目

Docker简介

Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux或Windows操作系统的机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。

基本概念:

1. 镜像: 相当于一个类,可以使用镜像创建多个容器(实例)。镜像内部是一个精简的操作系统(OS),同时还包含应用运行所必须的文件和依赖包。
2. 容器:容器是镜像的运行时实例(对象),容器可以被创建、启动、停止、删除、暂停等。
3. 仓库:可看成一个代码控制中心,用来保存镜像。

Docker安装(centos 7)

链接直达

镜像加速:

阿里云容器镜像服务
 
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://自己的编码.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
可以使用 `docker info` 查看是否成功

Registry Mirrors:
  https://94nd6qb9.mirror.aliyuncs.com/
 Live Restore Enabled: false

Docker使用

Hello world

docker run ubuntu:15.10 /bin/echo "Hello world"

参数解析:

  1. docker: Docker 的二进制执行文件。
  2. run: 与前面的 docker 组合来运行一个容器。
  3. ubuntu:15.10: 指定要运行的镜像,Docker 首先从本地主机上查找镜像是否存在,如果不存在,Docker 就会从镜像仓库 Docker Hub 下载公共镜像。
  4. /bin/echo “Hello world”: 在启动的容器里执行的命令

Docker 以 ubuntu15.10 镜像创建一个新容器,然后在容器里执行 bin/echo “Hello world”,然后输出结果。
hello-world

镜像命令

  1. docker images:列出本地主机上的镜像
  2. docker search image:查找 image镜像
  3. docker pull image[:TAG]:获取 image:版本 镜像
  4. docker inspect image:展示xxx镜像的细节,包括镜像层数据和元数据
  5. docker rmi -f 镜像ID:删除xxx镜像
  6. docker rmi -f $(docker images -qa) : 删除全部镜像

容器命令

  1. docker run image:新建并启动容器
  2. docker ps :列出当前所有正在运行的容器
  3. exit:容器停止退出
  4. ctrl + P + Q:容器不停止退出
  5. docker start image:启动容器
  6. docker restart image:重启容器
  7. docker kill image:强制停止容器 / stop
  8. docker rm 容器ID:删除已停止的容器
  9. docker rm -f $(docker ps -a -q) :一次删除多个容器
  10. docker exec -it 容器ID bashShell :进入正在运行的容器并以命令行交互
  11. docker attach 容器ID: 重新进入运行的容器
  12. docker run -d image:启动守护式容器,Docker容器后台运行,就必须有一个前台进程.
  13. docker logs -f -t --tail 容器ID:查看容器日志
*   -t 是加入时间戳
*   -f 跟随最新的日志打印
*   --tail 数字 显示最后多少条

Dockerfile

Dockerfile是用来构建Docker镜像的构建文件,是由一系列命令和参数构成的脚本。
构建三步骤:编写Dockerfile文件------docker build --------docker run

执行Dockerfile流程:

  1. docker从基础镜像运行一个容器
  2. 执行一条指令并对容器作出修改
  3. 执行类似docker commit的操作提交一个新的镜像层
  4. docker再基于刚提交的镜像运行一个新容器
  5. 执行dockerfile中的下一条指令直到所有指令都完成

指令:

  1. FROM:基础镜像,当前新镜像是基于哪个镜像的
  2. MAINTAINER:镜像维护者的姓名和邮箱地址
  3. RUN:容器构建时需要运行的命令
  4. EXPOSE:当前容器对外暴露出的端口
  5. WORKDIR:指定在创建容器后,终端默认登陆的进来工作目录,一个落脚点
  6. ENV :用来在构建镜像过程中设置环境变量
  7. ADD:将宿主机目录下的文件拷贝进镜像且ADD命令会自动处理URL和解压tar压缩包
  8. VOLUME:容器数据卷,用于数据保存和持久化工作
  9. CMD:指定一个容器启动时要运行的命令,Dockerfile 中可以有多个 CMD 指令,但只有最后一个生效,CMD 会被 docker run 之后的参数替换
  10. ENTRYPOINT :指定一个容器启动时要运行的命令

重点:部署项目

1、下载项目所需要的 jdk linux版本,本地建立 mydocker文件夹,并将jdk cp到文件夹下。
2、在 mydocker文件夹中建立 Dockerfile文件。
3、将java项目打包mvn clean package -Dmaven.test.skip=true,将jar包上传到 mydocker文件夹中。
在这里插入图片描述4、编写Dockerfile文件

# 建立一个新的镜像文件,以centos为基础模板
FROM centos:7

# 作者名 和 邮箱
MAINTAINER tyq <2950498345@qq.com>

# 创建一个新目录来存储jdk文件
RUN mkdir /usr/local/java

#将jdk压缩文件复制到镜像中,它将自动解压缩tar文件
ADD jdk-11.0.3_linux-x64_bin.tar.gz /usr/local/java/

# 设置环境变量
ENV JAVA_HOME /usr/local/java/jdk-11.0.3
ENV PATH $JAVA_HOME/bin:$PATH

#指定在创建容器后,终端默认登陆的进来工作目录,一个落脚点
WORKDIR /usr/local

#将宿主机目录下的文件拷贝进镜像 更名为bank-test.jar
ADD bank-1.0-SNAPSHOT.jar /bank-test.jar

# 当前容器对外暴露的端口
EXPOSE 8080

# 配置容器启动后执行的命令
ENTRYPOINT ["java","-jar","/bank-test.jar"]

5、执行制作镜像命令:docker build -t bank-test .

  • docker build -t ImageName:TagName dir
  • . 表示当前目录,指 jar包与Dockerfile 在同一目录下
  • -t − 给镜像加一个Tag
  • ImageName − 给镜像起的名称
  • TagName − 给镜像的Tag名
  • Dir − Dockerfile所在目录
    在这里插入图片描述

6、创建容器并进行端口映射docker run -d -it -p 8000:8080 bank-test在这里插入图片描述
在这里插入图片描述

问题

出现:exec user process caused: exec format error
原因:可能是镜像和系统不兼容,在安装下载jdk的时候,选择了Linux ARM 64 RPM Package版本,后面改成Linux x64 Compressed Archive版本,重新部署,succ

通常手机的CPU架构是ARM,电脑的CPU架构是X86,X64 是 X86_X64的简称

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值