docker的基础知识点和使用介绍
什么是docker
docker是一个容器引擎,提供了一整套完整的容器解决方案。它是在2014年最火热的开源项目,基于Apache2.0开原协议,由Go语言开发。
什么是容器
容器其实历史比较久远,Linux上的LXC、Solaris上的Zones等都是容器的不同实现方式。
容器实质上是一个运行在宿主机上的进程。只不过在这个进程启动之前进行了一些处理,让进程进入了一个全新的虚拟环境,与宿主机的环境分离。所以这个进程认为自身处于一个独立的运行世界中。
一个简单的例子是:在容器中创建的文件在宿主机上是看不到的。
容器的优势
容器创建、删除速度快 容器在运行期间占用的开销比较小,在一个宿主机上,容器运行的数量可以很多
docker的优势
容器管理很方便
安装docker
前提条件
docker已经可以运行在多种操作系统上甚至windows上,这里我采用centos7.3来安装。docker对操作系统要求如下:
- 内核版本大于3.10:可通过uname -r查看
- 系统是64位:可通过uname -i查看
yum安装
在配置好yum源后可直接使用yum命令进行安装:
yum install docker
安装好后启动docker:
service docker start
然后可以运行下面的命令检查docker的版本:
# docker version Client: Version: 1.13.1 API version: 1.26 Package version: Go version: go1.8.3 Git commit: 774336d/1.13.1 Built: Wed Mar 7 17:06:16 2018 OS/Arch: linux/amd64 Server: Version: 1.13.1 API version: 1.26 (minimum version 1.12) Package version: Go version: go1.8.3 Git commit: 774336d/1.13.1 Built: Wed Mar 7 17:06:16 2018 OS/Arch: linux/amd64 Experimental: false
docker启动和停止
docker和其他服务一样,可以通过service命令来控制启动和停止:
'''启动''' service docker start '''停止''' service docker stop '''查看状态''' service docker status '''重启''' service docker restart
docker架构
docker是一个典型的C/S架构:
docker server
这是一个守护进程,一直运行在后台,其中内嵌有一个web server
docker client
他是一个命令行工具,通过http协议与docker server进行交互
docker server和docker cliebt公用一个可执行文件,通过命令which docker就可以找到。
docker镜像
什么是docker镜像
docker可以理解为一个目录:docker server再启动容器的时候,先根据这个镜像目录复制出一个目录,然后在容器进程启动的时候,让这个进程chroot到这个目录下,这样这个目录就成了这个容器的根文件系统。
查看docker镜像
通过下面的命令可以查看本地有哪些docker镜像
docker images REPOSITORY TAG IMAGE ID CREATED SIZE docker.io/httpd latest 2e202f453940 6 weeks ago 179 MB docker.io/centos latest ff426288ea90 2 months ago 207 MB docker.io/hello-world latest f2a91732366c 3 months ago 1.85 kB docker.io/training/webapp latest 6fae60ef3446 2 years ago 349 MB
IMAGE ID:镜像ID,长度为64位,通常用前12位表示就可以了 TAG:每个镜像可以打上多个TAG REPOSITORY:本地镜像存储的仓库(刚装完的docker是空的)
REPOSITORY和TAG可以唯一标识一个镜像
docker容器
运行容器
运行容器可以使用docker run命令,常用选项包括:
-i -t:这两个选项经常一起用,缩写为 -it, 用于创建交互式容器 -d:让容器运行在后台,用于创建守护式容器 --name:为容器指定名称
运行交互式容器
现在我的本地镜像如下:
# docker images REPOSITORY TAG IMAGE ID CREATED SIZE docker.io/httpd latest 2e202f453940 6 weeks ago 179 MB docker.io/centos latest ff426288ea90 2 months ago 207 MB docker.io/hello-world latest f2a91732366c 3 months ago 1.85 kB docker.io/training/webapp latest 6fae60ef3446 2 years ago 349 MB
现在我通过docker.io/centos这个镜像创建一个交互式容器,命令如下:
docker run -it centos:latest /bin/bash
-it:指定创建交互式容器
centos:latest:以仓库:TAG的方式指定镜像名称
/bin/bash:容器对应的进程,会启动一个新的shell
通过上边的命令,启动了一个新的shell,这个shell是运行在容器环境中的。此时,我们离开了原本的shell,此后我们执行的shell命令都会在虚拟环境中。当我们执行exit就结束了了这个虚拟shell,从而结束了整个容器。
[root@193cbc5e0dbe /]# ls anaconda-post.log bin dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
可以看到,在执行了docker run之后产生了一个新的shell,此时的命令提示符前的目录变成了193cbc5e0dbe。当运行这个命令时镜像不存在,则docker会自动从官方镜像仓库拉取镜像并生成容器。
运行守护式容器
交互式容器适合一些临时的任务。大多数情况下,希望创建守护式容器,方法如下:
docker run -d redis
这里创建一个redis的容器,但是我本地闷油redis镜像,所以会从官方拉取镜像并创建容器。
这里,只提供了镜像名称而没有提供TAG,则会使用默认TAG “latest”,同样的没有指定命令,则会使用镜像提供的默认命令。redis镜像的默认命令是:/entrypoint.sh redis-server
守护式容器运行在后台,而shell还是宿主机的shell,这样就可以进行其他工作而不受容器的影响。
查看容器的基本信息
通过下面的命令可以查看容器的基本信息:
docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES f9cb9fe5a189 redis "docker-entrypoint..." 4 minutes ago Up 4 minutes 6379/tcp brave_mccarthy
可以看到容器的ID、使用的镜像、状态等信息
这里看不到之前交互式容器的信息,因为退出了,但是可以添加-a选项查看到:
docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES f9cb9fe5a189 redis "docker-entrypoint..." 4 minutes ago Up 4 minutes 6379/tcp brave_mccarthy 193cbc5e0dbe centos:latest "/bin/bash" 17 minutes ago Exited (0) 8 minutes ago clever_roentgen
可以看到交互式容器的状态为退出。
查看容器详细信息
docker ps命令只能查看到一些基本的内容,想要知道更详细的信息比如:ip、端口等,就需要如下命令:
docker inspect f9cb9fe5a189
其中f9cb9fe5a189是容器的ID。这个命令返回一个json格式的数据,十分详细。有时二次开发需要这个信息。
如果说只想要获取IP地址的话,可以添加如下参数:
docker inspect -f '{{.NetworkSettings.IPAddress}}' f9cb9fe5a189
{{.NetworkSettings.IPAddress}}可以理解为NetworkSettings下的IPAddress字段
停止守护式容器
停止守护式容器可以使用下面的命令:
docker stop f9cb
f9cb是容器ID的缩写,这样也是可以的,此时使用docker ps就看不到这个容器了。
删除容器
停止容器并不会删除容器,删除容器可以使用如下的方式:
docker rm f9cb9
f9cb9是容器ID的缩写,这样在docker ps -a中就看不到这个容器了,它被删除了。
上一篇: asp.net两种方式的短信接口使用(提供接口的都是收费的)
下一篇: 谷歌改造高污染工厂建数据中心
推荐阅读