docker学习笔记
一丶什么是容器
• 容器技术已经成为应用程序封装和交付的核心技术
• 容器技术的核心有以下几个内核技术组成:
– Cgroups(Control Groups)-资源管理
– NameSpace-进程隔离
– SELinux安全
• 由于是在物理机上实施隔离,启动一个容器,可以像
启动一个进程一样快速
容器就是限制真机资源让你用 把真机资源限制一定范围让你用
Docker缺点
• 容器的隔离性没有虚拟化强
• 共用Linux内核,安全性有先天缺陷
• SELinux难以驾驭
• 监控容器和容器排错是挑战
Docker优点
• 相比于传统的虚拟化技术,容器更加简洁高效
• 传统虚拟机需要给每个VM安装操作系统
• 容器使用的共享公共库和程序
隔离 命名空间
hostname
ip
disk 磁盘
proc 进程
ipc 信号向量 发信号 只能给容器里发信号
useradd 用户
二.Docker镜像
什么是镜像
• 在Docker中容器是基于镜像启动的
• 镜像是启动容器的核心
• 镜像采用分层设计
• 使用快照的COW技术,确保底层数据不丢失
docker操作命令
使用docker search 名字 找镜像
docker images // 查看已有的镜像
docker pull 镜像名 // 下载镜像
docker push 镜像名 // 上传镜像
备份镜像(将本地镜像导出为tar文件) (名称加标签 ID 唯一的)
docker save -o 名称加标签 镜像id或镜像名字
-o :输出到的文件
docker save 名称加标签 > 位置/名字
恢复镜像(通过tar包文件导入镜像)
docker load -i tar包名字
docker load < tar包名字
-i :指定导出的文件。
-q :精简输出信息。
1.启动镜像
启动centos镜像生成一个容器(创建新的容器)
docker 子命令 参数 镜像名:标签 启动命令
docker run -itd docker.io/centos:latest /bin/bash
参数说明
-
-a stdin: 指定标准输入输出内容类型,可选 STDIN/STDOUT/STDERR 三项;
-
-d: 后台运行容器,并返回容器ID;
-
-i: 以交互模式运行容器,通常与 -t 同时使用;
-
-P: 随机端口映射,容器内部端口随机映射到主机的高端口
-
-p: 指定端口映射,格式为:主机(宿主)端口:容器端口
-
-t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用;
-
--name="nginx-lb": 为容器指定一个名称;
-
--dns 8.8.8.8: 指定容器使用的DNS服务器,默认和宿主一致;
-
--dns-search example.com: 指定容器DNS搜索域名,默认和宿主一致;
-
-h "mars": 指定容器的hostname;
-
-e username="ritchie": 设置环境变量;
-
--env-file=[]: 从指定文件读入环境变量;
-
--cpuset="0-2" or --cpuset="0,1,2": 绑定容器到指定CPU运行;
-
-m :设置容器使用内存最大值;
-
--net="bridge": 指定容器的网络连接类型,支持 bridge/host/none/container:<name|id> 四种类型;
-
--link=[]: 添加链接到另一个容器;
-
--expose=[]: 开放一个端口或一组端口;
-
--volume , -v: 绑定一个卷