实验环境:rhel7.2
一,认识Docker:
Docker是Docker.inc公司开源的一个基于LXC技术构建的Container容器引擎。
Docker通过内核虚拟化技术(namespace和cgroup等)来提供容器的资源隔离和安全保障等。由于Docker通过OS层的虚拟化实现隔离,所以Docker在运行时,不需要类似虚拟机的额外OS开销,提高资源利用率。
LXC所实现的隔离性主要是来自kernel的namespace, 其中pid, net, ipc, mnt, uts 等namespace将container的进程, 网络, 消息, 文件系统和hostname 隔离开
cgroups 实现了对资源的配额和度量。 cgroups 的使用非常简单,提供类似文件的接口,在 /cgroup目录下新建一个文件夹即可新建一个group,在此文件夹中新建task文件,并将pid写入该文件,即可实现对该进程的资源控制。
二,Docker的安装:
rhel7.2安装1.12 版本的docker不需要任何依赖性
yum install -y docker-engine.x86_64 0:1.12.6-1.el7.centos docker-engin e-selinux.noarch 0:1.12.6-1.el7.centos
systemctl start docker.service #启动docker
Docker 在启动时会创建一个虚拟网桥 docker0,默认地址为 172.17.0.1/16, 容器启动后都会被桥接到 docker0 上,并自动分配到一个 IP 地址
如果想要修改默认的地址可以进行以下操作:(临时修改)
systemctl stop docker
ip link set dev docker0 down
ip addr del 172.17.42.1/24 dev docker0
ip addr add 192.168.0.1/24 dev dcoker0
ip link set dev docker0 up
root@foundation92 docker]# ip addr | grep docker
16: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN
inet 192.168.0.1/24 scope global docker0
三,Docker容器的常用命令:
docker load -i ubuntu.tar #导入镜像
docker save ubuntu > ubuntu.tar导出镜像
docker commit -m 'add files' -p vm1 newubuntu保存对镜像的更改
docker rm vm1删除镜像 docker rmi newubuntu
docker inspect ubuntu查看镜像
docker images #显示镜像
docker run -it --name vm1 ubuntu bash创建容器
docker ps -a查看容器进程
docker attach vm1连接容器
docker top vm1查看容器进程
docker logs vm1 查看容器指令输出 -f 参数可以实时查看
docker inspect vm1 查看容器详情
docker stats vm1 查看容器资源使用率
docker diff vm1 查看容器修改
docker start vm1
docker exec web1 ls 在容器内执行命令
docker run -d --name web -p 81:80 -v /tmp/docker/web:/website -v /tmp/docker/vhost.conf:/etc/nginx/conf.d/vhost.conf:ro nginx #以nginx镜像创建web容器,做端口映射,nginx首页映射,配置文件映射。
详细命令请访问:http://www.runoob.com/docker/docker-command-manual.html
1,容器生命周期管理:
run
docker run :创建一个新的容器并运行一个命令
-d: 后台运行容器,并返回容器ID;
-i: 以交互模式运行容器,通常与 -t 同时使用;
-t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用;
--name="nginx-lb": 为容器指定一个名称;
--net="bridge": 指定容器的网络连接类型,支持 bridge/host/none/container: 四种类型;
--link=[]: 添加链接到另一个容器;
实例:
docker run --name mynginx -d nginx:latest #使用docker镜像nginx:latest以后台模式启动一个容器,并将容器命名为mynginx。
docker run -P -d nginx:latest #使用镜像nginx:latest以后台模式启动一个容器,并将容器的80端口映射到主机随机端口
docker run -p 80:80 -v /data:/data -d nginx:latest #使用镜像nginx:latest以后台模式启动一个容器,将容器的80端口映射到主机的80端口,主机的目录/data映射到容器的/data
docker run -it nginx:latest /bin/bash #使用镜像nginx:latest以交互模式启动一个容器,在容器内执行/bin/bash命令。
kill
docker kill -s KILL mynginx #杀掉运行中的容器mynginx
-s :向容器发送一个信号
rm
-f :通过SIGKILL信号强制删除一个运行中的容器
-l :移除容器间的网络连接,而非容器本身
-v :-v 删除与容器关联的卷
docker rm -f mynginx #强制删除容器mynginx
pause/unpause
docker pause :暂停容器中所有的进程。
docker unpause :恢复容器中所有的进程
docker pause mynginx #暂停mynginx容器提供的服务
docker unpause mgnginx #恢复mynginx容器提供的服务
create
docker create :创建一个新的容器但不启动它
docker create --name myrunoob nginx:latest #使用docker镜像nginx:latest创建一个容器,并将容器命名为myrunoob
exec
docker exec :在运行的容器中执行命令
2,容器操作
ps
docker ps : 列出容器
inspect
docker inspect : 获取容器/镜像的元数据。
top
docker top :查看容器中运行的进程信息,支持 ps 命令参数。
docker top mymysql #查看容器mymysql的进程信息
attach
docker attach :连接到正在运行中的容器
events
logs
docker logs : 获取容器的日志
wait
export
port