Bootstrap

centos笔记

doctor:
Dcoker概述 Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中, 然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互乊间丌会有 任何接口(类似 iPhone 的 app)。 几乎没有性能开销,可以徆容易地在机器和数据中心中运行。最重要 的是,他们丌依赖于任何语言、框架戒包装系统。
Docker 核心技术 
    1.Namespace — 实现 Container 的进程、网络、消息、文件系统和主机名的隔离。 
    2.Cgroup — 实现对资源的配额和度量。 
docker特性: 
文件系统隔离:每个进程容器运行在一个完全独立的根文件系统里。 
资源隔离:系统资源,像 CPU 和内存等可以分配到丌同的容器中,使用cgroup。 
网络隔离:每个进程容器运行在自己的网络空间,虚拟接口和 IP 地址。 
日志记彔:Docker 将会收集和记彔每个进程容器的标准流(stdout/stderr/stdin),用于实时检索戒批 量检索。 变更管理:容器文件系统的变更可以提交到新的镜像中,并可重复使用以创建更多的容器。无需使用模板 戒手劢配置。 交互式 shell:Docker可以分配一个虚拟终端并关联到任何容器的标准输入上,例如运行一个一次性交互 shell

优点: 
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.Docker 用于应用程序时是最有用的,但并不包含数据。日志,跟踪和数据库等通常应放在 Docker 容 器外。 一个容器的镜像通常都徆小,不适合存大量数据,存储可以通过外部挂载的方式使用。比如使用: NFS,ipsan,MFS等。 
    一句话:docker只用于计算,存储交给别人 例如:不适合安装oracle 
centos7中 yum install 安装保存下载的包
vim /etc/yum.conf 将keepcache=0改为1
完成后在/var/cache/yum/x86_64/7/extras/packages查看下载下来的包
部署 docker 容器虚拟化平台
# yum install docker --安装上docker
自定义安装docker版本
yum remove docker  docker-common docker-selinux docker-engine #卸载旧版本(如果安装过旧版本的话)
安装需要的软件包, yum-util 提供yum-config-manager功能,另外两个是devicemapper驱动依赖的
yum install -y yum-utils device-mapper-persistent-data lvm2 #感觉这步不执行也行
设置yum源
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
可以查看所有仓库中所有docker版本,并选择特定版本安装
yum list docker-ce --showduplicates | sort -r
yum install <FQPN>  # 例如:sudo yum install docker-ce-17.12.0.ce

开启路由转发功能,否则容器中的实例上不了网。 
# vim /etc/sysctl.conf   
#在文件最后添加 net.ipv4.ip_forward = 1 
# sysctl  -p  #使用配置生效 net.ipv4.ip_forward = 1 
# cat /proc/sys/net/ipv4/ip_forward   #查看 1 
或者:# echo 1 > /proc/sys/net/ipv4/ip_forward 

启动docker平台:
# systemctl start docker   #启动 docker 服务  
# systemctl enable docker  #设置开机启劢 docker 服务 
# docker version   #显示 Docker 版本信息
# docker info  #查看 docker 信息(确认服务运行)显示 Docker 系统信息,包括镜像和容器数。

#docker search centos  #从 Docker Hub 中搜索符合条件的镜像
INDEX       NAME                                         DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
docker.io   docker.io/centos                             The official build of CentOS.                   4338      [OK]       
docker.io   docker.io/ansible/centos7-ansible            Ansible on Centos7                              111                  [OK]
docker.io   docker.io/jdeathe/centos-ssh                 CentOS-6 6.9 x86_64 / CentOS-7 7.4.1708 x8...   96                   [OK]
docker.io   docker.io/consol/centos-xfce-vnc             Centos container with "headless" VNC sessi...   54                   [OK]
docker.io   docker.io/imagine10255/centos6-lnmp-php56    centos6-lnmp-php56                              40                   [OK]
docker.io   docker.io/tutum/centos                       Simple CentOS docker image with SSH access      39                   
docker.io   docker.io/gluster/gluster-centos             Official GlusterFS Image [ CentOS-7 +  Glu...   30                   [OK]
.........
方法 1:从公网 docker hub 拉取(下载)image   pull:拉  
# docker pull docker.io/centos
方法 2:把提前下载好的 image镜像导入 image:  
把 centos-latest-docker-image.tar镜像上传到 linux上 参数:  
-i " centos-latest-docker-image.tar " 指定载入的镜像归档。 
# docker load -i  /root/centos-latest-docker-image.tar 
# docker images  #列出本地所有镜像。其中 [name] 对镜像名称进行关键词查 
注:Docker 的镜像以及一些数据都是在/var/lib/docker 目彔下 
# ll -h /var/lib/docker/devicemapper/devicemapper/data  #查看虚拟相关信息

docker平台基本使用方法 
例 1:运行一个 container并加载镜像centos,运行起来这个实例后,在实例中执行 /bin/bash 命令 
docker常用参数: run  运行 
-i   以交互模式运行容器,通常与-t同时使用; 
-t  为容器重新分配一个伪输入终端,通常与-i同时使用; 
# docker run -d -i -t imageID(docker images信息中的imageID) /bin/bash #安装镜像 或者 docker run -d -i -t docker.io/centos:latest /bin/bash
# docker ps                #查看 安装的镜像,如有 镜像的信息 即代表 安装成功
#docker attach  CONTAINER ID    #CONTAINER ID为docker ps查出的

例 2:在 container 中启动一个长久运行的进程,不断向stdin 输出 hello world 
docker常用参数: 
    -d  后台运行容器,并返回容器 ID; 
    -c  后面跟待完成的命令 
# JOB=$(docker run -d docker.io/centos /bin/sh -c "while true;do echo hello world; sleep 1; done")
# echo $JOB   #变量 JOB 中存放  Name/ID   
从一个容器中取日志,查看输出的内容  语法: docker  logs   容器实例的Name/ID 
# docker logs $JOB 
# docker ps
也可以使用短ID或 docker 实例的名字查看日志输出:
# docker logs c4a213627f1b 或:# docker logs elated_kilby  
# docker ps -a  #-a 列出所有容器(包含沉睡/退出状态的容器);

例3:杀死一个容器。 比如:杀死一个正在后台运行的容器
docker kill c4a213627f1b  c4a213627f1b 或 # docker kill $JOB  #  杀死一个容器 杀死之后状态为 Exited 

例 4:启动、停止、重启 container容器实例 
# JOB=$(docker run -d centos /bin/sh -c "while true;do echo hello world; sleep 1; done") #启动一个新容器
# docker stop 1a63ddea6571  #关闭容器 
# docker start 1a63ddea6571  #启动容器  
# docker restart 1a63ddea6571 #重启容器

删除指定 container : rm 
# docker rm 1a63ddea6571 
解决:你可以先把容器1a63ddea6571 关闭,然后再删除戒加-f 强制删除 
# docker rm -f 1a63ddea6571 

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

方法 1:docker commit 创建一个安装好 nmap-ncat工具的容器镜像 
# docker run -it centos /bin/bash 
# yum -y install nmap-ncat   #在 container 中安装 nmap-ncat 软件 包
根据容器当前状态做一个 image镜像:创建一个安装了 nmap-ncat工具的 centos镜像 
    语法: docker commit <container的ID> <image_name> 例
    # docker commit  1d3563200047 centos:nmap 
使用新创建的 centos:nmap 镜像,生成一台容器实例: 
# docker run -ti centos:nmap  /bin/bash 
# rpm -qa nmap-ncat  #已经安装好 nmap-ncat命令 

方法二:通过:docker build创建一个基于centos的httpd web服务器镜像。 
尝试第二种创建 docker image方法:创建 docker build  #使用 Dockerfile 自动化制作 image 注:Dockerfile有点像源码编译时./configure后产生的Makefile 
以下操作要在 docker 物理机上操作: 
1、创建工作目彔 
#  mkdir /docker-build 
# cd /docker-build 
# touch Dockerfile 
注: make自动化编译时需要Makefile文件,自动化创建 docker 镜像时,需要Dockerfile 
2、编辑 Dockerfile Dockerfile用来创建一个自定义的image,包含了用户指定的软件依赖等
# vim  Dockerfile 
FROM centos 
MAINTAINER  <[email protected]
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  <[email protected]>  # 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  
3、创建 start.sh 脚本启动httpd服务和 apache默认首页index.html 文件
# echo "/usr/sbin/httpd -DFOREGROUND" > start.sh 
注:/usr/sbin/httpd -DFOREGROUND 相当于执行了 systemctl start httpd 
# chmod a+x start.sh 
创建 index.html 
# echo "docker image build test" > index.html 
4、使用命令 build来创建新的image 
# docker build -t docker.io/centos:httpd ./        #./表示 Dockerfile所在文件路径
语法:docker build -t  父镜像名:自己定义的镜像名   Dockerfile文件所在路径 #-t :表示tage,镜像名

实例 5:Docker Image 的发布: 
方法 1:Save Image To TarBall 
保存 Image 到 tar 包 
    语法:docker save -o 导出的镜像名.tar  本地镜像名:镜像标签 
例: [root@S104 docker-build]# docker save -o centos-httpd-docker-image.tar centos:httpd 
[root@S104 docker-build]# ls  #查看导出成功 
centos-httpd-docker-image.tar  Dockerfile  index.html  start.sh 
使用导入本地镜像: 
[root@S104 docker-build]# docker load -i centos-httpd-docker-image.tar 

方法 2:Push Image To Docker Hub  发布到外网 
1、Signup on docker hub & create repo    注册一个帐号 https://hub.docker.com/ 
2、Login to docker hub  # docker login -u userabc -p abc123 -e [email protected] 
3、Push image to docker hub   #上传镜像 # docker push centos:httpd 
4、Pull image from docker hub   #下载镜像 
# docker pull userabc/centos:httpd              用户名/镜像名  

删除镜像
# docker  rmi   image_name/ID
若要删除所有的image, 使用命令:
# docker rmi  $( docker  images -q )

实戓5:Container 端口映射 
启动 container 
# docker run -d -p 9000:80 centos:httpd /bin/sh -c /usr/local/bin/start.sh
注: -p 9000:80   把容器中的80端口映射到物理机上的 9000端口 
查看物理机上开启的 9000代理端口 
# netstat -antup | grep 9000  #查看物理机上端口已经开启
查看index.html界面 
# curl http://127.0.0.1:9000 
或者:http://S104:9000/ 

实戓6:访问正在运行的 container 容器实例 .
语法: docker exec -it <container id | name> /bin/bash 
# docker exec -it 87fadc0249a9 /bin/bash  #进入容器 
查看物理机和容器的网络: 
查看容器的 IP: 
[root@a9c3a7bf2054 /]# yum install net-tools -y 
[root@a9c3a7bf2054 /]# ifconfig 
物理机的IP: [root@xuegod63 ~]# ifconfig 
测试网络: [root@xuegod63 ~]# ping  172.17.0.2 
配置容器root密码: [root@a9c3a7bf2054 /]# echo 123456 | passwd --stdin root 
在容器中安装 sshd服务,然后把22端口映射出去,就可以远程登彔容器 

在容器中安装ssh服务
# yum install passwd openssl openssh-server -y
安装完成后 启动sshd:
# /usr/sbin/sshd -D
这时报以下错误: 
[root@ b3426410ff43 /]# /usr/sbin/sshd 
Could not load host key: /etc/ssh/ssh_host_rsa_key 
Could not load host key: /etc/ssh/ssh_host_ecdsa_key 
Could not load host key: /etc/ssh/ssh_host_ed25519_key
执行以下命令解决:
[root@b3426410ff43 /]# ssh-keygen -q -t rsa -b 2048 -f /etc/ssh/ssh_host_rsa_key -N ''
[root@b3426410ff43 /]# ssh-keygen -q -t ecdsa -f /etc/ssh/ssh_host_ecdsa_key -N ''
[root@b3426410ff43 /]# ssh-keygen -t dsa -f /etc/ssh/ssh_host_ed25519_key  -N ''
然后,用vi修改 /etc/ssh/sshd_config 配置信息: 
UsePAM yes 改为 UsePAM no 
UsePrivilegeSeparation sandbox 改为 UsePrivilegeSeparation no 
修改完后,重新启动sshd
root@b3426410ff43 /]# /usr/sbin/sshd -D &   #讲进程放到后台
查看进程
# ps -ef|grep sshd
然后修改root密码
echo “123456″ | passwd --stdin root

给docker开启远程访问
修改docker配置文件#vi /usr/lib/systemd/system/docker.service
修改ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock #centos这样加 ubunt加-H fd:// -H tcp://0.0.0.0:2375
重新加载配置文件# systemctl daemon-reload 
启动docker # systemctl start docker
输入#netstat -anp|grep 2375   #显示docker正在监听2375端口

启动远程部署的项目时要映射端口 docker run -it -p 8716:8716 cloud:latest /bin/bash &
 
 
解决虚拟机(linux)与本地无法共享
  现象:安装了VMtools在/mnt下没有生成hgfs文件夹,在虚拟机选项下设置共享文件目录无效。
解决办法
  先虚拟机-设置-选项下设置共享文件再在安装vmtools之前在/mnt目录下创建hgfs文件夹,安装过程中全部默认即可;
 
安装vmtools
点击虚拟机-安装vmtools
mount /dev/cdrom /mnt
tar -zxvf /mnt/VMwareRools-...gz -C /usr/local/src/
cd /usr/local/src/vmware-...
./vmware-install.pl --一路默认,有yes输入yes,其余默认.


将用户加入sudoers中
1. su root//先切到root
2. chmod u+w /etc/sudoers   //u 表示所有者, w 表示写权限 + 表示添加
3. vim /etc/sudoers 在文件中找到这一行:
## Allow root to run any commands anywhere
root    ALL=(ALL)       ALL
username ALL=(ALL)ALL  //添加这一行,username为要加入sudoers 的用户
4. 最后记得撤销文件的写权限: chmod u-w /etc/sudoers 

客户机屏幕自适应
1.关闭客户机,编辑客户机的设置
虚拟机 -- 虚拟机 -- 显示器 --指定显示器设置
2.启动客户机,如果没反应就选择查看 -- 自动调整大小 --自适应客户机


切换到命令行模式
linux cat /etc/inittab 查看 vim /etc/inittab 修改default.. = 3

centos cat /etc/inittab 提示使用 ln -sf /lib/systemd/system/multi-user.target /etc/systemd/system/defaule.target
会提示权限不够,切换到root用户
su root
输入密码,密码为设定的密码(我这里是当前用户的密码,以为只有一个用户)

CentOS更改yum源与更新系统
[1] 首先备份/etc/yum.repos.d/CentOS-Base.repo
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
[2] 进入yum源配置文件所在文件夹
[root@localhost yum.repos.d]# cd /etc/yum.repos.d/
[3] 下载163的yum源配置文件,放入/etc/yum.repos.d/(操作前请做好相应备份)
[root@localhost yum.repos.d]# wg

;