Docker 快速學習

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命令,


獲得備份數據就能夠恢復或遷移數據了

相關文章
相關標籤/搜索