Docker安装前升级内核3.10
机智如我丶 2015-09-14 22:53:00 浏览98 评论0
摘要: Docker安装前_升级内核至3.10 首先,大家如果看到有什么不懂的地方,欢迎吐槽!!! 我会在当天或者第二天及时回复,并且改进~~ 对于一些使用Centos 6.x的朋友,想换7可是公司架构比较稳定,而且不是说换就换的。那么,这篇文章主要是讲解如何在centos6....
Docker安装前_升级内核至3.10
首先,大家如果看到有什么不懂的地方,欢迎吐槽!!!
我会在当天或者第二天及时回复,并且改进~~
对于一些使用Centos 6.x的朋友,想换7可是公司架构比较稳定,而且不是说换就换的。那么,这篇文章主要是讲解如何在centos 6.x下面升级内核到3.10.5
在看下面内容之前,有一个坑爹的内容先介绍,避免大家陷入误区。。。如果你是线上的服务器,那么你可要谨慎了,我出现的原因总结了下~
首先我虚拟机系统都是Centos 6.5
1、ESXI 6.0 出现该问题。先安装kernel-3.10.5,后安装devel
2、ESXI 5.5 未出现该问题。先安装devel,后安装kernel-3.10.5
后来
3、ESXI 6.0 未出现该问题。先安装devel,后安装kernel-3.10.5
我所操作的都是虚拟机,但是在真实机上面如何我就不清楚了~~
大家一定要记得安装步骤,,,不然就是坑。。。相信我,血的教训。给你们看看我遇到了什么鬼!!! 没有initrd.img挂载项,我手动添加也没用!!! 这是我重新引导2.6.32内核下才可以查看这个文件,其实在启动的时候就能看到只有两项
rpm -ivh kernel-ml-aufs-devel-3.10.5-3.el6.x86_64.rpm
rpm -ivh kernel-ml-aufs-3.10.5-3.el6.x86_64.rpm
一、下载kernel包,并且安装
查看自己的内核
uname -r
2.6.32-431.el6.x86_64
由于本人无能...,无法编译内核,只能找地方下载。下载地址附上:
http://down.51cto.com/data/1903250
51CTO下载-kernel-ml-aufs-3.10.5-3.el6.x86_64.rpm
51CTO下载-kernel-ml-aufs-devel-3.10.5-3.el6.x86_64.rpm
改名先
mv 51CTO下载-kernel-ml-aufs-3.10.5-3.el6.x86_64.rpm.gzkernel-ml-aufs-3.10.5-3.el6.x86_64.rpm.gz
mv 51CTO下载-kernel-ml-aufs-devel-3.10.5-3.el6.x86_64.rpm.gzkernel-ml-aufs-devel-3.10.5-3.el6.x86_64.rpm.gz
解压
gunzip kernel-ml-aufs-3.10.5-3.el6.x86_64.rpm.gz
gunzipkernel-ml-aufs-devel-3.10.5-3.el6.x86_64.rpm.gz
安装rpm包
二、安装完成后,修改/etc/grub.conf并重启
vim /etc/grub.conf
将default=1改为default=0
表示第一个title下的内容为默认启动的kernel(一般新安装的内核在第一个位置)。
下图中大家已经看到,内核已经升级到3.10.5
修改完成后重启系统,因为现在系统还没有识别,你可以uname -r试试
好,这时候系统已经重启完毕,我们来看看内核情况,变为3.10.5
下载epel源并且安装docker
后面的比较简单,我就不详细说啦,安装docker可以参考我文章末尾附的文章
wgethttp://mirrors.yun-idc.com/epel/6/x86_64/epel-release-6-8.noarch.rpm
rpm -ivhepel-release-6-8.noarch.rpm
yum clean all
yum -y install docker-io
service docker start
docker -d
二安装镜像
启动服务
一般情况下,安装后 docker 服务会自动启动,否则需要手动启动,通过 docker version,
查看 docker 安装情况。如果显示客户端和服务端的信息,则说明安装正确,并且服务正常启
动。
4:验证环境
运行你的第一个容器,真正开始 docker 之旅。
显示在本机的所有容器:
说明:如果仅仅用 sudo docker ps,则仅显示正在运行的容器, hello-world 容器已经退出,
所以不会显示。
5:配置 DNS
缺省情况下, ubuntu 桌面版使用 127.0.0.1 作为 nameserver, docker 不能使用本地的
DNS,所以需要指定外部的DNS,具体方法如下:
%sudovi vim /etc/resolv.conf
增加如下内容:
修改nameserver 为 202.106.0.20
重启网卡
另外一个方法是修改/etc/default/docker 文件,增加如下内容:
DOCKER_OPTS="--dns8.8.8.8
卸载 docker
$ sudoapt-get autoremove --purge docker-engine
$ rm-rf /var/lib/docker
2.2 从网上下载下来docker的镜像,这里以Centos6.7为例
准备好快照文件后执行:
Cat 文件名 | docker import – 镜像名:tag标签 导入容器
Docker imgaes 查看当前的镜像如下:
$ cat ubuntu.tar| sudo dockerimport- test/ubuntu:v1.0
$ sudo dockerimages
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
test/ubuntu v1.0 9d37a6082e97 About a minute ago 171.3 MB
创建一个容器,并配置ssh、nginx
2.3 创建一个容器(命名为base_centos)
[root@iZ25av9xi4hZ ~]# docker run -it--name base_centos centos:latest /bin/bash
[root@cf6b692adf02 /]#
2.4 安装net-tools,iproute
net-tools 可以使用ifconfig等命令
[root@cf6b692adf02 /]# yum install -ynet-tools
iproute 可以使用ip add查看网络配置
[root@cf6b692adf02 /]# yum install -yiproute
3、sshd安装,及配置
3.1 安装openssh
[root@cf6b692adf02 /]# yum install -yopenssh
[root@cf6b692adf02 /]# yum install -yopenssh-server
[root@cf6b692adf02 /]# yum install -yopenssh-clients
3.2 配置私钥
输入命令显示如下,分别配置私钥。其中输入的地方全部选择enter键跳过
[root@cf6b692adf02 /]#/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@cf6b692adf02 /]# ssh-keygen -t rsa-f /etc/ssh/ssh_host_rsa_key
Generating public/private rsa key pair.
Enter passphrase (empty for nopassphrase):
Enter same passphrase again:
Your identification has been saved in/etc/ssh/ssh_host_rsa_key.
Your public key has been saved in/etc/ssh/ssh_host_rsa_key.pub.
The key fingerprint is:
d6:46:9c:ef:bf:5d:45:95:59:50:b9:9b:fa:a6:1d:3droot@cf6b692adf02
The key's randomart image is:
+--[ RSA 2048]----+
| .oO|
| . . +.|
| + o|
| o . o |
| S o . +|
| . . . oo|
| . .Eo|
| o.o+|
| .*+.|
+-----------------+
[root@cf6b692adf02 /]# ssh-keygen -tecdsa -f /etc/ssh/ssh_host_ecdsa_key
Generating public/private ecdsa keypair.
Enter passphrase (empty for nopassphrase):
Enter same passphrase again:
Your identification has been saved in/etc/ssh/ssh_host_ecdsa_key.
Your public key has been saved in/etc/ssh/ssh_host_ecdsa_key.pub.
The key fingerprint is:
7f:ad:3b:5f:93:c2:6e:f0:05:f8:75:80:18:f8:ba:83root@cf6b692adf02
The key's randomart image is:
+--[ECDSA 256]---+
| ..o . |
| . . . . |
| . . . |
| .. . ..|
| S. . o .|
| .. ..o ..|
| . .. +ooo.|
| E o .o+...|
| . +=. |
+-----------------+
[root@cf6b692adf02 /]#
[root@cf6b692adf02 /]# ssh-keygen -ted25519 -f /etc/ssh/ssh_host_ed25519_key
Generating public/private ed25519 keypair.
Enter passphrase (empty for nopassphrase):
Enter same passphrase again:
Your identification has been saved in/etc/ssh/ssh_host_ed25519_key.
Your public key has been saved in/etc/ssh/ssh_host_ed25519_key.pub.
The key fingerprint is:
44:93:0d:94:eb:e2:a4:3e:a3:fe:ab:e7:4f:2e:f0:44root@cf6b692adf02
The key's randomart image is:
+--[ED25519 256--+
| .== |
| .o.. |
| .. |
| E .. |
| . .S |
| . . o . |
| + +.. |
| Bo. |
| .+B=*o |
+-----------------+
[root@cf6b692adf02 /]#
最后执行一次,再查看sshd进程,发现是启动的。
[root@cf6b692adf02 /]#ps -a | grep sshd
[root@cf6b692adf02 /]# /usr/sbin/sshd
[root@cf6b692adf02 /]# ps -ef | grepsshd
root 109 1 013:16 ? 00:00:00 /usr/sbin/sshd
root 128 1 0 13:22 ? 00:00:00 grep --color=auto sshd
[root@cf6b692adf02 /]#
将sshd加入开机自启(/etc/rc.d/rc.local)
#!/bin/bash
# THIS FILE IS ADDED FOR COMPATIBILITYPURPOSES
#
# It is highly advisable to create ownsystemd services or udev rules
# to run scripts during boot instead ofusing this file.
#
# In contrast to previousversions due to parallel execution during boot
# this script will NOT be run after allother services.
#
# Please note that you must run 'chmod+x /etc/rc.d/rc.local' to ensure
# that this script will be executedduring boot.
touch /var/lock/subsys/local
/usr/sbin/sshd
CentOS 6.7运行Docker服务后,新建的容器是CentOS 6.6系统,但是SSH无法连接进去,会提示报错,一般是2个问题,进入ssh主配置文件修改为如下,重启sshd服务即可。
UsePAMno
PermitRootLoginyes
5.1 创建新的镜像文件
将之前做的容器弄成镜像文件,取名base:latest
[root@iZ25av9xi4hZ ~]# docker commit cf6b692adf02 base:latest
sha256:a90294e9b9b5b375c895ff32bfd34120797e8391bdbcbfa53b3792d636280f70
查看镜像下载所有的镜像文件
[root@iZ25av9xi4hZ ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
base latest a90294e9b9b5 2 minutes ago 934.9 MB
docker.io/centos latest 980e0e4c79ec 3 weeks ago 196.7 MB
[root@iZ25av9xi4hZ ~]#
5.2创建tomcat_cl容器,并设置其ssh对于宿主机器的10022端口,8080端口对应宿主机器的10088端口
[root@iZ25av9xi4hZ ~]# docker run -p 10022:22 -p 10088:8080 --name tomcat_cl -d base:latest /usr/sbin/sshd -D
e21a8af9269cd06b3950f59020de4d29723580c20bd35334ea6ff3fed28fb043
[root@iZ25av9xi4hZ ~]# docker ps
CONTAINER ID IMAGE command CREATED STATUS PORTS NAMES
e21a8af9269c base:latest "/usr/sbin/sshd -D" 7 seconds ago Up 6 seconds 0.0.0.0:10022->22/tcp, 0.0.0.0:10088->8080/tcp tomcat_cl
cf6b692adf02 centos:latest "/bin/bash" About an hour ago Up 10 minutes base_centos
[root@iZ25av9xi4hZ ~]#
5.3 ssh登录容器
[root@iZ25av9xi4hZ ~]# ssh [email protected] -p 10022
The authenticity of host '[127.0.0.1]:10022 ([127.0.0.1]:10022)' can't be established.
ECDSA key fingerprint is 7f:ad:3b:5f:93:c2:6e:f0:05:f8:75:80:18:f8:ba:83.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '[127.0.0.1]:10022' (ECDSA) to the list of known hosts.
[email protected]'s password:
Permission denied, please try again.
开始没有创建密码,所以叫修改一下密码
[root@iZ25av9xi4hZ ~]# docker exec -it tomcat_cl /bin/bash
[root@e21a8af9269c /]# passwd
Changing password for user root.
New password:
BAD PASSWORD: The password is shorter than 8 characters
Retype new password:
passwd: all authentication tokens updated successfully.
[root@e21a8af9269c /]# exit
exit
[root@iZ25av9xi4hZ ~]#
再次ssh ,可以正常进入
[root@iZ25av9xi4hZ ~]# ssh [email protected] -p 10022
[email protected]'s password:
[root@e21a8af9269c ~]#
5.4 在宿主机器检查对应的映射端口
[root@iZ25av9xi4hZ ~]# ps -aux | grep 10022
root 17088 0.0 1.5 188360 15708 ? Sl 22:41 0:00 docker-proxy -proto tcp -host-ip 0.0.0.0 -host-port 10022 -container-ip 192.168.0.3 -container-port 22
root 17218 0.0 0.0 112660 960 pts/3 S+ 22:46 0:00 grep --color=auto 10022
[root@iZ25av9xi4hZ ~]# ps -aux | grep 10088
root 17079 0.0 1.5 131020 15652 ? Sl 22:41 0:00 docker-proxy -proto tcp -host-ip 0.0.0.0 -host-port 10088 -container-ip 192.168.0.3 -container-port 8080
root 17226 0.0 0.0 112664 960 pts/3 S+ 22:47 0:00 grep --color=auto 10088
[root@iZ25av9xi4hZ ~]#
进入容器去启动nginx
Docker一些常用命令如下:
docker run -p 10022:22 -p 10080:80--name http_server -d http:latest /usr/sbin/sshd –D启动一个容器,将宿主机的10022端口映射到虚拟机的22端口,将宿主机的10080端口映射到虚拟机的80端口,使用的镜像为http:latest,后台运行,使用的名字为http_server,tag标签为latest
docker ps –a:查看所有的容器
docker images:挂载了的镜像
docker ps –l:查看容器端口的映射关系
docker rm –f ¥images_name按名字删除镜像
docker exec -it http_server /bin/bash:按名字登录到某个后台运行的容器里
docker export ab64a633ca4e >/home/Centos6.7+nginx.tar:按ID将某个镜像打包成快照
cat Centos6.7+nginx.tar| docker import- http:latest:将快照导入为镜像
今天运行这个命令时报错
docker run -it --name Haproxy --link app1:app1 --link app2:app2 -p 6302:6301 -v ~/Projects/HAProxy:/tmp haproxy /bin/bash
报错信息:
docker: Error response from daemon: failed to create endpoint Haproxy on network bridge: iptables failed: iptables --wait -t nat -A DOCKER -p tcp -d 0/0 --dport 6302 -j DNAT --to-destination 192.168.0.8:6301 ! -i docker0: iptables: No chain/target/match by that name.
看着信息提示,可以大概知道iptables配置的问题,且跟docker有关。
查看iptables配置文件
cat /etc/sysconfig/iptables (主要是filter和nat的配置)
*filter
:INPUT DROP [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [17:2536]
:syn-flood - [0:0]
-A INPUT -i lo -j ACCEPT
*nat
:PREROUTING ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
:OUTPUT_direct - [0:0]
:POSTROUTING_ZONES - [0:0]
:POSTROUTING_ZONES_SOURCE - [0:0]
这里看到filter和nat并没有docker的配置信息,所以添加上对应的信息如下:
*filter
:INPUT DROP [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [17:2536]
:syn-flood - [0:0]
:DOCKER - [0:0]
*nat
:PREROUTING ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:DOCKER - [0:0]
docker容器和宿主机之间的文件转移
从容器内拷贝文件到主机上
docker cp:/file/path/within/container /host/path/target
从主机上拷贝文件到容器内
参考自:
http://stackoverflow.com/questions/22907231/copying-files-from-host-to-docker-container
docker run -v /path/to/hostdir:/mnt $container 在容器内拷贝 cp /mnt/sourcefile /path/to/destfile
2.直接在主机上拷贝到容器物理存储系统
A. 获取容器名称或者id :
$ docker ps
B. 获取整个容器的id
$ docker inspect -f '{{.Id}}' 步骤A获取的名称或者id
C. 在主机上拷贝文件:
$ sudo cp path-file-host /var/lib/docker/aufs/mnt/FULL_CONTAINER_ID/PATH-NEW-FILE 或者 $ sudo cp path-file-host /var/lib/docker/devicemapper/mnt/123abc<>/rootfs/root
例子:
$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES d8e703d7e303 solidleon/ssh:latest /usr/sbin/sshd -D cranky_pare $ docker inspect -f '{{.Id}}' cranky_pare or $ docker inspect -f '{{.Id}}' d8e703d7e303 d8e703d7e3039a6df6d01bd7fb58d1882e592a85059eb16c4b83cf91847f88e5 $ sudo cp file.txt /var/lib/docker/aufs/mnt/**d8e703d7e3039a6df6d01bd7fb58d1882e592a85059eb16c4b83cf91847f88e5
docker run -i ubuntu /bin/bash -c 'cat > /path/to/container/file' < /path/to/host/file/
或者
docker exec -itbash -c 'cat > /path/to/container/file' < /path/to/host/file/