CoreOS容器云企业实战(3)--Docker技术实践

0x1 Docker概述

1)Docker介绍

Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源。
Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。
容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。
Docker 从 17.03 版本之后分为 CE(Community Edition: 社区版) 和 EE(Enterprise Edition: 企业版),我们用社区版就可以了。

什么是Docker?
Docker 是世界领先的软件容器平台。开发人员利用 Docker 可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用 Docker 可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用 Docker 可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为 Linux 和 Windows Server 应用发布新功能。

Docker 属于 Linux 容器的一种封装,提供简单易用的容器使用接口。它是目前最流行的 Linux 容器解决方案。Docker 将应用程序与该程序的依赖,打包在一个文件里面。运行这个文件,就会生成一个虚拟容器。程序在这个虚拟容器里运行,就好像在真实的物理机上运行一样。有了 Docker,就不用担心环境问题。

总体来说,Docker 的接口相当简单,用户可以方便地创建和使用容器,把自己的应用放入容器。容器还可以进行版本管理、复制、分享、修改,就像管理普通的代码一样。
Docker 最初是 dotCloud 公司创始人 Solomon Hykes 在法国期间发起的一个公司内部项目,它是基于 dotCloud 公司多年云服务技术的一次革新,并于 2013 年 3 月以 Apache 2.0 授权协议开源,主要项目代码在 GitHub 上进行维护。Docker 项目后来还加入了 Linux 基金会,并成立推动 开放容器联盟。

Docker 自开源后受到广泛的关注和讨论,至今其 GitHub 项目已经超过 4 万 6 千个星标和一万多个 fork。甚至由于 Docker 项目的火爆,在 2013 年底,dotCloud 公司决定改名为 Docker。Docker 最初是在 Ubuntu 12.04 上开发实现的;Red Hat 则从 RHEL 6.5 开始对 Docker 进行支持;Google 也在其 PaaS 产品中广泛应用 Docker。

2)Docker的应用场景

Web 应用的自动化打包和发布。
自动化测试和持续集成、发布。
在服务型环境中部署和调整数据库或其他的后台应用。
从头编译或者扩展现有的 OpenShift 或 Cloud Foundry 平台来搭建自己的 PaaS 环境。

3)Docker 的优点

Docker 是一个用于开发,交付和运行应用程序的开放平台。Docker 使您能够将应用程序与基础架构分开,从而可以快速交付软件。借助 Docker,您可以与管理应用程序相同的方式来管理基础架构。通过利用 Docker 的方法来快速交付,测试和部署代码,您可以大大减少编写代码和在生产环境中运行代码之间的延迟。

3.1、快速,一致地交付您的应用程序

Docker 允许开发人员使用您提供的应用程序或服务的本地容器在标准化环境中工作,从而简化了开发的生命周期。
容器非常适合持续集成和持续交付(CI / CD)工作流程,请考虑以下示例方案:
您的开发人员在本地编写代码,并使用 Docker 容器与同事共享他们的工作。
他们使用 Docker 将其应用程序推送到测试环境中,并执行自动或手动测试。
当开发人员发现错误时,他们可以在开发环境中对其进行修复,然后将其重新部署到测试环境中,以进行测试和验证。
测试完成后,将修补程序推送给生产环境,就像将更新的镜像推送到生产环境一样简单。

3.2、响应式部署和扩展

Docker 是基于容器的平台,允许高度可移植的工作负载。Docker 容器可以在开发人员的本机上,数据中心的物理或虚拟机上,云服务上或混合环境中运行。
Docker 的可移植性和轻量级的特性,还可以使您轻松地完成动态管理的工作负担,并根据业务需求指示,实时扩展或拆除应用程序和服务。

3.3、在同一硬件上运行更多工作负载

Docker 轻巧快速。它为基于虚拟机管理程序的虚拟机提供了可行、经济、高效的替代方案,因此您可以利用更多的计算能力来实现业务目标。Docker 非常适合于高密度环境以及中小型部署,而您可以用更少的资源做更多的事情。

4)为什么要使用Docker

容器除了运行其中应用外,基本不消耗额外的系统资源,使得应用的性能很高,同时系统的开销尽量小。传统虚拟机方式运行 10 个不同的应用就要起 10 个虚拟机,而Docker 只需要启动 10 个隔离的应用即可。

具体说来,Docker 在如下几个方面具有较大的优势。

1、更快速的交付和部署

对开发和运维人员来说,最希望的就是一次创建或配置,可以在任意地方正常运行。
开发者可以使用一个标准的镜像来构建一套开发容器,开发完成之后,运维人员可以直接使用这个容器来部署代码。 Docker 可以快速创建容器,快速迭代应用程序,并让整个过程全程可见,使团队中的其他成员更容易理解应用程序是如何创建和工作的。 Docker 容器很轻很快!容器的启动时间是秒级的,大量地节约开发、测试、部署的时间。

2、更高效的虚拟化

Docker 容器的运行不需要额外的 hypervisor 支持,它是内核级的虚拟化,因此可以实现更高的性能和效率。

3、更轻松的迁移和扩展

Docker 容器几乎可以在任意的平台上运行,包括物理机、虚拟机、公有云、私有云、个人电脑、服务器等。 这种兼容性可以让用户把一个应用程序从一个平台直接迁移到另外一个。

4、更简单的管理

使用 Docker,只需要小小的修改,就可以替代以往大量的更新工作。所有的修改都以增量的方式被分发和更新,从而实现自动化并且高效的管理。

5)Docker和虚拟化

从下图可以看出,VM是一个运行在宿主机之上的完整的操作系统,VM运行自身操作系统会占用较多的CPU、内存、硬盘资源。Docker不同于VM,只包含应用程序以及依赖库,基于libcontainer运行在宿主机上,并处于一个隔离的环境中,这使得Docker更加轻量高效,启动容器只需几秒钟之内完成。由于Docker轻量、资源占用少,使得Docker可以轻易的应用到构建标准化的应用中。但Docker目前还不够完善,比如隔离效果不如VM,共享宿主机操作系统的一些基础库等;网络配置功能相对简单,主要以桥接方式为主;查看日志也不够方便灵活。



Docker 在容器的基础上,进行了进一步的封装,从文件系统、网络互联到进程隔离等等,极大的简化了容器的创建和维护。使得 Docker 技术比虚拟机技术更为轻便、快捷。

作为一种新兴的虚拟化方式,Docker 跟传统的虚拟化方式相比具有众多的优势。Docker 容器的启动可以在秒级实现,这相比传统的虚拟机方式要快得多;Docker 对系统资源的利用率很高,一台主机上可以同时运行数千个 Docker 容器。

0x2 Docker架构

Docker是CS架构包括五个基本概念:

  • Docker daemon: 运行在宿主机上,Docker守护进程,用户通过Docker client(Docker命令)与Docker daemon交互

  • Docker client: Docker 命令行工具,是用户使用Docker的主要方式,Docker client与Docker daemon通信并将结果返回给用户,Docker client也可以通过socket或者RESTful api访问远程的Docker daemon


  • 镜像(Image):Docker 镜像(Image),就相当于是一个 root 文件系统。比如官方镜像 ubuntu:16.04 就包含了完整的一套 Ubuntu16.04 最小系统的 root 文件系统。

  • 容器(Container):镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。

  • 仓库(Repository):仓库可看着一个代码控制中心,用来保存镜像。
    Docker 使用客户端-服务器 (C/S) 架构模式,使用远程API来管理和创建Docker容器。

Docker 容器通过 Docker 镜像来创建。
容器与镜像的关系类似于面向对象编程中的对象与类。


image.png

0x3 Docker环境搭建

2014年Docker诞生以后对Ubuntu支持一直是最好的,最新版本的Docker在Ubuntu上跑的都是最新的版本,兼容性也是最好的。随着人们对Docker的认知水平的不同,很多人误认为Docker就是未来,但是现在对于Docker其实有很多人是又爱又恨得。比如现在最新Podman就是下一代容器技术。不需要守护进程。
所以想学Docker的化我们的操作系统一定要选对。

Ubuntu Server 18.04版本Ubuntu系统Docker安装传送门
CoreOS版本是为了Docker量身定做的Linux版本,轻量化CoreOS安装传送门

RancherOS容器云平台处的系统,也是轻量化的系统vmware下载镜像

Centos6.5以上的版本Centos7安装传送门
Docker可以跑在虚拟机中也可以跑在物理机上,他们需要就是Docker运行时候的守护进程的通信。
除了以上我们提到的系统以外Docker还支持
Windows系统Windows系统Docker安装传送门
Mac系统Mac系统Docker安装传送门

0x4 Centos7系统安装Docker实例

#查看系统内核版本需要3.8以上 Centos6.5以上系统即可
[root@localhost ~]# uname -a
Linux localhost.localdomain 3.10.0-957.el7.x86_64 #1 SMP Thu Nov 8 23:39:32 UTC 2018 
x86_64 x86_64 x86_64 GNU/Linux
#如有旧版本先卸载
$ sudo yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine
#升级yum到最新
yum update
#安装必要依赖
yum install -y yum-utils device-mapper-persistent-data lvm2
#使用阿里源安装
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
#查看仓库中Docker版本
[root@localhost ~]# yum list docker-ce --showduplicates | sort -r

已加载插件:fastestmirror
可安装的软件包
 * updates: mirrors.cn99.com
Loading mirror speeds from cached hostfile
 * extras: mirrors.aliyun.com
docker-ce.x86_64            3:19.03.2-3.el7                     docker-ce-stable
docker-ce.x86_64            3:19.03.1-3.el7                     docker-ce-stable
docker-ce.x86_64            3:19.03.0-3.el7                     docker-ce-stable
docker-ce.x86_64            3:18.09.8-3.el7                     docker-ce-stable
docker-ce.x86_64            3:18.09.7-3.el7                     docker-ce-stable
docker-ce.x86_64            3:18.09.6-3.el7                     docker-ce-stable
docker-ce.x86_64            3:18.09.5-3.el7                     docker-ce-stable
docker-ce.x86_64            3:18.09.4-3.el7                     docker-ce-stable
docker-ce.x86_64            3:18.09.3-3.el7                     docker-ce-stable
docker-ce.x86_64            3:18.09.2-3.el7                     docker-ce-stable
docker-ce.x86_64            3:18.09.1-3.el7                     docker-ce-stable
docker-ce.x86_64            3:18.09.0-3.el7                     docker-ce-stable
docker-ce.x86_64            18.06.3.ce-3.el7                    docker-ce-stable
docker-ce.x86_64            18.06.2.ce-3.el7                    docker-ce-stable
docker-ce.x86_64            18.06.1.ce-3.el7                    docker-ce-stable
docker-ce.x86_64            18.06.0.ce-3.el7                    docker-ce-stable
docker-ce.x86_64            18.03.1.ce-1.el7.centos             docker-ce-stable
docker-ce.x86_64            18.03.0.ce-1.el7.centos             docker-ce-stable
#可以指定安装版本号
[root@localhost ~]# yum install -y docker-ce-18.03.1.ce
[root@localhost ~]# systemctl start docker
[root@localhost ~]# systemctl enable  docker
[root@localhost ~]# docker version
Client:
 Version:      18.03.1-ce
 API version:  1.37
 Go version:   go1.9.5
 Git commit:   9ee9f40
 OS/Arch:      linux/amd64
 Experimental: false
 Orchestrator: swarm
 
Server:
 Engine:
  Version:      18.03.1-ce
  API version:  1.37 (minimum version 1.12)
  Go version:   go1.9.5
  Git commit:   9ee9f40
  OS/Arch:      linux/amd64
  Experimental: false

0x5 Docker HelloWorld

运行非交互式的容器

[root@localhost ~]# docker run ubuntu:15.10 /bin/echo "Hello world"
Hello world

各个参数解析:
docker: Docker 的二进制执行文件。
run: 与前面的 docker 组合来运行一个容器。
ubuntu:15.10 指定要运行的镜像,Docker 首先从本地主机上查找镜像是否存在,如果不存在,Docker 就会从镜像仓库 Docker Hub 下载公共镜像。
/bin/echo "Hello world": 在启动的容器里执行的命令
以上命令完整的意思可以解释为:Docker 以 ubuntu15.10 镜像创建一个新容器,然后在容器里执行 bin/echo "Hello world",然后输出结果。(非交互方式)

运行交互式的容器


我们通过 docker 的两个参数 -i -t,让 docker 运行的容器实现"对话"的能力:

runoob@runoob:~$ docker run -i -t ubuntu:15.10 /bin/bash
root@0123ce188bd8:/#

各个参数解析:
-t: 在新容器内指定一个伪终端或终端。
-i: 允许你对容器内的标准输入 (STDIN) 进行交互。
注意第二行 root@0123ce188bd8:/#,此时我们已进入一个 ubuntu15.10 系统的容器
我们尝试在容器中运行命令 cat /proc/version和ls分别查看当前系统的版本信息和当前目录下的文件列表

0x6 Docker 容器的使用

0)一张图搞定Docker命令/一张图搞定Docker容器的生命周期


容器生命周期

1) Docker客户端

[root@localhost ~]# docker

Usage:  docker [OPTIONS] COMMAND

A self-sufficient runtime for containers

Options:
      --config string      Location of client config files (default "/root/.docker")
  -c, --context string     Name of the context to use to connect to the daemon (overrides DOCKER_HOST env var
                           and default context set with "docker context use")
  -D, --debug              Enable debug mode
  -H, --host list          Daemon socket(s) to connect to
  -l, --log-level string   Set the logging level ("debug"|"info"|"warn"|"error"|"fatal") (default "info")
      --tls                Use TLS; implied by --tlsverify
      --tlscacert string   Trust certs signed only by this CA (default "/root/.docker/ca.pem")
      --tlscert string     Path to TLS certificate file (default "/root/.docker/cert.pem")
      --tlskey string      Path to TLS key file (default "/root/.docker/key.pem")
      --tlsverify          Use TLS and verify the remote
  -v, --version            Print version information and quit

Management Commands:
  builder     Manage builds
  config      Manage Docker configs
  container   Manage containers
  context     Manage contexts
  engine      Manage the docker engine
  image       Manage images
  network     Manage networks
  node        Manage Swarm nodes
  plugin      Manage plugins
  secret      Manage Docker secrets
  service     Manage services
  stack       Manage Docker stacks
  swarm       Manage Swarm
  system      Manage Docker
  trust       Manage trust on Docker images
  volume      Manage volumes

Commands:
  attach      Attach local standard input, output, and error streams to a running container
  build       Build an image from a Dockerfile
  commit      Create a new image from a container's changes
  cp          Copy files/folders between a container and the local filesystem
  create      Create a new container
  diff        Inspect changes to files or directories on a container's filesystem
  events      Get real time events from the server
  exec        Run a command in a running container
  export      Export a container's filesystem as a tar archive
  history     Show the history of an image
  images      List images
  import      Import the contents from a tarball to create a filesystem image
  info        Display system-wide information
  inspect     Return low-level information on Docker objects
  kill        Kill one or more running containers
  load        Load an image from a tar archive or STDIN
  login       Log in to a Docker registry
  logout      Log out from a Docker registry
  logs        Fetch the logs of a container
  pause       Pause all processes within one or more containers
  port        List port mappings or a specific mapping for the container
  ps          List containers
  pull        Pull an image or a repository from a registry
  push        Push an image or a repository to a registry
  rename      Rename a container
  restart     Restart one or more containers
  rm          Remove one or more containers
  rmi         Remove one or more images
  run         Run a command in a new container
  save        Save one or more images to a tar archive (streamed to STDOUT by default)
  search      Search the Docker Hub for images
  start       Start one or more stopped containers
  stats       Display a live stream of container(s) resource usage statistics
  stop        Stop one or more running containers
  tag         Create a tag TARGET_IMAGE that refers to SOURCE_IMAGE
  top         Display the running processes of a container
  unpause     Unpause all processes within one or more containers
  update      Update configuration of one or more containers
  version     Show the Docker version information
  wait        Block until one or more containers stop, then print their exit codes

Run 'docker COMMAND --help' for more information on a command.

2)Docker Daemon守护进程

Docker daemon 是服务器组件,以 Linux 后台服务的方式运行,是 Docker 最核心的后台进程,我们也把它称为守护进程。它负责响应来自 Docker Client 的请求,然后将这些请求翻译成系统调用完成容器管理操作。该进程会在后台启动一个 API Server ,负责接收由 Docker Client 发送的请求,接收到的请求将通过Docker daemon 内部的一个路由分发调度,由具体的函数(API)来执行请求。这是Docker与现在最新Docker技术的差别。新的Podman等技术已经不需要守护进程了。

[root@localhost ~]# systemctl status docker.service
● docker.service - Docker Application Container Engine
   Loaded: loaded (/usr/lib/systemd/system/docker.service; enabled; vendor preset: disabled)
   Active: active (running) since Wed 2020-01-22 09:02:07 EST; 3h 1min ago
     Docs: https://docs.docker.com
 Main PID: 1190 (dockerd)
    Tasks: 16
   Memory: 223.7M
   CGroup: /system.slice/docker.service
           └─1190 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock

Jan 22 12:03:07 localhost dockerd[1190]: time="2020-01-22T12:03:07.768771628-05:00" level=info msg="ignoring ev...lete"
Jan 22 12:03:09 localhost dockerd[1190]: time="2020-01-22T12:03:09.264996354-05:00" level=info msg="ignoring ev...lete"
Jan 22 12:03:13 localhost dockerd[1190]: time="2020-01-22T12:03:13.485567075-05:00" level=info msg="ignoring ev...lete"
Jan 22 12:03:20 localhost dockerd[1190]: time="2020-01-22T12:03:20.222809540-05:00" level=info msg="ignoring ev...lete"
Jan 22 12:03:25 localhost dockerd[1190]: time="2020-01-22T12:03:25.049427556-05:00" level=info msg="ignoring ev...lete"
Jan 22 12:03:36 localhost dockerd[1190]: time="2020-01-22T12:03:36.287666499-05:00" level=info msg="ignoring ev...lete"
Jan 22 12:03:36 localhost dockerd[1190]: time="2020-01-22T12:03:36.872146622-05:00" level=info msg="ignoring ev...lete"
Jan 22 12:03:45 localhost dockerd[1190]: time="2020-01-22T12:03:45.427615588-05:00" level=info msg="ignoring ev...lete"
Jan 22 12:03:52 localhost dockerd[1190]: time="2020-01-22T12:03:52.352620542-05:00" level=info msg="ignoring ev...lete"
Jan 22 12:03:57 localhost dockerd[1190]: time="2020-01-22T12:03:57.551340949-05:00" level=info msg="ignoring ev...lete"
Hint: Some lines were ellipsized, use -l to show in full.


重启服务

[root@localhost ~]# systemctl daemon-reload
或
[root@localhost ~]# systemctl restart docker

3)Docker 容器的基本操作

Step 1 获取镜像 docker pull 镜像名称

[root@localhost ~]# docker pull ubuntu
Using default tag: latest
latest: Pulling from library/ubuntu
5c939e3a4d10: Pull complete 
c63719cdbe7a: Pull complete 
19a861ea6baf: Pull complete 
651c9d2d6c4f: Pull complete 
Digest: sha256:8d31dad0c58f552e890d68bbfb735588b6b820a46e459672d96e585871acc110
Status: Downloaded newer image for ubuntu:latest
docker.io/library/ubuntu:latest

<1>通过镜像创建 启动容器 docker run

[root@localhost ~]# docker run -it ubuntu /bin/bash
root@a39623a77daf:/#

参数说明:
-i: 交互式操作。
-t: 终端。
ubuntu: ubuntu 镜像。
/bin/bash:放在镜像名后的是命令,这里我们希望有个交互式 Shell,因此用的是 /bin/bash。

<2>退出交互模式的终端exit

root@a39623a77daf:/# exit    ##退出交互模式的终端
exit

<3>查看所有的容器命令 docker ps -a

[root@localhost ~]# docker ps -a
CONTAINER ID        IMAGE                             COMMAND                  CREATED             STATUS                       PORTS               NAMES
a39623a77daf        ubuntu                            "/bin/bash"              4 minutes ago       Exited (127) 2 minutes ago                       mystifying_chatterjee
bbf27588ebeb        rancher/storage-nfs:v0.9.1        "start.sh storage --…"   2 hours ago         Up 27 seconds                                    r-nfs-nfs-driver-4-52044000
19bc749f9d17        rancher/healthcheck:v0.3.8        "/.r/r /rancher-entr…"   3 hours ago         Exited (2) 11 seconds ago                        r-healthcheck-healthcheck-4-e2a25006
63c3b69bbef6        rancher/agent:v1.2.11             "/run.sh run"            3 hours ago         Up 3 hours                                       rancher-agent
e453cc4f67ae        rancher/net:v0.13.17              "/rancher-entrypoint…"   3 hours ago         Exited (0) 3 hours ago                           r-ipsec-ipsec-connectivity-check-4-ff394e4e
56506ece85ad        rancher/net:v0.13.17              "/rancher-entrypoint…"   3 hours ago         Exited (2) 3 hours ago                           r-ipsec-ipsec-router-4-091be32f
0ea4c9118097        rancher/dns:v0.17.4               "/rancher-entrypoint…"   3 hours ago         Exited (2) 4 seconds ago                         r-network-services-metadata-dns-4-e82d0057
6ca3dc49d8cb        rancher/net:holder                "/.r/r /rancher-entr…"   3 hours ago         Exited (2) 28 seconds ago                        r-ipsec-ipsec-4-887c7749
e463481d2600        rancher/metadata:v0.10.4          "/rancher-entrypoint…"   3 hours ago         Up 3 seconds                                     r-network-services-metadata-4-d182213b
0c929f3a9e1d        rancher/network-manager:v0.7.22   "/rancher-entrypoint…"   3 hours ago         Up 17 seconds                                    r-network-services-network-manager-4-02cde160
35c22d438e50        rancher/net:v0.13.17              "/rancher-entrypoint…"   3 hours ago         Up 29 seconds                                    r-ipsec-cni-driver-4-f0b3f7dd

<4>使用 docker start 启动一个已停止的容器

[root@localhost ~]# docker ps -a
CONTAINER ID        IMAGE                             COMMAND                  CREATED             STATUS                       PORTS               NAMES
a39623a77daf        ubuntu                            "/bin/bash"              4 minutes ago       Exited (127) 2 minut
[root@localhost ~]# docker start a39623a77daf
a39623a77daf
[root@localhost ~]# docker ps -a
CONTAINER ID        IMAGE                             COMMAND                  CREATED             STATUS                      PORTS               NAMES
a39623a77daf        ubuntu                            "/bin/bash"              6 minutes ago       Up 7 seconds 

<5>后台运行 docker run -i -t -d

在大部分的场景下,我们希望 docker 的服务是在后台运行的,我们可以过 -d 指定容器的运行模式。-i -t -d选项就是后台运行

docker run -itd --name ubuntu-test ubuntu /bin/bash

<6>给容器定义名称 docker run --name

docker run -itd --name ubuntu-test ubuntu /bin/bash

<7>停止一个容器 docker stop

docker stop <容器 ID>
[root@localhost ~]# docker stop a39623a77daf
a39623a77daf
[root@localhost ~]# docker ps -a
CONTAINER ID        IMAGE                             COMMAND                  CREATED             STATUS                      PORTS               NAMES
a39623a77daf        ubuntu                            "/bin/bash"              10 minutes ago      Exited (0) 2 seconds

<8>重启一个容器 docker restart

docker restart <容器 ID>
[root@localhost ~]# docker restart a39623a77daf
a39623a77daf
[root@localhost ~]# docker ps -a
CONTAINER ID        IMAGE                             COMMAND                  CREATED             STATUS                              PORTS               NAMES
a39623a77daf        ubuntu                            "/bin/bash"              11 minutes ago      Up 2 seconds

<9>进入容器 docker exec/attach

docker attach 退出终端会导致容器的停止。
docker exec:推荐大家使用 docker exec 命令,因为此退出容器终端,不会导致容器的停止。
#后台运行容器
[root@localhost ~]# docker run -itd ubuntu /bin/bash
7324b3ffbcf5e3ab144b7a8ec907d2a039155a62c0ca8cf71363390f1900dece

第一种方法进入 exit退出的时候容器就终止了



第二种方法进入 exit退出的时候容器不会退出终止

[root@localhost ~]# docker exec -i -t c5b3a1ef4621 /bin/bash
root@c5b3a1ef4621:/# w
 16:49:40 up  2:48,  0 users,  load average: 0.80, 0.57, 0.48
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
root@c5b3a1ef4621:/# 

推荐第二种进入容器


<10>删除容器 docker rm 容器名

<11>容器日志 docker log 容器名

<12>查看容器详情 docker inspect 容器名

4)镜像的常见操作

<1>查找镜像 docker search

docker search httpd


<2>拉取镜像 docker pull

[root@localhost ~]# docker pull ubuntu
Using default tag: latest
latest: Pulling from library/ubuntu
Digest: sha256:8d31dad0c58f552e890d68bbfb735588b6b820a46e459672d96e585871acc110
Status: Image is up to date for ubuntu:latest
docker.io/library/ubuntu:latest

<3>镜像列表 docker images

[root@localhost ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu latest ccc6e87d482b 7 days ago 64.2MB
rancher/agent v1.2.11 1cc7591af4f5 18 months ago 243MB
rancher/net v0.13.17 f170c38e3763 18 months ago 311MB
rancher/dns v0.17.4 678bde0de4d2 18 months ago 249MB
rancher/healthcheck v0.3.8 ce78cf69cc0b 18 months ago 391MB
rancher/metadata v0.10.4 02104eb6e270 18 months ago 251MB
rancher/network-manager v0.7.22 13381626c510 18 months ago 256MB

rancher/storage-nfs v0.9.1 9ff4993fd3f8 24 months ago 211MB
rancher/net holder 665d9f6e8cc1 2 years ago 267MB
[root@localhost ~]#

<4>导出镜像 docker export/docker save

如果要导出本地某个容器,可以使用 docker export 命令。
[root@localhost ~]# docker export c5b3a1ef4621 >ubuntu.tar
[root@localhost ~]# ls
anaconda-ks.cfg ubuntu.tar
[root@localhost ~]#


这样将导出容器快照到本地文件。

<5>导入镜像 docker import/docker load

[root@localhost ~]# docker import ./ubuntu.tar 
sha256:c7b4647594b9e0e92a0956444dca7f86017dfee69b5beaa2c20112fd8e729dda
[root@localhost ~]# docker images
REPOSITORY                TAG                 IMAGE ID            CREATED             SIZE
                                  c7b4647594b9        7 seconds ago       64.2MB
azkaban/centos            dev                 ccc6e87d482b        7 days ago          64.2MB
ubuntu                    latest              ccc6e87d482b        7 days ago          64.2MB
rancher/agent             v1.2.11             1cc7591af4f5        18 months ago       243MB
rancher/net               v0.13.17            f170c38e3763        18 months ago       311MB
rancher/dns               v0.17.4             678bde0de4d2        18 months ago       249MB
rancher/healthcheck       v0.3.8              ce78cf69cc0b        18 months ago       391MB
rancher/metadata          v0.10.4             02104eb6e270        18 months ago       251MB
rancher/network-manager   v0.7.22             13381626c510        18 months ago       256MB
rancher/storage-nfs       v0.9.1              9ff4993fd3f8        24 months ago       211MB
rancher/net               holder              665d9f6e8cc1        2 years ago         267MB
[root@localhost ~]# 

导入镜像带TAG

<6>删除镜像 docker rmi

[root@localhost ~]# docker rmi ubuntu
Untagged: ubuntu:latest
Untagged: ubuntu@sha256:8d31dad0c58f552e890d68bbfb735588b6b820a46e459672d96e585871acc110
Deleted: sha256:ccc6e87d482b79dd1645affd958479139486e47191dfe7a997c862d89cd8b4c0
Deleted: sha256:d1b7fedd4314279a7c28d01177ff56bcff65300f6d41655394bf5d8b788567f6
Deleted: sha256:340bed96497252624f5e4b0f42accfe7edbb7a01047e2bb5a8142b2464008e73
Deleted: sha256:6357c335cdfcc3a120e288bbd203bf4c861a14245ce5094634ee097e5217085b
Deleted: sha256:43c67172d1d182ca5460fc962f8f053f33028e0a3a1d423e05d91b532429e73d
[root@localhost ~]#

<7>构建镜像 docker build

<8>镜像标签 docker tag

[root@localhost ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
rancher/agent v1.2.11 1cc7591af4f5 18 months ago 243MB
rancher/net v0.13.17 f170c38e3763 18 months ago 311MB
rancher/dns v0.17.4 678bde0de4d2 18 months ago 249MB
rancher/healthcheck v0.3.8 ce78cf69cc0b 18 months ago 391MB
rancher/metadata v0.10.4 02104eb6e270 18 months ago 251MB
rancher/network-manager v0.7.22 13381626c510 18 months ago 256MB
rancher/storage-nfs v0.9.1 9ff4993fd3f8 24 months ago 211MB
rancher/net holder 665d9f6e8cc1 2 years ago 267MB
[root@localhost ~]# docker pull ubuntu
Using default tag: latest
latest: Pulling from library/ubuntu
5c939e3a4d10: Pull complete
c63719cdbe7a: Pull complete
19a861ea6baf: Pull complete
651c9d2d6c4f: Pull complete
Digest: sha256:8d31dad0c58f552e890d68bbfb735588b6b820a46e459672d96e585871acc110
Status: Downloaded newer image for ubuntu:latest
docker.io/library/ubuntu:latest
[root@localhost ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu latest ccc6e87d482b 7 days ago 64.2MB
rancher/agent v1.2.11 1cc7591af4f5 18 months ago 243MB
rancher/net v0.13.17 f170c38e3763 18 months ago 311MB
rancher/dns v0.17.4 678bde0de4d2 18 months ago 249MB
rancher/healthcheck v0.3.8 ce78cf69cc0b 18 months ago 391MB
rancher/metadata v0.10.4 02104eb6e270 18 months ago 251MB
rancher/network-manager v0.7.22 13381626c510 18 months ago 256MB
rancher/storage-nfs v0.9.1 9ff4993fd3f8 24 months ago 211MB
rancher/net holder 665d9f6e8cc1 2 years ago 267MB
[root@localhost ~]#


image.png

你可能感兴趣的:(CoreOS容器云企业实战(3)--Docker技术实践)