1.docker 为什么这么好
相较于普通电脑,可以封装环境。便于运维
相比虚拟机,依托于linux内核,没有操作系统部分,小巧
2.docker组成
docker 客户端/守护进程 c/s架构
docker image镜像 基石 层叠的只读文件系统
bootfs 联合加载
rootfs(ubuntu)基础镜像
add emacs
... 全部是只读
docker container 容器
通过镜像启动 //启动和执行阶段
在最上面加上一个可写层
写时复制 //不改变其他层
docker registry 仓库
共有 docker hub
私有
3.docker 依赖linux内核的特性
namespaces 命名空间
一种封装的概念
系统资源的隔离
进程、网络、文件系统
docker隔离的东西
pid 进程隔离
net 管理网络接口
ipc 管理跨进程通行的访问
mnt 管理挂载点
uts 隔离内核和版本标识
control groups 控制组
通过这个隔离
资源限制
优先级设定
资源计量
资源控制
docker容器的能力
文件隔离 都有自己的root文件
进程隔离 都运行在自己的进程环境中
网络隔离 容器间的网络接口和ip都是分开的
资源隔离和分组 用cgroup将cpu和内存之类的资源独立分配给每个docker容器
4.docker 安装部署
ubuntu 安装 14.04版本
1.检查内核版本 $uname -a
2.检查device mapper(存储驱动) $ls -l /sys/class/misc/device-mapper
3.$sudo apt-get install docker.io //ubuntu的apt-get 自己所含,版本低
4.$source /etc/bash_completion.d/docker.io
(3). $sudo apt-get install -y crul
(4). $curl -sSL https://get.daocloud.io/docker | sh
5.不需要sudo运行docker的方法,添加docker的用户组
1.$sudo groupadd docker //建立一个docker 的用户组
2.$sudo gpasswd -a ${USER} docker //把当前的用户添加到用户组里
3.$sudo service docker restart //重启docker服务
4.重新登录ubuntu
5.容器的基本操作
启动容器:
docker run IMAGE[COMMAND][ARG...]
eg. docker run ubuntu echo 'hello world'
docker run -i -t IMAGE /bin/bash //-i:interactive;-t:-tty 交互启动
查看容器
docker ps -a -l// -a 查看所有;-l最新创建的
docker inspect [id]//查看已经建立的容器
自定义容器名:
docker run --name=自定义名字 -i -t IMAGE /bin/bash
重新启动已经停止的容器
docker start [-i] 容器名字
删除容器
docker rm 容器名 //删除已经停止的容器
6.docker守护式容器
#守护式容器:
能够长期运行
没有交互式的会话
适合运行应用程序和服务
//以守护的方式运行容器:
1.docker run -i -t IMAGE /bin/bash
2.用ctrl+p 和ctrl+q 键退出
3. docker attach 容器名 //进入后台的容器
(1) docker run -d 镜像名[command] //用段命令启动
//查看容器日志:
docker logs [-f] [-t] [--tail] 容器名 //-f: -follows -t:加上时间戳
eg. docker logs -tf --tail 10 dc1
//查看容器的进程
docker top 容器名
//如何在运行中的容器内启动新进程
cocker exec [-d][-i][-t] 容器名 [command]
//停止运行中守护式容器
docker stop 容器名 //发送一个信号给容器,等待容器停止
docker kill 容器名 //直接停止
//查看docker 帮助文档
man docker-run
man docker-logs
...
7.用docker搭建一个web静态网站
#设置容器的端口映射
run[-P][-p]//P映射所有端口,p映射指定端口
eg. docker run -p 80 -i -t ubuntu /bin/bash //指定映射的端口
四种方式
containerPort//上例第一种
hostport::containerPort
ip::containerPort
ip::hostport::containerPort
在容器中部署静态网站
//创建映射80端口的交互式容器
docker run -p 80 --name web -i -t ubuntu /bin/bash
//安装Nginx 在容器里面
apt-get install -y nginx
//安装vim
apt-get install -y vim
//创建静态页面
mkdir -p /var/www/html //建立路径
cd /var/www/html //进入到目录
vim index.html //创建一个静态页面
...
//修改Nginx配置文件
whereis nginx //查找nginx的位置
ls /etc/nginx/sites-enabled //
vim /etc/nginx/sites-enabled/default //打开配置文件
... //将root值改成刚刚网站的地址
//运行Nginx
nginx
//验证网站访问
用主机的ip加上映射的端口 //重启改变
用inspect容器的ip和正常的端口 //重启改变
查看端口映射
docker port 容器名
8.查看和删除镜像
docker info 命令查看docker存储位置
列出镜像
docker images [options]
-a --all=false
-f --filter=[]
--no-trunc=false
-a,--quiet=false
仓库repository
不是registry
tag 标签
repository+tag 唯一指定一个镜像
查看镜像
docker inspect [options] container|image[command]
-f,
删除镜像
docker rmi 镜像名
9.获取和推送镜像
查找镜像
官网 docker hub
docker search [options] term
--automated=false Only show automated builds
--no-trunc= false Don't truncate output
-s --stars=0 Only displays with at least x stars
拉取镜像
docker pull [options] name[:tag]
-a --all
推送镜像
docker push docker_hub_name/镜像名
10.构建docker镜像
docker commit
将建好的容器变成镜像
docker build
创建dockerfile文件
docker build -t='name' 创建