欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

docker的基础知识点和使用介绍

程序员文章站 2022-04-02 23:25:25
什么是docker docker是一个容器引擎,提供了一整套完整的容器解决方案。它是在2014年最火热的开源项目,基于Apache2.0开原协议,由Go语言开发。 什么是容器 容器其...

什么是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中就看不到这个容器了,它被删除了。