Docker 基础概念科普 和 常用操作介绍
Docker 基础概念
Docker是什么?
为什么要使用 Docker?
Docker 跟传统的虚拟化方式相比具有以下优势:
基本概念
Docker 包括三个基本概念
- 镜像(Image)
- 容器(Container)
- 仓库(Repository)
理解了这三个概念,就理解了 Docker 的整个生命周期。
Docker 镜像
我们都知道,操作系统分为内核和用户空间。对于 Linux 而言,内核启动后,会挂载 root
文件系统为其提供用户空间支持。而 Docker 镜像,就相当于是一个 root
文件系统。比如 Docker 官方镜像 ubuntu:14.04
就包含了完整的一套 Ubuntu 14.04 最小系统的 root
文件系统。
Docker 镜像是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)。镜像不包含任何动态数据,其内容在构建之后也不会被改变。
Docker 容器
镜像和容器的关系,就像是面向对象程序设计中的类
和实例
一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。
每一个容器运行时,是以镜像为基础层,在其上创建一个当前容器的存储层,我们可以称这个为容器运行时读写而准备的存储层为容器存储层。
容器存储层的生存周期和容器一样,容器消亡时,容器存储层也随之消亡。因此,任何保存于容器存储层的信息都会随容器删除而丢失。
按照 Docker 最佳实践的要求,容器不应该向其存储层内写入任何数据,容器存储层要保持无状态化。所有的文件写入操作,都应该使用 数据卷(Volume)、或者绑定宿主目录,在这些位置的读写会跳过容器存储层,直接对宿主(或网络存储)发生读写,其性能和稳定性更高。
数据卷的生存周期独立于容器,容器消亡,数据卷不会消亡。因此,使用数据卷后,容器可以随意删除、重新 run
,数据却不会丢失。
Docker 仓库
镜像构建完成后,可以很容易的在当前宿主上运行,但是,如果需要在其它服务器上使用这个镜像,我们就需要一个集中的存储、分发镜像的服务,Docker Registry 就是这样的服务。
Dockerfile 是一个文本文件,其中包含为了构建 Docker 镜像而手动执行的所有命令。Docker 可以通过从 Dockerfile 读取指令来自动构建镜像。
教程未改完.请参考https://www.jianshu.com/p/cf6e7248b6c7
镜像常用操作:
# 查看本地镜像
docker images
docker rmi
# 删除所有镜像
docker rmi $(docker images | grep -v RESPOSITORY | awk '{print $3}')
容器常用操作:
Docker run 命令
docker run :创建一个新的容器并运行一个命令
语法
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
OPTIONS说明:
-d: 后台运行容器,并返回容器ID;
-i: 以交互模式运行容器,通常与 -t 同时使用;
-t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用;
--name="nginx-lb": 为容器指定一个名称;
-h "mars": 指定容器的hostname;
-e username="ritchie": 设置环境变量;
--env-file=[]: 从指定文件读入环境变量;
-m :设置容器使用内存最大值;
--net="bridge": 指定容器的网络连接类型,支持 bridge/host/none/container: 四种类型;
--link=[]: 添加链接到另一个容器;
--expose=[]: 开放一个端口或一组端口;
实例
使用docker镜像nginx:latest以后台模式启动一个容器,并将容器命名为mynginx。
docker run --name mynginx -d nginx:latest
使用镜像nginx:latest以后台模式启动一个容器,并将容器的80端口映射到主机随机端口。
docker run -P -d nginx:latest
使用镜像nginx:latest以后台模式启动一个容器,将容器的80端口映射到主机的80端口,主机的目录/data映射到容器的/data。
docker run -p 80:80 -v /data:/data -d nginx:latest
使用镜像nginx:latest以交互模式启动一个容器,在容器内执行/bin/bash命令。
w3cschool@w3cschool:~$ docker run -it nginx:latest /bin/bash
root@b8573233d675:/#
# 关闭运行中的容器
docker stop 容器ID
# 重启一个容器
docker restart 容器ID
最新文章
- WdatePicker.js开始日期和结束日期比较
- android post带数据请求方式,传递的数据格式包括json和map
- android之Activity回传数据
- 文件比对工具(Beyond Compare)
- RTC系统
- python核心编程 第二天
- 20个非常绚丽的 CSS3 特性应用演示
- android把图片 视频 保存到相册
- 栅栏——CyclicBarrier
- Discuz 7.2 faq.php漏洞分析
- centos7虚拟机下python3安装matplotlib遇到的一些问题
- Docker下配置双机热备PXC集群
- ELK-6.5.3学习笔记–使用filebeat管理微服务日志
- 解决RAID重启后自动更名为md127
- alias-unalias
- Tomcat下webapps夹中root文件夹作用及如何发布项目至root文件夹中
- Authentication required (packagist.phpcomposer.com) 账号密码到哪里获取?
- 构造函数constructor 与析构函数destructor(二)
- phoenix使用vue
- Linux系统设置运行级别
热门文章
- POJ 2255 Tree Recovery &;&; Ulm Local 1997 Tree Recovery (二叉树的前中后序遍历)
- circusctl命令在ubuntu 上执行,卡住的现象处理。
- ubuntu 16.04.1 LTS zabbix-agent安装
- Linux命令之free
- 27、Django实战第27天:全局搜索功能开发
- 带WHERE子句的DELETE语句
- Eclipse / Pycharm | 使用过程中的一些问题笔记
- iOS 公司开发者账号申请清单
- Swift开发经验——外部参数名
- Word调整表格大小