首页 » linux » 正文

Docker安装部署

 

一、Docker介绍和与传统虚拟机的对比


1、Docker与传统虚拟机对比

Docker所代表的容器虚拟化技术属于操作系统级虚拟化:内核通过创建多个虚拟的操作系统实例(内核和库)来隔离不同的进程。

传统虚拟化和容器技术结构比较:传统虚拟化技术是在硬件层面实现虚拟化,增加了系统调用链路的环节,有性能损耗;容器虚拟化技术以共享Kernel的方式实现,几乎没有性能损耗。

2、Docker结构引擎

Docker是Client/Server的架构

  • Docker Server:就是一个守护进程(daemon),用户不能直接和守护进程打交道,但是可以通过Docker客户端与其进行交互。其中daemon负责构建、运行和发布Docker容器(客户端可以和服务端运行在同一个系统中,也可以连接远程的daemon)。
  • Docker Client:客户书写指令的地方,一般就是shell
  • RESTful API:Docker客户端通过RESTful API与daemon进行socket通信
  • Image:俗称镜像
  • Container:俗称容器,装载和运行镜像
  • Network:俗称网络,容器通过暴露端口与主机端口绑定,达到接受来自主机的信号
  • Volume:俗称外挂,为了能够持久化数据以及共享容器间的数据,Docker提出了Volume的概念

3、Docker运行流程

 

当我们想运行一个容器的时候,docker会做如下操作:

  • 拉取镜像,若本地已经存在该镜像,则不用到网上去拉取
  • 创建新的容器
  • 分配union文件系统并且挂着一个可读写的层,任何修改容器的操作都会被记录在这个读写层上,你可以保存这些修改成新的镜像,也可以选择不保存,那么下次运行改镜像的时候所有修改操作都会被消除
  • 分配网络\桥接接口,创建一个允许容器与本地主机通信的网络接口
  • 设置ip地址,从池中寻找一个可用的ip地址附加到容器上,换句话说,localhost并不能访问到容器
  • 运行你指定的程序
  • 捕获并且提供应用输出,包括输入、输出、报错信息

二、查看系统和内核(要求可连接公网


1、查看系统版本

cat /etc/issue

2、查看内核(内核版本最低要求2.6.32)

cat /proc/version

三、安装docker


1、yum源安装docker

yum install docker-io -y

2、查看安装版本

docker -v

3、更改镜像和容器指向路径

yum安装的docker默认是在根分区的,所以我们要修改镜像和容器路径指向数据盘。

创建用来存储镜像的路径

mkdir /export/docker

打开配置文件

vim /etc/sysconfig/docker

修改路径:other_args=”–graph=/export/docker”

4、启动docker服务

service docker start

四、docker像(image)


0、Docker镜像

  • Docker 镜像,就相当于是一个文件系统。比如官方镜像 ubuntu:14.04 就包含了完整的一套 Ubuntu 14.04 最小系统的 root 文件系统。
  • Docker 镜像是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资 源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境 变量、用户等)。镜像不包含任何动态数据,其内容在构建之后也不会被改变。

1、查看centos镜像列表

docker search centos

2、获取镜像

获取镜像命令:docker pull [选项] [Docker Registry地址]<仓库名>:<标签>

  • Docker Registry地址:地址的格式一般是 <域名/IP>[:端口号] 。默认地址是 Docker Hub。
  • 仓库名:如之前所说,这里的仓库名是两段式名称 。 对于 Docker Hub,如果不给出用户名,则默认为 library,也就是官方镜像。

这里我们根据上面列出的centos的镜像,按照star的数量选第一个

docker pull centos:6.8

3、查看  / 删除 已经获取的镜像

查看:docker images

删除:docker rmi

五、容器环境搭建配置


0、镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的 类 和 实例 一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被 创建、启动、停止、删除、暂停等。

  • 容器的实质是进程,但与直接在宿主执行的进程不同,容器进程运行于属于自己的 独立的 命名空间。因此容器可以拥有自己的 root 文件系统、自己的网络配置、自己的进程空间,甚至自己的用户 ID 空间。容器内的进程是运行在一个隔离的环境里,使用起来,就好像是在一个独立于宿主的系统下操作一样。这种特性使得容器封装的应用比直接在宿主运行更加安全。
  • 容器存储层的生存周期和容器一样,容器消亡时,容器存储层也随之消亡。因此,任何保存于容器存储层的信息都会随容器删除而丢失。
  • 按照 Docker 最佳实践的要求,容器不应该向其存储层内写入任何数据,容器存储层要保持无状态化。所有的文件写入操作,都应该使用数据卷(Volume)、或者 绑定宿主目录(我们为了方便,使用了绑定了宿主目录),在这些位置的读写会跳过容器存储层,直接对宿主(或网络存储)发 生读写,其性能和稳定性更高,这样的容器可以随意删除、重新 run ,数据却不会丢失。

1、 生成容器

docker run -it –name mupeifeng -v /export/mupeifeng/:/home/ centos:6.8 /bin/bash

-it 是以前台交互运行的方式

–name 指定容器名称

-v 指定该容器挂载宿主机的目录,我们这里是将宿主机的 /export/mupeifeng/ 挂载到 容器的 / home /,这样宿主机和容器就可以很方便的传文件之类的。

2、 部署环境(PHP7.1+MySql5.7+Nginx+Redis+ openssh)

  • LNMP为了方便部署我们使用的是整理好的LNMP源码包(先下载打包好的源码包到/home/目录下http://soft.vpser.net/lnmp/lnmp1.4-full.tar.gz,然后解压执行安装脚本,进行编译安装即可)。
  • Openssh安装 : yum install openssh-server -y

                             修改配置文件/etc/ssh/sshd_config中内容 :

                                     PermitRootLogin yes

                                     UsePAM no

                            修改root密码: passwd

                            启动sshd : service sshd start

  • VIM无插件配置(可选), yum -y install vim
     展开原码

    ⚠️ /home/目录下的东西在定镜像时不会保留。

3、定制镜像

查看所有容器信息,获取容器id:docker ps -a

commit生成新镜像:docker commit -m “备注” 容器id 镜像名:tag版本

查看镜像列表:docker images

4、其他定制镜像方法

Dockerfile

六、创建多个容器


需求:我们需要给每人创建一个容器,并且都要可以通过宿主机80端口访问容器的80端口(因为我们的宿主机对外开放的只有一个80端口)。

思路

  • 首先我们将宿主机的8080端口映射到容器的80端口,这样我们要想访问容器的80端口,只需要直接访问宿主机的8080端口即可。这样我们每添加一台容器,只要在宿主机添加一个到该容器80端口的映射端口就可以了。
  • 然后我们在nginx里添加一个反向代理,将访问宿主机的80请求,转发到宿主机的8080,这样就完美解决了端口限制的问题。每添加一台容器就在宿主机添加添加一个nginx的反向代理就可以了。

1、首先建立宿主机和容器的端口映射

docker run -it –name mupeifeng -v /export/mupeifeng/:/home/ -p 8080:80 -p 8082:22 lnmp:7.1 /bin/bash

-p 就是把宿主机的端口和容器的端口进行绑定,我们这里是将宿主机的8082端口绑定到容器的22端口,这样我们就可以通过ssh root@127.0.0.1 -p 8082登陆到容器。

2、在宿主机通过nginx建立反向代理

为了方便管理,我们将每个人在宿主机的nginx配置目录下(/etc/nginx/conf.d)都单独建立了一个配置文件。

nginx具体配置内容如下:

 展开原码

七、日常使用和其他常用命令


1、我们定制的Docker镜像是开启了sshd服务的,所以可以在宿主机通过绑定的端口进行ssh登陆,进行操作。

例如:我的容器22端口在宿主机绑定的是8082,那么我就可以在登陆宿主机(目前我们的宿主机是172.20.222.112)后通过ssh root@127.0.0.1 -p 8082登陆到容器。

ssh的初始用户是root,初始密码:1qaz@WSX

目前对应的端口列表如下:

或者我们也可以通过如下命令重新以前台交互的方式进入容器里

docker exec -it 容器id /bin/bash

另外:我们只需要在本地的hosts中配置172.20.222.112 test.自己名字拼音.com,就可以在浏览器通过访问test.自己名字拼音.com访问自己配置的项目(目前配置的项目目录是宿主机的/export/自己名字拼音/wwwroot/default/或者是登陆容器后的/home/wwwroot/default)。

 

2、其他常用的Docker命令

docker stop 容器id

终止一个正在运行的容器

 

docker start 容器id

启动已终止容器

启动ssh服务

docker exec -t -i <id/container_name> /bin/bash

service sshd start

 

docker logs -f -t –since=”2017-09-11″ –tail=10 mupeifeng

查看日志

–since : 此参数指定了输出日志开始日期,即只输出指定日期之后的日志。

-f : 查看实时日志

-t : 查看日志产生的日期

-tail=10 : 查看最后的10条日志。

mupeifeng : 容器名称

发表评论