首页 > 代码库 > Docker入门(二)

Docker入门(二)

一、Docker相关概念

1.Docker:

namespace,cgroup:

解决方案:

lxc,openvz

lxc:linux containers

docker最初就是lxc的封装版本。

docker engine/docker server:输出一个api,用于接受外部请求

接受到client请求,借助于lxc虚拟化技术,在lxc上创建一个虚拟机实例。

docker借助于外部的dockerhub,实现image

后台docker不再使用lxc,使用libcontainer[centos 7],隔离用户空间的引擎

在前端使用没有区别

2.容器虚拟化

例如kvm也需要images,有一个完整的OS

而容器所需的images,并非完整的OS,只拥有FS,没有内核

借助于AUFS技术对映像文件进行分层,容器运行一个独立的FS上

运行nginx需要nginx依赖的库,运行mysql需要依赖mysql的库

把FS做成一个base image,再做几个专用的image,例如nginx专用的,MySQl专用的

 [docker hub]

/

/

 [cn1][cn2]...

[API] [docker  engine   ]

=======================

Hypervisor

=============

Host OS

==============

【硬件】

3.核心组件;

docker client:docker的client工具,用户使用docker的接口,docker client与docker daemon通信。并将结果返回给client

docker daemon:运行在宿主机,Docker的守护进程,用户可通过docker client与其交互;

image :只读的,基于aufs或者UnionFS叠加在一起,用来创建container

一个镜像可以运行多个container;镜像文件可以通过Dockerfile创建,也可以从docker hub/registry 下载

repository

公共仓库 //提供有base image Docuer hub/registry

私有仓库 //docker repository 

docker container:docker的运行实例,容器是一个隔离环境

另外两个重要组件:

docker link:各docker之间的通信,openvswtich,netns构建,

docker volume:容器中的数据的持久化


二、安装Docker:

centos6 ;epel

centos7: extra

docker-engine

安装Docker:

https://mirrors.aliyun.com/docker-engine/yum/repo/main/centos/7/

yum install docker-engine

[root@node1 ~]# rpm -ql docker-engine |egrep -v "share"

/etc/udev/rules.d/80-docker.rules

/usr/bin/docker

/usr/bin/docker-containerd

/usr/bin/docker-containerd-ctr

/usr/bin/docker-containerd-shim

/usr/bin/docker-init

/usr/bin/docker-proxy

/usr/bin/docker-run

/usr/bin/dockerd

/usr/lib/systemd/system/docker.service

docker子命令有很多

systemctl start docker.service

docker images //查看镜像

docker search centos 

Name DESCRIPTION STARS STARS OFFICAL AUTOMATED

自动生成

darksheer/centos //用户名:镜像名

docker search busybox 

docker pull busybox //拉取官方镜像 base iamge

tag : lastest //最新版本,默认最新版本

docker pull hub.mt.com:5000/busybox //执行私有仓库获取image,必须支持ssl。或者禁止使用tls

docker help run //运行

docker run [OPTIONS] IMAGS [COMMAND] [AEG,...]

//image应该有一个运行起来后,默认运行的命令。

-t --tty=false 分配一个默认的伪终端

-i --interactive=false 打开之后运行在交互式

[root@node1 ~]# docker run -it busybox:latest /bin/sh 

docker ps //查看正在运行的 docker

需要借助于外 volume 保存创建的数据。

docker help commit //基于当前容器的所有修改,创建一个新的images

docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]

三、docker常用命令:

1.环境信息相关

info 

version

2.系统维护相关

images 

inspect :容器的详细信息

build:基于dockerfile创建image文件

commit:基于运行中的容器创建映像文件

pause:暂停

unpause

rm

rmi //删除映像文件

run //基于image运行一个容器

start/stop/restart 

top //资源占用情况

ps 

kill

...

3.日志相关

events;

hisgory;

logs;

        4.Docker hub 相关

login

logout

pull

push 

search 

基本操作:

获取映像:pull

启动容器:run

-i,-t 

docker run -it centos:latest /bin/bash 

ifconfig //docker0 一个虚拟接口

一半在虚拟机, 一半在宿主机

docker kill c98dac012556 //kill 掉容器,容器ID

docker ps -a //可以查看所有的

关闭后,默认还是会占用内存,可以在启动的时候

docker run --rm //退出则,rm自动移除容器

docker rm  c98dac012556 //删除该容器

docker image的创建:

1.基于dockerfile

2.基于运行中的容器修改

//仅仅是打包最上面一层,只有最上面一层是可写的。

实验:commit,保存文件

[root@node1 ~]# docker run -it centos:latest /bin/bash

在home中 useradd centos 

[root@node1 ~]# docker commit faecb4def9d5 centos:newuser

[root@node1 ~]# docker images

有 newuser

[root@node1 ~]# docker kill faecb4def9d5

[root@node1 ~]# docker rm faecb4def9d5

[root@node1 ~]# docker ps -a

没有之前的容器了

[root@node1 ~]# docker run -it --rm centos:newuser /bin/bash

rm用于关闭后,就删除容器

[root@3f20a3c7f5df /]# id centos

uid=1000(centos) gid=1000(centos) groups=1000(centos)

[root@3f20a3c7f5df /]# exit

[root@node1 ~]# docker ps -a //将没有容器运行


Docker入门(二)