Docker笔记

Docker简介

1、什么是容器(虚拟机通过中间层将一台或者多台虚拟机运行在物理硬件之上,容器直接运行在操作系统内核之上,容器也叫做操作系统虚拟化)

依托Linux内核功能的虚拟化技术
依赖于Linux内核特性,Namespace和Cgroups

2、docker特点

提供简单清亮的建模方式
职责的逻辑分离
职责的落地分离
快速高效的开发生命周期
鼓励使用面向服务的架构

3、docker的使用场景

使用docker容器开发、测试、部署服务(轻量 开发环境部署 提交至私有库 测试环境下载)
创建隔离的运行环境(同一服务不同版本可能服务不同客户)
搭建测试环境(学习成本下降)

4、docker的基本组成

客户端/守护进程

CS架构

本地/远程

镜像(构建和打包阶段)

容器的基石

层叠的只读文件系统

1层,引导文件系统bootfs
2层,root文件系统 加载更多的只读文件

联合加载 指一次同时加载许多个文件系统,将各层文件系统叠加在一起,最终的文件将包含所有的底层文件和目录,docker将这样的文件系统称为镜像

写实复制

当一个容器启动时,docker会在最顶层加一个读写层,第一次启动的初始的读写层是空的,如果想修改文件,会先从制度成复制到读写层,只读层版本依然存在,创建一个新容器时,读写层+镜像=容器

仓库

公有(dockerHub)

私有

5、Docker的主要特性如下

文件系统隔离:每个进程容器运行在完全独立的根文件系统里

资源隔离:可以使用cgroup为每个进程容器分配不同的系统资源,例如cpu和内存

网络隔离:每个进程容器运行在自己的网络命名空间里,拥有自己的虚拟接口和IP地址

写实复制:采用写实复制方式创根文件系统,这让部署变得极其快捷,并且节省内存和硬盘空间。

日志记录:Docker将会收集和记录每个进程容器的标准流(stdout/stderr/stdin),用于实时检索或批量检索

变更管理:容器文件系统的变更可以提交至新的映像中,并可重复使用以创建更多的容器。无需使用模板或者手动配置。

交互式Shell:Docker可以分配一个虚拟终端并关联到任何容器的标准输入上,例如运行一个一次性交互shell

6、Docker客户端和守护进程

Docker守护进程

service docker stop
service docker start
service docker restart

docker -d [options]
# -d 以守护进程运行

# 启动配置项
/etc/default/docker

# docker的启动选项
tcp
uninx
soketfd

7、Docker容器

容器的基本操作

docker run IMAGE [COMMAND][ARG...]
# run在新容器中执行命令
docker run -i -t IMAGE /bin/bash
# -i --interactive 为容器始终打开标准输入
# -t --tty=true 创建一个伪tty终端
# --name 自动以容器名字

查看容器

docker ps [-a][-l]
# 不指定参数默认返回正在运行的容器
# -a列出所有容器
# -l列出最新创建的一个容器
docker inspect [name][id]

重新启动已经停止的容器

docker start [-i] 容器名

删除停止的容器

docker rm [name][id]
# -f 强制删除

守护式容器

能够长期运行
没有交互式回话
使用运行应用程序和服务
ctrl+c/ctrl+p退出不影响

docker run -d 镜像名 [COMMAND][ARG]
# -d使用后台的方式启动

附加到运行中的容器

docker attach ID/NAME

查看容器日志

docker logs [-f][-t][--tail]
# -f 一直跟踪日志变化并返回结果
# -t 在返回结果上加上时间戳
# --tail 返回结尾处多少数量的日志,默认返回所有

查看容器内进程

docker top [name]

在运行中的容器内启动新的进程

docker exec [-d][-i][-t] 容器名 [COMMAND][ARG...]

停止守护式容器

docker stop 容器名 # 发送信号等待停止
docker kill 容器名 # 直接停止

docker部署静态网站

# 端口映射
run [-P][-p]
# -P 随机映射端口
# -p 指定端口映射

镜像与仓库

查看和删除镜像

docker images [OPTIONS][REPOSITORY]
# -a 显示所有镜像
# -f 过滤条件
# --no-trunc 不使用截断形式显示数据,默认是截断唯一id
# -q 是显示唯一id

docker rmi [OPTIONS] IMAGE [IMAGES...]
# -f 强制删除
# --no-prue=false 保留未打开标签的父镜像

# 删除所有镜像
docker rmi $(docker image -q)

# 查看镜像的存储目录和文件
tree /opt/data/registestry/repositories/

获取镜像

# 查找镜像
# Docker Hub
docker search [OPTIONS] TEAM
# --automated 只显示自动化构建的镜像
# --no-trunc 不适用截断形式显示数据,默认是截断唯一id的
# -s 限制显示结果的最低星级

拉取镜像

docker pull
# -a,--a-tags 将所有匹配标记的都下载

# 使用--registty-mirror(提高下载速度)
# 1.修改:/etc/default/docker
# 2.添加:DOCKER_OPTS="--registry-mirror=本地镜像的连接"

推送镜像

docker push 镜像

构建镜像

1.保存对容器的修改,并在此使用

2.自定义容器的能力

3.以软件的形式打包并分发服务及其运行环境

docker commit # 通过容器构建
docker commit [OPTION] CONTAINER [REPOSITROY[:TAG]]

# -a 指定镜像作者
# -m 记录镜像的构建信息
# -p 指示commit命令可以不暂停上传
docker build # 通过Dockerfile文件构建
# 1.FROM
FROM <image>
FROM <image>:<tag>
# 必须是已经存在的镜像

# 2.MAINTAINER(作者信息)
# 包含镜像的作者,所有者和联系信息

# 3.RUN
# 指定当前镜像中运行的命令
RUN <command> (shell模式)

# 4.CMD(容器运行时运行的)

# 5.EXPOSE
# 指定运行该镜像的容器使用的端口

# 6.ENV
ENV REFERSH_DATE 2016-07-25(多次执行时,更改时间,则会带来此条以下命令刷新缓存)

# 7.ADD(提供tar解压功能)
ADD <src> <dest>

# 8.COPY(淡出能提供复制)
COPY <scr> <dest>

# 9.ENTRYPOINT
# 不会被docker run中的启动命令所覆盖

# 10.VOLUME
VOLUME["/data"]
# 向基于镜像创建的容器添加卷

# 11.USER
# 指定镜像会以什么样的用户运行(不指定用户默认以root)

# 12.WORDIR
# 从镜像创建一个新容器时,在容器内部设置工作目录

# 13.ONBUILD
# 镜像出发器(当一个镜像被其他镜像作为基础镜像时执行)
# buil命令
docker build [OPTIONS] PATH |URL| -
# --force-rm
# --no-cache 跳过构建缓存
# --pull
# -q 不显示构建过程
# --rm
# -t

Dockerfile构建过程

  1. 从基础镜像运行一个容器
  2. 指定一条命令,对容器作出修改
  3. 执行类似commit的操作,提交一个新的镜像层
  4. 再基于刚提交的镜像云心给一个新容器
  5. 执行Dockerfile中的下一条指令,直至所有的指令执行完毕

构建缓存

  1. --no-cache 跳过构建缓存
  2. 查看镜像构建过程
docker history [image]

Docker容器的网络连接

Linux虚拟网桥(docker0)

可以设置ip地址

相当于拥有一个隐藏的虚拟网卡

添加虚拟网桥

sudo brctl addbr br0

修改docker0地址

sudo ifconfig docker0 192.168.100.1 netmask 255.255.255.0

修改docker守护进程的启动配置

/etc/default/docker 中添加DOCKER_OPS值 -b=br0

重启守护进程

docker容器的互联

--icc=true #默认false(拒绝所有容器间的互联)
--link
docker run --link=[CONTAINER_NAME]:[ALIAS][IMAGE][COMMOND0]

# 允许特定的连接
--icc=false
--iptable=true
--link

docker容器与外部网络的连接

ip_forward

Linux系统的一个变量,值决定系统是否会转发流量

sysctl net.ipv4.conf.all.forwarding = 1(允许流量转发)

iptables

iptables是基于Linux内核集成的包过滤防火墙系统,几乎所有的Linux发行版都会包含iptables的功能

允许端口映射访问
限制IP访问容器

8、Docker容器的数据卷

什么是数据卷(Data Volume)

数据卷设计的目的,在于数据的持久化,它完全独立于容器的生成周期,因此Docker不会再容器删除时删除其挂在的数据卷,也不会存在类似垃圾回收机制,对容器医用的数据卷进行处理

docker的数据卷是独立于docker的存在,它存在于docker host,与docker容器的生成周期分离

docker数据卷存在于docker宿主机的文件系统

docker数据卷可以使目录页可以使用文件

docker容器可以利用数据卷的技术与宿主机进行数据共享

同一目录或者文件可以支持多个容器访问,实现了容器间数据的共享和交换

数据卷的特点

数据卷在容器启动时初始化,如果容器在使用镜像挂在点包含了数据,这些数据会拷贝至初始化的数据卷中。

数据卷可以在容器里的内容直接进行修改

数据卷的变化不会影响镜像的更新

卷会一直存在,即使挂载的容器已经被删除

为容器添加数据卷

docker run -v 本机目录:容器映射目录名 -it ubuntu /bin/bash

docker的数据卷容器

命令的容器挂载数据卷,其他容器通过挂载这个容器实现数据共享,挂载数据卷的容器,就叫做数据卷容器

挂载数据卷容器的方法

docker run --volume-from [CONTAINER NAME]

在docker中,如果一个数据卷还在被容器使用,它就会一直存在。使用数据卷容器挂载数据,实际上此容器起到的作用,仅仅是将数据卷的配置传递到新容器中。

docker数据卷的备份还原操作(ubuntu)

数据备份方法

# 需要备份容器name,存放的本地backup目录
docker run --volumes-from [container name] -v$(pwd):backup ubuntu
tar cvf /backup/backup.tar [container data volume] # 需要备份的目录

数据还原方法

# 需要还原的容器name,存放的本地backup目录
docker run --volume-from [container name] v$(pwd):backup ubuntu
tar xvf /backup/backup.tar [container data volume] # 还原的目录
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 157,298评论 4 360
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 66,701评论 1 290
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 107,078评论 0 237
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,687评论 0 202
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,018评论 3 286
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,410评论 1 211
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,729评论 2 310
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,412评论 0 194
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,124评论 1 239
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,379评论 2 242
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,903评论 1 257
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,268评论 2 251
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,894评论 3 233
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,014评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,770评论 0 192
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,435评论 2 269
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,312评论 2 260

推荐阅读更多精彩内容

  • 转载自 http://blog.opskumu.com/docker.html 一、Docker 简介 Docke...
    极客圈阅读 10,404评论 0 120
  • Docker — 云时代的程序分发方式 要说最近一年云计算业界有什么大事件?Google Compute Engi...
    ahohoho阅读 15,417评论 15 147
  • Docker docker概念 Docker 扩展了 Linux 容器(Linux Containers),或着说...
    AkaTBS阅读 684评论 0 3
  • 五、Docker 端口映射 无论如何,这些 ip 是基于本地系统的并且容器的端口非本地主机是访问不到的。此外,除了...
    R_X阅读 1,670评论 0 7
  • 今天看到一个段关于沙发的描写很是温暖,就好像说的不是一个物,而且每个人都会有的老友一样。 你知道,人,容易疲倦。当...
    琳小喵阅读 180评论 0 0