docker的基础知识点和使用介绍,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中就看不到这个容器了,它被删除了。

相关内容