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

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

做为一种轻量级的虚拟机方式,Docker 与传统虚拟机相比具备显著的优点。
Docker 之因此拥有众多优点,与操做系统虚拟化自身的特色是分不开的。传统虚拟机须要额外的虚拟机管理程序和虚拟机操做系统层,而Docker容器是直接在操做系统层面上实现的虚拟化。
Docker 是什么,怎么装,怎么用
Docker 的使用场景
如今开发者须要能方便地建立运行在云平台上的应用,必需要脱离底层硬件,同时还须要任什么时候间地点可获取这些资源,这正是Docker所能提供的。Docker 的容器技术能够在一台主机上轻松为任何应用建立一个轻量级的、可移植的、自给自足的容器。经过这中容器打包应用程序,意味着简化了从新部署、调试这些琐碎的重复工做,极大的提升了工做效率。例如,服务器从腾讯云迁移到阿里云,若是采用Docker容器技术,迁移只须要在新的服务器上启动须要的容器便可。
2、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,存放了数量庞大的镜像供用户下载使用。
3、安装Docker
Centos 系统下安装 Docker 能够有两种方式:一种是使用 curl 得到 Docker 的安装脚本进行安装。另外一种是使用 YUM 仓库来安装Docker。
注意:目前Docker只能支持64位操做系统
注意:目前Docker只能支持64位操做系统
注意:目前Docker只能支持64位操做系统
这里我使用的是Docker本身的YUM源进行安装
开始安装:git

[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服务端和客户端运行在一台机器上。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/amd64

Server:
 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 官方维护的一个公共仓库。
一、搜索镜像:shell

[root@test /]# docker search dhcp        # 命令格式 docker search 关键字
INDEX       NAME                                           DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
docker.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]
...............      // 省略部份内容

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

[root@test /]# docker pull docker.io/networkboot/dhcpd
Using default tag: latest
Trying to pull repository docker.io/networkboot/dhcpd ... 
latest: Pulling from docker.io/networkboot/dhcpd
898c46f3b1a1: Downloading 5.602 MB/32.47 MB
63366dfa0a50: Download complete 
041d4cd74a92: Download complete 
6e1bee0f8701: Download complete 
114483241095: Downloading 3.693 MB/6.702 MB
ef446bdcb1f0: Waiting

三、查看镜像信息:安全

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

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

[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 images
REPOSITORY                    TAG                 IMAGE ID            CREATED             SIZE
dhcp                          dhcp                52cbff801df2        8 months ago        105 MB
docker.io/networkboot/dhcpd   latest              52cbff801df2        8 months ago        105 MB

四、删除镜像:网络

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

当使用 docker rmi 命令后面跟上镜像的 ID 号时,必须确保该镜像没有被容器正在使用才能进行,删除时系统会先删除全部指向该镜像的标签,而后删除该镜像文件自己。若是该镜像已经被容器使用,正确的作法是先删除依赖该镜像的全部容器,再去删除镜像。
五、存出和载入镜像:
存出curl

[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

六、上传镜像:
本地存出的镜像愈来愈多,就须要指定一个专门存放这些镜像的地方——仓库,目前比较方便的就是公共仓库,默认上传到 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环境等。镜像是只读模板,而容器会给这个只读模板一个额外的可写层。
一、容器的建立与启动:
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               NAMES
08ab448cd0be        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 ,表示容器已经处于启动状态

二、容器的运行与中止:

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

三、容器的进入:

[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  var
root@08ab448cd0be:/# exit
exit
[root@test /]#

四、容器的导出与导入:
用户能够将任何一个 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:dhcp
sha256:e7193f77c973a89dd2d1046f09eb4328798f4ee9dff92ad13514fb7268bc3c27
[root@test /]# docker images | grep centos7
centos7                       dhcp                e7193f77c973        17 seconds ago      84.7 MB

五、容器的删除:

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

Docker 默认的存储目录在/var/lib/docker ,Docker 的镜像、容器、日志等内容所有存储在此,能够单独使用大容量的的分区来存储这些内容,而且通常选择创建LVM逻辑卷,从而避免 Docker 运行过程当中存储目录容量不足的问题。

相关文章
相关标签/搜索