探索学习:网红容器引擎Docker

近两年容器技术成为开源社区中的网红,轻便易用,集开发、持续集成、交付和运行于一体。本文将按照如下结构与大家一起进行探索和学习。

1. Docker的起源

Docker容器引擎由Docker Inc(前身是dotCloud)开发并开源,2014年6月9日,Docker 1.0版本正式发布,基于 Go 语言并遵从 Apache2.0 协议开源。
Docker 允许开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器使用沙箱机制,相互之间不会有任何接,且性能开销极低。
Docker从17.03 版本之后分为CE(Community Edition: 社区版)和 EE(Enterprise Edition: 企业版),本文的探索中使用CE版本进行演示。

2. Docker虚拟容器的优势

早在Docker出现的几十年间,虚拟机就盛行一时,在我上本科的时候使用最多的当属VMWare和VirtualBox,但是这类虚拟机运行时耗费极大的内存空间,还记得当年夏天每次开启VM之后,电脑风扇就开始呼呼大叫:我受不了了…
那么同样是虚拟化容器,Docker与他们有何区别呢?
在这里插入图片描述
上图(此图非原创)表示的是传统虚拟机的运行结构,虽然每台机器可以创建很多虚拟系统,但是这样会占用极大的空间,每次运行起来就像一辆绿皮火车,等的人心碎,吵的人暴躁。而Docker容器技术恰好没有这些缺点,它不需要虚拟出整个操作系统,只需要虚拟一个小规模的环境,是一种轻量级的虚拟机。
Docker创建的容器启动时间很快,几秒钟就能完成。而且,它对资源的利用率很高(一台主机可以同时运行几千个Docker容器)。此外,它占的空间很小,虚拟机一般要几GB到几十GB的空间,而容器只需要MB级甚至KB级。
Docker容器包含三个关键概念:
镜像(Image):是一个 root 文件系统。比如官方镜像 ubuntu就包含了完整的一套最小系统的 root 文件系统。
容器(Container):镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和实例一样,镜像是静态的定义-类,容器是镜像运行时的实体-对象。容器可以被创建、启动、停止、删除、暂停等。
仓库(Repository):仓库可看作一个代码控制中心,用来保存镜像。

3. Docker基操

使用Docker创建容器,需要熟悉常用的命令。
Docker镜像管理命令大全:

查看镜像列表:
docker images
docker image ls
​
导出镜像:
docker image save centos > docker-centos6.9.tar.gz
导入镜像:
docker image load -i docker-centos6.9.tar.gz
删除镜像:
docker image rm centos:latest
docker image rm 578c3
​
搜索镜像   docker search + 镜像名字
​
给源中镜像打标签:
​
docker tag nginx:latest 10.0.0.11:80/nginx:latest
​
推送指定镜像到docker镜像源服务器
​
docker push 10.0.0.11:80/nginx:latest
​
获取镜像 (下载)  docker pull image_name
​
官方pull  docker pull centos:6.8(没有指定版本,默认会下载最新版) 私有仓库pull  docker pull daocloud.io/huangzhichong/alpine-cn:latest
​
docker history image_name   显示一个镜像的历史
​
docker build -t <image-name> .   *(点一定不能去掉)#使用当前目录下的Dockerfile构建镜像

Docker容器管理命令大全:

docker -v         #查看版本
​
docker info     #查看docker信息
​
运行容器
docker run --name 容器名 -d -p 3306:3306 mysql  docker 启动容器
docker run image_name
docker run -d -p 80:80 nginx:latest
run(创建并运行一个容器) 
-d 放在后台 
-p 端口映射 :docker的容器端口
-P 随机分配端口
-v 源地址(宿主机):目标地址(容器)
docker run -it --name centos6 centos:6.9 /bin/bash 
-it 分配交互式的终端 
--name 指定容器的名字 
/bin/sh覆盖容器的初始命令
​
docker run image_name  启动容器***
​
docker stop container_id  停止容器
​
docker kill container_name   杀死容器
​
docker ps (-a -l -q)    查看容器列表
​
docker container rm  'docker ps -a -q'   删除所有容器
​
docker rm -f  'docker ps -a -q`      #删除所有容器
​
docker ps -a  #查看容器列表
​
docker exec -it 77cd6bef4dc9 /bin/bash   #进容器
​
docker start/stop container-id||container-name 开启/停止 指定容器id或者容器名称的容器
​
docker run -d -p 80:80 -v /opt/xiaoniao:/usr/share/nginx/html nginx:latest
​
docker logs container-name/container-id     #查看容器日志
​
docker ps | grep ${CONTAINER_ID}    #查看容器状态
​
docker commit ID new_image_name     #镜像打包 (保存对容器的修改)
docker commit -m="提交的描述信息" -a="作者" 容器id  要创建的目标镜像名:[标签名]
​
docker inspect <id/container_name>   #查看容器内部详情细节
​
docker login #登录
​
Ctrl+P+Q     #退出而不关闭容器

本文中我们简单进行几个命令的示范:

docker run ubuntu:15.10 /bin/echo "Hello world"

在这里插入图片描述
可以看到,当输入上述命令后,Docker会先去本体的镜像仓库寻找ubuntu 15.10镜像源,当发现没有时会出现图中的情况,先进行简单的下载,然后再执行后面的命令,相比于传统虚拟机是不是方便太多了。

docker images

在这里插入图片描述
完成第一条命令的执行后,再运行上述命令,就可以看到在本地仓库中已经有了一个ubuntu 15.10的镜像源。
接下来直接通过命令行的方式进行展示:

appledeair-5:var apple$ docker pull httpd 
Using default tag: latest
latest: Pulling from library/httpd
5b54d594fba7: Pull complete 
4b53bced9ee8: Pull complete 
33abd7401e3d: Pull complete 
8fb831f2b4d7: Pull complete 
f26db3b1c783: Pull complete 
Digest: sha256:e6c5f0e078ed56afccb343ad81c8eceb1bdc335206b1f3bf695362b74cf2ebaf
Status: Downloaded newer image for httpd:latest
docker.io/library/httpd:latest

上述命令完成了httpd镜像的下载。

[appledeair-5:var apple$ docker run -i -t ubuntu:15.10 /bin/bash
root@cfe950dd0196:/# ls
bin   dev  home  lib64  mnt  proc  run   srv  tmp  var
boot  etc  lib   media  opt  root  sbin  sys  usr

上面这条命令通过交互式的方式列出了ubuntu 15.10根目录下的文件。

[appledeair-5:var apple$ docker run -itd ubuntu:15.10 /bin/bash
17433e89aac4e85a1457bccd7218046020854df9db919ec2750e4e421e1e24b3
appledeair-5:var apple$ docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
17433e89aac4        ubuntu:15.10        "/bin/bash"         7 seconds ago       Up 6 seconds                            bold_fermat

上述命令讲一个容器置于后台运行,然后通过ps命令查看其运行状态。

appledeair-5:var apple$ docker stop 17433e89aac4
17433e89aac4
appledeair-5:var apple$ docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
appledeair-5:var apple$ 

上述命令通过容器ID关闭后台运行的容器,然后再次查看时已经没有运行的容器了。

到此为止,Docker初探索的旅程要画上句号了,其实Docker还有很多值得探讨的用法和命令,希望以后有机会能一起学习和讨论。

如果觉得本文写的还不错的伙伴,可以给个关注一起交流进步,如果有在找工作且对阿里感兴趣的伙伴,也可以发简历给我进行内推:
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值