容器深入浅出学习--Docker是什么
一.docker的应用场景有哪些
- Web 应用的自动化打包和发布
- 自动化测试和持续集成、发布
- 在服务型环境中部署和调整数据库或其他的后台应用
- 从头编译或者扩展现有的OpenShift或Cloud Foundry平台来搭建自己的PaaS环境。
二.docker的优势
- 简化程序
Docker 让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,便可以实现虚拟化。Docker改变了虚拟化的方式,使开发者可以直接将自己的成果放入 Docker中进行管理。方便快捷已经是 Docker的最大优势,过去需要用数天乃至数周的 任务,在Docker容器的处理下,只需要数秒就能完成。 - 避免选择恐惧症
如果你有选择恐惧症,还是资深患者。Docker 帮你 打包你的纠结!比如 Docker 镜像;Docker 镜像中包含了运行环境和配置,所以 Docker 可以简化部署多种应用实例工作。比如 Web 应用、后台应用、数据库应用、大数据应用比如 Hadoop 集群、消息队列等等都可以打包成一个镜像部署 - 节省开支
一方面,云计算时代到来,使开发者不必为了追求效果而配置高额的硬件,Docker 改变了高性能必然高价格的思维定势。Docker 与云的结合,让云空间得到更充分的利用。不仅解决了硬件管理的问题,也改变了虚拟化的方式
三.在docker容器里面运行应用程序
使用docker run命令在ubuntu容器里运行输出hello world的命令
[root@k8s-01 ~]# docker run ubuntu:15.10 /bin/echo "Hello world"
Hello world
参数解析:
- docker: docker的二进制执行文件
- run:与前面的docker组合运行一个容器
- ubuntu:15.10:指定要运行的镜像,docker首先从本地主机上查找镜像是否存在,如果不存在,docker就会从镜像仓库docker hub上下载公共镜像
- /bin/echo "hello world":在启动的容器里执行的命令
四.运行交互式的容器
我们通过docker的两个参数 -i -t,让docker运行的容器实现"交互"的能力
[root@k8s-01 ~]# docker run -i -t ubuntu:15.10 /bin/bash
root@485cf27bc46c:/#
参数说明:
- -t:在新容器内指定一个伪终端或终端
- -i:允许你对容器内的标准输入进行交互
上面的例子中,我们已经进入一个ubuntu15.10系统的容器,我们可以在上面运行命令:
root@485cf27bc46c:/# ls
bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
root@485cf27bc46c:/# cat /proc/version
Linux version 3.10.0-862.el7.x86_64 (builder@kbuilder.dev.centos.org) (gcc version 4.8.5 20150623 (Red Hat 4.8.5-28) (GCC) ) #1 SMP Fri Apr 20 16:44:24 UTC 2018
root@485cf27bc46c:/#
退出的话,可以运行exit 或者ctrl+d退出容器
五.启动容器(后台模式)
以下命令创建一个以进程方式运行的容器:
[root@k8s-01 ~]# docker run -d ubuntu:15.10 /bin/sh -c "while true; do echo hello world; sleep 1; done"
190a3487c20059eb0f6f538b366727c5dc64cf4687f4628901bfe86ee483631e
运行完毕后,我们可以看到,输出的了一串字符,这个长字符串叫做容器的ID,对每个容器来说都是唯一的。我们可以通过容器ID来查看对应的容器发生了什么。
首先,我们需要确认容器是否允许:
[root@k8s-01 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
190a3487c200 ubuntu:15.10 "/bin/sh -c 'while t…" About a minute ago Up About a minute amazing_liskov
参数说明:
- CONTAINER ID:容器的ID
- IMAGE:使用的镜像
- COMMAND:执行的命令
- CREATED:创建的时间
- STATUS:容器的运行状态
- PORTS:运行的端口号
- NAMES:自动分配的容器名称
查看容器的标准输出,使用容器的ID或者自动分配的容器名称来查看:
[root@k8s-01 ~]# docker logs 190a3487c200
hello world
hello world
hello world
hello world
hello world
hello world
hello world
停止容器:
[root@k8s-01 ~]# docker stop 190a3487c200
190a3487c200