PAAS运维八
Docker 是世界领先的软件容器平台。开发人员利用 Docker 可以消除协作编码时“在我的机器上可正常工作”的问题。 运维人员利用 Docker 可以在隔离容器中并行运行和管理应用,获得更好的计算密度。 企业利用 Docker 可以构建敏捷的软件交付管道, 以更快的速度、更高的安全性和可靠的信誉为 Linux 和 Windows Server 应用发布新功能。
Docker 属于 Linux 容器的一种封装,提供简单易用的容器使用接口。它是目前最流行的 Linux 容器解决方案。 Docker 将应用程序与该程序的依赖,打包在一个文件里面。运行这个文件,就会生成一个虚拟容器。 程序在这个虚拟容器里运行,就好像在真实的物理机上运行一样。有了 Docker,就不用担心环境问题。
总体来说,Docker 的接口相当简单,用户可以方便地创建和使用容器,把自己的应用放入容器。 容器还可以进行版本管理、复制、分享、修改,就像管理普通的代码一样。
那么docker和VM到底有什么不同呢?
从下图可以看出,VM是一个运行在宿主机之上的完整的操作系统,VM运行自身操作系统会占用较多的CPU、内存、硬盘资源。Docker不同于VM,只包含应用程序以及依赖库,基于libcontainer运行在宿主机上,并处于一个隔离的环境中,这使得Docker更加轻量高效,启动容器只需几秒钟之内完成。
由于Docker轻量、资源占用少,使得Docker可以轻易的应用到构建标准化的应用中。但Docker目前还不够完善,比如隔离效果不如VM,共享宿主机操作系统的一些基础库等;网络配置功能相对简单,主要以桥接方式为主;查看日志也不够方便灵活。
Docker 在容器的基础上,进行了进一步的封装,从文件系统、网络互联到进程隔离等等,极大的简化了容器的创建和维护。使得 Docker 技术比虚拟机技术更为轻便、快捷。
作为一种新兴的虚拟化方式,Docker 跟传统的虚拟化方式相比具有众多的优势。 Docker 容器的启动可以在秒级实现,这相比传统的虚拟机方式要快得多; Docker 对系统资源的利用率很高,一台主机上可以同时运行数千个 Docker 容器。
Docker是CS架构,主要有两个概念:
Docker daemon: 运行在宿主机上,Docker守护进程,用户通过Docker client(Docker命令)与Docker daemon交互
Docker client: Docker 命令行工具,是用户使用Docker的主要方式,Docker client与Docker daemon通信并将结果返回给用户,Docker client也可以通过socket或者RESTful api访问远程的Docker daemon
Docker image:镜像是只读的,镜像中包含有需要运行的文件。镜像用来创建container,一个镜像可以运行多个container;镜像可以通过Dockerfile创建,也可以从Docker hub/registry上下载。 Docker container:容器是Docker的运行组件,启动一个镜像就是一个容器,容器是一个隔离环境,多个容器之间不会相互影响,保证容器中的程序运行在一个相对安全的环境中。 Docker hub/registry: 共享和管理Docker镜像,用户可以上传或者下载上面的镜像,官方地址为https://registry.hub.docker.com/,也可以搭建自己私有的Docker registry。
镜像就相当于打包好的版本,镜像启动之后运行在容器中,仓库就是装存储镜像的地方。
除过以上我们使用的Docker命令外,Docker还有一些其它常用的命令
拉取docker镜像
docker pull image_name
查看宿主机上的镜像,Docker镜像保存在/var/lib/docker目录下:
docker images
删除镜像
docker rmi docker.io/tomcat:7.0.77-jre7 或者 docker rmi b39c68b7af30
查看当前有哪些容器正在运行
docker ps
查看所有容器
docker ps -a
启动、停止、重启容器命令:
docker start container_name/container_id docker stop container_name/container_id docker restart container_name/container_id
后台启动一个容器后,如果想进入到这个容器,可以使用attach命令:
docker attach container_name/container_id
删除容器的命令:
docker rm container_name/container_id
查看当前系统Docker信息
docker info
从Docker hub上下载某个镜像:
docker pull centos:latest docker pull centos:latest
执行docker pull centos会将Centos这个仓库下面的所有镜像下载到本地repository
下面进行简单演练
1.在 server 节点,将运行的 mysql 容器创建为镜像,完成后查询该镜像,将以上操作命令及检查结果以文本形式填入答题框。(docker commit)
[root@server ~]# docker ps -aCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 6b9ef06bb4f0 10.0.3.137:5000/mysql:8.0 "docker-entrypoint.sh" About an hour ago Up About an hour 0.0.0.0:13306->3306/tcp angry_kare [root@server ~]# docker export 6b9ef06bb4f0 > mysqltar [root@server ~]# ls anaconda-ks.cfg mysql111tar mysqltar www1 www2 [root@server ~]# cat mysqltar | docker import - mysqltest:test sha256:573734ed502d09fcbc5beffbc3309f675e3502bbb7090b76f4698b6366442014 [root@server ~]# docker images | grep mysqltest mysqltest test 573734ed502d 4000 21 seconds ago 337.1 MB [root@server ~]#
2.在 server 节点查询 registry 容器的 CPU、内存等统计信息,将以上操作命 令及检查结果以文本形式填入答题框。
[root@server ~]# docker stats 51f1b21decdc CONTAINER CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS 51f1b21decdc 0.00% 2.941 MiB / 5.671 GiB 0.05% 23.42 kB / 648 B 20.42 MB / 0 B 0
3.在 server 节点修改运行的 rancher/server 容器的名称,修改名称为 xiandian_server,完成后查询容器列表,将以上操作命令及检查结果以文本形式 填入答题框。
[root@server ~]# docker ps -aCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 6b9ef06bb4f0 10.0.3.137:5000/mysql:8.0 "docker-entrypoint.sh" About an hour ago Up About an hour 0.0.0.0:13306->3306/tcp angry_kare [root@server ~]# docker rename 6b9ef06bb4f0 xiandian_server_mysql [root@server ~]# docker psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 6b9ef06bb4f0 10.0.3.137:5000/mysql:8.0 "docker-entrypoint.sh" About an hour ago Up About an hour 0.0.0.0:13306->3306/tcp xiandian_server_mysql
4.在 server 节点,使用 docker 命令列举所有的网络,将以上操作命令及检 查结果以文本形式填入答题框
[root@server ~]# docker network ls NETWORK ID NAME DRIVER SCOPE 2f6ad52bc918 bridge bridge local e1ba55c090ee host host local e337e9d1630d none null local
5.在 server 节点,使用 docker 命令查询 bridge 网络的所有详情,将以上操 作命令及检查结果填入答题框
[root@server ~]# docker network inspect bridge
6.在 server 节点,使用 docker 命令创建名为 xd_net 的网络,网络网段为 192.168.3.0/24,网关为 192.168.3.1,创建完成后查询网络列表,将以上操作命令 及检查结果以文本形式填入答题框\
[root@server ~]# docker network create --subnet 192.168.3.0/24 --gateway 192.168.3.1 xd_net a387254a2821302b11a6088a95e1176c178b7dbcc924c9e26df8db965a16af77 [root@server ~]# docker network ls | grep xd_net a387254a2821 xd_net bridge local [root@server ~]#
7.在 server 节点,使用 docker 命令创建名为 xd_net 的网络,网络网段为 192.168.3.0/24,网关为 192.168.3.1,创建完成后查询此网络的详细信息,将以上 操作命令及检查结果以文本形式填入答题框。
[root@server ~]# docker network create --subnet 192.168.3.0/24 --gateway 192.168.3.1 xd_net a387254a2821302b11a6088a95e1176c178b7dbcc924c9e26df8db965a16af77 [root@server ~]# docker network ls | grep xd_net a387254a2821 xd_net bridge local [root@server ~]# [root@server ~]# docker network inspect xd_net [ { "Name": "xd_net", "Id": "a387254a2821302b11a6088a95e1176c178b7dbcc924c9e26df8db965a16af77", "Scope": "local", "Driver": "bridge", "EnableIPv6": false, "IPAM": { "Driver": "default", "Options": {}, "Config": [ { "Subnet": "192.168.3.0/24", "Gateway": "192.168.3.1" } ] }, "Internal": false, "Containers": {}, "Options": {}, "Labels": {} } ]
- .在 server 节点,使用 docker 命令创建名为 xd_net 的网络,网络网段为 192.168.3.0/24,网关为 192.168.3.1,创建镜像为 centos:latest,容器名称为 centos, 使用 docker 网络为 xd_net,创建完成后查询容器使用的网络名称和查询该容器 的运行状态,将以上操作命令及检查结果以文本形式填入答题框。
[root@server ~]# docker network create --subnet 192.168.3.0/24 --gateway 192.168.3.1 xd_net a387254a2821302b11a6088a95e1176c178b7dbcc924c9e26df8db965a16af77 [root@server ~]# docker network ls | grep xd_net a387254a2821 xd_net bridge local [root@server ~]# [root@server ~]# docker run -itd --name centos --network=xd_net 10.0.3.137:5000/centos:latest 7fb738b189a1ed23bb5eca1efd6e827cfa371fdbb56054522fe9bdd03448637b [root@server ~]# docker inspect -f "{{.HostConfig.NetworkMode}}" 7fb738b189a1 xd_net [root@server ~]# docker ps -l CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 7fb738b189a1 10.0.3.137:5000/centos:latest "/bin/bash" About a minute ago Up 58 seconds centos
9…在 server 节点,使用 docker 命令创建名为 xd_net 的网络,网络网段为 192.168.3.0/24,网关为 192.168.3.1,创建镜像为 centos:latest,容器名称为 centos, 使用 docker 网络为 xd_net,创建完成后查询容器 IP 地址,将以上操作命令及检 查结果以文本形式填入答题框。
[root@server ~]# docker network create --subnet 192.168.3.0/24 --gateway 192.168.3.1 xd_net a387254a2821302b11a6088a95e1176c178b7dbcc924c9e26df8db965a16af77 [root@server ~]# docker network ls | grep xd_net a387254a2821 xd_net bridge local [root@server ~]# [root@server ~]# docker run -itd --name centos --network=xd_net 10.0.3.137:5000/centos:latest 7fb738b189a1ed23bb5eca1efd6e827cfa371fdbb56054522fe9bdd03448637b [root@server ~]# docker inspect -f {{.NetworkSettings.Networks.xd_net.IPAddress}} 7fb738b189a1 192.168.3.2
10。在 server 节点,使用 docker 命令创建名为 xd_net 的网络,网络网段为 192.168.3.0/24,网关为 192.168.3.1,创建完成后,查询网络列表,接着删除 docker 网络 xd_net,完成后查询 docker 网络列表,将以上操作命令及检查结果以文本 形式填入答题框。
[root@server ~]# docker network create --subnet 192.168.3.0/24 --gateway 192.168.3.1 xd_net a387254a2821302b11a6088a95e1176c178b7dbcc924c9e26df8db965a16af77 [root@server ~]# docker network ls NETWORK ID NAME DRIVER SCOPE 2f6ad52bc918 bridge bridge local e1ba55c090ee host host local e337e9d1630d none null local a387254a2821 xd_net bridge local [root@server ~]# docker network rm a387254a2821 a387254a2821 [root@server ~]# docker network ls NETWORK ID NAME DRIVER SCOPE 2f6ad52bc918 bridge bridge local e1ba55c090ee host host local e337e9d1630d none null local [root@server ~]#
- 使用Docker和saltstack构建运维paas管理平台
- 不看好运维竖井产品模式,优云打造融合化运维PaaS平台
- 办公管理支撑流程能力PaaS平台运维开发软件需求设计方案
- 招聘大机管理员和运维人员
- linux中ftp的安装过程记录[运维篇]
- 运维必备知识
- 量体裁衣:中小企业网如此运维
- 阿里巴巴rocketmq的运维指令
- ansible 自动化运维实现角色定制
- 四川省财政厅借IT治理实践Cobit模型实现科学运维管理
- centos服务器下配置nagios自动化运维工具
- Linux运维-day3
- 本周技术关注[面向webapps运维]:大公司的小团队
- Linux运维 第五阶段(一)集群相关概念及LVS(LB)
- 自动化运维工具Ansible之playbooks剧本及roles角色定制
- IDC运维团队技术交流——服务器故障的排查 推荐
- 13款Linux运维比较实用的工具
- Oracle日常运维2
- 了如指掌,纵揽全局--BSM网络拓扑助力网络运维
- 云计算、PaaS开发、企业云平台搭建