Dockerlinux
操做系统:centos 6.5docker
1、安装:bootstrap
一、配置epel源:vim
yum install -y yum-priorities && rpm -ivh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm && rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-6
二、安装 docker-io febootstrapcentos
# febootstrap用来制做centos镜像的工具bash
yum install docker-io febootstrap -y
三、安装完成后挂cgroup文件系统网络
vim /etc/fstab 添加一行: none /sys/fs/cgroup cgroup defaults 0 0
四、重启系统:session
reboot
docker 开机后会自动启动,若是没有启动能够手动启动:docker -d &ssh
2、下面来制做一个Centos 6.5 镜像tcp
一、使用febootstrap制做CentOS镜像文件centos6-p_w_picpath目录
febootstrap -i bash -i wget -i yum -i iputils -i iproute -i man -i vim -i openssh-server -i openssh-clients -i tar -i gzip centos6 centos6-p_w_picpath http://mirrors.aliyun.com/centos/6/os/x86_64/
#参数说明:
-i 镜像所须要安装的工具:把-i后面的参数传递给yum来实现安装,上面安装了ssh服务
centos6 是centos版本
centos6-p_w_picpath 是指定目录
命令的执行完成后,会在当前目录下生成一个目录centos6-p_w_picpath
cd centos6-p_w_picpaths ls bin boot dev etc home lib lib64 media mnt opt proc root sbin selinux srv sys tmp usr var ls -a root . ..
这时root目录下没有任何文件,也不没有隐藏的点文件,如:.bash_logout .bash_profile .bashrc
若是这时制做出来的镜像使用ssh登陆,会直接进入根目录下,以下:
bash-4.1.2# bash-4.1.2# bash-4.1.2# ls bin boot dev etc home lib lib64 media mnt opt proc root sbin selinux srv sys tmp usr var bash-4.1.2# ls -a root . ..
为了不这种状况,能够在centos6-p_w_picpath目录的root目录把.bash_logout .bash_profile .bashrc这三个文件设置一下
cd centos6-p_w_picpath && cp etc/skel/.bash* root/
这样就能够实现远程登陆正常了
基于这样的实现,咱们把能够之后一些复杂的配置文件事先配置好后放在一个目录下,而后再经过Dockerfile文件来调用,便可快速完成。
二、下面来建立一个基本的镜像:
cd centos6-p_w_picpath && tar -c .|docker import - centos6-base
命令完成后,使用docker p_w_picpaths来查看
docker p_w_picpaths REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE centos6-base latest a01c3d440db8 1 minutes ago 311.3 MB
此时一个基本的镜像已完成,
三、下面来用Dockerfile文件来建立一个能够ssh登陆的镜像
Dockefile 文件以下:
#Dockerfile FROM centos6-base MAINTAINER zhou_mfk <zhou_mfk@163.com> RUN ssh-keygen -q -N "" -t dsa -f /etc/ssh/ssh_host_dsa_key RUN ssh-keygen -q -N "" -t rsa -f /etc/ssh/ssh_host_rsa_key RUN sed -ri 's/session required pam_loginuid.so/#session required pam_loginuid.so/g' /etc/pam.d/sshd RUN mkdir -p /root/.ssh && chown root.root /root && chmod 700 /root/.ssh EXPOSE 22 RUN echo 'root:redhat' | chpasswd RUN yum install -y yum-priorities && rpm -ivh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm && rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-6 RUN yum install tar gzip gcc vim wget -y ENV LANG en_US.UTF-8 ENV LC_ALL en_US.UTF-8 CMD /usr/sbin/sshd -D #End
下面使用上面的Dockerfile文件来建立一个可ssh登陆的镜像
docker build -t centos6-ssh .
build: Build a container from a Dockerfile 这个是建立一个容器从Dockerfile文件
docker build <path> 寻找path路径下名为的Dockerfile的配置文件,使用此配置生成新的p_w_picpath
. 表示在当前目录下
docker build -t centos6-ssh /root/p_w_picpaths/abc
这个表示Dockerfile文件在:/root/p_w_picpaths/abc下
命令执行完成后,centos6-ssh镜像就建立完成了,
查看一下:
docker p_w_picpaths REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE centos6-ssh latest b8ca70e7adee 1 hours ago 311.3 MB centos6-base latest a01c3d440db8 2 hours ago 311.3 MB
下面建立一个容器来登陆下:
docker run -d -p 127.0.0.1:2222:22 centos6-ssh ssh root@127.0.0.1 -p 2222 输入密码:redhat [root@a856a3c242cf ~]# [root@a856a3c242cf ~]# [root@a856a3c242cf ~]# ls [root@a856a3c242cf ~]# [root@a856a3c242cf ~]# cat /etc/issue CentOS release 6.5 (Final) Kernel \r on an \m
Docker 容器间的使用
一、容器间的连接:
运行一个容器,给它一个名称,例如:
docker run -d -p 0.0.0.0:4455:22 -p 0.0.0.0:8080:80 --name one centos6-ssh
再运行另外一个容器
docker run -d -p 0.0.0.0:4456:22 -p 0.0.0.0:8088:80 --link /one:two centos6-ssh2 env
说明:
/one:two
one是第一个容器的名称,two是第二个容器的名称,
env是打印出来 第二个容器的环境变量
这样两容器就创建起一个网络通道,one和two容器所开放的端口也就是Dockerfile文件中定义开放的端口就能够连通了,
在宿主机上使用iptables命令来查看,例如:
iptables -L -n Chain FORWARD (policy ACCEPT) target prot opt source destination ACCEPT tcp -- 172.17.1.28 172.17.1.29 tcp spt:3306 ACCEPT tcp -- 172.17.1.29 172.17.1.28 tcp dpt:3306 ACCEPT tcp -- 172.17.1.28 172.17.1.29 tcp spt:22 ACCEPT tcp -- 172.17.1.29 172.17.1.28 tcp dpt:22
从这里看到两个容器间端口能够互相的访问了,
说明:
这里的端口是以one这个容器所开放的端口,如one开放22,3306,而two容器只开放了22,在two上也会放3306给one,反之就不行了。--link是以链接容器开放的端口为准的。
二、Docker 容器下数据卷的理解
一个数据卷就是通过特殊设计的,在一个或多个容器中经过UFS文件系统提供的一些特性
实现数据持久化或共享.
数据卷能够在容器之间共享和重复利用
能够对数据卷里的内容直接进行修改
对镜像的更新不会改变数据卷的内容
卷会一直持续到没有容器使用他们
2.一、添加一个数据卷
可使用带有 -v 参数的 docker run 命令给容器添加一个数据卷.
docker run -d -p 0.0.0.0:4445:22 --name data -v /data centos6-ssh
这个在容器里就会有一个/data的卷
在Dockefile中使用VOLUME指令来建立添加一个或多个数据卷
2.二、挂载宿主文件夹到数据卷
使用-v参数也能够挂载宿主的文件夹到容器里
docker run -d -p 0.0.0.0:44455:22 --name data1 -v /src/data:/opt/data centos6-ssh
这样会把本地的/src/data文件夹挂在容器/opt/data目录
宿主机上的文件夹必须是绝对路径,并且当文件夹不存在时会自动建立
此功能在Dockerfile文件中没法使用
默认状况下Docker以读写权限挂载数据卷,可是咱们也能够以只读方式进行挂载
docker run -d -p 0.0.0.0:44455:22 --name data1 -v /src/data:/opt/data:ro centos6-ssh
仍是上面的那个命令,只是咱们添加了一个ro选项来制定挂载时文件权限应该是只读的
2.三、建立和挂在一个数据卷容器
若是一些数据须要在容器间共享最好的方式来建立一个数据卷容器,而后从数据卷容器中挂载数据
1\建立一个带有命名容器来共享数据
docker run -d -v /dbdata --name dbdata centos6-ssh
2\在另外一个容器中使用--volumes-from标记挂在/dbdata卷
docker run -d --volumes-from dbdata --name db1 centos6-ssh2
3\在另外一个容器中同时也挂载/dbdata卷
docker run -d --volumes-from dbdata --name db2 centos6-ssh3
可使用多个 -–volumes-from 参数来把多个容器中的多个数据卷放到一块儿
能够挂载经过挂载dbdata容器实现的容器db1和db2来扩展关系链,例如:
docker run -d --name db2 --volumes-from db1 centos6-ssh4
2.四、备份,恢复,迁移数据
使用它们来进行备份,恢复或迁移数据.以下所示,咱们使用
–volumes-from 标记来建立一个挂载了要备份数据卷的容器.
docker run --volumes-from dbdata -v $(pwd):/backup centos6-ssh tar cvf /backup/backup.tar /dbdata
这里咱们建立并登陆了一个新容器,挂载了dbdata容器中的数据卷,并把本地的一个目录挂载了/backup下,最后再传一条tar命令来备份dbdata卷到/backup下,当命令执行完成后容器就会中止运行,并保留dbdata的备份,在本地目录下会一个备份的文件
注:新建立的容器中要有tar命令,
获得备份数据就能够恢复或迁移数据了