千家信息网

Docker 是什么,怎么装,怎么用

发表于:2024-09-22 作者:千家信息网编辑
千家信息网最后更新 2024年09月22日,一、揭开 Docker 的神秘面纱Docker 是在Linux容器中运行的应用的开源工具,是一种轻量级的"虚拟机"诞生于2013年,短短几年时间,已经成为了开源社区最火爆的项目。.那么为什么Docke
千家信息网最后更新 2024年09月22日Docker 是什么,怎么装,怎么用

一、揭开 Docker 的神秘面纱
Docker 是在Linux容器中运行的应用的开源工具,是一种轻量级的"虚拟机"诞生于2013年,短短几年时间,已经成为了开源社区最火爆的项目。
.
那么为什么Docker会这么火呢?看看下图就知道了:

作为一种轻量级的虚拟机方式,Docker 与传统虚拟机相比具有显著的优势。
Docker 之所以拥有众多优势,与操作系统虚拟化自身的特点是分不开的。传统虚拟机需要额外的虚拟机管理程序和虚拟机操作系统层,而Docker容器是直接在操作系统层面上实现的虚拟化。

Docker 的使用场景
现在开发者需要能方便地创建运行在云平台上的应用,必须要脱离底层硬件,同时还需要任何时间地点可获取这些资源,这正是Docker所能提供的。Docker 的容器技术可以在一台主机上轻松为任何应用创建一个轻量级的、可移植的、自给自足的容器。通过这中容器打包应用程序,意味着简化了重新部署、调试这些琐碎的重复工作,极大的提高了工作效率。例如,服务器从腾讯云迁移到阿里云,如果采用Docker容器技术,迁移只需要在新的服务器上启动需要的容器即可。
二、Docker 的核心概念
1.镜像
Docker的镜像(mage) 是创建容器的基础,类似虚拟机的快照.可以理解为是一个 面向Docker 容器引擎的只读模板。比如,一个镜像可以是一个完整的 CentOS操作系统环境,称为一个CentOS 镜像;可以是一个安装了MySQL的应用程序.称为一个MySOL镜像.等等
Doacker提供了简单的机制来创建和更新现有的镜像.用户也可以从网上下载已经做好的应用镜像来直接使用。
2.容器
Docker的容器(Conainer! 是从镜像创建的运行实例,它可以被启动.停止和删除。所创建的每个容器都是相互隔离.互不可见,可以保证安全性的平台。可以把容器看作一个简易版的Linux环境,Docker 利用容器来运行和隔离应用。
3.仓库
Docker仓库(Repository) 是用来集中保存镜像的地方,当创建了自己的镜像之后,可以使用push 命令将它上传到公有仓库(Pbli) 或者私有仓库(Private), 这样一来当下次要 在另外一台机器上使用这个镜像时,只需要从仓库上拉取下来就可以了。
仓库注册服务器(Registry) 是存放仓库的地方,其中包含了多个仓库,每个仓库集中存放某一类镜像,并且使用不同的标签(Tag) 来区分它们,目前最大的公共仓库是Docker Hb,存放了数量庞大的镜像供用户下载使用。
三、安装Docker
Centos 系统下安装 Docker 可以有两种方式:一种是使用 curl 获得 Docker 的安装脚本进行安装。另一种是使用 YUM 仓库来安装Docker。
注意:目前Docker只能支持64位操作系统
注意:目前Docker只能支持64位操作系统
注意:目前Docker只能支持64位操作系统
这里我使用的是Docker自己的YUM源进行安装
开始安装:

[root@test /]# yum -y install docker             # 安装docker[root@test /]# systemctl start docker              # 启动服务[root@test /]# systemctl enable docker           # 设为开机自启动Created symlink from /etc/systemd/system/multi-user.target.wants/docker.service to /usr/lib/systemd/system/docker.service.

安装好的Docker有两个程序:Docker服务端和Docker客户端。其中Docker服务进程,管理着所有的容器。Docker 客户端则扮演着Docker服务端的远程控制器,可以用来控制 Docker 的服务端进程。大部分的情况下,Docker服务端和客户端运行在一台机器上。

[root@test /]# docker version Client: Version:         1.13.1 API version:     1.26 Package version: docker-1.13.1-75.git8633870.el7.centos.x86_64 Go version:      go1.9.4 Git commit:      8633870/1.13.1 Built:           Fri Sep 28 19:45:08 2018 OS/Arch:         linux/amd64Server: Version:         1.13.1 API version:     1.26 (minimum version 1.12) Package version: docker-1.13.1-75.git8633870.el7.centos.x86_64 Go version:      go1.9.4 Git commit:      8633870/1.13.1 Built:           Fri Sep 28 19:45:08 2018 OS/Arch:         linux/amd64 Experimental:    false

Docker 镜像操作
Docker 运行容器前需要本地存在对应的镜像,如果不存在本地镜像,Docker 就会尝试从默认镜像仓库 https://hub.docker.com 处下载,这是一个由 Docker 官方维护的一个公共仓库。
1、搜索镜像:

[root@test /]# docker search dhcp        # 命令格式 docker search 关键字INDEX       NAME                                           DESCRIPTION                                     STARS     OFFICIAL   AUTOMATEDdocker.io   docker.io/networkboot/dhcpd                    Suitable for running a DHCP server for you...   43                   [OK]docker.io   docker.io/joebiellik/dhcpd                     DHCP server running on Alpine Linux             15                   [OK]docker.io   docker.io/gns3/dhcp                            A DHCP container for GNS3 using dnsmasq         3                    [OK]...............      // 省略部分内容

2、获取镜像:
搜索到符合的镜像,可以使用docker pull 进行下载到本地

[root@test /]# docker pull docker.io/networkboot/dhcpdUsing default tag: latestTrying to pull repository docker.io/networkboot/dhcpd ... latest: Pulling from docker.io/networkboot/dhcpd898c46f3b1a1: Downloading 5.602 MB/32.47 MB63366dfa0a50: Download complete 041d4cd74a92: Download complete 6e1bee0f8701: Download complete 114483241095: Downloading 3.693 MB/6.702 MBef446bdcb1f0: Waiting 

3、查看镜像信息:

[root@test /]# docker imagesREPOSITORY                    TAG                 IMAGE ID            CREATED             SIZEdocker.io/networkboot/dhcpd   latest              52cbff801df2        8 months ago        105 MB从回显的信息中可以读出:REPOSITORY:镜像属于的仓库TAG:镜像的标签信息,标记同一个仓库的不同镜像IMAGE ID :镜像的唯一ID号,唯一标识了该镜像CREATED:镜像创建时间VIRTUAL SIZE:镜像大小

用户可根据镜像的唯一标识ID号,获取镜像的详细信息:

[root@test /]# docker inspect 52cbff801df2[    {        "Id": "sha256:52cbff801df2c6e2da3866d9f9476f20f190f64a0e886fbdfa79d843befa666a",        "RepoTags": [            "docker.io/networkboot/dhcpd:latest"        ],...............................  // 省略部分内容

镜像的详细信息包含了创建时间、系统版本、主机名、域名、用户、卷、标签、操作系统、设备ID等各种信息。
为了方便使用,可为本地的镜像添加新标签:

[root@test /]# docker tag docker.io/networkboot/dhcpd  dhcp:dhcp[root@test /]# docker imagesREPOSITORY                    TAG                 IMAGE ID            CREATED             SIZEdhcp                          dhcp                52cbff801df2        8 months ago        105 MBdocker.io/networkboot/dhcpd   latest              52cbff801df2        8 months ago        105 MB

4、删除镜像:

命令格式:docker  rmi  仓库名称:标签或者docker rmi   镜像ID号

当使用 docker rmi 命令后面跟上镜像的 ID 号时,必须确保该镜像没有被容器正在使用才能进行,删除时系统会先删除所有指向该镜像的标签,然后删除该镜像文件本身。如果该镜像已经被容器使用,正确的做法是先删除依赖该镜像的所有容器,再去删除镜像。
5、存出和载入镜像:
存出

[root@test /]# docker save -o /tmp/dhcp docker.io/networkboot/dhcpd[root@test /]# ll -d /tmp/dhcp -rw------- 1 root root 107891712 Nov 25 17:56 /tmp/dhcp

载入

[root@test tmp]# docker load --input dhcp[root@test tmp]# docker load < dhcp

6、上传镜像:
本地存出的镜像越来越多,就需要指定一个专门存放这些镜像的地方--仓库,目前比较方便的就是公共仓库,默认上传到 DockerHub 官方仓库,需要注册使用公共仓库的账号,可以使用docker login 命令来输入用户名、密码和邮箱来注册和登陆。在上传镜像之前还需要对本地镜像添加新的标签,然后再使用docker push来进行上传。
例如: 在公共仓库上已经注册了一个账号,本例账号为test,镜像标签为docker/dhcp:centos7.3
(1)首先使用账号登录官方仓库:

[root@test /]# docker login Login with your Docker ID to push and pull images from Docker Hub. If you don't have a Docker ID, head over to https://hub.docker.com to create one.Username: test                       # 输入账号Password:                               # 输入密码Login  Succeeded

(2)成功登陆后就可以上传镜像:

[root@test /]# docker push docker/dhcp:centos7.3

Docker 容器操作
容器是Docker的另一个核心概念,简单来说,容器就是镜像的一个运行实例,是独立运行的一个或一组应用及它们所必须的运行环境,包括文件系统、系统类库、shell环境等。镜像是只读模板,而容器会给这个只读模板一个额外的可写层。
1、容器的创建与启动:
Docker 的创建就是镜像加载到容器的过程,Docker 的容器十分轻量级,用户可以随时创建或删除。新创建的容器默认处于停止状态,不运行任何程序,需要在其中发起一个进程来启动容器,这个进程就是该容器的唯一进程,所以当该进程结束的时候,容器也会完全停止。停止的容器可以重新启动并保留原来的修改。

[root@test /]# docker create -it docker.io/networkboot/dhcpd /bin/bash           # 创建容器08ab448cd0be320b24d6878b377bfa6957127c7ffb4c7e050e64340deeee1562# -i 表示让容器的输入保持打开;-t 表示让Docker分配一个伪终端

如果此处创建容器命令报错"WARNING: IPv4 forwarding is disabled.Networking will notwork." ,就使用vi编辑器打开/usr/lib/sysctl.d/00-system.conf文件,在其中添加net.ipv4.ip_ forward=1, 然后使用service network start命令重启网络服务。

使用docker create 命令创建新容器后会返回一个唯一的ID。

[root@test /]# docker ps -a                 # 查看所有容器的运行状态        -a 可以列出系统最近一次启动的容器CONTAINER ID        IMAGE                         COMMAND                  CREATED             STATUS              PORTS               NAMES08ab448cd0be        docker.io/networkboot/dhcpd   "/entrypoint.sh /b..."   5 minutes ago       Created                                 keen_payne
命令格式: docker   start   容器的ID/名称[root@test /]# docker start 08ab448cd0be                # 可跟容器的ID与名称08ab448cd0be[root@test /]# docker ps -a | grep 08ab448cd0be 08ab448cd0be        docker.io/networkboot/dhcpd   "/entrypoint.sh /b..."   8 minutes ago       Up About a minute                       keen_payne# 容器启动后,可以看到容器状态一栏已经变成了 UP ,表示容器已经处于启动状态

2、容器的运行与停止:

[root@test /]# docker stop 08ab448cd0be08ab448cd0be[root@test /]# docker ps -a CONTAINER ID        IMAGE                         COMMAND                  CREATED             STATUS                     PORTS               NAMES08ab448cd0be        docker.io/networkboot/dhcpd   "/entrypoint.sh /b..."   10 minutes ago      Exited (0) 5 seconds ago                       keen_payne# 查看容器的运行状态,可以看出容器处于Exited,中止状态。

3、容器的进入:

[root@test /]# docker exec -it 08ab448cd0be /bin/bash#  -i 表示让容器的输入保持打开;-t 表示让Docker分配一个伪终端root@08ab448cd0be:/# ls                  # 已经进入到了容器中bin  boot  dev  entrypoint.sh  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  varroot@08ab448cd0be:/# exitexit[root@test /]# 

4、容器的导出与导入:
用户可以将任何一个 Docker 容器从一台机器迁移到另一台机器。在迁移过程中,首先需要将已经创建好的容器导出为文件,可以使用 docker export 命令实现,无论这个容器是处于运行还是停止均可导出。导出之后可将导出文件传输到其他机器,通过相应的导入命令实现容器的迁移。

命令格式:docker export  容器ID/名称>文件名[root@test /]# docker export  08ab448cd0be>centos7dhcp[root@test /]# ll -d centos7dhcp -rw-r--r-- 1 root root 87825920 Nov 25 19:58 centos7dhcp

导出的文件从A机器复制到B机器,之后使用docker import 命令导入,成为镜像 。

命令格式:cat    文件名 | docker  import   - 生成的镜像名称:标签[root@test /]# cat centos7dhcp | docker import - centos7:dhcpsha256:e7193f77c973a89dd2d1046f09eb4328798f4ee9dff92ad13514fb7268bc3c27[root@test /]# docker images | grep centos7centos7                       dhcp                e7193f77c973        17 seconds ago      84.7 MB

5、容器的删除:

命令格式:docker  rm   容器ID/名称[root@test /]# docker stop 08ab448cd0be08ab448cd0be[root@test /]# docker rm 08ab448cd0be08ab448cd0be[root@test /]# docker ps -aCONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES# 如果删除一个正在运行的容器,可以添加 -f 选项强制删除,但是建议先将容器停止再做删除操作

Docker 默认的存储目录在/var/lib/docker ,Docker 的镜像、容器、日志等内容全部存储在此,可以单独使用大容量的的分区来存储这些内容,并且一般选择建立LVM逻辑卷,从而避免 Docker 运行过程中存储目录容量不足的问题。

容器 镜像 仓库 运行 命令 系统 服务 标签 操作系统 文件 应用 机器 用户 信息 名称 格式 状态 进程 程序 账号 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 大学生维护网络安全两会 山西网络安全非标机箱上哪找 软件开发项目资金使用计划 ac网络安全产品 保密法规与网络安全培训简报 db2数据库锁表定位 吉林鑫通网络技术有限公司 江苏通信软件开发过程品质保障 鼎控服务器 达梦数据库技术支持工程师 集中化服务器管理app 服务器安全代理 恰播互联网科技有限公司 手机服务器地址怎么查 游戏与服务器总是断开解决办法 数据库有什么属性 重庆易展辰网络技术有限公司 bim数据库怎么搭建 中国关于网络安全发布的法律 ktv点歌系统数据库建立 埃森哲软件开发岗位面试 江西省网络安全信息科技入口 铁路网络安全防护宣传 文摘数据库有什么用 如何建立自己的公文数据库 互联网软件开发顶级服务商 java部署如何控制服务器权限 深圳前端软件开发价位 明日之后怎么把服务器切换 工业数据网络安全管理办法
0