开启辅助访问 切换到窄版

centos 7部署docker容器虚拟化平台

[复制链接]
作者:hanhongwen 
版块:
Linux Linux-虚拟化技术 发布时间:2019-9-10 17:41:20
7140

管理员

积分
8796
QQ
hanhongwen 发表于 2017-8-18 03:35:48 | 显示全部楼层 |阅读模式
1、Dcoker概述
Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app)。几乎没有性能开销,可以很容易地在机器和数据中心中运行。最重要的是,他们不依赖于任何语言、框架或包装系统。


Docker是dotCloud公司开源的一个基于LXC的高级容器引擎,源代码托管在Github上, 基于go语言并遵从Apache2.0协议开源。
创新:
Docker让开发者可以打包他们的应用以及依赖包到一个可移植的container中,然后发布到任何流行的Linux机器上。
互动:
现在接触的软件是怎么发布的?windows下的  2016-0ffice.exe ,不能在xp运行 ; mk.rpm 在redhat系列Linux上运行,但是不能在其他linux版本上运行。
现在发布的软件包和操作系统相关。


1.1 扩展:
LXC为Linux Container的简写。Linux Container容器是一种内核虚拟化技术,可以提供轻量级的虚拟化,以便隔离进程和资源,而且不需要提供指令解释机制以及全虚拟化的其他复杂性。
LXC主要通过来自kernel的namespace实现每个用户实例之间的相互隔离,通过cgroup实现对资源的配额和度量。


简单理解:
docker是一个vmware虚拟机, docker可以运行很好多虚拟机,而且开销比vmware虚拟机还小。


docker   [ˈdɒkə(r)]  码头工人


官方网站:
https://www.docker.com/


1.2、docker特性:
文件系统隔离:每个进程容器运行在一个完全独立的根文件系统里。
资源隔离:系统资源,像CPU和内存等可以分配到不同的容器中,使用cgroup。
网络隔离:每个进程容器运行在自己的网络空间,虚拟接口和IP地址。
日志记录:Docker将会收集和记录每个进程容器的标准流(stdout/stderr/stdin),用于实时检索或批量检索。
变更管理:容器文件系统的变更可以提交到新的镜像中,并可重复使用以创建更多的容器。无需使用模板或手动配置。
交互式shell:Docker可以分配一个虚拟终端并关联到任何容器的标准输入上,例如运行一个一次性交互shell。

1.3、优点:
1.一些优势和VM一样,但不是所有都一样。
比VM小,比VM快,Docker容器的尺寸减小相比整个虚拟机大大简化了分布到云和从云分发时间和开销。Docker启动一个容器实例时间很短,一两秒就可以启动一个实例。
2.对于在笔记本电脑,数据中心的虚拟机,以及任何的云上,运行相同的没有变化的应用程序,IT的发布速度更快。
Docker是一个开放的平台,构建,发布和运行分布式应用程序。
Docker使应用程序能够快速从组件组装和避免开发和生产环境之间的摩擦。
3.您可以在部署在公司局域网或云或虚拟机上使用它。
4.开发人员并不关心具体哪个Linux操作系统
使用Docker,开发人员可以根据所有依赖关系构建相应的软件,针对他们所选择的操作系统。
然后,在部署时一切是完全一样的,因为一切都在DockerImage的容器在其上运行。
开发人员负责并且能够确保所有的相关性得到满足。
5.Google,微软,亚马逊,IBM等都支持Docker。
6.Docker支持Unix/Linux操作系统,也支持Windows或Mac

1.4、缺点局限性:
1.Docker用于应用程序时是最有用的,但并不包含数据。日志,跟踪和数据库等通常应放在Docker容器外。 一个容器的镜像通常都很小,不适合存大量数据,存储可以通过外部挂载的方式使用。比如使用:NFS,ipsan,MFS等。 一句话:docker只用于计算,存储交给别人。



2、部署docker容器虚拟化平台
2.1配置docker的YUM源
[root@safehourse70 ~]# vim /etc/yum.repos.d/docker.repo
[dockerrepo]
name=Docker repository
baseurl=http://yum.dockerproject.org/repo/main/centos/7/
enable=1
gpgcheck=0


[root@safehourse70 ~]# yum makecache


2.2 配置路由转发
[root@safehourse70 ~]# vim /etc/sysctl.conf
添加一行如下内容
net.ipv4.ip_forward=1


[root@safehourse70 ~]# sysctl -p


2.3 安装docker
[root@safehourse70 ~]# yum -y install docker-engine


2.4 启动服务
[root@safehourse70 ~]# systemctl restart docker
[root@safehourse70 ~]# systemctl enable docker

3、查看相关命令
3.1 查看版本
[root@safehourse70 ~]# docker version

3.2 查看docker系统信息
[root@safehourse70 ~]# docker info

3.3 搜索 images
[root@safehourse70 ~]# docker search centos


4、使用镜像
4.1 从公网上拉取一个镜像
[root@safehourse70 ~]# docker pull centos #从 Docker Hub 中拉取或者更新指定镜像


4.2 导入一个镜像
先下载一个镜像,使用如下命令导入
[root@safehourse70 ~]# docker load -i /root/centos-docker-image


4.3 查看images 列表
[root@safehourse70 ~]# docker images

4.4 查看docker镜像及数据存放目录
[root@safehourse70 ~]# du -sh /var/lib/docker/*


5、运行一个 container并加载镜像centos


5.1 运行一个 container实例
[root@safehourse70 ~]# docker run -i -t centos:latest /bin/bash
-i 以交互模式运行容器,通常与 -t 同时使用
-t 为容器重新分配一个伪输入终端,通常与 -i 同时使用


5.2 退出容器
[root@a8ecd5231365 /]# exit


5.3 长久运行一个 container容器实例
[root@safehourse70 ~]# docker run -d centos:latest /bin/bash -c "while true;do echo hello world; sleep 1; done"


5.4 查看正在运行的容器
[root@safehourse70 ~]# docker ps
[root@safehourse70 ~]# docker ps -a


5.5 杀死一个正在运行的容器进程
[root@safehourse70 ~]# docker kill 946e486f871c


5.6 启动、停止、重启 container容器实例
[root@safehourse70 ~]# docker start 1950b03cc3fd
[root@safehourse70 ~]# docker stop 1950b03cc3fd
[root@safehourse70 ~]# docker restart 1950b03cc3fd


5.7 删除指定 container
[root@safehourse70 ~]# docker stop 1950b03cc3fd
[root@safehourse70 ~]# docker rm -f 1950b03cc3fd


6、Docker Image 的制作两种方法
方法1:docker commit   #保存 container 的当前状态到 image后,然后生成对应的image
方法2:docker build  #使用 Dockerfile 自动化制作 image


6.1 docker commit
创建一个安装好nmap黑客扫描工具的容器镜像
[root@safehourse70 ~]# docker run -it centos /bin/bash
[root@daf9e86bbb31 /]# yum -y install nmap-ncat
[root@daf9e86bbb31 /]# exit


查看images列表
[root@safehourse70 ~]# docker images

根据容器当前状态做一个image镜像:创建一个安装了nmap-ncat工具的centos镜像

[root@safehourse70 ~]# docker ps -a   #查看运行中的容器ID
[root@safehourse70 ~]# docker commit daf9e86bbb31 centos:nmap    #生成一个新的镜像

运行新生成的镜像
[root@safehourse70 ~]# docker run -it centos:nmap /bin/bash

查看安装的包
[root@d8014803b641 /]# rpm -qa | grep nmap-ncat

6.2  通过docker build创建一个基于centos的httpd web服务器镜像
创建工作目录
[root@safehourse70 ~]# mkdir /docker-build
[root@safehourse70 ~]# cd /docker-build/
[root@safehourse70 docker-build]# touch Dockerfile

注: make自动化编译时需要Makefile文件,自动化创建docker镜像时,需要Dockerfile



编辑 Dockerfile
Dockerfile用来创建一个自定义的image,包含了用户指定的软件依赖等


[root@safehourse70 docker-build]# vim Dockerfile
FROM centos
MAINTAINER userabc <hanhongwen@safehourse.cn>
RUN yum -y install httpd
ADD start.sh /usr/local/bin/start.sh
ADD index.html /var/www/html/index.html


FROM centos   # FROM 基于哪个镜像
MAINTAINER userabc <hanhongwen@safehourse.cn>  # MAINTAINER 镜像创建者
RUN yum -y install httpd   #RUN 安装软件用
ADD start.sh /usr/local/bin/start.sh   
ADD index.html /var/www/html/index.html
# ADD  将文件<src>拷贝到新产生的镜像的文件系统对应的路径<dest>。所有拷贝到新镜像中的文件和文件夹权限为0755,uid和gid为0



创建 start.sh脚本启动httpd服务和apache默认首页
[root@safehourse70 docker-build]# echo "/usr/sbin/httpd -DFOREGROUND" > start.sh
注:/usr/sbin/httpd -DFOREGROUND 相当于执行了 systemctl start httpd
[root@safehourse70 docker-build]# chmod a+x start.sh
[root@safehourse70 docker-build]# echo "docker image build test" > index.html


使用命令build来创建新的image
语法:docker build -t  父镜像名:自己定义的镜像名   Dockerfile文件所在路径
-t :表示tage,镜像名

[root@safehourse70 docker-build]# docker build -t centos:httpd ./


查看images 列表
[root@safehourse70 docker-build]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED              SIZE
centos              httpd               2026dad89606        About a minute ago   332MB
centos              nmap                aa29b88683a6        30 minutes ago       300MB
centos              latest              328edcd84f1b        2 weeks ago          193MB


[root@safehourse70 docker-build]# docker run -it centos:httpd /bin/bash
[root@549fd8611a38 /]# rpm -qa | grep httpd


7、Docker Image 的发布:方法1:Save Image To TarBall
方法2:Push Image To Docker Hub

7.1 Save Image To TarBall
保存 Image 到 tar 包
语法:docker save -o 导出的镜像名.tar  本地镜像名

[root@safehourse70 docker-build]# docker save -o centos-httpd-docker-image.tar centos:httpd

查看

[root@safehourse70 docker-build]# ls
centos-httpd-docker-image.tar  Dockerfile  index.html  start.sh

导入

[root@safehourse70 docker-build]# docker load -i centos-httpd-docker-image.tar

7.2
Push Image To Docker Hub  发布到外网
、Signup on docker hub & create repo    注册一个帐号
https://hub.docker.com/

Login to docker hub #登录
# docker login -u userabc -p abc123 -e userab@gmail.com

Push image to docker hub #上传一个镜像
# docker push centos:httpd

Pull image from docker hub #下载一个镜像
# docker pull userabc/centos:httpd
用户名/镜像名


8、Container 端口映射

8.1 启动 container
[root@safehourse70 ~]# docker run -d -p 9000:80 centos:httpd /bin/bash -c /usr/local/bin/start.sh
8075fd5edb3c80272403910c09652c1edda4f223d935a47c76aa3ced42174c5c

8.2 查看
[root@safehourse70 ~]# docker ps
[root@safehourse70 ~]# netstat -lantup | grep 9000

8.3 测试地址
http://192.168.1.70:9000/ 进行访问
6.jpg
9、访问正在运行的 container 容器实例

语法: docker exec -it <container id | name> /bin/bash
[root@safehourse70 ~]# docker exec -it 8075fd5edb3c802724 /bin/bash

10、查看容器的IP

[root@8075fd5edb3c /]# yum -y install net-tools
[root@8075fd5edb3c /]# ifconfig

11、配置容器远程登录
[root@safehourse70 ~]# docker run --privileged -it centos:httpd /usr/sbin/init
[root@8075fd5edb3c /]# yum -y install openssh-*
[root@ceda82f68fd2 /]# systemctl restart sshd

[root@ceda82f68fd2 /]# passwd root

[root@safehourse70 ~]# docker run -d -p 9001:22 centos:httpd /bin/bash -c /usr/local/bin/start.sh
[root@ceda82f68fd2 /]# ifconfig

[root@safehourse70 ~]# ssh root@172.17.0.4   #直接用查看到的IP登录,不需要加9001端口
[root@ceda82f68fd2 ~]# ifconfig   #登录后状态




以上就是docker的简单部署过程,祝你成功









    15561578755
回复

使用道具 举报

注册会员

积分
74
AvesTaler 发表于 2019-9-10 17:41:20 | 显示全部楼层

centos 7部署docker容器虚拟化平台

Цитата jimaul у ubuntu команды отличаются от центосовскийстранно ...
я заметил только одно отличии yum на CentOs и apt на Ubuntu
все остальное одинаково

Или я чет делаю не так ???
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表