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

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还有很多值得探讨的用法和命令,希望以后有机会能一起学习和讨论。

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

探索学习:网红容器引擎Docker相关推荐

  1. Docker学习总结(65)—— 容器引擎 Docker 与 Podman 的详细对比分析

    一.什么是 Linux 容器? Linux 容器是由 Linux 内核所提供的具有特定隔离功能的进程,Linux 容器技术能够让你对应用及其整个运行时环境(包括全部所需文件)一起进行打包或隔离.从而让 ...

  2. 不要学习“网红”编程语言

    "人类不停发明编程语言本身就是件蠢事,我希望世界上就只有c这一种高级语言就够了" 看到网上有这样的评论,回复的朋友也挺有意思的 "平庸的C程序员绝大多数时候都在解决机器问 ...

  3. Docker应用容器引擎——docker的常用命令详解

    文章目录 1.Docker常用命令 2.docker的启动.停止.重启 3.管理命令 4.镜像管理 5.命令的详细演示 docker create docker start docker run do ...

  4. 技术选型之Docker容器引擎

    点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 作者 | huashiou 来源 | https://s ...

  5. docker 虚拟机搭建mongodb一主一从一复制_云计算学习路线图素材课件:Docker容器应用场景分析...

    Docker容器是一个开源的应用容器引擎,它能够自动执行重复性任务,例如搭建和配置开发环境,用户可以方便地创建和使用容器,还可以进行版本管理.复制.分享.修改.有很多初学云计算的同学不清楚Docker ...

  6. docker 仓库镜像 替换_自己动手创建 Docker 镜像并分享到镜像仓库,容器引擎的用途越来越广泛!...

    ↑ 点击上面 "时代Java"关注我们,关注新技术,学习新知识! 前面在公众号里讲过Docker安装和基本用法和概念,新来的小伙伴可以先去学习一下: docker yum快速安装和 ...

  7. Docker容器引擎

    文章目录 一.概述 1. Docker能解决的问题 2. Docker思想 3. Docker为什么这么火?(作用) 4. 底层 5. 官网和文档 6. 基本组成(图解) 7. 核心概念(名词) 10 ...

  8. Kubernetes切换Docker容器引擎为Containerd

    文章目录 前言 一.准备一套使用Docker引擎的kubernetes集群 二.配置先决条件 1.启用Containerd依赖的overlay.br_netfilter内核模块 2.设置必要的sysc ...

  9. 应用容器引擎:docker的简介与安装

    目录 Docker概述: Docker和传统虚拟化技术的对比 部署Docker的开发环境 Docker常用命令 Docker的优点: 持续部署与测试 多云平台 环境标准化和版本控制 隔离性 安全性 结 ...

最新文章

  1. 弹道仿真软件_【决战决胜14】看,七部仿真试验室如何降本增效?
  2. pandas 分组统计的三个函数 pivot table crosstab groupby
  3. teraterm 执行sql命令_tera term的ttl脚本使用方法 | 学步园
  4. Code Quality
  5. 七牛云存储Python SDK使用教程 - 上传策略详解
  6. ant man 什么意思_浅谈为什么很多蓝牙模块厂家选择nRF52832?
  7. 内存为什么还有管理?
  8. has been blocked by CORS policy: No ‘Access-Control-Allow-Origin‘ header is present---nginx工作笔记006
  9. 每天一算法(二)实现栈的push pop 操作,并可以输出栈的最小值
  10. baacloud无法连接到_加入 Beta 版“Baacloud88” - TestFlight - Apple
  11. php寻仙记,【网站搭建】寻仙记+天空之城两款文字游戏PHP源码
  12. iOS 手势UIGestureRecognizer详解
  13. 美团饿了么返利公众号小程序搭建(付源码)
  14. 网络技术学习:虚拟专用网络
  15. 【编译原理】【C语言】实验二:自动构造词法分析器
  16. apk编辑器制作共存失败的一个可能的原因(第一次手动制作的教训)
  17. BaaS、FaaS、Serverless都是什么馅儿?
  18. 华硕 X542UQ REV:2.1
  19. android 8.0 耳机线控,最新资讯 | 安卓8.0这大变化没法忍!要弃耳机孔
  20. 职场历练【管理学之三】

热门文章

  1. NMAD-2.14b1安装
  2. SNIPER—— SNIP的实战版本 (目标检测)(two-stage)(深度学习)(Arvix 2018)
  3. spoon 数据库in 字符串的使用方案
  4. 模态对话框和非模态对话框的区别
  5. ps2键盘测试软件,stm32_ps2键盘显示测试程序
  6. 基于Java+vue实现高校学科竞赛项目系统详细设计
  7. 【单片机仿真】(六)寻址方式 — 变址寻址与相对寻址
  8. C语言一维数组的最大值和最小值依次放入一个新的数组中,依次类推
  9. 程序设计入门C语言 --- 素数和
  10. mysql练习答案,mysql练习语句