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命令,
獲得備份數據就能夠恢復或遷移數據了