Docker 分享

0. 概述

12:49:37.jpg

0.1 Docker 是什么

14:38:11.jpg

Docker可以解决虚拟机能够解决的问题,同时也能够解决虚拟机由于资源要求过高而无法解决的问题

12:26:49.jpg

对比传统虚拟机总结

虚拟机主要是抽象出硬件支持操作系统运行,而容器本质上是基于应用的。

特性 容器 虚拟机
启动 秒级 分钟级
硬盘使用 一般为 MB 一般为 GB
性能 接近原生 弱于
系统支持量 单机支持上千个容器 一般几十个

0.2 Docker 能做什么

Docker能处理的事情包括:

  • 隔离应用依赖
  • 创建应用镜像并进行复制
  • 创建容易分发的即启即用的应用
  • 允许实例简单、快速地扩展
  • 测试应用并随后销毁它们

1. 环境搭建

历史版本在非Linux 中安装需要使用 boot2docker, 最新的版本已经不需要了.

14:24:15.jpg

1.1 Linux

直接安装

1.2 Windows

11:21:58.jpg

windows 下需要安装 Hyper_v

1.3 Mac

11:53:02.jpg

11:53:57.jpg

2. 基本概念

2.1 docker 工作原理

14:31:07.jpg

2.2 容器/镜像

镜像( Image) 类似虚拟机的快照。但更轻量。

容器( Container) 用于运行应用, 从Image 中可以创建容器,等同于从快照中创建虚拟机。

3. 常用命令

命令 说明 备注
docker search centos 在 docker hub 中搜索 Image 选择官方的
docker pull centos
docker run -t -i /bin/bash 指定一个 Image 运行一个 Container -t 表示在新容器内指定一个伪终端或终端;-i表示允许我们对容器内的 (STDIN) 进行交互.--rm: 退出时自动删除容器;—name: 给容器命名
docker images 列出所有本地镜像
docker ps 所有正在运行的 Container
docker commit -m="add jdk1.6.0_45" -a="Stone" zzwx/jdk6:v1.0 提交一个新的Image
docker stop 停止运行指定的 ContainerId 或者直接在容器中 exit
docker top 查看指定 ContainerId 容器中的进程信息
docker attach 进入正在运行的容器
docker cp host/path/targetFile :/file/pathInContainer 宿主机与容器相互copy 文件
docker export > squid.tar 导出容器到指定文件
docker import -m "squid server" docker-squid.tar zzwx/squid:v1.0 导入镜像文件
docker rm 删除容器
docker rmi 删除镜像
docker exec ls 在指定容器中执行 ls命令 -d表示后台运行, 避免长时间卡在等结果
docker logs 查看指定容器的输出日志
docker run -t -i -v ~docker:/opt /bin/bash 将本机的 docker 目录映射到容器的/ opt目录
docker rm $(docker ps -a -q) 删除所有容器
docker rmi $(docker images -q -a) 删除所有镜像
docker run --rm -it -p 8081:80 /usr/local/nginx/nginx 本机端口8081映射容器的80端口
docker port 80 查看指定容器的指定端口信息
docker top 查看指定容器的进程
docker kill $(docker ps -q) 停止所有正在运行的容器

举例

sudo docker run -d --name tomcat-juleApp3 -p 8801:8080 -v /home/docker/jule/tomcat-app:/home/zzwx/apache-tomcat-6.0.41/webapps 00473463445e /home/zzwx/apache-tomcat-6.0.41/bin/zzwx-startup.sh

4. 理解 Docker 相关的概念

17:47:23.jpg

Image & Layer

镜像(Image)就是一堆只读层(read-only layer)的统一视角

17:34:06.jpg

创建镜像的两种方式。

Container & Layer

17:44:25.jpg

应用是运行在容器中的。

容器的设计思想

  • 容器是临时的
  • 容器应该保持不变
  • 一个容器一个进程

Volumes

数据卷让你可以不受容器生命周期影响进行数据持久化。它们表现为容器内的空间,但实际保存在容器之外,从而允许你在不影响数据的情况下销毁、重建、修改、丢弃容器。

Link

创建一种source-recipient级别的关系。 相当于recipient 把一个管子接到source 上来访问源的资源.

# 创建一个 name=tomcat 的容器
docker run -ti --name tomcat 88ace2309f49 /bin/bash
# 创建一个 name=nginx 的容器, 并 link 到 tomcat 容器. --link <name or id>:alias 
docker run --rm -it -P --name nginx --link tomcat:tomcat 2a13daf1797c /bin/bash
# 查看已连接的容器
docker inspect -f "{{ .HostConfig.Links }}" nginx
# 这样,在 nginx 的容器中就可以访问 tomcat 容器的资源. 
## 比如, 在nginx中访问tomcat 的页面
[root@533ae17599db /]# curl tomcat:8080
#  连接是安全的、私有的 仅限于 tomcat 和 nginx 之间. source: tomcat; recipient: nginx

参考这里

5. 参考资料

Docker —— 从入门到实践

使用 Docker 容器应该避免的 10 个事情

《Docker 用户指南中文版》

《Docker 技巧》

10张图带你深入理解Docker容器和镜像

Docker终极指南

深入浅出 Docker系列

2016-07-26 11:209