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-ceAPI version:  1.37Go version:   go1.9.5Git commit:   9ee9f40OS/Arch:      linux/amd64Experimental: falseOrchestrator: swarmServer:Engine:Version:      18.03.1-ceAPI version:  1.37 (minimum version 1.12)Go version:   go1.9.5Git commit:   9ee9f40OS/Arch:      linux/amd64Experimental: 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 ~]# dockerUsage:  docker [OPTIONS] COMMANDA self-sufficient runtime for containersOptions:--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 varand 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 quitManagement Commands:builder     Manage buildsconfig      Manage Docker configscontainer   Manage containerscontext     Manage contextsengine      Manage the docker engineimage       Manage imagesnetwork     Manage networksnode        Manage Swarm nodesplugin      Manage pluginssecret      Manage Docker secretsservice     Manage servicesstack       Manage Docker stacksswarm       Manage Swarmsystem      Manage Dockertrust       Manage trust on Docker imagesvolume      Manage volumesCommands:attach      Attach local standard input, output, and error streams to a running containerbuild       Build an image from a Dockerfilecommit      Create a new image from a container's changescp          Copy files/folders between a container and the local filesystemcreate      Create a new containerdiff        Inspect changes to files or directories on a container's filesystemevents      Get real time events from the serverexec        Run a command in a running containerexport      Export a container's filesystem as a tar archivehistory     Show the history of an imageimages      List imagesimport      Import the contents from a tarball to create a filesystem imageinfo        Display system-wide informationinspect     Return low-level information on Docker objectskill        Kill one or more running containersload        Load an image from a tar archive or STDINlogin       Log in to a Docker registrylogout      Log out from a Docker registrylogs        Fetch the logs of a containerpause       Pause all processes within one or more containersport        List port mappings or a specific mapping for the containerps          List containerspull        Pull an image or a repository from a registrypush        Push an image or a repository to a registryrename      Rename a containerrestart     Restart one or more containersrm          Remove one or more containersrmi         Remove one or more imagesrun         Run a command in a new containersave        Save one or more images to a tar archive (streamed to STDOUT by default)search      Search the Docker Hub for imagesstart       Start one or more stopped containersstats       Display a live stream of container(s) resource usage statisticsstop        Stop one or more running containerstag         Create a tag TARGET_IMAGE that refers to SOURCE_IMAGEtop         Display the running processes of a containerunpause     Unpause all processes within one or more containersupdate      Update configuration of one or more containersversion     Show the Docker version informationwait        Block until one or more containers stop, then print their exit codesRun '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 EngineLoaded: 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 agoDocs: https://docs.docker.comMain PID: 1190 (dockerd)Tasks: 16Memory: 223.7MCGroup: /system.slice/docker.service└─1190 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sockJan 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:/# w16: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
<none>                    <none>              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


http://www.taodudu.cc/news/show-2751235.html

相关文章:

  • 超越白皮书8:穿云而过的闪电网络
  • H.264压缩算法详解
  • Android 贝塞尔曲线实战之网易云音乐鲸云特效
  • 2022-2028全球及中国云端税务软件行业研究及十四五规划分析报告
  • 物联网云平台应用于远程污水在线检测
  • 数据保护与云不离不弃,云中护航渐成行业主旋律
  • Linux学习和阿里云服务器的配置(感谢秦老师)
  • 华为云,奔跑的感觉爽吗?
  • 资产监测设备中法国配置工具介绍(二)
  • Android 贝塞尔曲线实战之网易云音乐鲸云特效,apm性能监控系统
  • 菜鸟 Linux系统学习1简介 安装 云服务器 启动过程
  • 污水处理成本高怎么办?智能网关+云平台提供你完美解决方案
  • 利用媒体云实现差异化
  • 镍基合金600材质,用什么配套焊材 by阿斯米合金
  • 开放云将使业务焕然一新
  • 计算机模拟电子云密度,小知识:分子动力学基本原理及应用
  • 欧洲将启动云计划
  • Devoxx法国2012天3
  • Linux云服务器基础学习
  • ADC标准 INLDNL(1)
  • php adc类,Maxim:六种主流ADC架构的比较(SAR,Sigma-Delta,Pipelined等)
  • 【车载】【ADC】通俗易懂ADC
  • 有源和无源设备的共质心布局:回顾和未来之路
  • 51单片机入门——数模\模数转换
  • 基于51单片机的简易数字电压表proteus仿真原理图程序设计
  • 通过PCF8591读取电压值(AD转换)
  • ADC输入噪声面面观——噪声是利还是弊?
  • ADC入门
  • 二元加权电容器阵列的构造性共质心布局与布线
  • 二进制加权电容器阵列的构建公共质心布局和布线

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

  1. 视频教程-Docker企业实战系列-Docker/K8S

    Docker企业实战系列 京东商城运维架构师,京峰Linux云计算教学总监,担任国内多家知名社区运维专家网站Linux版主,专注Linux自动化运维,熟练LVS.Nginx,前端架构及Python开发 ...

  2. 技术沙龙|京东云DevOps自动化运维技术实践

    自动化测试体系不完善.缺少自助式的持续交付平台.系统间耦合度高服务拆分难度大.成熟的DevOps工程师稀缺,缺少敏捷文化--这些都是DevOps 在落地过程中,或多或少会碰到的问题,DevOps发展任 ...

  3. 百度云生态分享日 | AI技术实践与应用沙龙活动成功举办

    2017年7月29日,百度云生态分享日首场活动,以"百度云AI技术实践与应用"为主题的沙龙活动在北京车库咖啡成功举办.300多位企业CTO.CIO及开发者参加本次活动,聆听并积极与 ...

  4. web 流程图工具_Web技术在云剪辑工具中的技术实践

    云剪辑是集视频制作.生产.分发等为一体的在线视频制作平台,具备工具及服务两方面能力:工具方面,云剪辑具备全面视频剪辑能力,相比行业中其他在线剪辑工具能力更强大,支持范围包括多轨道音视频合成.音视频素材 ...

  5. 深耕边缘计算 揭秘阿里云边缘云网一体化的技术实践

    简介:过去两年,5G和边缘计算技术作为一种新型基础设施受到产学研用各界的广泛关注,何种超级应用场景会随之出现并率先得到规模化应用,成为产业最热议的话题."应用的规模化一定与5G与边缘计算的技 ...

  6. 深耕边缘计算 揭秘阿里云边缘云网一体化的技术实践

    过去两年,5G和边缘计算技术作为一种新型基础设施受到产学研用各界的广泛关注,何种超级应用场景会随之出现并率先得到规模化应用,成为产业最热议的话题."应用的规模化一定与5G与边缘计算的技术特性 ...

  7. Docker技术实践——中级篇

    1.1     存储机制 每个镜像由多个镜像层组成,镜像层都是只读的,从下往上,以栈方式组合在一起,组成容器的根文件系统.镜像文件默认保存在主机的/var/lib/docker/volumes中. 容 ...

  8. 《Docker——容器与容器云》:第一章 从容器到容器云

    2013年初,一个名字从云计算领域横空出世,并在整个IT行业激起千层浪.这就是Docker--一个孕育着新思想的"容器".Docker选择容器作为核心和基础,依靠容器技术支撑的Do ...

  9. 钢铁电商平台的Docker容器云平台建设实践

    2019独角兽企业重金招聘Python工程师标准>>> 作者简介:刘晓明,五阿哥(www.wuage.com)公司运维技术负责人,拥有10年的互联网开发和运维经验.一直致力于运维工具 ...

最新文章

  1. Xilinx基于模型的设计工具—Model Composer
  2. 自平衡二叉树(Self-balancing binary search tree)
  3. java和node.js 2018_2018,Node.js社区最值得关注的三个话题
  4. leetcode 遇到的问题
  5. 电气论文:基于遗传算法加非线性规划的水火电力系统经济调度(有程序和数据)
  6. 深度解读鸿蒙轻内核CPU占用率
  7. QT新建项目显示项目未配置的原因与解决方案
  8. spring yml 配置事务_application.yml与bootstrap.yml的区别
  9. python3下载-python3
  10. 第四堂:Java程序运行期数据区
  11. eclipse中配置drools6.5环境
  12. Java的GUI学习七(鼠标事件)
  13. 怎么连接win10共享计算机,xp系统下怎么连接win10共享的打印机
  14. 计算机体系结构基础 计算机系统评价和性能分析心得
  15. matlab中simulink耦合线圈,基于AMESim和Matlab/Simulink的耦合振动台建模仿真
  16. 2020ICPC 昆明热身赛 C.Statues(小思维)
  17. C++ 程序越过windows Defender检测
  18. 万维网联盟将于2014年推出HTML5标准(四)
  19. Android 获取手机的IMEI
  20. cozmo vector的起源最详细的说明

热门文章

  1. Android 系统(213)---如何内置多张静态壁纸(图片)到系统中
  2. Uos统信系统 SSH
  3. 怎么用计算机扫描,怎么用电脑扫描文件
  4. android新版本怎么下载安装,android 新版本下载 安装
  5. 一本关于互联网与职场的湿暗后厨,和99元人民币的关系
  6. pix2pixhd_基于pix2pixHD的行人图像生成
  7. python用matplotlib画五角星_3.用Python画五角星
  8. 千年古刹南普陀寺义工十年发展已逾6000人
  9. 小程序转uniapp——disabled
  10. 腾讯云开放mysql端口_腾讯云服务器Mysql开启3306端口远程访问