前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Docker 是什么,怎么装,怎么用

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

作者头像
小手冰凉
发布2019-11-27 15:37:41
3K0
发布2019-11-27 15:37:41
举报
文章被收录于专栏:小手冰凉小手冰凉

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

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

作为一种轻量级的虚拟机方式,Docker 与传统虚拟机相比具有显著的优势。 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源进行安装 开始安装:

代码语言:javascript
复制
[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服务端和客户端运行在一台机器上。

代码语言:javascript
复制
[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 官方维护的一个公共仓库。 1、搜索镜像:

代码语言:javascript
复制
[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]
...............      // 省略部分内容

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

代码语言:javascript
复制
[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 

3、查看镜像信息:

代码语言:javascript
复制
[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号,获取镜像的详细信息:

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

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

代码语言:javascript
复制
[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

4、删除镜像:

代码语言:javascript
复制
命令格式:
docker  rmi  仓库名称:标签
或者
docker rmi   镜像ID号

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

代码语言:javascript
复制
[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

载入

代码语言:javascript
复制
[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)首先使用账号登录官方仓库:

代码语言:javascript
复制
[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)成功登陆后就可以上传镜像:

代码语言:javascript
复制
[root@test /]# docker push docker/dhcp:centos7.3

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

代码语言:javascript
复制
[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。

代码语言:javascript
复制
[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
代码语言:javascript
复制
命令格式: 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、容器的运行与停止:

代码语言:javascript
复制
[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,中止状态。

3、容器的进入:

代码语言:javascript
复制
[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 /]# 

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

代码语言:javascript
复制
命令格式: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 命令导入,成为镜像 。

代码语言:javascript
复制
命令格式: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

5、容器的删除:

代码语言:javascript
复制
命令格式: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 运行过程中存储目录容量不足的问题。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-11-25 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
容器镜像服务
容器镜像服务(Tencent Container Registry,TCR)为您提供安全独享、高性能的容器镜像托管分发服务。您可同时在全球多个地域创建独享实例,以实现容器镜像的就近拉取,降低拉取时间,节约带宽成本。TCR 提供细颗粒度的权限管理及访问控制,保障您的数据安全。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档