探索学习:网红容器引擎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还有很多值得探讨的用法和命令,希望以后有机会能一起学习和讨论。
如果觉得本文写的还不错的伙伴,可以给个关注一起交流进步,如果有在找工作且对阿里感兴趣的伙伴,也可以发简历给我进行内推:
探索学习:网红容器引擎Docker相关推荐
- Docker学习总结(65)—— 容器引擎 Docker 与 Podman 的详细对比分析
一.什么是 Linux 容器? Linux 容器是由 Linux 内核所提供的具有特定隔离功能的进程,Linux 容器技术能够让你对应用及其整个运行时环境(包括全部所需文件)一起进行打包或隔离.从而让 ...
- 不要学习“网红”编程语言
"人类不停发明编程语言本身就是件蠢事,我希望世界上就只有c这一种高级语言就够了" 看到网上有这样的评论,回复的朋友也挺有意思的 "平庸的C程序员绝大多数时候都在解决机器问 ...
- Docker应用容器引擎——docker的常用命令详解
文章目录 1.Docker常用命令 2.docker的启动.停止.重启 3.管理命令 4.镜像管理 5.命令的详细演示 docker create docker start docker run do ...
- 技术选型之Docker容器引擎
点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 作者 | huashiou 来源 | https://s ...
- docker 虚拟机搭建mongodb一主一从一复制_云计算学习路线图素材课件:Docker容器应用场景分析...
Docker容器是一个开源的应用容器引擎,它能够自动执行重复性任务,例如搭建和配置开发环境,用户可以方便地创建和使用容器,还可以进行版本管理.复制.分享.修改.有很多初学云计算的同学不清楚Docker ...
- docker 仓库镜像 替换_自己动手创建 Docker 镜像并分享到镜像仓库,容器引擎的用途越来越广泛!...
↑ 点击上面 "时代Java"关注我们,关注新技术,学习新知识! 前面在公众号里讲过Docker安装和基本用法和概念,新来的小伙伴可以先去学习一下: docker yum快速安装和 ...
- Docker容器引擎
文章目录 一.概述 1. Docker能解决的问题 2. Docker思想 3. Docker为什么这么火?(作用) 4. 底层 5. 官网和文档 6. 基本组成(图解) 7. 核心概念(名词) 10 ...
- Kubernetes切换Docker容器引擎为Containerd
文章目录 前言 一.准备一套使用Docker引擎的kubernetes集群 二.配置先决条件 1.启用Containerd依赖的overlay.br_netfilter内核模块 2.设置必要的sysc ...
- 应用容器引擎:docker的简介与安装
目录 Docker概述: Docker和传统虚拟化技术的对比 部署Docker的开发环境 Docker常用命令 Docker的优点: 持续部署与测试 多云平台 环境标准化和版本控制 隔离性 安全性 结 ...
最新文章
- 弹道仿真软件_【决战决胜14】看,七部仿真试验室如何降本增效?
- pandas 分组统计的三个函数 pivot table crosstab groupby
- teraterm 执行sql命令_tera term的ttl脚本使用方法 | 学步园
- Code Quality
- 七牛云存储Python SDK使用教程 - 上传策略详解
- ant man 什么意思_浅谈为什么很多蓝牙模块厂家选择nRF52832?
- 内存为什么还有管理?
- has been blocked by CORS policy: No ‘Access-Control-Allow-Origin‘ header is present---nginx工作笔记006
- 每天一算法(二)实现栈的push pop 操作,并可以输出栈的最小值
- baacloud无法连接到_加入 Beta 版“Baacloud88” - TestFlight - Apple
- php寻仙记,【网站搭建】寻仙记+天空之城两款文字游戏PHP源码
- iOS 手势UIGestureRecognizer详解
- 美团饿了么返利公众号小程序搭建(付源码)
- 网络技术学习:虚拟专用网络
- 【编译原理】【C语言】实验二:自动构造词法分析器
- apk编辑器制作共存失败的一个可能的原因(第一次手动制作的教训)
- BaaS、FaaS、Serverless都是什么馅儿?
- 华硕 X542UQ REV:2.1
- android 8.0 耳机线控,最新资讯 | 安卓8.0这大变化没法忍!要弃耳机孔
- 职场历练【管理学之三】
热门文章
- NMAD-2.14b1安装
- SNIPER—— SNIP的实战版本 (目标检测)(two-stage)(深度学习)(Arvix 2018)
- spoon 数据库in 字符串的使用方案
- 模态对话框和非模态对话框的区别
- ps2键盘测试软件,stm32_ps2键盘显示测试程序
- 基于Java+vue实现高校学科竞赛项目系统详细设计
- 【单片机仿真】(六)寻址方式 — 变址寻址与相对寻址
- C语言一维数组的最大值和最小值依次放入一个新的数组中,依次类推
- 程序设计入门C语言 --- 素数和
- mysql练习答案,mysql练习语句