Docker的入门学习常规使用
Posted adventure.Li
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Docker的入门学习常规使用相关的知识,希望对你有一定的参考价值。
一、简介
- 为什么会有docker?
对于传统的web等应用(例如 单体前后分离的 SpringBoot+Vue),由于调用链路简单、依赖不复杂,一般是采用将 直接打包jar包到配有JDK环境的Linux中进行运行。但随着云原生、微服务、DevOps等概念的提出,互联网体系中程序运行依赖越来越复杂,服务越来越越多,对于运维和开发开始越来越容易产生冲突。环境配置也是最头疼的一个问题(SpringBoot也是针对配置炼狱提出的,软件应当追求一种 复用,注重业务和效率,而配置环境往往是固定化的模板,不需要过多关注,而面向对象,和即将谈到的docker中 对象、类;容器和镜像,则有点 模板公用,实例具体的 ,减少不必要的麻烦的意味)。而docker则是基于该背景,针对该问题所提出的。
- docker是什么?
docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows操作系统的机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口
- docker 的优点
从概念定义中,也可以看出docker的一些优点(个人理解)如下:
- 可移植性高,可以将应用进行打包运行在任何的docker容器中
- 安装配置快捷,具有镜像仓库(本地和远程,类似git)进行管理镜像,而容器也可以进行生产制作镜像(另外,还可以通过dockerfile进行生产)。
- 小巧方便,容器是一个精简版的OS+拓展的应用(按需引入)-联合系统
docker的优势(php网):1、更高效的利用系统资源;2、更快速的启动时间;3、一致的运行环境;4、持续支付和部署;5、更轻松的迁移;6、更轻松的维护和拓展。
二、Docker 的入门安装使用
- 安装
使用官方安装脚本自动安装
安装命令如下:
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
也可以使用国内 daocloud 一键安装命令:
curl -sSL https://get.daocloud.io/docker | sh
- 执行
$ sudo systemctl start docker
- 基本指令
- 使用docker的基本步骤
- 需求定位:明确自己需要跑什么软件?(mysql,jar,nginx,reids??)
- 制作模板镜像(类似定义抽象类):采用dockerfile、commit、或直接从仓库拉取镜像;对于仓库也就是别人制定好的模板,类似前人造好的轮子;对于commit,dockerfile则是自己定制化、按需引入的模板。
- 执行、运行:将镜像实例化,跑起来,注意结合 -p,-v镜像操作是否需要进行文件挂载,端口映射,如果程序需要将端口暴露出去访问那则需要-p进行端口映射。
- 查看容器是否跑起来,用端口指令查看容器内部和服务器端口情况。
三、简单的制作一个dockerfile,进行跑一下jar包
-
准备工作
整理环境需要:jdk17+jar包即可 -
制作镜像文件(重点掌握 CMD,FROM,ADD,RUN,WORDDIR)
# 基础镜像
FROM ubuntu
# 环境变量
ENV WORK_DIR /usr/local
ENV JAVA_DIR /usr/local/java
WORKDIR $WORK_DIR
# 执行运行安装管理器-并安装 vim文本编辑器
CMD apt-get update
CMD apt-get install -y vim
CMD mkdir $JAVA_DIR
# 相对路径!将jdk打入
# /usr/java/jdk17
ADD jdk17.tar.gz $JAVA_DIR
ADD app80.jar app80.ja
CMD echo "success ok"
EXPOSE 80
# 也可 进入容器再进行运行
# CMD ["nohup","/usr/local/java/bin/java","-jar","app80.jar","&"]
-
将jar包和Dockerfile,jdk文件放放一个文件夹下(当然若有做好的jdk版的镜像,可直接FROM 该镜像,无需这么麻烦了)
-
采用相应命令(
docker build -t app80:1 .
)进行制作镜像 -
docker images查看是否制作成功
-
run起来–注意映射端口,否则只能在容器内部跑起来,外部访问不到(容器沙箱机制,接口相互隔离)
-
另外打开一个窗口,在Linux服务器下查看该端口是否的确启动起来了,或者docker ps查看情况
-
测试访问该资源
四、总结
- 个人感想
Linux基础指令是基础知识、需要去从文件管理、网络管理、进程这些概念去理解。docker的容器、镜像、与服务器的关系的概念需要清晰,一个容器就是一个简易版的Linux,(必须基于Linux内核,对于Windows需要安装虚拟机),我们的应用在此基础上加强。相对于虚拟机,它更加轻便、小巧。随着互联网软件迭代的越来越快,像具有一定公用性的配置比较形式化,运维也渐渐因docker进行解脱。
- docker的进阶学习
- 复杂软件的安装,例如Redis集群
- Compose,进行对docker容器的编排(由于一个容器对应一个应用,由于微服务服务较多,需要对容器进行合理的编排,建议10个以上则)
- Docker的底层原理,network等
以上是关于Docker的入门学习常规使用的主要内容,如果未能解决你的问题,请参考以下文章
宋宝华:Docker 最初的2小时(Docker从入门到入门)