初识Docker

举报
小表弟 发表于 2019/12/19 20:01:22 2019/12/19
【摘要】 初识Docker,万物上云,虚拟化技术助力云计算蓬勃发展。仅以此文记录Docker学习历程。本文主要介绍以下几方面内容:为什么需要Docker、Docker是什么、Docker的组成部分、Docker的基本运维操作。

初识Docker


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

相关图片

为什么需要Docker?


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

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

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

image.png

Docker是什么?


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

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

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

Docker核心组件


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

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

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

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

         image.png

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

Docker使用


安装Docker

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

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 '<h1>Hello, Docker!</h1>' > /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知识,后续还要加强学习!

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。