Docker

docker 是一个应用容器引擎,让开发者可以打包安装他们的应用,以及依赖包到一个可移植容器中去,然后发布到任何Linux容器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间没有任何接口。

基于go语言并遵循Apache2.0开源协议。

Docker面向对象

容器对象

镜像

 

docker在本质上是一个附加系统使用文件系统的不同层构建一个应用层是有可能的

Docer实例是无状态的他们不应该承担任何交易数据,所有的数据应该保存在数据库服务器中。

Docker基于LXC的高级容器引擎,其隔离性主要来自于namespace

Docker所提供的功能:

1Images(镜像):Docker可以通过PullPush命令构建对象到服务中心

2Containers(容器):Docker可以通过Start/Stop命令管理容器的生命周期

3Logging(日志):Docker可以通过stdoutstderro捕获输出所有的容器内部信息

4Volumes(存储):Docker可以创建和管理容器的相关文件存储

5Networking(网络):Docker可以创建管理虚拟的接口和内部所有容器之间的网络桥接

5RPCDocker服务器提供允许外部程序去控制所有容器的行为的API

@http://www.docker.org.cn/docker/70.html

 

首先在系统上安装docker服务,dockerrhel7.2系统上运行良好,在低版本的系统上有些问题。镜像去网上down

镜像的创建和销毁:

查看本地镜像:docker p_w_picpaths

查看本地镜像详情:docker inspect +镜像名称

导入本地镜像:docker load -i +镜像名称

导出本地镜像:docker save rhel >rhel.tar??

更新本地镜像:docker commit  适用于对基础镜像做一些公共性的操作,然后重新打包。

删除本地镜像:docker rmi +镜像名称 前提:该镜像没有被占用

 

容器的销毁和重建:

docker run -it --name vm1 +镜像名称 bash  交互式方法创建一个容器

 rhel系列的容器创建必须要有bash

docker run -d --name vm1+镜像名称  后台运行一个容器。

docker ps -a 查看所有容器状态

docker pa 查看当前正在运行的容器状态

docker attach vm1 连接容器

docker logs vm1 查看容器指令输出 -f 可以实时查看

docker inspect vm1 查看容器详情

docker stats vm1 查看容器资源使用率(实时)

docker diff vm1 查看容器修改

docker run -d --name vm1 rhel7 bash -c "while true; do echo westos; sleep 1; done创建后台运行并执行指令的容器

docker stop vm1 停止容器

docker start vm1 启动容器

docker kill vm1 强制中止容器

docker restart vm1 重起容器

docker pause/unpause 暂停/恢复容器。

docker export vm1 > vm1.tar 导出容器

docker import vm1.tar p_w_picpath  导入容器为镜像p_w_picpath

 

docker数据卷管理:

docker run 在创建容器时使用 -v 参数可以挂载一个或多个数据卷到当前运行的容器中,-v

的作用是将宿主机上的目录作为容器的数据卷挂载到容器中,使宿主机和容器之间可以共

享一个目录。

挂载数据卷到新创建的容器上:

# docker run -it --name westos -v /tmp/data1:/data1 -v /tmp/data2:/data2 rhel7 /bin/bash

-v 参数可以重复使用,挂载多个数据卷到容器中,冒号前面的是宿主机的目录(本地目录

不存在 docker 会自动创建),冒号后面的是容器中的挂载目录。

:docker commit 时卷的数据不会被保存。

默认挂载可以读写数据卷,也可以只读挂载:

# docker run -it --name westos2 -v /tmp/data2:/data2:ro

rhel /bin/bash

挂载宿主机文件:

#

docker

run

-it

--name

westos3

/etc/yum.repos.d/rhel-dvd.repo:/etc/yum.repos.d/rhel-dvd.repo:ro rhel7 /bin/bash

-v

数据卷容器:

# docker create --name data -v /tmp/sharedata:/sharedata rhel7 /bin/true

# docker run -it --name vm1 --volumes-from data rhel7 /bin/bash

# docker run -it --name vm2 --volumes-from data rhel7 /bin/bash

# docker attach vm1

bash-4.2# cd /sharedata/

bash-4.2# touch vm1file

# docker attach vm2

bash-4.2# cd /sharedata/

bash-4.2# ls

passwd vm1file

bash-4.2# touch vm2file

[root@foundation0 ~]# ls /tmp/sharedata/

passwd vm1file vm2file

备份数据卷:  要预先封装tar 工具进去

# docker run --rm --volumes-from data -v /tmp/backup:/backup rhel7 tar cf

/sharedata    /backup/test.tar

 

Dockerfile编写:

首先对基础镜像操作:

bash-4.2# cat /etc/yum.repos.d/rhel7.repo 

[rhel7.1]

name=rhel7.0

baseurl = http://172.25.254.33/rhel7.2

#baseurl=file:///var/www/html/rhel7.2

gpgcheck=0

 

   13  yum install -y iputils-20121221-7.el7.x86_64

   14  yum install -y net-tools-2.0-0.17.20131004git.el7.x86_64

   15  yum install -y procps-ng-3.3.10-3.el7.x86_64

   16  ps -ax

   17  yum install -y openssh-server openssh-clients 

   18  yum install -y openssh-client

   19  yum install -y openssh-clients

 

使用ctrl +p+q 退出。

提交修改过的容器:并加上tag 后缀。

[root@foundation33 ~]# docker commit vm1  rhel7:yum

 

cat Dockerfile

FROM rhel7:yum

MAINTAINER gingko@qq.com

ENV HOSTNAME server1

EXPOSE  22

RUN yum install -y openssh-server openssh-clients  && yum clean all

RUN ssh-keygen -t   rsa -f /etc/ssh/ssh_host_rsa_key -q -N ""

RUN ssh-keygen -t ecdsa -f /etc/ssh/ssh_host_ecdsa_key -q -N ""

RUN ssh-keygen -t ed25519 -f /etc/ssh/ssh_host_ed25519 -q -N ""

RUN echo root:westos|chpasswd

CMD ["/usr/sbin/sshd","-D"]

 

此时,在docker p_w_picpaths 中可以发现该镜像。可以使用该镜像创建容器。