docker学习笔记(一)

来源:互联网 发布:宇宙人餐饮软件 编辑:程序博客网 时间:2024/04/30 18:36

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

创建一个容器,并配置sshnginx

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

3sshd安装,及配置

     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 root@127.0.0.1 -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.
root@127.0.0.1'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 root@127.0.0.1 -p 10022
root@127.0.0.1'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_servertag标签为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 <containerId>:/file/path/within/container /host/path/target

 
从主机上拷贝文件到容器内

参考自:

http://stackoverflow.com/questions/22907231/copying-files-from-host-to-docker-container


1.用-v挂载主机数据卷到容器内
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<<id>>/rootfs/root

例子:

$ docker psCONTAINER ID      IMAGE    COMMAND       CREATED      STATUS       PORTS        NAMESd8e703d7e303   solidleon/ssh:latest      /usr/sbin/sshd -D                      cranky_pare$ docker inspect -f   '{{.Id}}' cranky_pareor $ docker inspect -f   '{{.Id}}' d8e703d7e303d8e703d7e3039a6df6d01bd7fb58d1882e592a85059eb16c4b83cf91847f88e5$ sudo cp file.txt /var/lib/docker/aufs/mnt/**d8e703d7e3039a6df6d01bd7fb58d1882e592a85059eb16c4b83cf91847f88e5



3.用输入输出符


 

docker run -i ubuntu /bin/bash -c 'cat > /path/to/container/file' < /path/to/host/file/


或者

docker exec -it <container_id> bash -c 'cat > /path/to/container/file' < /path/to/host/file/


0 0
原创粉丝点击