极简版小白Docker学习篇(通俗易懂)

Docker学习篇

Docker学习篇源于自己第一次部署上线前后端分离的项目时,所采用的方法。途中遇到的问题以及是如何解决,我将在这篇博客有所展示,希望对过来阅读的你们有些许所获和学习。那么,废话不多说,赶紧上车!

Docker初认识

  1. Docker的概念

什么是Docker?看这一篇干货文章就够了! - 知乎 (zhihu.com)

说白了,从上述文章我们可以知道:Docker是一种现代流行的容器技术的一种实现,是可以极简缩小版的操作系统(又或是虚拟机)。兼具操作系统的功能,又能轻量化移植(clone),提高项目部署效率,降低部署的难度。实现“Build once, run everywhere”,这简直不要太香!

Docker初体验

!!!前提:你的虚拟机或者服务器上面得安装Docker,这里我是默认你们是有的。
要想使用Docker的前提,我们得需要知道container、image和Dockerfile的关系,构建镜像命令和Dockerfile相关语句以及如何编写优雅的Dockerfile(重点)

0. 准备工作

安装Docker

  • 虚拟机——[虚拟机VMware安装docker完成个人web项目部署_docker vmware用哪个-CSDN博客](https://blog.csdn.net/weixin_43012300/article/details/107304808#:~:text=虚拟机VMware安装docker完成个人web项目部署 1 1.安装并使用虚拟机VMware 2 2.在虚拟机上安装Linux系统centos7 3 3.安装docker 4,7 8.退出并重启容器 [docker restart 7e132767c055] 8 9.访问项目 更多項目)
  • 服务器——推荐宝塔,无脑安装docker。

1. 前置知识

  • container (容器)
  • image (镜像)
  • Dockerfile

Docker中容器和镜像的关系梳理_docker一个容器运行多个镜像-CSDN博客

因此我们可以知道,image(镜像)是通过Dockerfile构建出来的,该过程实例化出了container(容器)。即一个容器对应一个镜像,创建了镜像,就也创建了容器!
容器是进程,镜像是文件

2. Dockerfile编写

2.0 注意
  1. 在前后端写Dockerfile文件,名字千万不能错!只能是Dockerfile!!!只能是Dockerfile!!!只能是Dockerfile!!!(重要的事情说三遍)要不然docker执行Dockerfile会报错的。
  2. 指令必须保持全部大写,要不然汇报语法错误!
2.1 常见命令
命令功能备注
FROM拉取容器的基本镜像必须是Dockerfile的第一句!!!
COPY复制本地文件到容器的工作目录明确src和dest传递参数
ADD添加本地文件到容器的工作目录明确src和dest传递参数
WORKDIR指定容器的工作目录可写在COPY和ADD前面,也可以在它们后面
CMD执行容器的指令命令根据前后端项目而定
2.2 ADD和COPY的异同点
  • 异:其实ADD命令远不止上面表格所说的那样,只是添加的功能。它是兼具COPY功能和解压文件的功能的。因此在传送到指定位置时,想省去文件解压还要传递文件的麻烦事,那么ADD是最优选择!当然你也可以先解压,然后再COPY过去,不过这就多走了一步啦!

  • 同:传递参数都是src和dest,那么src是根据构建的上下文的规则,那这是什么意思呢?其实说白了就是你Dockerfile文件存放在你项目里的位置。例如:Java项目Dockerfile是存在放在项目的根目录,那么你想把跟Dockerfile文件同级目录的pom.xml添加到容器当中,那么ADD pom.xml 容器的工作目录下 这就是构建的上下文,其实就是你项目的上下文。要不然在执行Dockerfile文件会报找不到添加文件目录而报错的。COPY指令同理。

    详情可以参见这篇博客:Dockerfile 中的 COPY 与 ADD 命令 - sparkdev - 博客园 (cnblogs.com)

2.3 WORKDIR

容器的工作目录,就是将运行image实例化的容器存放的地方,该语句可以放在执行COPY和ADD指令前面,也可以在它们后面,不同的是dest参数要进行变化。例如:

# 1. 在前面的写法
WORKDIR /app # 指定工作目录为容器的/app
COPY pom.xml . # 复制到容器目录的根目录下 即/app
# 2. 在后面的写法
COPY pom.xml /app/
WORKDIR /app 
2.4 FROM

这是Dockerfile必不可少的指令,也是必须置于文件的第一句!用来拉取基础镜像。

可以直接拉虚拟机的镜像,也可以Java镜像,也可以maven镜像都是可以的。

2.5 Dockerfile范例

何为优雅的Dockerfile呢?就是缩短构建(build)时间,尽可能短的完成项目镜像的制作。

技巧

  • 不需要maven拉取项目需要的jar包(对于Java项目)
  • 自己手动书写配置项目启动基础环境配置(对于Java项目,最基本是要Java环境)

普通版:

FROM maven:3.5-jdk-8-alpine as builder # 拉取maven镜像 为mvn package做准备
# Copy local code to the container image.
WORKDIR /app
COPY pom.xml . # 复制到根目录下(/app)
COPY src ./src #根目录下的src,即 /app/src
# Build a release artifact.
RUN mvn package -DskipTests # 自动拉取项目所需要的所有jar包,从中央仓库获取
# Run the web service on container startup.
CMD ["java","-jar","/app/target/user_center-0.0.1-SNAPSHOT.jar","--spring.profiles.active=prod"]

优化版:

FROM centos # 最最基本的镜像基础
COPY target/user_center-0.0.1-SNAPSHOT.jar /app/user_center-0.0.1-SNAPSHOT.jar # 减少maven拉取jar包的时间 直接复制jar进入到容器的工作目录当中
ADD jdk-8u381-linux-x64.tar.gz /app/ 
WORKDIR /app
#5.配置环境变量
ENV JAVA_HOME=/app/jdk1.8.0_381
ENV CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV PATH=$JAVA_HOME/bin:$PATH
EXPOSE 8081
CMD ["java", "-jar", "user_center-0.0.1-SNAPSHOT.jar","--spring.profiles.active=prod"]

3. Docker常见指令

学习网站:Docker Compose | 菜鸟教程 (runoob.com)

终端提示:docker --help

这里就介绍我部署上线项目,最常用到的命令。

  • docker build

    -t (为构建的镜像指定名称和标签。通常tag为了标记镜像的版本号)

  • docker run

    -d (以后台模式运行容器,大多数项目都是以后台的形式运行)

    -p : (指定项目启动端口和容器的启动端口,一般都是保持一致)

    -v :(将主机上的目录或文件挂载到容器中。这样可以在容器和主机之间共享文件。)

    –name (指定容器的名称)

  • docker ps

    查看正在运行的容器container的信息

    -a (查看所有创建过的容器)

  • docker images

    查看已经创建的镜像的信息

  • docker kill

    后面加上需要停止的容器id,或者是该容器的名(name)

  • docker logs

    查看某容器的运行日志,后面跟上容器id,或者是该容器名(name)

  • docker rmi/docker rm

    前者删除镜像、后者删除容器

  • docker port

    查看容器的端口映射情况

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Brilliant.Louis

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值