用前端姿势玩docker【一】Docker通俗理解常用功能汇总与操作埋坑
前言
首先一句话表达个人对docker的理解:与传统虚拟技术基于硬件及物理资源的虚拟化相比,Docker更加轻量化,docker为基于操作系统或内核级别的虚拟化,并且提供了从各种机制与操作以满足从开发环境到生产环境的各种定制化需要。
个人认为对前端而言,docker的意义在于:满足了前端环境的构建便利性与一致性的同时,降低了FE上手linux以及虚拟化技术的难度,同时docker借鉴了git的部分优点,更便于类比进行理解。
Docker为何如此好玩 !!! 自此开始分享前端工程化与docker相结合的各种玩法与姿势!!关于docker的FE相关环境也会及时更新到github上(顶部有传送门),请持续关注
坑会继续挖继续填,持续更新中。。。
首先记录一下常规操作:
Docker主要围绕仓库、镜像、容器三者展开,容器为核心。实际使用的时候也是主要与容器打交道。
linux基础,docker的安装等等非干货内容请自行学习,在此不做赘述。
镜像操作
- 查看本地主机上已有镜像
docker images - 为本地镜像添加标签
docker tag ubuntu:18.04 myubuntu - 查看详细信息
docker inspect ubuntu:18:04 - 查看json中的具体项
docker inspect -f {{".Architecture"}} ubuntu:18.04 - 查看镜像历史
docker history ubuntu:10.04 - 搜寻镜像
docker search [option] keywords - 删除镜像
docker rmi 镜像名或id或者docker image rm 镜像名或id - 清理镜像
docker image prune -f - 删除名称为none的镜像
docker rmi $(docker images | awk '/^<none>/ { print $3 }')
创建镜像
基于容器创建
- 首先创建容器
docker run -it ubuntu:18.04 - 在容器中自定义操作
- 根据指定容器的containerID创建镜像 ,指定作者,提交信息,新镜像名称以及tag
docker commit -a pomelott -m 'test commit' 9a9283d556f6 newubunto:v1
基于本地模板导入
- 通过本地已有镜像导入
cat ubuntu-18.04-x86_64-minimal.tar.gz I docker import - ubuntu:l8.04
基于dockerfile创建
- 在根目录下创建dockerfile,并写入dockerfile相关脚本(具体细节下文详解)
- 在当前目录下执行
docker build -t 创建的镜像名称 dockerfile存放目录
镜像存出 & 导入
- 将本地镜像存储文压缩文件以拷贝给他人使用
docker save -o ubuntu_18_04.tar ubuntu:18.04 - 将压缩文件导入
docker load -i ubuntu_18_04.tar
上传镜像
- 为镜像修改标签
docker tag myubuntu:latest pomelott/myubuntu:18.04 - 推送至远程docker Hub
docker push pomelott/myubuntu:18.04
注意:push需要推送至国外dockerHub源,会异常缓慢。修改镜像源只能解决pull的问题,就像npm,publish的时候也只能切回npm的官方源才可以。 - 解决慢的问题: 1、docker私库 2. github 基于dockerfile进行build 3. 解决网络问题(_)
容器
- 创建容器
docker create -it ubuntu:18.04, 可以通过docker ps -a查看 - 启动容器
docker start [containerID]可以通过docker ps查看 - 创建并启动
docker run [containerID/镜像名] - 通过交互式bash启动(启动后不会立即停止)
docker run -itd ubuntu:18.04 /bin/bash - 某些时候,执行 docker run 时候因为命令无法正常执行容器会出错直接退出, 此时可以查看退出错误代码,命令执行后出错,会默认返回命令。
125 : Docker daemon 执行出错,例如指定了不支持的 Docker 命令参数;
126 :所指定命令无法执行,例如权限出错
127: 容器内命令无法找到 - 查看容器的输出值
docker logs [containerID/name] - 暂停容器
docker pause [containerID/name], 取消暂停docker unpause [containerID/name] - 终止容器
docker stop [containerID/name],此时通过docker ps无法看到已终止的容器 - 终止所有容器
docker stop $(docker ps -aq) - 重启容器(将一个运行状态的容器先终止,再启动)
docker restart [containerID/name] - 强行终止容器
docker kill [containerID/name] - 清除掉所有处于停止状态的容器
docker container prune - 进入容器(与本机的标准输入输出绑定)
docker attach [containerID/name],通过exit退出后,容器即终止。 - 进入容器(类似ssh远程登录)
docker exec -it [containerID/name] /bin/bash, 通过exit退出后,容器不会终止。 - 删除处于终止或退出状态的容器
docker rm [containerID/name] - 导出容器为tar文件
docker export -o export_ubuntu.tar ce5 - 导入容器为镜像
docker import export_ubuntu.tar tate-ubuntu:v1.0 - 查看容器详情
docker inspect [containerID/name] - 查看容器内进程
docker top [containerID] - 查看容器统计信息
docker stats [containerID] - 复制文件,在容器与宿主机之间传递文件:将本机当前目录的test.js复制到容器的/root/ 目录下
docker cp test.js 385e9dfbf889:/root/ - 查看变更: 查看在原容器基础之上的操作
docker diff [containerID] - 查看容器的端口映射
docker port [conainerID] - 更新容器:更新容器的一些运行时配置,主要是一些资源限制份额
docker update [container]
— blkio-weight uintl6 :更新块 IO 限制, 10 1000 ,默认值为 ,代表着无限制;
— cpu-period int :限制 CPU 调度器 CFS (Completely Fair Scheduler )使用时间,单位为微秒,最小 1000;
— cpu-quota int :限制 CPU 调度器 CFS 配额,单位为微秒,最小 1000;
— cpu-rt period int :限制 CPU 调度器的实时周期,单位为微秒
— cpu-rt runtime int :限制 CPU 调度器的实时运行时,单位为微秒;
— c, -cpu-shares in 限制 CPU 使用份额;
— cpus decimal :限制 CPU 个数;
— cpuset-cpus string :允许使用的 CPU 核,如 0-3, 0,1;
— cpuset mems string :允许使用的内存块,如 0-3' 0, 1;
— kernel-memor bytes :限制使用的内核内存;
— m, -memory bytes 限制使用的内存;
— memory-reservation bytes :内存软限制;
— memory-swap bytes :内存加上缓存区的限制, 表示为对缓冲区无限制;
— restart string 容器退出后的重启策略
数据管理
主要做本地与容器、容器与容器之间的数据通信
— mount 项支持三种类型的数据卷,包括
volume 普通数据卷,映射到主机/var/ lib /docke /volumes 径下;
bind :绑定数据卷,映射到主机指定路径下;
tmpfs :临时数据卷,只存在于内存中
数据卷
- 启动容器,并将本机目录挂在到容器的指定目录
docker run -idt -P --name web --mount type=bind,source=/root/file,destination=/root ubuntu:18.04 - 多容器共享, 使用数据卷宗器(也是一个容器)供容器与容器间通信,个人理解类似桥接的模式
- 创建数据卷容器,并且在/root/file 创建一个数据卷
docker run -it -v /root/file --name filedata ubuntu:18.04, filedata为数据卷容器的名字 - 在其他容器中使用 --volumes-from 来挂载 filedata 容器中的数据卷,如创建容器 test_db1并挂载filedata数据卷容器
docker run -it --volumes-from filedata --name test_db1 ubuntu:18.04,进入容器后可以查看 /root/file是否存在 - 同理再创建test_db2
docker run -it --volumes-from filedata --name test_db2 ubuntu:18.04, 进入任意容器后,在挂载点/root/file下做部分操作,然后再其他容器中看是否做出响应
数据迁移、备份与恢复
- 数据备份:同样是通过新创建容器对指定挂载点的数据做备份。拿此命令(可能比较长,请细品)来说
docker run --volumes-from filedata -v /root/backup:/root/file --name backup-container ubuntu:18.04 tar cvf /root/file/backup.tar /root/file,分为以下几步:
- 使用ubuntu:18.04镜像,通过上文创建的filedata容器(其实上文中任意一个都ok,filedata,test_db1, test_db2)创建backup-container容器
- 将本地的
、root/backup目录挂载至容器的/root/file - 将backup-container容器下的
/root/file目录压缩为backup.tar并输入至 容器的/root/file/目录下
结果: 本机的/root/backup与数据卷容器 filedata 的/root/file与 备份容器的/root/file三者相互挂载,至此本地的/root/backup目录下就会出现backup.tar文件了,备份完成!
- 数据的迁移与恢复同理备份,都是通过数据卷或者数据卷容器进行挂载实现的。
容器间访问
端口映射
- 指定本机端口8888访问容器9999
docker run -idt -p --name testport2 8888:9999 ubuntu:18.04 - 映射到指定地址的指定端口 IP:HostPort:ContainerPort
docker run -itd -p 127.0.0.1:8888:9999 --name specific-map ubuntu:18.04 - 映射指定地址的任意端口 IP::ContainerPot, 映射本机的任意端口至容器的8899
docker run -idt -p 127.0.0.1::8899 --name any-map ubuntu:18.04
容器互联
- link1 与link2 互联
docker run -idt --name link1 ubuntu:18.04anddocker run -idt --name link2 --link link1:link1-alias ubuntu:18.04, 在进入容器后可以通过env 查看以link1_alias(链接的别名)
用前端姿势玩docker【一】Docker通俗理解常用功能汇总与操作埋坑的更多相关文章
- 用前端姿势玩docker【四】基于docker快速构建webpack的开发与生产环境
目录 用前端姿势玩docker[一]Docker通俗理解常用功能汇总与操作埋坑 用前端姿势玩docker[二]dockerfile定制镜像初体验 用前端姿势玩docker[三]基于nvm的前端环境构建 ...
- 用前端姿势玩docker【五】快速构建中类Unix系统与Windows系统的差异化处理
目录 用前端姿势玩docker[一]Docker通俗理解常用功能汇总与操作埋坑 用前端姿势玩docker[二]dockerfile定制镜像初体验 用前端姿势玩docker[三]基于nvm的前端环境构建 ...
- ES7前端异步玩法:async/await理解 js原生API妙用(一)
ES7前端异步玩法:async/await理解 在最新的ES7(ES2017)中提出的前端异步特性:async.await. 什么是async.await? async顾名思义是“异步”的意思,a ...
- 用前端姿势玩docker【三】基于nvm的前端环境构建技巧
前言 安装docker啥的就不说了,这里重点强调一下,docker的环境问题.本人的环境: 虚拟机centos => docker => NAT => container 因为需要不 ...
- 用前端姿势玩docker【二】dockerfile定制镜像初体验
前言 书接上文,关于dockerfile指令的api在此处不做赘述,在此只是记录下注意事项: '示坑以埋之'. 配置指令 FROM dockerfile必须以此开头 一个dockerfile可执行添加 ...
- ES7前端异步玩法:async/await理解
在最新的ES7(ES2017)中提出的前端异步特性:async.await. 什么是async.await? async顾名思义是"异步"的意思,async用于声明一个函数是异步的 ...
- 前端程序员初步认识 docker
初步认识 docker 为什么要学习 docker 有同学说他开发工作中有两大神器,一个是 vim 编辑器,另一个就是 Docker. 什么是 docker Docker 是一个开源的应用容器引擎. ...
- 【Docker】Docker概述
[Docker] Docker可以说是近几年非常热门的技术之一了.不管是别人敦促我还是从自己的想法来说,都觉得Docker这玩意儿肯定是要好好学习一下的,无奈没啥时间专门播出来给Docker,一直以来 ...
- Centos + docker,Ubuntu + docker介绍安装及详细使用
docker笔记 常用命令 设置docker开机自启:sudo chkconfig docker on 查所有镜像: docker images 删除某个镜像:docker rmi CONTAINER ...
随机推荐
- 错误 C2679二进制“没有找到接受“std::string”类型的右操作数的运算符(或没有可接受的转换
错误 C2679二进制“没有找到接受“std::string”类型的右操作数的运算符(或没有可接受的转换 严重性 代码 说明 项目 文件 行 禁止显示状态错误 C2679 二进制“<<”: ...
- 效率思维模式与Zombie Scrum
Scrum是由Ken Schwaber和Jeff Sutherland在20世纪90年代提出的概念,并在1995年首次正式确定.起初Scrum是为了解决产品和软件开发固有的复杂性,然而现在Scrum被 ...
- WeChair Plus版项目介绍
这个作业属于哪个课程 软件工程 (福州大学至诚学院 - 计算机工程系) 团队名称 WeChair 这个作业要求在哪里 团队作业第一次:团队作业第一次(2) 这个作业的目标 项目介绍,项目修改 作业正文 ...
- Spring Boot]SpringBoot四大神器之Actuator
论文转载自博客: https://blog.csdn.net/Dreamhai/article/details/81077903 https://bigjar.github.io/2018/08/19 ...
- Plugns
Lombok Translation Rainbow Brackets
- PHP开发环境搭建工具有哪些?
对于php开发小白来说搭建一个php运行环境就是一道坎! 因为要做php开发,搭建一个能够运行php网站的服务器环境是第一步,传统的php环境软件非常复杂,好在很多公司开发了一键搭建php安装环境,一 ...
- 多图解释Redis的整数集合intset升级过程
redis源码分析系列文章 [Redis源码系列]在Liunx安装和常见API 为什么要从Redis源码分析 String底层实现——动态字符串SDS 双向链表都不懂,还说懂Redis? 面试官:说说 ...
- JavaScript基础对象创建模式之模块模式(Module Pattern)(025)
模块模式可以提供软件架构,为不断增长的代码提供组织形式.JavaScript没有提供package的语言表示,但我们可以通过模块模式来分解并组织 代码块,这些黑盒的代码块内的功能可以根据不断变化的软件 ...
- 一文读懂 Redis 分布式部署方案
为什么要分布式 Redis是一款开源的基于内存的K-V型数据库,因为内存访问速度快,一般被用来做系统的缓存. Redis作为单机部署能够支持业务简单,数据量不大的系统需求,但在实际应用中,一旦系统规模 ...
- 你不知道的前端SDK开发技巧
最近在做公司内部的一个的一个SDK的重构,这里总结一些经验分享给大家. 类型检查和智能提示 作为一个SDK,我们的目标是让使用者能够减少查看文档的时间,所以我们需要提供一些类型的检查和智能提示,一般我 ...