容器
一种虚拟化方案
操作系统级别的虚拟化
只能运行相同或相似内核的操作系统
依赖于Linux内核特性
Docker基本组成
Docker Image 镜像
容器的基石,一个层叠的文件系统
Docker Container容器
通过镜像启动,就会产生一个可写层,这个可写层就是容器产生的内容。而另外下面的几个文件系统就是之前镜像提供的东西,这两样东西相结合就形成了容器。容器还有一个重要的内容就是写时复制(copy on write)
Docker Registry 仓库
公有 私有 Docker Hub
Docker运用Linux的内核特性
Namespace 命名空间
Control groups(cgroups)控制组 —>用来分配资源
Namespace
对于编程而言,是一种封装=代码的隔离,对于操作系统而言是一种系统资源(进程,网络,文件系统)的隔离
Ubantu中安装Docker
首先还是得检查
1.内核版本
uname -a
2.检查Device Mapper
ls -l /sys/class/misc/device-mapper
下面就是安装了
1.Ubuntu维护的版本
sudo apt-get update
sudo apt-get install docker.io
注意这里是docker.io
2.Docker维护的版本,推荐安装Docker维护的版本,因为它的版本较新,以前那一种利用脚本安装的好像出了点问题 这部分有点烦人,按照官方文档去实现下载不太行,总是报错,最后就参考了一波下面这个网址的安装方法,终于装好,mmp,这里我用的是Ubuntu16.04 64位版本
http://www.runoob.com/docker/ubuntu-docker-install.html
sudo docker run hello-world
检测一下是否安装好,安装好就会出现一定的回显
如果不想一直都要输入sudo,也就是当要以非root用户可以直接运行docker时,需要执行 sudo usermod -aG docker
你的用户名 命令,然后重新登陆,记得要注销
,不然还是会报错
对比一下版本确实docker维护的版本较新,^_^
开启守护进程
sudo service docker start
对于Docker服务其他的相关命令
sudo service docker stop
sudo service docker restart
运行第一个容器命令
sudo docker run ubuntu echo 'hello'
如果想要其他版本的Linux的话把中间的Ubuntu改为centos即可,还可以改版本,例如sudo docker run ubuntu:15.10 echo "Hello world"
Windows下的安装
这是要下载专门的Docker for Windows这个东西上面的网址也有提及到,win10就专门利用的这个东西,但win7 还有 win8 的就用的是docker toolbox,Windows安装很容易出毛病,最典型的是如果你Win10上有虚拟机,开了Docker两者就会不兼容,因为Docker得开启win10自带的Hyper-V虚拟化,跟虚拟机会产生冲突,后续每次启动关闭都得重启,别问我为什么知道。。因为我都试过了。。-_-||
下面的过程我就默认直接是非root用户使用docker了
Docker使用
docker run ubuntu echo 'hello'
在输出hello world之后镜像也就关闭了,无法交互
如果想要交互界面的话,看下面
运行交互式的容器
docker的两个参数 -i -t
,让docker运行的容器实现bash交互
• -t:在新容器内指定一个伪终端或终端。
• -i:允许你对容器内的标准输入 (STDIN) 进行交互
docker run -i -t ubuntu /bin/bash
命令exit
就可以退出交互式界面了,并且是直接
把容器退出的
确认容器是否在运行,可以通过 docker ps [-a] [-l]
查看,没有参数默认查看运行容器的进程
-a: all 可查看运行过的容器
-l: latest
停止容器
我们使用 docker stop
命令来停止容器:
docker stop 容器ID号
停止之后记得docker ps
一波查看是否真正关闭
自定义容器名字
docker run --name 自定义名 -i -t IMAGE /bin/bash
删除停止的命令
docker rm 容器名
重新启动停止的容器
docker start -i 容器名或ID
-i参数指的是是否要交互界面
查看某个容器更加详细的信息
docker inspect 容器唯一ID或名字
启动容器(后台模式/守护式容器)
一般用于开启服务,没有会话,长期运行
怎么理解这个东西,看下面
尝试下面的命令,然后docker ps发现该容器仍在后台执行
docker run -d ubuntu /bin/sh -c "while true; do echo hello world; sleep 1; done"
此时我们输入docker logs 容器ID
会显示容器内的标准输出
一般的话我们在运行一个交互式的bash的时候
docker run -i -t ubuntu /bin/bash
用的是 ctrl+P
和 ctrl+Q
键去退出这样就会在后台一直运行
要想回去怎么办?运用附加命令
docker attach 容器ID或者名字
我们还可以直接用-d参数启动docker容器
docker run -d ubuntu [COMMAND][ARG…] 也就是这部分一开头的例子
这里再来详细讲下docker logs
命令
docker logs [-f][-t][--tail] 容器ID/名字
-f可以理解为是动态追踪
-t是显示时间 还有其他参数可查看官方文档
一般我都是不带参数的。。。
查看容器内的进程
docker top 容器ID/名字
在容器内执行新的进程
docker exec [-d] [-i] [-t] 容器名 [command]
停止守护式容器的方法
1 docker stop 容器ID/名字
2 docker kill 容器ID/名字
区别在于第一种是等待容器内进程结束再关闭,另外一种是直接结束容器
想了解更多使用docker帮助文档
man命令
如
man docker-run
man docker-top
...
Docker中部署静态网页
设置容器的端口映射
docker run [-P][-p]
-P: 对容器所有的端口进行映射
-p: 指定映射哪些容器的端口
下面是几个例子
containerPort 只指定容器的端口,宿主机的端口随机映射
docker run -p 80 -i -t /bin/bash
hostPort:ContainerPort 同时制定宿主机端口以及容器端口
docker run -p 8080:80 -i -t /bin/bash
ip:containerPort 指定ip和容器的端口
docker run -p 0.0.0.0:80 -i -t /bin/bash
ip:hostPort:ContainerPort 同时制定ip以及宿主机端口以及容器端口
docker run -p 0.0.0.0:8080:80 -i -t /bin/bash
Nginx部署流程
先运行一个带端口映射的容器并命名为web
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
查看etc下面的Nginx
ls /etc/nginx
进去里面的sites-enabled目录里面,发现一个default文件打开编辑
ls /etc/nginx/sites-enabled
vim default
改变root的值为你的网页目录
root: /var/www/html
开始运行nginx
nginx
ps -ef
查看相关进程是否启动
让它继续后台运行
可以用下面几个命令查看端口号
docker ps
docker port 容器ID/名字
docker top 容器ID/名字
然后再curl一波就知道,是否安装成功
curl 127.0.0.1:32770
也可以本机的浏览器里面打开。。
还可以用容器的ip地址去实现在本机浏览器的浏览
docker inspect 容器ID/名字
可以看到容器ip地址和映射端口
“IPAddress”: “172.17.0.2”
“HostPort”: “32768”
访问
curl http://172.17.0.2
这就不需要指定端口号了,用默认的80端口就可以访问
停止该容器,然后再次启动
我们需要注意一旦我们关闭并且重新启动的话,docker分配的映射ip以及端口地址都会改变,需要重新查看
镜像标签
TAG
ubuntu:latest
ubuntu:14.04
啥都不写默认latest
标签
删除镜像
docker rmi 镜像名:标签/ID
搜索镜像
docker search
拉取镜像
docker pull 你搜到的镜像名
docker push命令可以将某一个镜像发布到官方网站。
利用DockerFile构建镜像 ,这个东西有时候还是很好用的
docker build -t='自定义名字' DockerFile
欢迎大家多来踩踩我的博客:0verwatch.top