快捷搜索:

Docker的入门学习、常规使用

一、简介

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

从概念定义中,也可以看出docker的一些优点(个人理解)如下:

    可移植性高,可以将应用进行打包运行在任何的docker容器中 安装配置快捷,具有镜像仓库(本地和远程,类似git)进行管理镜像,而容器也可以进行生产制作镜像(另外,还可以通过dockerfile进行生产)。 小巧方便,容器是一个精简版的OS+拓展的应用(按需引入)-联合系统

docker的优势(PHP网):1、更高效的利用系统资源;2、更快速的启动时间;3、一致的运行环境;4、持续支付和部署;5、更轻松的迁移;6、更轻松的维护和拓展。

二、Docker 的入门安装使用

  1. 安装

使用官方安装脚本自动安装 安装命令如下:

curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun

也可以使用国内 daocloud 一键安装命令:

curl -sSL https://get.daocloud.io/docker | sh
  1. 执行
$ sudo systemctl start docker
  1. 基本指令
  1. 使用docker的基本步骤
    需求定位:明确自己需要跑什么软件?(mysql,jar,nginx,reids??) 制作模板镜像(类似定义抽象类):采用dockerfile、commit、或直接从仓库拉取镜像;对于仓库也就是别人制定好的模板,类似前人造好的轮子;对于commit,dockerfile则是自己定制化、按需引入的模板。 执行、运行:将镜像实例化,跑起来,注意结合 -p,-v镜像操作是否需要进行文件挂载,端口映射,如果程序需要将端口暴露出去访问那则需要-p进行端口映射。 查看容器是否跑起来,用端口指令查看容器内部和服务器端口情况。

三、简单的制作一个dockerfile,进行跑一下jar包

  1. 准备工作 整理环境需要:jdk17+jar包即可
  2. 制作镜像文件(重点掌握 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","&"]
  1. 将jar包和Dockerfile,jdk文件放放一个文件夹下(当然若有做好的jdk版的镜像,可直接FROM 该镜像,无需这么麻烦了)
  2. 采用相应命令(docker build -t app80:1 .)进行制作镜像
  3. docker images查看是否制作成功
  4. run起来–注意映射端口,否则只能在容器内部跑起来,外部访问不到(容器沙箱机制,接口相互隔离)
  5. 另外打开一个窗口,在Linux服务器下查看该端口是否的确启动起来了,或者docker ps查看情况
  6. 测试访问该资源

四、总结

  1. 个人感想

Linux基础指令是基础知识、需要去从文件管理、网络管理、进程这些概念去理解。docker的容器、镜像、与服务器的关系的概念需要清晰,一个容器就是一个简易版的Linux,(必须基于Linux内核,对于Windows需要安装虚拟机),我们的应用在此基础上加强。相对于虚拟机,它更加轻便、小巧。随着互联网软件迭代的越来越快,像具有一定公用性的配置比较形式化,运维也渐渐因docker进行解脱。

  1. docker的进阶学习
    复杂软件的安装,例如Redis集群 Compose,进行对docker容器的编排(由于一个容器对应一个应用,由于微服务服务较多,需要对容器进行合理的编排,建议10个以上则) Docker的底层原理,network等
经验分享 程序员 职场和发展