Docker 的点点滴滴
Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从Apache2.0协议开源。
Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。
容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。
Docker 的架构:
原文转转来自:https://blog.csdn.net/S_gy_Zetrov/article/details/78161154
一.镜像(Image)
镜像是静态的、可以被用户互相分享的文件。我们玩过双系统和虚拟机的人都知道,首先你需要一个.iso镜像,才能安装系统。Docker中的镜像也是这个东西,镜像是静态的,你不能对他操作,只能pull别人的镜像或者push自己的镜像。
二.容器(Container)
镜像是静态不可操作的,只能被分享和下载,那什么是能被操作的呢?就是容器里!容器可以理解为镜像的动态状态,也就是我们虚拟机中系统装好后的状态,其实这么说是不对的,容器最符合的描述应该是Linux的iso文件的Live CD模式,比如我们玩双系统时都进入过Live CD模式,不安装系统而直接进入系统,很神奇是吧,Docker的容器就是这个概念,只不过更加轻量更加迅速便捷。但是Live CD的害处就是你关机后作出的修改安装的软件全部gg,容器也是一样,一旦被直接推出,之前安装的gcc啊vim啊啥的就会全部gg掉。如果要保存修改,就需要将当前容器封装成一个新的镜像,这样下次启动这个新的镜像后之前作出的修改还都在。
三.仓库(Repository)
Docker中的仓库很像git的代码仓库,你可以pull自己之前push到自己仓库的镜像到本地,也可以pull别人push到公共仓库的镜像到自己本地。你还可以下载(pull)别人分享的镜像到自己的本地,别人也可以下载(pull)你的镜像,因为Docker仓库都是公共的。当然,每个免费用户有一个名额把自己的一个镜像设为私有,也就是禁止被分享给别人
安装docker
使用命令:
sudo apt install docker.io
查看docker的版本
docker -v
获取镜像
sudo docker search ubuntu
pull 拉去到本地,默认是latest版本 (:lastes)=tag
sudo docker pull ubuntu
查看本地镜像
sudo docker images
运行本地镜像
-it 表示运行在交互模式
sudo docker run -it ubuntu
root@8f0fb5bd974f:/#
此处已经是root用户状态,
运行的镜像就是我们本地的容器,在本地容器环境中安装软件
apt install vim
提示:
Reading package lists... Done
Building dependency tree
Reading state information... Done
E: Unable to locate package vim
因为当前系统是精简镜像,所以必须先apt update一次才可以。
apt update
.....
apt install vim
退出容器
使用 exit命令
exit
保存容器环境
exit退出容器后,在运行镜像发现,vim 或安装的软件不存在,已经还原了,因为退出容器的时候没有保存环境,要保存容器,就要把容器转换为镜像。使用commit 命令
先获取容器ID
sudo docker ps -a

其实,在docker run 之后就可以看到container的id了

执行commit命令
-m指定说明信息
-a指定用户信息
a50efd41c14d容器的id
my_repo:vvim指定目标镜像的用户名、仓库名和 tag 信息
sudo docker commit -m "ubuntu with vim " -a "dxb8888" a50efd41c14d my_repo:vvim
删除镜像、容器
sudo docker rm container_id # 删除容器
sudo docker rmi image_id # 删除镜像
删除镜像的时候必须要删除属于镜像下的容器,否则回报错误:Error response from daemon: conflict: unable to remove repository reference "ubuntu" (must force) - container 718c03f5fd16 is using its referenced image 94e814e2efa8
如果删除镜像提示 Error: No such image: my_repo,表示tag不唯一, 就要带上镜像的tag
sudo docker rmi image_id:tag
将本地镜像保存到hub
1:注册hub https://hub.docker.com
2:终端登陆hub账户
docker login
输入用户名与密码
3:使用tag命令将本地镜像添加到新的标签(与hub上新建的仓库一样)
sudo docker tag my_repo:vvim dxb8888/ubuntu_env:vvim
此时,本地有了另外一个镜像 dxb8888/ubuntu_env
4:将镜像push到hub
sudo docker push dxb8888/ubuntu_env:vvim


Docker 的点点滴滴的更多相关文章
- docker——容器安装tomcat
写在前面: 继续docker的学习,学习了docker的基本常用命令之后,我在docker上安装jdk,tomcat两个基本的java web工具,这里对操作流程记录一下. 软件准备: 1.jdk-7 ...
- Docker笔记一:基于Docker容器构建并运行 nginx + php + mysql ( mariadb ) 服务环境
首先为什么要自己编写Dockerfile来构建 nginx.php.mariadb这三个镜像呢?一是希望更深入了解Dockerfile的使用,也就能初步了解docker镜像是如何被构建的:二是希望将来 ...
- Docker 第一篇--初识docker
已经多年不写博客, 看完<晓松奇谈>最后一期猛然觉醒, 决定仔细梳理下自己这几年的知识脉络. 既然决定写, 那么首先就从最近2年热门的开源项目Docker开始.Docker 这两年在国内很 ...
- 在docker中运行ASP.NET Core Web API应用程序(附AWS Windows Server 2016 widt Container实战案例)
环境准备 1.亚马逊EC2 Windows Server 2016 with Container 2.Visual Studio 2015 Enterprise(Profresianal要装Updat ...
- docker for mac 学习记录
docker基本命令 docker run -d -p 80:80 --name webserver nginx 运行容器并起别名 docker ps 展示目前启动的容器 docker ps -a 展 ...
- scrapy爬虫docker部署
spider_docker 接我上篇博客,为爬虫引用创建container,包括的模块:scrapy, mongo, celery, rabbitmq,连接https://github.com/Liu ...
- [原][Docker]特性与原理解析
Docker特性与原理解析 文章假设你已经熟悉了Docker的基本命令和基本知识 首先看看Docker提供了哪些特性: 交互式Shell:Docker可以分配一个虚拟终端并关联到任何容器的标准输入上, ...
- 开发者的利器:Docker 理解与使用
困扰写代码的机器难免会被我们安装上各种各样的开发工具.语言运行环境和引用库等一大堆的东西,长久以来不仅机器乱七八糟,而且有些相同的软件还有可能会安装不同的版本,这样又会导致一个项目正常运行了,却不小心 ...
- 使用python自动生成docker nginx反向代理配置
由于在测试环境上用docker部署了多个应用,而且他们的端口有的相同,有的又不相同,数量也比较多,在使用jenkins发版本的时候,不好配置,于是想要写一个脚本,能在docker 容器创建.停止的时候 ...
随机推荐
- windows下网络编程TCP
转载 sockets(套接字)编程有三种,流式套接字(SOCK_STREAM),数据报套接字(SOCK_DGRAM),原始套接字(SOCK_RAW): 基于TCP的socket编程 服务器端编程的步骤 ...
- URL存在跨站漏洞http host头攻击漏洞解决方案
最近项目部署的时候客户使用的绿盟扫描出一些漏洞,老大让我处理,经过看大神的博客等方式,分享一些简单的解决方法. 一 跨网站脚本 跨网站脚本(Cross-site scripting,通常简称为XSS或 ...
- PaginatorSet
from django.core.paginator import Paginator, EmptyPage class PaginatorSet: def __init__(self, limit= ...
- mysql,mycat的demo
一直都是使用公司架构师提供的mycat,今天得空自己尝试了以下: 1.首先安装jdk(官网建议1.7及以上版本),mysql(我安装的是5.7.19-0ubuntu0.16.04.1,设置账号密码为r ...
- java 格式化字符串
Date 格式转化为字符串 SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd"); java.util.Date date ...
- Standford NLP study
Homepage https://stanfordnlp.github.io/CoreNLP/index.html Source Code: https://github.com/stanfordnl ...
- stringify()和parse()的区别
记录一下小知识点,大神略过... 一:JSON.parse()[从一个字符串中解析出json对象] 例子: //定义一个字符串 var data='{"name":"go ...
- L1-Day12
1.凡是杀不死你的都会让你变得更强.(什么关系?主语是什么?)[我的翻译]There is no killing you makes you stronger.[标准答案]What doesn’t k ...
- 2018-2019-2 网络对抗技术 20165231 Exp3 免杀原理与实践
实践内容(3.5分) 1.1 正确使用msf编码器(0.5分),msfvenom生成如jar之类的其他文件(0.5分),veil-evasion(0.5分),加壳工具(0.5分),使用shellcod ...
- pmi-ACP考试知识点梳理(部分)
敏捷宣言 个体和互动 高于流程和工具 工作的软件 高于详尽的文档 客户合作 高于合同谈判 响应变化 高于遵循计划 十二条敏捷原则 1 我们最重要的目标,是通过持续不断地及早交付有价值的软件使客户满意. ...