初识Docker

网友投稿 628 2022-05-30

初识docker

万物上云,虚拟化技术助力云计算蓬勃发展。仅以此文记录Docker学习历程。

为什么需要Docker?

许多程序开发者经常会遇到这样一个问题,A开发的软件在B的机器上运行不了,因为软件环境配置存在差异。为了解决这个问题,通用的方案是在安装软件时也将环境(Lib/Bin)给复制过来,保证软件环境的整体结构。

虚拟机(Virtual Machine,VM)技术是一种常见的解决方案。如下图左边部分所示,单个节点上可部署多个虚拟机来提升资源利用率。每个虚拟机含有自身的操作系统和软件环境,并搭载多种类型的应用程序。虚拟机之间资源隔离,因此各虚拟机搭载的应用程序不会相互干扰。但是,虚拟机含有自己的OS,每创建一个虚拟机都要创建一个属于该虚拟机的OS,单个OS将近占用GB级别内存空间(可想而知,内存开销有多大),体积大、启动慢、占用资源多。

容器(Linux Container,LXC)技术则客服了虚拟机存在的缺点,在进程级别对资源进行隔离,如下图右边部分所示,每个容器不含有自身的OS。相对于虚拟机而言,容器体积更小,启动更快、占用资源更少。

Docker是什么?

Docker是Linux容器的一种封装,提供简单易用的容器使用接口,是目前最流行的Linux容器解决方案。Docker将应用程序与该程序的依赖环境,打包到一个文件中。运行这个文件就会生成一个虚拟容器。应用程序在容器里运行,就像在自己的物理机器上运行一样。

Docker提供一次性的环境,便于本地测试别人的软件,部署、运行和删除操作简单便捷;提供弹性的云服务,随开随关,很适合动态伸缩服务场景;易于组件微服务架构,一台机器上可以运行多个容器和多个服务,同时也提升物理节点的资源利用率。

目前国内外大多数主流云计算服务厂商均采用Docker来部署自己的微服务架构,抓住时代的尾巴,现在上车还来得及。

Docker核心组件

Docker的核心组成部分包含下面几个部分:

image镜像:就是上面提到的应用程序和其依赖的环境,可以理解成一个环境实体;

container容器:image的实体,真正用来运行服务的载体(可以理解成image是一个类,而container则是对象,让image动起来),可支持创建、启动、停止、删除和暂停等操作;

repository仓库:image停车场,用来保存image

如图所示,每个节点可部署多个Docker容器(可以理解成一个进程,只不过这个进程已经对运行环境进行封装),容器依托于image创建运行。image镜像依托于仓库,若节点上所需的image不存在,则从仓库里拉(pull)下来。

Docker使用

安装Docker

参考官方文档https://docs.docker.com/。

初识Docker

Docker基本操作指令

# 获取image docker pull ubuntu:14.08              # ubuntu是仓库名称,14.08是版本,两者在一起用来唯一标记image # 启动一个容器 docker run -it ubuntu:14.08 /bin/bash        # -i:允许与STDIN交互, -t:开个终端, exit或者ctrl+D退出 # 后台运行一个容器 docker run -itd --name myubuntu ubuntu:14.08 /bin/bash        # --name:为容器命名 # 进入容器 docker attach myubuntu        # 退出即停止容器 docker exec myubuntu        # 在这里面退出,容器不会停止 # 查看后台容器输出 docker logs myubuntu # 查看所有容器 docker ps # 停止一个容器 docker stop myubuntu    # 删除容器 docker rm -f myubuntu docker container prune        # 清楚所有已处于终止状态的容器

镜像操作指令

# 列出镜像 docker images # 获取新的镜像 docker pull ubuntu:14.08        # 拉取镜像到本地 # 查找镜像 docker search ubuntu:14.08        # 也可以在 # 删除镜像 docker rmi ubuntu:14.08 # 使用dockerfile定制镜像 mkdir myngix cd myngix touch dockerfile ------------ dockerfile content ------------ FROM nginx        # 指定基础镜像,必备,第一条指令,Docker Hub上还有很多其他官方镜像,例如redis,mysql,mongo等 RUN echo '

Hello, Docker!

' > /usr/share/nginx/html/index.html        # 执行命令,尽量在一个RUN里完成多个操作来减少image的层数(每一个RUN需要一次commit操作来保存本次结果以构成新的镜像,RUN越多,镜像越臃肿) # 使用build指令根据dockerfile创建镜像 docker build -t myngix:0.1 .

端口映射

# 容器内部端口随意映射到主机的高端口 -P docker run -d -P ubuntu:14.08 ping 8.8.8.8 # 内部端口绑定到指定的主机端口 -p docker run -d -p 8080:80 ubuntu:14.08 ping 8.8.8.8 docker run -d -p 127.0.0.1:8080:80 ubuntu:14.08 ping 8.8.8.8        # 指定绑定的网络地址 docker run -d -p 127.0.0.1:8080:80/udp ubuntu:14.08 ping 8.8.8.8        # 默认走tcp协议,可更改为udp协议

上面只是最基本的docker知识,后续还要加强学习!

Docker 虚拟化

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:微吼云上线多路互动直播服务 加速多场景互动直播落地
下一篇:Agent Lite Demo(C-Windows) 操作指南参考
相关文章