Docker极简入门

2018年05月22日 20:25:12

阅读数:44

一、Docker概述

Docker通过一个包括应用程序运行时所需的一切的可执行镜像启动容器,包括配置有代码、运行时、库文件、环境变量和配置文件等。

1.文件系统隔离:每个容器都有自己得root文件系统。

2.进程隔离:每个容器都运行再自己得进程环境中。

3.容器间得虚拟网络接口和IP地址都是分开的。

4.资源隔离和分组:使用cgroup将CPU和内存之类的资源独立分配给每个Docker容器。

5.写时复制:文件系统都是通过写时复制创建的,这就意味着文件系统是分层的、快速的,并且占用磁盘空间小。

6.日志:容器产生的STDOUT、STDIN和STDERR这些IO流都会被收集并记入日志,用来进行日志分析和故障排除。

7.交互式shell:用户可以创建一个伪tty终端、将其连接到STDIN,为容器提供一个交互式shell。

8.灵活性:大多数应用程序均能被装箱。

9.轻量级:容器利用并共享主机内核。

10.可交互:可以即时的更新和升级。

11.可移植:一处构建,到处运行。

12.可扩展性:可以增加和分发容器副本。

二、Docker容器的安装与入门

1.Docker的安装过程很简单,本次试验是在CentOS7.4中进行的,因此不存在内核版本及系统平台不支持的情况。简单的安装配置如下:

[root@ChatDevOps ~]# yum -y install docker
[root@ChatDevOps ~]# docker --version
Docker version 1.13.1, build 94f4240/1.13.1 [root@ChatDevOps ~]# systemctl start docker [root@ChatDevOps ~]# systemctl status docker [root@ChatDevOps ~]# systemctl enable docker [root@ChatDevOps ~]# docker info

2.docker info:返回所有容器和镜像的数量、Docker使用的执行驱动和存储驱动及Docker的基本配置。

[root@ChatDevOps ~]# docker info
Containers: 15Running: 1Paused: 0Stopped: 14 Images: 4 Server Version: 1.13.1

3.docker images:列出当前系统中本地镜像。例如,列出本地镜像中REPOSITORY为ubuntu的镜像:

[root@ChatDevOps ~]# docker images ubuntu
REPOSITORY          TAG                 IMAGE ID CREATED SIZE docker.io/ubuntu latest 452a96d81c30 3 weeks ago 79.6 MB
  • 1
  • 2
  • 3

这个命令也相当于:

[root@ChatDevOps ~]# docker image ls
  • 1

4.docker ps:列出所有正在运行的容器。

[root@ChatDevOps ~]# docker ps
CONTAINER ID        IMAGE COMMAND CREATED STATUS PORTS NAMES e93e508dbc38 centos "/bin/bash" 2 hours ago Up 2 minutes fervent_turing

这个命令也类似于:

[root@ChatDevOps ~]# docker container ls

加上选项-a则列出的是所有的容器,包括正在运行的和未运行的。加选项-n则代表列出前n个容器,n后面跟需要列出的容器的个数。

[root@ChatDevOps ~]# docker ps -a
CONTAINER ID        IMAGE COMMAND CREATED STATUS PORTS NAMES dfd4fe17d6ce httpd "/bin/bash" 2 hours ago Exited (0) 43 minutes ago stoic_gates 7b4ddbb18811 ubuntu "/bin/bash" 2 hours ago Exited (0) 43 minutes ago priceless_bassi e93e508dbc38 centos "/bin/bash" 2 hours ago Up About a minute fervent_turing [root@ChatDevOps ~]# docker ps -n 10

同样,加了选项-a也类似于:

[root@ChatDevOps ~]# docker container ls --all -n 10
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                    PORTS               NAMES
07939dcd012d centos "/bin/bash" 15 hours ago Exited (0) 15 hours ago eloquent_engelbart [root@ChatDevOps ~]# docker container ls -a -n 1 CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 07939dcd012d centos "/bin/bash" 15 hours ago Exited (0) 15 hours ago eloquent_engelbart

docker run:创建一个新的容器并运行一个命令。

[root@ChatDevOps ~]# docker run --name ivandu -i -t  centos /bin/bash
[root@009c8df5e30d /]# 

上面例子中创建了一个名为ivandu的容器。Docker首先检查本地是否存在镜像centos,如果不存在,则会连接到Docker官方维护的Docker Hub Registry,查看Docker Hub是否存在该镜像,如果存在则下载该镜像并保存到本地宿主机。选项-i表示容器的stdin是开启的,选项-t表示为要被创建的容器分配一个伪tty终端,centos表示创建这个容器使用的是centos这个镜像,/bin/bash表示容器创建完成之后执行容器中的该命令。选项-d则会将容器置于后台运行。

5.docker start:启动一个容器,可以是容器的ID和名称(NAMES)。

[root@ChatDevOps ~]# docker start dfd4fe17d6ce
dfd4fe17d6ce
[root@ChatDevOps ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES dfd4fe17d6ce httpd "/bin/bash" 4 hours ago Up www.feifanyule.cn/ 10 seconds 80/tcp stoic_gates e93e508dbc38 centos "/bin/bash" 4 hours ago Up www.yigouyule2.cn  2 hours fervent_turing [root@ChatDevOps ~]# docker start stoic_gates stoic_gates [root@ChatDevOps ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES dfd4fe17d6ce httpd "www.uuweb.cn /bin/bash" 4 hours ago Up 8 minutes 80www.taohuayuan178.com /tcp stoic_gates e93e508dbc38 centos "www.vboyule66.cn/ /bin/bash" 5 www.120xh.cn hours ago Up 2 hours fervent_turing

同理,docker stop及docker restart的用法大同小异。

6.docker attach:可以进入一个已经在运行的容器。命令后面的容器id也可以换成容器名称。需要注意的是,如果退出容器的shell,容器也会随之停止运行。

[root@ChatDevOps ~]# docker start 7b4ddbb18811
7b4ddbb18811
[root@ChatDevOps ~]# docker attach 7b4ddbb18811 root@7b4ddbb18811:/# cat /etc/issue Ubuntu 18.04 LTS \n \l root@7b4ddbb18811:/# exit [root@ChatDevOps ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

7.docker rm:删除一个已经停止的容器。如果这个容器正在运行,需要先停止该容器的运行或者使用选项-f进行强制删除。

[root@ChatDevOps ~]# docker rm -f 009c8df5e30d
009c8df5e30d
  • 1
  • 2

一次性删除所有的容器:

[root@ChatDevOps ~]# docker rm `docker ps -a -q`
  • 1

8.docker logs:获取容器的日志,我们可以通过该日志了解容器内部正在进行什么样的操作。可以跟选项-f,类似于tail命令,显示日志最后部分。选项-t则为每条日志加上了时间戳。

[root@ChatDevOps ~]# docker logs -tf  dfd4fe17d6ce
2018-05-22T05:35:24.196281000Z root@dfd4fe17d6ce:/usr/local/apache2# exit root@dfd4fe17d6ce:/usr/local/apache2# 2018-05-22T08:56:00.809591000Z root@dfd4fe17d6ce:/usr/local/apache2# ls 2018-05-22T08:56:00.811456000Z bin build cgi-bin conf error htdocs icons include logs modules 2018-05-22T08:56:06.779932000Z root@dfd4fe17d6ce:/usr/local/apache2# ps -aux 2018-05-22T08:56:06.782810000Z USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND 2018-05-22T08:56:06.783173000Z root 1 0.0 0.1 20236 1980 ? Ss 08:40 0:00 /bin/bash 2018-05-22T08:56:06.783462000Z root 6 0.0 0.1 17492 1144 ? R+ 08:56 0:00 ps -aux 2018-05-22T08:56:19.520653000Z root@dfd4fe17d6ce:/usr/local/apache2# httpd -k start 2018-05-22T08:56:19.550996000Z AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 172.17.0.3. Set the 'ServerName' directive globally to suppress this message 2018-05-22T08:57:01.656035000Z root@dfd4fe17d6ce:/usr/local/apache2# cat /etc/issue 2018-05-22T08:57:01.656305000Z Debian GNU/Linux 8 \n \l 2018-05-22T08:57:01.656609000Z 2018-05-22T08:57:07.888609000Z root@dfd4fe17d6ce:/usr/local/apache2# exit 2018-05-22T08:57:07.888981000Z exit

9.docker top:查看正在运行的容器内部的进程运行情况。停止的容器并不支持此法进行查看。

[root@ChatDevOps ~]# docker start 7bc9a41a53cd
7bc9a41a53cd
[root@ChatDevOps ~]# docker top 7bc9a41a53cd UID PID PPID C STIME TTY TIME CMD root 6869 6855 0 17:26 pts/0 00:00:00 /bin/bash

10.docker exec:在一个运行中的容器内部执行命令或者进入一个正在运行的容器内。选项-d表示命令在后台执行,-d后跟容器名和要执行的命令。也可以通过选项-i和-t搭配使用进入一个正在运行的容器,与attach不同的是,如果退出容器的shell,该容器并不会停止运行。

[root@ChatDevOps ~]# docker exec -d 7bc9a41a53cd touch /home/ChatDevOps.log
[root@ChatDevOps ~]# docker exec -i -t 7bc9a41a53cd /bin/bash [root@7bc9a41a53cd /]# ll /home/ChatDevOps.log -rw-r--r--. 1 root root 0 May 22 09:40 /home/ChatDevOps.log

11.docker inspect:返回一个低水平的Docker对象信息。可以用选项-f或–format来获取选定结果。支持完整的go语音模板,可以充分利用go语音的优势。

[root@ChatDevOps ~]# docker inspect dfd4fe17d6ce
[{"Id": "dfd4fe17d6ce1e17ca55e741c6979b16b32383c909ad2145f1c1fcb231612ecf","Created": "2018-05-22T04:03:10.289044219Z", "Path": "/bin/bash", "Args": [], "State": { ... ... [root@ChatDevOps ~]# docker inspect --format='{{.State.Running}}' dfd4fe17d6ce false [root@ChatDevOps ~]# docker inspect --format='{{.NetworkSettings.IPAddress}}' 7bc9a41a53cd 172.17.0.2

12.docker kill:杀死一个或多个正在运行的容器。

[root@ChatDevOps ~]# docker kill 7bc9a41a53cd
7bc9a41a53cd
  • 1
  • 2

三、总结

通过本篇,我们了解了Docker的优点及简单入门知识。文中并未进行大量详细的原理性的内容阐述,主要通过实践来演示一入门常用的一些命令及其使用注意事项。以此来加深对Docker原理的理解。本篇博文是来北京工作后的第一篇文章,纪念一下。

Docker极简入门相关推荐

  1. .Net Core in Docker极简入门(下篇)

    点击上方蓝字"小黑在哪里"关注我吧 Docker-Compose 代码修改 yml file up & down 镜像仓库 前言 上一篇[.Net Core in Dock ...

  2. 数据分析及机器学习环境配置(docker极简入门指南)

    做数据科学一般需要用到类似XGBOOST.TensorFlow之类的库,这些库在win下不是那么好安装的,但是很多人又需要它们,那怎么办呢,最简单的就是用docker的方式,不仅具备一个linux虚拟 ...

  3. Docker 极简入门教程,傻瓜都能看懂!

    富 Web 时代,应用变得越来越强大,与此同时也越来越复杂.集群部署.隔离环境.灰度发布以及动态扩容缺一不可,而容器化则成为中间的必要桥梁. 本文我们就来探索一下 Docker 的神秘世界,从零到一掌 ...

  4. .Net Core in Docker极简入门(上篇)

    点击上方蓝字"小黑在哪里"关注我吧 环境准备 Docker基础概念 Docker基础命令 Docker命令实践 构建Docker镜像 Dockerfile bulid & ...

  5. Docker 极简入门指南,10 分钟就能看懂~

  6. SkyWalking 极简入门

    1. 概述 1.1 概念 SkyWalking 是什么? FROM http://skywalking.apache.org/ 分布式系统的应用程序性能监视工具,专为微服务.云原生架构和基于容器(Do ...

  7. APISIX 极简入门(国产微服务网关)

    1. 概述 APISIX 是基于 OpenResty + etcd 实现的云原生.高性能.可扩展的微服务 API 网关.它是国人开源,目前已经进入 Apache 进行孵化,牛逼!!! OpenRest ...

  8. Nginx 极简入门教程

    Nginx 极简入门教程 基本介绍 Nginx 是一个高性能的 HTTP 和反向代理 web 服务器,同时也提供了 IMAP/POP3/SMTP服务. Nginx 是由伊戈尔·赛索耶夫为俄罗斯访问量第 ...

  9. Python极简入门教程

    前言 为了方便各位小白能轻松入门Python,同时加深自己对Python的理解,所以创造了"Python极简入门教程",希望能帮到大家,若有错误请多指正,谢谢.极简入门教程代表着不 ...

最新文章

  1. 【项目实践】中英文文字检测与识别项目(CTPN+CRNN+CTC Loss原理讲解)
  2. 收藏 | 27个机器学习小抄(附学习资源)
  3. 红茶一杯话Binder(传输机制篇_中)
  4. 运维工程师是桥的护栏_桥梁专家:钢结构桥比混凝土桥易涡振 以后出现涡振可能性会提高...
  5. HTML表格,table,thead,tbody,tfoot,th,tr,td,的属性以及跨行,跨列
  6. 测试用例-写测试用例时怎么入手
  7. 反射认识_03_改变成员变量Fields
  8. android禁止电话功能,#Android# 启用“阻止模式”功能,避免半夜电话骚扰!
  9. 文本在线查重系统的设计与实现(毕业设计)
  10. 软件测试 | App测试——Appium实战总结,淘宝App测试项目案例
  11. 自学车载以太网笔记(1)
  12. Python实现图片标记分类文件夹自动归类文件的脚本
  13. 前所未知的Bug(IDEA 和 金山词霸2016的冲突)
  14. error launching idea
  15. 旅行青蛙分析(Android篇)
  16. 最近很火的爱心网页(html+css+js),表白必备
  17. 关于Excel显示“文件已损坏,无法打开”的解决办法
  18. Android 第三方库AgentWeb的使用
  19. 在c语言中本征函数说明,结合单片机学习板学习c语言之流水灯制作--intrins.h头文件...
  20. 旗正规则引擎在薪资管理方面的应用

热门文章

  1. Android Things揭开面纱
  2. LINK : fatal error LNK1104: cannot open file mfc42d.lib
  3. 使用devenv/MSBuild在命令行编译单个project
  4. 三条Windows 7小技巧
  5. XgCalendar 代码导读和Demo详解(1)参数说明和数据结构
  6. db2界面调用存储过程_第三章 操作系统用户界面
  7. MySQL高级 - 查询缓存 - 开启查询缓存
  8. Nginx负载均衡策略之least_conn
  9. 阻塞(Block)和非阻塞(Non-Block)
  10. Spring容器初始化实现V3 版本