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 的点点滴滴的更多相关文章

  1. docker——容器安装tomcat

    写在前面: 继续docker的学习,学习了docker的基本常用命令之后,我在docker上安装jdk,tomcat两个基本的java web工具,这里对操作流程记录一下. 软件准备: 1.jdk-7 ...

  2. Docker笔记一:基于Docker容器构建并运行 nginx + php + mysql ( mariadb ) 服务环境

    首先为什么要自己编写Dockerfile来构建 nginx.php.mariadb这三个镜像呢?一是希望更深入了解Dockerfile的使用,也就能初步了解docker镜像是如何被构建的:二是希望将来 ...

  3. Docker 第一篇--初识docker

    已经多年不写博客, 看完<晓松奇谈>最后一期猛然觉醒, 决定仔细梳理下自己这几年的知识脉络. 既然决定写, 那么首先就从最近2年热门的开源项目Docker开始.Docker 这两年在国内很 ...

  4. 在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 ...

  5. docker for mac 学习记录

    docker基本命令 docker run -d -p 80:80 --name webserver nginx 运行容器并起别名 docker ps 展示目前启动的容器 docker ps -a 展 ...

  6. scrapy爬虫docker部署

    spider_docker 接我上篇博客,为爬虫引用创建container,包括的模块:scrapy, mongo, celery, rabbitmq,连接https://github.com/Liu ...

  7. [原][Docker]特性与原理解析

    Docker特性与原理解析 文章假设你已经熟悉了Docker的基本命令和基本知识 首先看看Docker提供了哪些特性: 交互式Shell:Docker可以分配一个虚拟终端并关联到任何容器的标准输入上, ...

  8. 开发者的利器:Docker 理解与使用

    困扰写代码的机器难免会被我们安装上各种各样的开发工具.语言运行环境和引用库等一大堆的东西,长久以来不仅机器乱七八糟,而且有些相同的软件还有可能会安装不同的版本,这样又会导致一个项目正常运行了,却不小心 ...

  9. 使用python自动生成docker nginx反向代理配置

    由于在测试环境上用docker部署了多个应用,而且他们的端口有的相同,有的又不相同,数量也比较多,在使用jenkins发版本的时候,不好配置,于是想要写一个脚本,能在docker 容器创建.停止的时候 ...

随机推荐

  1. windows下提权基础

    拿到webshell很多时候代表渗透的开始,下面带来windows提权基础 环境:虚拟机 win7系统 首先:查看权限whoami 我们知道windows的高权限应该是administrator和sy ...

  2. 浅析Spring

    一:什么是Spring Spring是一个开源的框架,是为了解决企业应用程序开发复杂性由RodJohnson创建的.虽然Spring是为企业级应用推出的,但是所有的Java系统开发都可以使用Sprin ...

  3. java开发代码中的50个性能优化细节

    在java程序中,性能的大部分原因并不在java与语言,而是程序本身.养成好的编码习惯非常重要,能够显著地提升程序性能. 1:尽量在合适的场合使用单例 使用单利可以减轻加载的负担,缩短加载时间,提高加 ...

  4. python小练习: 给定一个数组 按重复次数 降序排列输出 数组非空且为正整数

    假设有个列表  a=[1,1,1,2,2,4,5,5,5,5] (非空且为正整数) 那么根据要求 最终输出的形式为  5,1,2,4  (按重复次数 降序排列输出) 代码实现及解释: a=[1,1,1 ...

  5. JAVA开发环境搭建(Mac)

    1. 打开Terminal, 执行命令: java -version 即可查看到我们所安装的jdk版本. 2.安装jdk成功之后,我们还需要配置jdk环境变量. 使用命令: /usr/libexec/ ...

  6. Linux忘记root密码 单用户模式 及启动加密

    单用户模式: 在系统启动引导读秒时,按任意键进入系统选项 再按  e  键   选择第二项  按 e  进入编辑  输入  空格  1 然后回车  再按B  键 不需要密码即可进入系统 再passwd ...

  7. 路径规划算法之Bellman-Ford算法

    最近由于工作需要一直在研究Bellman-Ford算法,这也是我第一次用C++编写代码. 1.Bellman-Ford算法总结 (1)Bellman-Ford算法计算从源点(起始点)到任意一点的最短路 ...

  8. 简单的Web日志处理细节

  9. 转载-IDEA项目左边栏只能看到文件看不到项目结构

    原文-https://blog.csdn.net/weixin_42362985/article/details/80538064 有时IDEA Maven项目打开左侧Project窗口本应该显示项目 ...

  10. Vue + Element 配置报错

    { test: /\.(eot|svg|ttf|woff|woff2)$/, loader: 'file-loader'}