基本概念

Docker是什么?

Docker是一种基于Golang开发的虚拟化技术,开发人员和系统管理员使用容器开发,部署和运行应用程序的平台。 使用Linux容器部署应用程序称为容器化。 容器不是新的概念,但它们用于轻松部署应用程序。

统一了开发与实施运维的系统环境,减轻实施与运维人员的负担。

Docker是轻量级的,可以与虚拟机做类比

对比项 虚拟机 Docker
占用内存与硬盘大小
启动速度
集成部署 难以集成 容易集成,自带隔离

下图左侧为docker与宿主机的关系,右侧为虚拟机与宿主机的关系

我们看到docker是运行在宿主机系统上的,共用了宿主机OS的内核,而虚拟机需要虚拟出完整的OS。一台机器可以运行成百上千个docker容器,而使用虚拟机只能开不到10台,这已经很说明问题了。

镜像(Image)

镜像是由Dockerfile + docker build 或 docker commit 等打包而成,相当于我们安装系统用的iso镜像文件

容器(Container)

容器是镜像运行后的实体,有独立的命名空间,相当于iso镜像安装好的操作系统,这个“系统” 可以开机、关机、重启、输出为“iso镜像文件”

这里是比喻,严格来说容器不是完整的操作系统,容器与当前宿主机共用内核,没有自己的内核

仓库(Registry)

Docker提供的仓库是用于存放其他人制作好的镜像的地方,使用者可以通过简单的操作获取这些镜像。本地可配置多个仓库(Repository)

优点

  • 灵活好用易上手:上手简单,可以灵活地打包环境与工具
  • 轻量高效:容器利用并共享主机内核,占用硬件资源少,更高效。
  • 一致性运行环境:Docker镜像保证了除内核外的完整运行环境,确保了应用运行环境的一致性
  • 便携式:您可以在本地构建,部署到云,并在任何地方运行。
  • 即时堆叠服务:您可以垂直和即时堆叠服务。
  • 持续交付和部署:使用Dockerfile构建镜像,使用CI/CD工具进行自动测试与部署

初步安装与配置

安装与启动HelloWolrd

参考官网选择指定环境安装教程 或参考本人的Ubuntu下的 Ubuntu 16.04及以上 安装/卸载 Docker-CE

加快docker镜像拉取速度

由于默认docker仓库在国外,为了加快拉取速度,需要指定其为国内的,向 /etc/docker/daemon.json 中添加:

{
"registry-mirrors": ["https://registry.docker-cn.com"]
}

有的系统里没有daemon.json,新增即可。

当然不止这一种mirror,类似linux的镜像站,ustc/163/aliyun/tuna等等,如有需要请自行搜索。

不使用sudo使用Docker设置

如果您想将Docker用作非root用户,您现在应该考虑将您的用户添加到“docker”组,例如:

sudo usermod -aG docker 要使用的用户名
newgrp docker #更新用户组,立即生效

镜像操作

镜像创建

  • docker commit命令:由容器生成镜像,下文有写
  • Dockerfile文件+docker build命令;等下篇吧
  • 从本地文件系统导入:OpenVZ的模板。这个还没有用过

Dockerfile是创建docker镜像的配置文件

镜像搜索

根据应用名查找镜像

sudo docker search 应用名[:tag] #不写:tag版本号,默认使用lastest最新版

列出镜像

列出所有下载的镜像文件与信息

sudo docker images

拉取镜像

从Docker Hub仓库拉取别人打包好的docker镜像文件

sudo docker pull 镜像名[:tag]

tag相当于版本号,为可选参数,不写的话默认为lastest,即摘取最新版本的镜像

删除镜像

sudo docker rmi 镜像名 #删除一个镜像
sudo docker rmi `sudo docker images -q` #删除所有未使用的镜像,已使用的镜像会报错但不会被删除

删除镜像时,如果这个镜像已经创建了容器,需要先删除容器,否则你将得到类似如下的错误

hellxz@hz:/etc/docker$ sudo docker rmi tomcat
Error response from daemon: conflict: unable to remove repository reference "tomcat" (must force) - container adbf710bd7a0 is using its referenced image 894b39cf2fa1

容器操作

查看容器

sudo docker ps #查看当前运行中的容器
sudo docker ps -a #查看所有的容器

创建与启动容器

sudo docker run [OPTIONS] IMAGE [COMMAND] [ARG...]

常用可选操作OPTIONS部分参数:

  • -d : 启动守护线程后台启动
  • -p :指定端口号,格式为宿主机端口:容器占用端口
  • -P: 随机端口映射,容器内部端口随机映射到主机的高端口
  • -i : 可交互,保持可输入状态
  • -t : 分配一个虚拟tty终端
  • --name : 为容器起名,例--name=myworld
  • -v : 将容器里的目录挂载到宿主机目录,格式为宿主机目录绝对路径:容器内绝对路径
  • -e : 添加容器内的环境变量

更多参数可通过sudo docker run --help查看,或菜鸟教程

文件拷贝

用于宿主机文件与容器之间的

sudo docker cp 宿主机文件路径 容器名:容器内目录  #从宿主机到容器
sudo docker cp 容器名:容器内目录/文件 宿主机文件路径 #从容器到宿主机

宿主机可用相对路径,容器内目录需要用绝对路径

注意:此命令不支持容器之间文件的拷贝

文件挂载(目录映射)

sudo docker run -v 宿主机目录绝对路径:容器内绝对路径

这块提出来说是因为:如果挂载的目录是多级目录,在某些发行版(centos 7)访问挂载的多级目录会出现cannot open directory xxx:Permission denied,这是因为selinux的控制,如果碰到这个问题,除了关闭selinux外,还有就是在命令上加 --privileged=true,举例,sudo docker run -di -v /home/hz/elk:/usr/elk --privileged=true centos:7

访问后台运行的容器

sudo docker exec -it 容器名或容器id /bin/bash #访问后台执行的容器,开启一个终端

获取容器/镜像的元数据

sudo docker inspect [-f |-s |--type] 容器名|容器id|镜像名:tag
  • -f : 指定返回值的模板
  • -s: 显示总的文件大小
  • --type:指定返回数据类型,默认JSON

查看容器IP

sudo docker inspect 容器名或容器id #这个命令本身为获取容器/镜像的元数据,在NetworkSettings.IPAddress处展示
#除了上边这种,还可以指定输出条件,直接输出ip
sudo docker inspect -f "{{ .NetworkSettings.IPAddress}}" 容器id或容器名

这里主要是为了容器之间互联用,容器之间互联使用的是容器的ip

重启容器

sudo docker restart 容器名或容器id

关闭容器

sudo docker stop 容器名或容器id

启动未运行的容器

sudo docker start 容器名或容器id

重复执行已经启动的容器,会被docker忽略,不会启动新的容器,尽管显示就像是启动成功一样,哈哈

删除容器

sudo docker container rm 容器名或容器id  #删除一个容器
sudo docker rm -f $(docker ps -qa) #删除所有容器,无论是否处于启动中【谨慎操作】

删除容器前需要确认这个容器已经关闭状态,如果没有,请先执行sudo docker stop 容器名或容器id

容器与镜像的备份与恢复

容器保存为镜像

sudo docker commit 容器名或容器id 期望的镜像名 #创建镜像

镜像保存为压缩包

sudo docker save -o 保存名称.tar 镜像名 #其中扩展名和保存名称均可随意写
  • 最后的保存名称使用的是相对路径,相对于宿主机当前路径,必要时可以指绝对路径+名称
  • -o 表示的是输出文件

备份文件恢复为镜像

sudo docker load -i 备份镜像文件名
或者
sudo docker load < 备份镜像文件名

无需指定恢复的镜像名,这些信息已经记录在备份文件中了

声明,禁止布布扣、码迷、马开东、01海、colabug等网站复制转发此文章,其他请保留文章出处

【学习笔记】Docker基础的更多相关文章

  1. Docker学习笔记 — Docker私有仓库搭建

    Docker学习笔记 — Docker私有仓库搭建   目录(?)[-] 环境准备 搭建私有仓库 测试 管理仓库中的镜像 查询 删除 Registry V2   和Mavan的管理一样,Dockers ...

  2. MyBatis:学习笔记(1)——基础知识

    MyBatis:学习笔记(1)--基础知识 引入MyBatis JDBC编程的问题及解决设想 ☐ 数据库连接使用时创建,不使用时就释放,频繁开启和关闭,造成数据库资源浪费,影响数据库性能. ☐ 使用数 ...

  3. bootstrap学习笔记之基础导航条 http://www.imooc.com/code/3111

    基础导航条 在Bootstrap框中,导航条和导航从外观上差别不是太多,但在实际使用中导航条要比导航复杂得多.我们先来看导航条中最基础的一个--基础导航条. 使用方法: 在制作一个基础导航条时,主要分 ...

  4. Django学习笔记(基础篇)

    Django学习笔记(基础篇):http://www.cnblogs.com/wupeiqi/articles/5237704.html

  5. C#学习笔记(基础知识回顾)之值类型与引用类型转换(装箱和拆箱)

    一:值类型和引用类型的含义参考前一篇文章 C#学习笔记(基础知识回顾)之值类型和引用类型 1.1,C#数据类型分为在栈上分配内存的值类型和在托管堆上分配内存的引用类型.如果int只不过是栈上的一个4字 ...

  6. C#学习笔记(基础知识回顾)之值传递和引用传递

    一:要了解值传递和引用传递,先要知道这两种类型含义,可以参考上一篇 C#学习笔记(基础知识回顾)之值类型和引用类型 二:给方法传递参数分为值传递和引用传递. 2.1在变量通过引用传递给方法时,被调用的 ...

  7. C#学习笔记(基础知识回顾)之值类型和引用类型

    一:C#把数据类型分为值类型和引用类型 1.1:从概念上来看,其区别是值类型直接存储值,而引用类型存储对值的引用. 1.2:这两种类型在内存的不同地方,值类型存储在堆栈中,而引用类型存储在托管对上.存 ...

  8. MAVEN学习笔记之基础(1)

    MAVEN学习笔记之基础(1) 0.0 maven文件结构 pom.xml src main java package resource test java package resource targ ...

  9. mybatis学习笔记之基础复习(3)

    mybatis学习笔记之基础复习(3) mybatis是什么? mybatis是一个持久层框架,mybatis是一个不完全的ORM框架.sql语句需要程序员自己编写, 但是mybatis也是有映射(输 ...

  10. mybatis学习笔记之基础框架(2)

    mybatis学习笔记之基础框架(2) mybatis是一个持久层的框架,是apache下的顶级项目. mybatis让程序将主要精力放在sql上,通过mybatis提供的映射方式,自由灵活生成满足s ...

随机推荐

  1. yaml格式配置文件

    YAML 是一种可读性非常高,与程序语言数据结构非常接近.同时具备丰富的表达能力和可扩展性,并且易于使用的数据标记语言. python中处理 Yaml 格式的数据需要先下载pyyaml: pip in ...

  2. svn更换repos时保留svn log

    两种情况 1. 直接移动库 问题:svn如何把A服务器上的reposA上传到B服务器的reposB并保留各种上传更新记录? 这个问题要感想敢干,直接复制改名即可 #登录到B服务器 scp -r cmo ...

  3. angular6 导出Excel文件

    1.安装file-saver.@types/file-saver和xlsx npm install file-saver --save npm install @types/file-saver -- ...

  4. 【IOS】libimobiledevice常用命令

    libimobiledevice 是一个跨平台的软件库,支持 iPhone®, iPod Touch®, iPad® and Apple TV® 等设备的通讯协议.   安装 命令: brew ins ...

  5. Manacher算法(马拉车)求最长回文子串

    Manacher算法求最长回文字串 算法思路 按照惯例((・◇・)?),这里只是对算法的一些大体思路做一个描述,因为找到了相当好理解的博客可以参考(算法细节见参考文章). 一般而言,我们的判断回文算法 ...

  6. 第二阶段冲刺(个人)——two

    今天的计划: 测试登录功能并优化. 昨天做了什么呢?  修改登录界面. 遇到的困难:一些标签运用不好,过程进度慢,改了又改.

  7. es4x 使用nodejs 开发vertx 应用框架试用

    es4x 是将vertx 的特性带到nodejs 的开发中,性能很不错,同时开发方式和nodejs 一样,可以加速vertx 应用的开发,同时也可以方便的集成java 软件包,提供的cli 工具也很方 ...

  8. ZROI 暑期高端峰会 A班 Day4 生成函数

    一般生成函数 很普及组,不讲了 生成函数是一种形式幂级数,也就是我们只关心系数,不关心未知数具体的值. 比如 \(\sum\limits_{i\ge 0}x^i=\frac{1}{1-x}\).虽然只 ...

  9. 基于Linux(中标麒麟)上QT的环境搭建

    最近由于公司需要,需要在中标麒麟上进行QT的二次开发,但是网上的资料很少,就算是有也基本都是其他的版本的Linux上的搭建.中标麒麟本身的资料也很好,而且还只能试用60天. 下面就介绍下我对此环境的搭 ...

  10. [cf113d]Museum

    传送门 Solution 设一个状态为 \((x,y)\) 表示两人在的位置,求出每个状态期望出现的次数 设一个状态为 \(u\) , \(x_u^0=[u==(a,b)]\) 所以一个状态出现的次数 ...