容器(Container)
容器介绍: docker是通过容器来运行业务的,就像运行一个kvm虚拟机是一样的。容器其实就是从镜像创建的一个实例。 我们可以对容器进行增删改查,容器之间也是相互隔离的。和虚拟机最大的区别就是一个是虚拟的一个是隔离的。
缺点:不会像虚拟机那样隔离的那么彻底,我们可以将容器理解为简化版的linux,有进程运行在里面。
#创建容器 Usage: docker create [OPTIONS] IMAGE [COMMAND] [ARG...] #新建并启动容器 [root@controller ~]# docker run -t -i ubuntu:14.04 /bin/bash root@55456b431849:/# -t 分配一个伪终端 -i 标准输入保持打开 -d 守护进程运行 root@55456b431849:/# ls bin dev home lib64 mnt proc run srv tmp var boot etc lib media opt root sbin sys usr root@55456b431849:/# pwd / root@55456b431849:/# cat /etc/issue Ubuntu 14.04.5 LTS l root@55456b431849:/# exit exit #终止容器 Usage: docker stop [OPTIONS] CONTAINER [CONTAINER...] #查看处于终止状态的容器 [root@controller ~]# docker ps -a -q f69ef742b752 be465c0dc442 55456b431849 #启动终止状态的容器 [root@controller ~]# docker start f69ef742b752 #进入容器 Usage: docker attach [OPTIONS] CONTAINER [root@controller ~]# docker run -idt ubuntu [root@controller ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES cc9870d0853f ubuntu "/bin/bash" 22 seconds ago Up 21 seconds small_albattani [root@controller ~]# docker attach small_albattani root@cc9870d0853f:/# Usage: docker exec [OPTIONS] CONTAINER COMMAND [ARG...] #一般情况下使用nsenter工具进入容器,安装工具 [root@controller ~]# yum install -y util-linux [root@controller ~]# docker run --name dockercentos -tid centos 9f228b6525d5a753fbda39b4a339ae3f8de5f26d6d85a56c006488f771b4f45b [root@controller ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 9f228b6525d5 centos "/bin/bash" 10 seconds ago Up 7 seconds dockercentos [root@controller ~]# docker inspect -f "{{ .State.Pid }}" dockercentos 85616 [root@controller ~]# nsenter -t 85616 -m -u -i -n -p [root@9f228b6525d5 /]# docker inspect -f {{.State.Pid}}容器名或者容器id #每一个容器都有.State.Pid,所以这个命令除了容器的id需要我们根据docker ps -a去查找,其他的全部为固定的格式 nsenter --target上面查到的进程id --mount --uts --ipc --net --pid #输入该命令便进入到容器中 解释nsenter指令中进程id之后的参数的含义: * –mount参数是进去到mount namespace中 * –uts参数是进入到uts namespace中 * –ipc参数是进入到System V IPC namaspace中 * –net参数是进入到network namespace中 * –pid参数是进入到pid namespace中 * –user参数是进入到user namespace中 我们可以写个脚本: [root@controller ~]# cat IN_Docker.sh #!/bin/sh if [ $# -ne 1 ] then echo $"usage:bash $0{dockername}" exit 1 fi docker_in(){ NAME_ID=$1 PID=$(docker inspect -f "{{ .State.Pid }}" $NAME_ID) nsenter -t $PID -m -u -i -n -p } docker_in $1 #运用 [root@controller ~]# sh IN_Docker.sh dockercentos [root@9f228b6525d5 /]# #删除容器 docker rm -f 【NAMES】 [root@controller ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 9f228b6525d5 centos "/bin/bash" 18 minutes ago Up 18 minutes dockercentos c5439518dcbe ubuntu:14.04 "/bin/bash" 20 hours ago Exited (0) 20 hours ago elegant_noyce 2bb8a93f5d34 ubuntu "echo 'hello I am ubu" 23 hours ago Exited (0) 19 hours ago gigantic_heyrovsky [root@controller ~]# docker rm -f elegant_noyce elegant_noyce [root@controller ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 9f228b6525d5 centos "/bin/bash" 19 minutes ago Up 19 minutes dockercentos 2bb8a93f5d34 ubuntu "echo 'hello I am ubu" 23 hours ago Exited (0) 19 hours ago gigantic_heyrovsky #导出容器 [root@controller ~]# docker export dockercentos >test_dockercentos.tar [root@controller ~]# ls 192.168.128.172 cd1.iso httpd.conf pike.install.sh test_dockercentos.tar web.yml #导入容器 [root@controller ~]# cat test_dockercentos.tar |docker import - docker/cents7.4
小结:
容器是直接提供应用服务的组件,实现快速启动停止和高效服务性能的基础,生产环境中可以在容器前端引入HaProxy代理容器访问,实现高可用。