关于docker docker!

docker

Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器或Windows 机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。

 一个完整的Docker有以下几个部分组成:

  1. DockerClient客户端

  2. Docker Daemon守护进程

  3. Docker Image镜像

  4. DockerContainer容器 

Docker 架构

Docker 使用客户端-服务器 (C/S) 架构模式,使用远程API来管理和创建Docker容器。Docker 容器通过 Docker 镜像来创建。容器与镜像的关系类似于面向对象编程中的对象与类。

Docker采用 C/S架构 Docker daemon 作为服务端接受来自客户的请求,并处理这些请求(创建、运行、分发容器)。 客户端和服务端既可以运行在一个机器上,也可通过 socket 或者RESTful API 来进行通信。

Docker daemon 一般在宿主主机后台运行,等待接收来自客户端的消息。 Docker 客户端则为用户提供一系列可执行命令,用户用这些命令实现跟 Docker daemon 交互。

特性

在docker的网站上提到了docker的典型场景:

  • Automating the packaging and deployment of applications(使应用的打包与部署自动化)

  • Creation of lightweight, private PAAS environments(创建轻量、私密的PAAS环境)

  • Automated testing and continuous integration/deployment(实现自动化测试和持续的集成/部署)

  • Deploying and scaling web apps, databases and backend services(部署与扩展webapp、数据库和后台服务)

由于其基于LXC的轻量级虚拟化的特点,docker相比KVM之类最明显的特点就是启动快,资源占用小。因此对于构建隔离的标准化的运行环境,轻量级的PaaS(如dokku), 构建自动化测试和持续集成环境,以及一切可以横向扩展的应用(尤其是需要快速启停来应对峰谷的web应用)。

  1. 构建标准化的运行环境,现有的方案大多是在一个baseOS上运行一套puppet/chef,或者一个image文件,其缺点是前者需要base OS许多前提条件,后者几乎不可以修改(因为copy on write 的文件格式在运行时rootfs是read only的)。并且后者文件体积大,环境管理和版本控制本身也是一个问题。

  2. PaaS环境是不言而喻的,其设计之初和dotcloud的案例都是将其作为PaaS产品的环境基础

  3. 因为其标准化构建方法(buildfile)和良好的REST API,自动化测试和持续集成/部署能够很好的集成进来

  4. 因为LXC轻量级的特点,其启动快,而且docker能够只加载每个container变化的部分,这样资源占用小,能够在单机环境下与KVM之类的虚拟化方案相比能够更加快速和占用更少资源

局限

Docker并不是全能的,设计之初也不是KVM之类虚拟化手段的替代品,简单总结几点:

  1. Docker是基于Linux 64bit的,无法在32bit的linux/Windows/unix环境下使用

  2. LXC是基于cgroup等linux kernel功能的,因此container的guest系统只能是linux base的

  3. 隔离性相比KVM之类的虚拟化方案还是有些欠缺,所有container公用一部分的运行库

  4. 网络管理相对简单,主要是基于namespace隔离

  5. cgroup的cpu和cpuset提供的cpu功能相比KVM的等虚拟化方案相比难以度量(所以dotcloud主要是按内存收费)

  6. Docker对disk的管理比较有限

  7. container随着用户进程的停止而销毁,container中的log等用户数据不便收集

针对1-2,有windows base应用的需求的基本可以pass了; 3-5主要是看用户的需求,到底是需要一个container还是一个VM, 同时也决定了docker作为 IaaS 不太可行。

针对6,7虽然是docker本身不支持的功能,但是可以通过其他手段解决(disk quota, mount --bind)。总之,选用container还是vm, 就是在隔离性和资源复用性上做权衡。

另外即便docker 0.7能够支持非AUFS的文件系统,但是由于其功能还不稳定,商业应用或许会存在问题,而AUFS的稳定版需要kernel 3.8, 所以如果想复制dotcloud的成功案例,可能需要考虑升级kernel或者换用ubuntu的server版本(后者提供deb更新)。这也是为什么开源界更倾向于支持ubuntu的原因(kernel版本)

Docker并非适合所有应用场景,Docker只能虚拟基于Linux的服务。Windows Azure 服务能够运行Docker实例,但到目前为止Windows服务还不能被虚拟化。

可能最大的障碍在于管理实例之间的交互。由于所有应用组件被拆分到不同的容器中,所有的服务器需要以一致的方式彼此通信。这意味着任何人如果选择复杂的基础设施,那么必须掌握应用编程接口管理以及集群工具,比如Swarm、Mesos或者Kubernets以确保机器按照预期运转并支持故障切换。

Docker在本质上是一个附加系统。使用文件系统的不同层构建一个应用是有可能的。每个组件被添加到之前已经创建的组件之上,可以比作为一个文件系统更明智。分层架构带来另一方面的效率提升,当你重建存在变化的Docker镜像时,不需要重建整个Docker镜像,只需要重建变化的部分。

可能更为重要的是,Docker旨在用于弹性计算。每个Docker实例的运营生命周期有限,实例数量根据需求增减。在一个管理适度的系统中,这些实例生而平等,不再需要时便各自消亡了。

针对Docker环境存在的不足,意味着在开始部署Docker前需要考虑如下几个问题。首先,Docker实例是无状态的。这意味着它们不应该承载任何交易数据,所有数据应该保存在数据库服务器中。

其次,开发Docker实例并不像创建一台虚拟机、添加应用然后克隆那样简单。为成功创建并使用Docker基础设施,管理员需要对系统管理的各个方面有一个全面的理解,包括Linux管理、编排及配置工具比如Puppet、Chef以及Salt。这些工具生来就基于命令行以及脚本。 [5] 

原理

Docker核心解决的问题是利用LXC来实现类似VM的功能,从而利用更加节省的硬件资源提供给用户更多的计算资源。同VM的方式不同, LXC 其并不是一套硬件虚拟化方法 - 无法归属到全虚拟化、部分虚拟化和半虚拟化中的任意一个,而是一个操作系统级虚拟化方法, 理解起来可能并不像VM那样直观。所以我们从虚拟化到docker要解决的问题出发,看看他是怎么满足用户虚拟化需求的。

用户需要考虑虚拟化方法,尤其是硬件虚拟化方法,需要借助其解决的主要是以下4个问题:

  • 隔离性 - 每个用户实例之间相互隔离, 互不影响。 硬件虚拟化方法给出的方法是VM, LXC给出的方法是container,更细一点是kernel namespace

  • 可配额/可度量 - 每个用户实例可以按需提供其计算资源,所使用的资源可以被计量。硬件虚拟化方法因为虚拟了CPU, memory可以方便实现, LXC则主要是利用cgroups来控制资源

  • 移动性 - 用户的实例可以很方便地复制、移动和重建。硬件虚拟化方法提供snapshot和image来实现,docker(主要)利用AUFS实现

  • 安全性 - 这个话题比较大,这里强调是host主机的角度尽量保护container。硬件虚拟化的方法因为虚拟化的水平比较高,用户进程都是在KVM等虚拟机容器中翻译运行的, 然而对于LXC, 用户的进程是lxc-start进程的子进程, 只是在Kernel的namespace中隔离的, 因此需要一些kernel的patch来保证用户的运行环境不会受到来自host主机的恶意入侵, dotcloud(主要是)利用kernel grsec patch解决的.

Docker滴组成

cgroup(资源控制)和namespases(名称空间)两种构成,控制管理六个名称空间
名称空间( Namespaces):提供容器的隔离工作区的技术
控制组(Control groups):资源管理功能,将应用程序限制为一组特定的资源
控制组允许Docker Engine将可用的硬件资源共享给容器,并有选择地实施限制和约束

6个名称空间:

user:操作进程的用户和用户组
net:网络设备、端口
pid:进程号
uts:主机名和主句域
ipc:应用间的通信使用的内存空间
mount:文件系统和挂载点

3大组件:

镜像:一组资源的集合,包含了应用程序、相关依赖包和运行环境等,相当于容器的模板
容器:基于镜像的一种运行时状态,每个容器都是相互隔离的
仓库:存放image镜像

4大网络模式:
HOST模式:
docker容器没有自己的网卡和IP,而是使用宿主机的ip和端口,和宿主机共用一个网络名称空间,它的最大优势时网络性能比较好,但是因为它是直接使用的宿主机的IP地址,其隔离性不好,安全性相对不高

Container模式:
容器不会创建自己的网卡和ip,而是和一个指定容器共享IP,端口范围,它不是跟宿主机共享IP地址,相对host模式安全性较高,两个容器的进程可以通过lo:0网卡设备通信

None模式:
该模式下容器只有lo回环网卡,关闭了网络功能

Bridge模式:
该模式会为每一个容器设置IP地址,将容器连接到一个docker虚拟网,通过docker0网桥及iptables的nat表配置与宿主机通信,从docker0子网中分配一个IP给容器使用

docker镜像分层

docker与虚拟机的区别

不同点    容器    虚拟机
启动速度上    秒级    分钟级
运行性能上    接近原生(直接运行在内核中的90%)    50%左右的损失
数量    依据进程,可以有很多进程成百上千个    一般几十台(操作系统级别)
隔离    进程级别    系统级别(更彻底的隔离)
磁盘占用    MB    GB(操作系统的镜像一般在几个G左右)
操作系统    主要支持linux    几乎所有系统
封装程度    只打包项目代码和依赖关系,共享宿主机内核    完整的操作系统,与宿主机互相隔离
同时docker解决了vm的环境孤岛问题,docker可以自定义传递参数
 

docker使用场景

 docker的原理

 docker三个统一和docker三大组件

 docker引擎

 docker-server配置文件

在/etc/docker/daemon.json中配置

{
"graph":"/data/docker",			//数据目录
"storage-driver":"overlay2",		//存储引擎
"insecure-registries" ["registry.access.redhat.com","quary.io"]	//私有仓库
"registry-mirrors": ["https://cn90fxk6.mirror.aliyuncs.com"]	//镜像加速
"bip":"172.17.0.1/24",			//docker网络
"exec-opts":["native.cgroupdriver=systemd"],		//启动时的额外参数
"live-restore":true			//当docker容器存储引擎挂了后,使用docker跑起来的容器还能运行
}

docker的部署(20版)

[root@node1 nginx]# yum install -y yum-utils device-mapper-persistent-data lvm2

 

[root@node1 yum.repos.d]# yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

 

[root@node1 yum.repos.d]# yum install -y docker-ce

 

[root@node1 yum.repos.d]# systemctl enable docker
[root@node1 yum.repos.d]# systemctl start docker

 

 

 

 

[root@node1 yum.repos.d]# vim /etc/docker/daemon.json 
{
  "registry-mirrors": ["https://cn90fxk6.mirror.aliyuncs.com"]
}

 docker镜像操作

[root@node1 yum.repos.d]# docker run hello-world

Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.		//客户端连接到了服务器
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.			//由服务端的守护进程从docker hub上下载了镜像
    (amd64)
 3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.		//服务端创建了一个新容器,然后从这个镜像启动了一个容器,容器执行了脚本
 4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.		//服务端把这些信息流返回到客户端展示出来

To try something more ambitious, you can run an Ubuntu container with:
 $ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker ID:
 https://hub.docker.com/

For more examples and ideas, visit:
 https://docs.docker.com/get-started/

[root@node1 yum.repos.d]# docker version 
Client: Docker Engine - Community
 Version:           20.10.8
 API version:       1.41
 Go version:        go1.16.6
 Git commit:        3967b7d
 Built:             Fri Jul 30 19:55:49 2021
 OS/Arch:           linux/amd64
 Context:           default
 Experimental:      true

Server: Docker Engine - Community
 Engine:
  Version:          20.10.8
  API version:      1.41 (minimum version 1.12)
  Go version:       go1.16.6
  Git commit:       75249d8
  Built:            Fri Jul 30 19:54:13 2021
  OS/Arch:          linux/amd64
  Experimental:     false
 containerd:
  Version:          1.4.9
  GitCommit:        e25210fe30a0a703442421b0f60afac609f950a3
 runc:
  Version:          1.0.1
  GitCommit:        v1.0.1-0-g4144b63
 docker-init:
  Version:          0.19.0
  GitCommit:        de40ad0

[root@node1 yum.repos.d]# docker info 
Client:
 Context:    default
 Debug Mode: false
 Plugins:
  app: Docker App (Docker Inc., v0.9.1-beta3)
  buildx: Build with BuildKit (Docker Inc., v0.6.1-docker)
  scan: Docker Scan (Docker Inc., v0.8.0)

Server:
 Containers: 14
  Running: 5
  Paused: 0
  Stopped: 9
 Images: 63
 Server Version: 20.10.8
 Storage Driver: overlay2
  Backing Filesystem: xfs
  Supports d_type: true
  Native Overlay Diff: true
  userxattr: false
 Logging Driver: json-file
 Cgroup Driver: cgroupfs
 Cgroup Version: 1
 Plugins:
  Volume: local
  Network: bridge host ipvlan macvlan null overlay
  Log: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslog
 Swarm: inactive
 Runtimes: io.containerd.runc.v2 io.containerd.runtime.v1.linux runc
 Default Runtime: runc
 Init Binary: docker-init
 containerd version: e25210fe30a0a703442421b0f60afac609f950a3
 runc version: v1.0.1-0-g4144b63
 init version: de40ad0
 Security Options:
  seccomp
   Profile: default
 Kernel Version: 3.10.0-957.el7.x86_64
 Operating System: CentOS Linux 7 (Core)
 OSType: linux
 Architecture: x86_64
 CPUs: 4
 Total Memory: 5.712GiB
 Name: node1
 ID: QL6Y:HC6L:E57G:UWHJ:E7FY:J47A:YF6Z:GLL2:DETH:DY4C:STNH:ZGFS
 Docker Root Dir: /var/lib/docker
 Debug Mode: false
 Registry: https://index.docker.io/v1/
 Labels:
 Experimental: false
 Insecure Registries:
  127.0.0.0/8
 Registry Mirrors:
  https://cn90fxk6.mirror.aliyuncs.com/
 Live Restore Enabled: false

WARNING: bridge-nf-call-iptables is disabled
WARNING: bridge-nf-call-ip6tables is disabled

 

[root@node1 yum.repos.d]# docker search nginx
NAME                              DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
nginx                             Official build of Nginx.                        15420     [OK]       
jwilder/nginx-proxy               Automated Nginx reverse proxy for docker con…   2063                 [OK]
richarvey/nginx-php-fpm           Container running Nginx + PHP-FPM capable of…   816                  [OK]
jc21/nginx-proxy-manager          Docker container for managing Nginx proxy ho…   240                  
linuxserver/nginx                 An Nginx container, brought to you by LinuxS…   152                  
tiangolo/nginx-rtmp               Docker image with Nginx using the nginx-rtmp…   141                  [OK]
jlesage/nginx-proxy-manager       Docker container for Nginx Proxy Manager        135                  [OK]
alfg/nginx-rtmp                   NGINX, nginx-rtmp-module and FFmpeg from sou…   106                  [OK]
jasonrivers/nginx-rtmp            Docker images to host RTMP streams using NGI…   92                   [OK]
nginxdemos/hello                  NGINX webserver that serves a simple page co…   72                   [OK]
privatebin/nginx-fpm-alpine       PrivateBin running on an Nginx, php-fpm & Al…   56                   [OK]
nginx/nginx-ingress               NGINX and  NGINX Plus Ingress Controllers fo…   55                   
nginxinc/nginx-unprivileged       Unprivileged NGINX Dockerfiles                  47                   
staticfloat/nginx-certbot         Opinionated setup for automatic TLS certs lo…   24                   [OK]
nginxproxy/nginx-proxy            Automated Nginx reverse proxy for docker con…   20                   
schmunk42/nginx-redirect          A very simple container to redirect HTTP tra…   19                   [OK]
nginx/nginx-prometheus-exporter   NGINX Prometheus Exporter for NGINX and NGIN…   19                   
centos/nginx-112-centos7          Platform for running nginx 1.12 or building …   15                   
centos/nginx-18-centos7           Platform for running nginx 1.8 or building n…   13                   
bitwarden/nginx                   The Bitwarden nginx web server acting as a r…   11                   
flashspys/nginx-static            Super Lightweight Nginx Image                   10                   [OK]
mailu/nginx                       Mailu nginx frontend                            9                    [OK]
sophos/nginx-vts-exporter         Simple server that scrapes Nginx vts stats a…   7                    [OK]
ansibleplaybookbundle/nginx-apb   An APB to deploy NGINX                          2                    [OK]
wodby/nginx                       Generic nginx                                   1     
[root@node1 yum.repos.d]# docker search centos:7
NAME                                                DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
benwang6/tedu-jdk                                   oracle jdk 8u281 centos:7 JAVA_HOME=/usr/jdk…   5                    
vikingco/python                                     Python Stack Docker Base Image: Based on cen…   1                    
sndnvaps/docker-golang                              build latest golang in centos:7                 1                    [OK]
legerete/nginx-php71                                LA[->]P - Centos:7 + Nginx + PHP 7.1            1                    [OK]
peltikalle/basepython                               Base image with Centos:7 and Python 3.5.2       1                    [OK]
mjstealey/mariadb-galera                            MariaDB Galera cluster in Docker - based fro…   1                    [OK]
acktsw/java                                         oracle jdk 8u171 , centos:7,  timeZone:+8, e…   0                    [OK]
macedigital/nodejs                                  Latest NodeJS for CentOS:7                      0                    [OK]
grossws/nginx                                       nginx (mainline) on grossws/centos:7            0                    [OK]
europeanspallationsource/oracle-jdk-maven-jenkins   ICS oracle-jdk + maven + jenkins users image…   0                    
pbieberstein/acic-findr                             CentOS:7 with dependencies to run 'Findr' (h…   0                    [OK]
sjoeboo/rbenv                                       Simple base container from CentOS:7 w/ rbenv…   0                    [OK]
alvintz/centos                                      centos:7.2.1511                                 0                    [OK]
geomatikk/centos                                    FROM centos:7 with maven 3.6.1 and openjdk-1…   0                    
waffleimage/centos7                                 Centos:7 with systemd and ssh running           0                    
cristo/netacuity                                    Docker image on Centos:7 to run NetAcuity       0                    [OK]
badwolf/centos                                      from official centos:7 add gcc,gcc++,make,vi    0                    [OK]
mesosphere/freeipa-server                           A freeIPA v4.3 container based on centos:7. …   0                    
acktsw/centos                                       centos:7                                        0                    [OK]
bbania/centos                                       Build image based on centos:7                   0                    
a2747/centos7                                       derivative images from centos:7                 0                    
21plus2/server-jre                                  Dockerimage base on centos:7 with server-jre    0                    [OK]
europeanspallationsource/oracle-jdk-maven           ICS oracle-jdk + maven image based on centos…   0                    
qiyue/mycat                                         centos:7 + jdk:1.8 + mycat                      0                    
weihoop/mysql                                       基于weihoop/centos:7.4.1708制作          

 

[root@node1 yum.repos.d]# docker pull nginx
Using default tag: latest
latest: Pulling from library/nginx
a330b6cecb98: Pull complete 
5ef80e6f29b5: Pull complete 
f699b0db74e3: Pull complete 
0f701a34c55e: Pull complete 
3229dce7b89c: Pull complete 
ddb78cb2d047: Pull complete 
Digest: sha256:a05b0cdd4fc1be3b224ba9662ebdf98fe44c09c0c9215b45f84344c12867002e
Status: Downloaded newer image for nginx:latest
docker.io/library/nginx:latest
[root@node1 yum.repos.d]# docker images			//查看镜像列表
REPOSITORY    TAG       IMAGE ID       CREATED        SIZE
nginx         latest    822b7ec2aaf2   2 days ago     133MB

 

[root@node1 yum.repos.d]# docker inspect 822b7ec2aaf2
[
    {
        "Id": "sha256:822b7ec2aaf2122b8f80f9c7f45ca62ea3379bf33af4e042b67aafbf6eac1941",
        "RepoTags": [
            "nginx:latest"
        ],
        "RepoDigests": [
            "nginx@sha256:a05b0cdd4fc1be3b224ba9662ebdf98fe44c09c0c9215b45f84344c12867002e"
        ],
        "Parent": "",
        "Comment": "",
        "Created": "2021-09-03T07:40:16.355730864Z",
        "Container": "367d32086ac12447d36e75c9b7acbe1b5156a34a91370b9200e68783be75506c",
        "ContainerConfig": {
            "Hostname": "367d32086ac1",
            "Domainname": "",
            "User": "",
            "AttachStdin": false,
            "AttachStdout": false,
            "AttachStderr": false,
            "ExposedPorts": {
                "80/tcp": {}
            },
            "Tty": false,
            "OpenStdin": false,
            "StdinOnce": false,
            "Env": [
                "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
                "NGINX_VERSION=1.21.1",
                "NJS_VERSION=0.6.1",
                "PKG_RELEASE=1~buster"
            ],
            "Cmd": [
                "/bin/sh",
                "-c",
                "#(nop) ",
                "CMD [\"nginx\" \"-g\" \"daemon off;\"]"
            ],
            "Image": "sha256:d4315787e4fec867791beba140dd0e44f657cb6e4a9d75c676c7946089c20da9",
            "Volumes": null,
            "WorkingDir": "",
            "Entrypoint": [
                "/docker-entrypoint.sh"
            ],

[root@node1 yum.repos.d]# docker images 
REPOSITORY    TAG       IMAGE ID       CREATED        SIZE
nginx         123       822b7ec2aaf2   2 days ago     133MB
nginx         latest    822b7ec2aaf2   2 days ago     133MB

 

[root@node1 yum.repos.d]# docker rmi nginx:123
Untagged: nginx:123
[root@node1 yum.repos.d]# docker images
REPOSITORY    TAG       IMAGE ID       CREATED        SIZE
nginx         latest    822b7ec2aaf2   2 days ago     133MB

 

[root@node1 ~]# docker save -o nginx_images nginx:latest 
[root@node1 ~]# ls
12   1.sh   2333  45               apps         initial-setup-ks.cfg       ks.cfg  nginx_images  模板  图片  下载  桌面
123  1.txt  234   anaconda-ks.cfg  docker_home  jdk-8u91-linux-x64.tar.gz  nginx   公共          视频  文档  音乐

 

[root@node1 ~]# docker load < nginx_images 
d000633a5681: Loading layer [==================================================>]  72.53MB/72.53MB
63b5f2c0d071: Loading layer [==================================================>]  64.86MB/64.86MB
875b5b50454b: Loading layer [==================================================>]  3.072kB/3.072kB
ed94af62a494: Loading layer [==================================================>]  4.096kB/4.096kB
8e58314e4a4f: Loading layer [==================================================>]  3.584kB/3.584kB
d47e4d19ddec: Loading layer [==================================================>]  7.168kB/7.168kB
Loaded image: nginx:latest
[root@node1 ~]# docker images
REPOSITORY    TAG       IMAGE ID       CREATED        SIZE
nginx         latest    822b7ec2aaf2   2 days ago     133MB

 

[root@node1 ~]# docker ps -a
CONTAINER ID   IMAGE          COMMAND                  CREATED       STATUS       PORTS                                         NAMES

[root@node1 ~]# docker create -it nginx:latest /bin/bash
9eade02412f5ecc3e9e2006de2f59845ca50ed4a52741ad9f0a8fb43ce5086f3
[root@node1 ~]# docker ps -a
CONTAINER ID   IMAGE          COMMAND                  CREATED         STATUS       PORTS                                         NAMES
9eade02412f5   nginx:latest   "/docker-entrypoint.…"   3 seconds ago   Created                                                    keen_chatterjee
//-i是让容器的标准输入保持打开
//-t是分配一个伪终端
//-d是后台守护进程的方式运行

 

[root@node1 ~]# docker start 9eade02412f5
9eade02412f5
[root@node1 ~]# docker ps -a
CONTAINER ID   IMAGE          COMMAND                  CREATED              STATUS         PORTS                                         NAMES
9eade02412f5   nginx:latest   "/docker-entrypoint.…"   About a minute ago   Up 2 seconds   80/tcp                                        keen_chatterjee

 

[root@node1 ~]# docker run centos:7 /usr/bin/bash -c ls /
anaconda-post.log
bin
dev
etc
home
lib
lib64
media
mnt
opt
proc
root
run
sbin
srv
sys
tmp
usr
var

 

[root@node1 ~]# docker ps -a
CONTAINER ID   IMAGE          COMMAND                  CREATED          STATUS                       PORTS                                         NAMES
9eade02412f5   nginx:latest   "/docker-entrypoint.…"   4 minutes ago    Exited (137) 6 seconds ago         		//非0状态值都是停止状态,137是stop命令停止的指数                                        keen_chatterjee

[root@node1 ~]# docker run -it nginx:latest /bin/bash
root@d36a26b3e1d2:/#
[root@node1 ~]# docker exec -it 9eade02412f5 /bin/bash
root@9eade02412f5:/# 
docker run -it 会创建前台进程,但是会在输入exit后终止进程
docker exec -it 会连接到容器,可以像ssh一样进入容器内部,进行操作,可以通过exit退出

 

[root@node1 ~]# docker export 9eade02412f5 > nginx_1
[root@node1 ~]# ls
12   1.sh   2333  45               apps         initial-setup-ks.cfg       ks.cfg  nginx_1       公共  视频  文档  音乐

 

[root@node1 ~]# cat nginx_1 | docker import - nginx:latest
sha256:ae834c84afd17bb12708bd2dd4d53e8432c43d6378d0ed405e1fd580dd6f77ad

 

[root@node1 ~]# docker ps -a
CONTAINER ID   IMAGE          COMMAND                  CREATED         STATUS                     PORTS                                         NAMES
95b40e409895   nginx:latest   "/bin/bash"              9 seconds ago   Exited (0) 4 seconds ago                                                 sad_heyrovsky
[root@node1 ~]# docker rm 95b40e409895
95b40e409895
强制删除正在运行中的容器可以加一个-f

 

[root@node1 ~]# docker ps -a | awk '{print "docker rm "$1}' | bash
3e0845eacc5c
5e0ecd151d57
b8da82b16ba7
2930dd871f01
668103e78d6c
或者
[root@node1 ~]# docker rm `docker ps -qa`

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值