部署DOCKER
*******************************************************************
docker 安装环境准备
物理机:
添加一个网桥 vbr1
配置两个虚拟机
第一个 安装nove节点最少 6G 内存
单独添加一块硬盘给 openstack cinder 使用 20G
单独添加一块 网卡 使用 vbr1
第二个 安装 nova 节点 最少 6G 内存
单独添加一块 网卡 使用 vbr1
**********************************************************************8
1. 安装软件包
[root@redhat docker 1]# scp docker-* /var/ftp/public/
[root@redhat public]# createrepo .
2. node11,node12配置yum源
[root@node1 ~]# vim /etc/yum.repos.d/dvd.repo
[node2]
name=node
baseurl=ftp://192.168.1.254/rhel6
enabled=1
gpgcheck=0
[node3]
name=node
baseurl=ftp://192.168.1.254/public
enabled=1
gpgcheck=0
3.检测
[root@node11 yum.repos.d]# yum repolist
4.安装docker
[root@node1]# yum -y install docker-engine
[root@node1]# systemctl start docker
[root@node1]# systemctl enable docker
[root@node1]# docker images //查看镜像
5. Docker hub镜像仓库
• https://hub.docker.com
• Docker官方提供公共镜像的仓库(Registry)
[root@node1]# docker search rhel7 //搜索镜像
[root@node1]# docker search centos
[root@node1]# docker search nginx
[root@node1]# docker search mysql
镜像操作
1 下载、上传镜像
• 下载镜像(从镜像仓库中下载镜像)
[root@server0 ~]# docker help pull
docker pull [OPTIONS] NAME[:TAG|@DIGEST]
[root@server0 ~]# docker pull rhel7
• 上传镜像(上传镜像到仓库)
[root@server0 ~]# docdocker help push
Usage: docker push [OPTIONS] NAME[:TAG]
[root@server0 ~]# docker push rhel7
2 导入、导出镜像
• 导入镜像(通过tar包文件导入镜像)
[root@server0 ~]# docker load < xx.tar
[root@server0 ~]# docker images
• 导出镜像(将本地镜像导出为tar文件)
[root@server0 ~]# docker images
[root@server0 ~]# docker save image_name > xx.tar
3 启动镜像
• 启动centos镜像生成一个容器
[root@server0 ~]# docker images
[root@server0 ~]# docker run -it centos bash
• 开启另一个终端(查看容器信息)
[root@server0 ~]# docker ps
操作使用
1.导入镜像,导出镜像
[root@node1~]#yum -y install vsftpd
[root@node1~]#ftp 192.168.1.254
帐号:ftp
密码:123456
ftp> cd public
ftp> get docker_images.zip
ftp> exit
[root@node1~]#yum -y install unzip
[root@node1~]#unzip docker_images.zip
[root@node1~]#docker pull busybox
[root@node1~]#docker images
[root@node1~]#docker save busybox:latest >busybox.tar //导出镜像
[root@node1~]#scp busybox.tar node12:./
[root@node1~]#cd docker_images
[root@node1~]#for i in *;do docker load <${i};done //导入镜像
[root@node1~]#docker images
2 启动镜像
• 启动centos镜像生成一个容器 (/user/bin)
[root@server0 ~]# docker images
[root@server0 ~]# docker run -it centos bash //交互式
[root@server0 ~]# docker run -d centos bash //非交互式
[root@server0 ~]# docker run -itd centos bash //交互非交互式
• 开启另一个终端(查看容器信息)
[root@server0 ~]# docker ps -a
3.删除容器
[root@node1 ~]# docker rm $(docker ps -aq)
4.循环使用容器
[root@node11 ~]# docker start 34af5ae3dfa
[root@node11 ~]# docker stop 34af5ae3dfa
命令列表
• 命令列表
– docker images //查看镜像列表
– docker history //查看镜像制作历叱
– docker inspect //查看镜像底层信息
– docker pull //下载镜像
– docker push //上传镜像
– docker rmi //删除本地镜像
– docker save //镜像另存为tar包
– docker load //使用tar包导入镜像
– docker search //搜索镜像
– docker tag //修改镜像名称和标签
– docker run //运行容器
– docker ps //查看容器列表
– docker stop //关闭容器
– docker start //启动容器
– docker restart //重启容器
– docker attach|exec //进入容器
– docker inspect //查看容器底层信息
– docker top //查看容器进程列表
– docker rm //删除容器
进入容器
[root@node11 ~]#docker attach 34af5ae3dfa
Ctrl(一直按着) + p + q //放入后台,用在查看报错信息
[root@node11 ~]# docker start 34af5ae3dfa
[root@node11 ~]# docker stop 34af5ae3dfa
[root@node11 ~]#docker exec -it 34af5ae3dfa /bin/bash
[root@server0 ~]# docker run -itd centos bash //交互非交互式
案例1:
docker rm 容器id 删除容器
docker run -d -p 物理机端口:容器端口 镜像:标签
1问题:
启动一个nginx容器,可以通过外部进行反访问
修改默认主页 hello nsd1802
2步骤
[root@node11 ~]# docker run -d -p 80:80 ngin
[root@node11 ~]# docker ps
[root@node11 ~]# docker exec -it 004368d3e1c9 /bin/bash
root@56ca19ce8cca:/# nginx -h
root@56ca19ce8cca:/# nginx -T
root@56ca19ce8cca:/# cd /usr/share/nginx/html
root@56ca19ce8cca:/# echo "hillo nsd1802" > index.html
案例2:
docker commit 配置好的容器ID 自已要定义的容器名字:latest
1问题:
定义一个自已的容器镜像
2 步骤
1) 安装容器
[root@node11 ~]# docker run -itd centos bash
[root@node11 ~]# docker ps -aq
2)配置容器
[root@node11 ~]# docker exec -it 0a0c28db82d2 bash
root@56ca19ce8cca:/# cd /etc/yum.repos.d/
root@56ca19ce8cca:/# rm -rf *
root@56ca19ce8cca:/# vim dvd.repo
root@56ca19ce8cca:/# yum repolist
root@56ca19ce8cca:/# yum provides ifcomfig
yum -y install vim-enhanced-7.4.160-2.el7.x86_64
yum -y install bash-completion.noarch
yum install net-tools.x86_64
3)定义容器
[root@node11 ~]# docker commit 0a0c28db82d2 myos:latest
4)删掉之前的容器
[root@node11 ~]# docker stop $(docker ps -aq)
[root@node11 ~]# docker rm $(docker ps -aq)
5)启动自已的容器
[root@node11 ~]# docker run -it myos
案例3
1 问题
用docker自动化配置容器镜像环境
2 步骤
[root@node11 xxoo]# docker ps -a
[root@node11 xxoo]# mkdir xxoo
[root@node11 xxoo]# cd xxoo
[root@node11 xxoo]# touch Dockerfile
[root@node11 xxoo]# scp /etc/yum.repos.d/dvd.repo ./
[root@node11 xxoo]# vim Dockerfile
FROM centos:latest
RUN rm -f /etc/yum.repos.d/*
ADD dvd.repo /etc/yum.repos.d/xxoo.repo
RUN yum repolist
RUN yum -y install vim-enhanced psmisc net-tools iproute
[root@node11 xxoo]# docker build -t test:latest .
[root@node11 nnoo]# docker run -it test bash
案例4
1 问题
修改默认启动文件/bin/bash --->改为/user/bin/ptthon
2 步骤
[root@node11 nnoo]# mkdir nnoo
[root@node11 nnoo]# cd nnoo/
[root@node11 nnoo]# touch Dockerfile
[root@node11 nnoo]# vim Dockerfile
FROM myos:latest
CMD ["/usr/bin/python"]
[root@node11 nnoo]# docker build -t myos:python .
[root@node11 nnoo]# docker run -it myos:python
案例5
1 问题
安装apache软件,修改启动文件/bin/bash -->/usr/sbin/httpd
2 步骤
[root@node11 nnoo]# mkdir nnoo
[root@node11 nnoo]# cd nnoo/
[root@node11 nnoo]# vim Dockerfile
FROM test
RUN yum install -y httpd
ENV EnvironmentFile=/etc/sysconfig/httpd
WORKDIR /var/www/html
RUN echo "helolo nsd1802" > index.html
EXPOSE 80
CMD ["/usr/sbin/httpd", "-DFOREGROUND"]
[root@node11 nnoo]# docker build -t http:httpd .
[root@node11 nnoo]# docker run -d -p 80:80 http:httpd
创建私有仓库
1.配置Node11
[root@node11 ~]# vim /etc/docker/daemon.json
{
"insecure-registries":["192.168.1.20:5000"]
}
[root@node11 ~]# systemctl restart docker
[root@node11 ~]# docker run -d -p 5000:5000 registry
[root@node11 ~]# docker tag busybox:latest
192.168.1.20:5000/busybox:latest
[root@node11 ~]# docker push 192.168.1.20:5000/busybox:latest
2.配置node12
scp /etc/docker/daemon.json 192.168.1.21:/etc/docker/
[root@node12 ~]# systemctl stop docker.service
[root@node12 ~]# systemctl restart docker.service
[root@node12 ~]# docker run -it 192.168.1.20:5000/busybox:latest
3.查看镜像
[root@node11 ~]# curl http://192.168.1.20:5000/v2/_catalog
{"repositories":["busybox"]}
[root@node11 ~]# curl http://192.168.1.20:5000/v2/busybox/tags/list
{"name":"busybox","tags":["latest"]}
存储卷的概念
• docker容器不保持任何数据
• 重要数据请使用外部卷存储(数据持久化)
• 容器可以挂载真实机目录或共享存储为卷
1.主机卷的映射
• 将真实机目录挂载到容器中提供持久化存储
[root@jacob ~]# docker run -v /data:/data -it centos bash
共享存储基本概念
• 一台共享存储服务器可以提供给所有Docker主机使用
• 共享存储服务器(NAS、SAN、DAS等)
• 如:
– 使用NFS创建共享存储服务器
– 客户端挂载NFS共享,并最终映射到容器中
使用共享存储的案例
• 服务器
– yum -y install nfs-utils
– vim /etc/exports
– systemctl start nfs
• Docker主机
– mount挂载共享
– 运行容器时,使用-v选项映射磁盘到容器中
1.步骤
[root@node11 ~]# mkdir -pv /nfsroot/nfsro
[root@node11 ~]# yum -y install nfs-utils
[root@node11 ~]# vim /etc/exports
/nfsroot/nfsro *(ro)
[root@node11 ~]# systemctl start nfs
[root@node11 ~]# docker run -v /nfsroot/nfsro:/nfsroot/nfsro -it centos bash
[root@node11 ~]# showmount -e 192.168.1.20
2.测试
在容器里查看文件夹文件。并进行使用