docker--基本操作

第 1 章 Docker基础

1.1 docker简介
在这一部分我们主要讲两个方面: docker是什么、docker特点

1.1.1 docker是什么

docker是什么?
docker的中文解释是码头工人。
官方解释:
Docker是一个开源的容器引擎,它基于LCX容器技术,使用Go语言开发。
源代码托管在Github上,并遵从Apache2.0协议。
Docker采用C/S架构,其可以轻松的为任何应用创建一个轻量级的、可移植的、自给自足的容器。
Docker就是一种快速解决生产问题的一种技术手段,开发,运行和部署应用程序的开放管理平台。
开发人员能利用docker 开发和运行应用程序
运维人员能利用docker 部署和管理应用程序
Docker的生活场景对比
在这里插入图片描述
单独的理解一下容器:
在这里插入图片描述

Docker提供了在一个完全隔离的环境中打包和运行应用程序的能力,这个隔离的环境被称为容器。
由于容器的隔离性和安全性,因此可以在一个主机(宿主机)上同时运行多个相互隔离的容器,互不干预

1.1.2为什么使用Docker

Docker使您能够将应用程序与基础架构分开,以便您可以快速交付软件。
借助Docker,您可以像管理应用程序一样管理基础架构。
通过利用Docker的方法快速进行运输,测试和部署代码,您可以显着缩短编写代码和在生产环境中运行代码之间
的延迟。
例如: 开发人员在本地编写代码,可以使用Docker同事进行共享,实现协同工作。
使用Docker开发完成程序,可以直接对应用程序执行自动和手动测试。
当开发人员发现错误或BUG时,可以直接在开发环境中修复后,并迅速将它们重新部署到测试环境进行测试和验
证。
利用Docker开发完成后,交付时,直接交付Docker,也就意味着交付完成。后续如果有提供修补程序或更新,需
要推送到生成环境运行起来,也是一样的简单。
Docker主要解决的问题:
保证程序运行环境的一致性;
降低配置开发环境、生产环境的复杂度和成本;
实现程序的快速部署和分发。

1.1.3Docker的架构与结构

架构图
在这里插入图片描述
Docker是采用了(c/s)架构模式的应用程序
Client dockerCLI :客户端docker命令行
REST API : 一套介于客户端与服务端的之间进行通信并指示其执行的接口
Server docker daemon:服务端dacker守护进程等待客户端发送命令来执行
Docker的四大核心技术
IMAGE-镜像
CONTAINER-容器
DATA VOLUMES-数据卷
NETWORK-网络
结构图
在这里插入图片描述

Docker客户端(Docker Client)

Docker客户端(Docker Client)是用户与Docker进行交互的最主要方式。当在终端输入docker命令时,对应的就会在服务端产生对应的作用,并把结果返回给客户端。Docker Client除了连接本地服务端,通过更改或指定
DOCKER_HOST连接远程服务端。

Docker服务端(Docker Server)

Docker Daemon其实就是Docker 的服务端。它负责监听Docker API请求(如Docker Client)并管理Docker对象
(Docker Objects),如镜像、容器、网络、数据卷等

Docker Registries

俗称Docker仓库,专门用于存储镜像的云服务环境.
Docker Hub就是一个公有的存放镜像的地方,类似Github存储代码文件。同样的也可以类似Github那样搭建私有的仓库。

Docker 对象(Docker Objects)

镜像:一个Docker的可执行文件,其中包括运行应用程序所需的所有代码内容、依赖库、环境变量和配置文件
等。
容器:镜像被运行起来后的实例。
网络:外部或者容器间如何互相访问的网络方式,如host模式、bridge模式。
数据卷:容器与宿主机之间、容器与容器之间共享存储方式,类似虚拟机与主机之间的共享文件目录。

1.1.4官方资料:

Docker 官网:http://www.docker.com
Github Docker 源码:https://github.com/docker/docker
Docker 英文文档网址:https://docs.docker.com/
Docker 中文文档网址:http://docker-doc.readthedocs.io/zh_CN/latest/

1.1.4docker特点

三大理念:构建:龙珠里的胶囊,将你需要的场景构建好,装在一个小胶囊里运输:随身携带着房子、车子等,非常方便
运行:只需要你轻轻按一下胶囊,找个合适的地方一放,就ok了
优点:多:适用场景多
快:环境部署快、更新快
好:好多人在用
省:省钱省力省人工

缺点:太腻歪人:依赖操作系统
不善沟通:依赖网络
不善理财:银行U盾等场景不能用

1.2 docker快速入门

1.2.1docker历程:

自2013年出现以来,发展势头很猛,现在可说是风靡全球。
docker的第一版为0.1.0 发布于2013年03月23日
Docker2017年改版前的版本号是1.13.1发布于2017年02月08日
Docker从1.13.x版本开始,版本分为企业版EE和社区版CE,版本号也改为按照时间线来发布,比如17.03就是2017 年3月,有点类似于ubuntu的版本发布方式。企业版自然会提供一些额外的服务,当然肯定也是收费的。企业版说明https://blog.docker.com/2017/03/docker-enterprise-edition/社区版分为stable和edge两种发布方式。
stable版本是季度发布方式,比如17.03, 17.06, 17.09
edge版本是月份发布方式,比如17.03, 17.04…

在这里插入图片描述
注:
Stable:gives you reliable updates every quarter (稳定:给你可靠的每季度更新一次)
Edge:gives you new features every month
(优势:每个月给你新特性)

1.2.2 官方要求

为什么用ubuntu学docker
在这里插入图片描述
图片来源:https://docs.docker.com/engine/installation/#server docker要求的ubuntu环境
在这里插入图片描述
ubuntu下载地址:https://www.ubuntu.com/download/desktop ubuntu主机环境需求

#执行命令
$uname-a
$ls-l/sys/class/misc/device-mapper

在这里插入图片描述
1.2.3 部署docker 官网参考:
https://docs.docker.com/engine/installation/linux/docker-ce/ubuntu/#upgrade-docker-after-using-the-conv enience-script

安装步骤

#安装基本软件
$ sudo apt-get update
$ sudo apt-get install apt-transport-https ca-certificates curl softwareproperties-common lrzsz -y
#使用官方推荐源{不推荐}#
$ sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu
$(lsb_release -cs) stable"
#使用阿里云的源{推荐}
$ sudo curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo aptkey add -
$ sudo add-apt-repository "deb [arch=amd64] https://mirrors.aliyun.com/dockerce/linux/ubuntu $(lsb_release -cs) stable"
#注:
#可以指定版本安装docker:
$ sudo apt-get install docker-ce=<VERSION> -
#安装docker
$ sudo apt-get install docker-ce -
#软件源升级
$ sudo apt-get update
y
y
#查看支持的docker版本
$ sudo apt-cache madison docker-ce
#测试docker
docker version

网卡区别:

安装前:只有ens33和lo网卡
在这里插入图片描述

1.2.4 docker加速器

在国内使用docker的官方镜像源,会因为网络的原因,造成无法下载,或者一直处于超时。所以我们使用
daocloud的方法进行加速配置。 加速器文档链接:http://guide.daocloud.io/dcs/daocloud-9153151.html
方法:
访问 https://dashboard.daocloud.io 网站,登录 daocloud 账户
在这里插入图片描述

#我们执行这条命令
curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s
http://e5d212cc.m.daocloud.io
#修改daemon.json文件,增加
, "insecure-registries": []
#到大括号后
# cat /etc/docker/daemon.json
{"registry-mirrors": ["http://e5d212cc.m.daocloud.io"], "insecure-registries": []}
#注意:
#docker cloud加速器的默认内容是少了一条配置,所以我们要编辑文件把后面的内容补全
#重启docker
systemctl restart docker

1.2.5 docker 其他简介

docker的基本命令格式:

#基本格式
systemctl [参数] docker
#参数详解:
start 开启服务
stop 关闭
restart 重启
status 状态

删除docker命令:

$ sudo apt-get purge docker-ce -y
$ sudo rm -rf /etc/docker
$ sudo rm -rf /var/lib/docker/

docker基本目录简介:

/etc/docker/ #docker的认证目录
/var/lib/docker/ #docker的应用目录

docker常见bug:
背景
因为使用的是sudo安装docker,所以会导致一个问题。以普通用户登录的状况下,在使用docker images时必须添
加sudo,那么如何让docker免sudo依然可用呢?
理清问题
当以普通用户身份去使用docker命令时,出现以下错误:

Got permission denied while trying to connect to the Docker daemon socket at
unix:///var/run/docker.sock: Post
http://%2Fvar%2Frun%2Fdocker.sock/v1.35/images/create?fromSrc=-&message=&repo=ubuntu-
16.04&tag=: dial unix /var/run/docker.sock: connect: permission denied

可以看都,最后告知我们时权限的问题。那么在linux文件权限有三个数据左右drwxrwxrwx,其中第一为d代表该
文件是一个文件夹前三位、中三位、后三位分别代表这属主权限、属组权限、其他人权限。
在这里插入图片描述

#如果还没有 docker group 就添加一个:
$sudo groupadd docker
#将用户加入该 group 内。然后退出并重新登录就生效啦。
$sudo gpasswd -a ${USER} docker
#重启 docker 服务
$systemctl restart docker
#切换当前会话到新 group 或者重启 X 会话
$newgrp - docker
#注意:最后一步是必须的,否则因为 groups 命令获取到的是缓存的组信息,刚添加的组信息未能生效,
#所以 docker images 执行时同样有错。
https://blog.csdn.net/u012590718/article/details/125632482?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522169864069916800215056200%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=169864069916800215056200&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~top_positive~default-1-125632482-null-null.142^v96^control&utm_term=%E4%B9%8C%E7%8F%AD%E5%9B%BE%E5%AE%89%E8%A3%85docker&spm=1018.2226.3001.4187

第 2 章 Docker 核心技术

Docker的核心技术内容很多,我们学习则从以下四个方面来介绍Docker的核心技术 镜像、容器、数据、网络
2.1 docker镜像管理
2.1.1 镜像简介
Docker镜像是什么? 镜像是一个Docker的可执行文件,其中包括运行应用程序所需的所有代码内容、依赖库、环
境变量和配置文件等。 通过镜像可以创建一个或多个容器。
2.1.2 搜索、查看、获取

搜索镜像

#作用
搜索Docker Hub(镜像仓库)上的镜像
#命令格式:
docker search [镜像名称]
#命令演示:
$ docker search ubuntu
#NAME:名称
#DESCRIPTION:基本功能描述
#STARS:下载次数
#OFFICIAL:官方
#AUTOMATED:自动的运行
chengpeng@chengpeng:/var/run$ docker search ubuntu
NAME                             DESCRIPTION                                      STARS     OFFICIAL   AUTOMATED
ubuntu                           Ubuntu is a Debian-based Linux operating sys…   16527     [OK]       
websphere-liberty                WebSphere Liberty multi-architecture images …   297       [OK]       
open-liberty                     Open Liberty multi-architecture images based…   62        [OK]       
neurodebian                      NeuroDebian provides neuroscience research s…   105       [OK]       
ubuntu-debootstrap               DEPRECATED; use "ubuntu" instead                 52        [OK]       
ubuntu-upstart                   DEPRECATED, as is Upstart (find other proces…   115       [OK]       
ubuntu/nginx                     Nginx, a high-performance reverse proxy & we…   102                  
ubuntu/squid                     Squid is a caching proxy for the Web. Long-t…   67                   
ubuntu/cortex                    Cortex provides storage for Prometheus. Long…   4                    
ubuntu/apache2                   Apache, a secure & extensible open-source HT…   62                   
ubuntu/kafka                     Apache Kafka, a distributed event streaming …   35                   
ubuntu/prometheus                Prometheus is a systems and service monitori…   51                   
ubuntu/mysql                     MySQL open source fast, stable, multi-thread…   53                   
ubuntu/bind9                     BIND 9 is a very flexible, full-featured DNS…   63                   
ubuntu/zookeeper                 ZooKeeper maintains configuration informatio…   12                   
ubuntu/postgres                  PostgreSQL is an open source object-relation…   31                   
ubuntu/redis                     Redis, an open source key-value store. Long-…   19                   
ubuntu/grafana                   Grafana, a feature rich metrics dashboard &9                    
ubuntu/dotnet-aspnet             Chiselled Ubuntu runtime image for ASP.NET a…   13                   
ubuntu/memcached                 Memcached, in-memory keyvalue store for smal…   5                    
ubuntu/dotnet-deps               Chiselled Ubuntu for self-contained .NET & A…   11                   
ubuntu/prometheus-alertmanager   Alertmanager handles client alerts from Prom…   9                    
ubuntu/dotnet-runtime            Chiselled Ubuntu runtime image for .NET apps…   13                   
ubuntu/jre                       Distroless Java runtime based on Ubuntu. Lon…   8                    
ubuntu/cassandra                 Cassandra, an open source NoSQL distributed …   2                    
chengpeng@chengpeng:/var/run$ cd ~
chengpeng@chengpeng:~$ docker search nginx
NAME                               DESCRIPTION                                      STARS     OFFICIAL   AUTOMATED
nginx                              Official build of Nginx.                         19164     [OK]       
unit                               Official build of NGINX Unit: Universal Web …   15        [OK]       
nginxinc/nginx-unprivileged        Unprivileged NGINX Dockerfiles                   130                  
nginx/nginx-ingress                NGINX and  NGINX Plus Ingress Controllers fo…   83                   
nginx/nginx-prometheus-exporter    NGINX Prometheus Exporter for NGINX and NGIN…   33                   
nginxinc/nginx-s3-gateway          Authenticating and caching gateway based on …   2                    
nginx/unit                         This repository is retired, use the Docker o…   64                   
nginx/nginx-ingress-operator       NGINX Ingress Operator for NGINX and NGINX P…   1                    
nginxinc/amplify-agent             NGINX Amplify Agent docker repository            1                    
nginx/nginx-quic-qns               NGINX QUIC interop                               1                    
nginxinc/ingress-demo              Ingress Demo                                     4                    
nginxproxy/nginx-proxy             Automated Nginx reverse proxy for docker con…   115                  
nginxproxy/acme-companion          Automated ACME SSL certificate generation fo…   125                  
bitnami/nginx                      Bitnami nginx Docker Image                       176                  [OK]
bitnami/nginx-ingress-controller   Bitnami Docker Image for NGINX Ingress Contr…   30                   [OK]
ubuntu/nginx                       Nginx, a high-performance reverse proxy & we…   102                  
nginxinc/nginmesh_proxy_debug                                                       0                    
nginxproxy/docker-gen              Generate files from docker container meta-da…   12                   
kasmweb/nginx                      An Nginx image based off nginx:alpine and in…   6                    
nginxinc/mra-fakes3                                                                 0                    
rancher/nginx-ingress-controller                                                    11                   
nginxinc/ngx-rust-tool                                                              0                    
nginxinc/mra_python_base                                                            0                    
nginxinc/nginmesh_proxy_init  

获取镜像

#作用:
下载远程仓库(如Docker Hub)中的镜像
#命令格式:
docker pull [镜像名称]
#命令演示:
$ docker pull ubuntu
$ docker pull nginx
#注释:
#获取的镜像在哪里?
#/var/lib/docker 目录下
#由于权限的原因我们需要切换root用户
#那我们首先要重设置root用户的密码:
:~$ sudo passwd root
#这样就可以设置root用户的密码了。
#之后就可以自由的切换到root用户了
:~$ su
#输入root用户的密码即可。
#当然,如果想从root用户切换回一般用户,则可使用 su -val(一般用户名)
#而当你再次切回到root用户,则只需要键入exit,再次输入exit则回到最初的用户下
#操作下面的文件可以查看相关的镜像信息
:~$ vim /var/lib/docker/image/overlay2/repositories.json

查看镜像

#作用:
列出本地镜像
#命令格式:
docker images [镜像名称]
docker images ubuntu
docker image ls [镜像名称]
2.1.3 重命名、删除
镜像重命名
删除镜像
2.1.4 导出、导入
导出镜像
将已经下载好的镜像,导出到本地,以备后用。
#命令演示:
$ docker images
#镜像的ID唯一标识了镜像,如果ID相同,说明是同一镜像。TAG信息来区分不同发行版本,如果不指定具体标记,
默认使用latest标记信息
#docker images -a 列出所有的本地的images(包括已删除的镜像记录)
#REPOSITORY:镜像的名称
#TAG :镜像的版本标签
#IMAGE ID:镜像id
#CREATED:镜像是什么时候创建的
#SIZE:大小
chengpeng@chengpeng:~$ docker images
REPOSITORY   TAG       IMAGE ID       CREATED       SIZE
ubuntu       latest    e4c58958181a   3 weeks ago   77.8MB

2.1.3 重命名、删除

镜像重命名

#作用:
对本地镜像的NAME、TAG进行重命名,并新产生一个命名后镜像
#命令格式:
docker tag [老镜像名称]:[老镜像版本][新镜像名称]:[新镜像版本]
#命令演示:
$ docker tag nginx:latest panda-nginx:v1.0

删除镜像–可以删除一个或多个

#作用:
将本地的一个或多个镜像删除
#命令格式:
docker rmi [命令参数][镜像ID]
docker rmi [命令参数][镜像名称]:[镜像版本]
docker image rm [命令参数][镜像]
#命令演示:
$docker rmi 3fa822599e10
$docker rmi mysql:latest
#注意:
如果一个image_id存在多个名称,那么应该使用 名称:版本 的格式删除镜像
#命令参数(OPTIONS):
-f, --force 强制删除

2.1.4 导出、导入
导出镜像
将已经下载好的镜像,导出到本地,以备后用。

#作用:
将本地的一个或多个镜像打包保存成本地tar文件
#命令格式:
docker save [命令参数][导出镜像名称][本地镜像镜像]
#命令参数(OPTIONS):
-o, --output string 指定写入的文件名和路径
#导出镜像
:~$ docker save -o nginx.tar nginx

导入镜像

#作用:
将save命令打包的镜像导入本地镜像库中
#导入镜像命令格式:
$ docker load [命令参数][被导入镜像压缩文件的名称]
$ docker load < [被导入镜像压缩文件的名称]
$ docker load --input [被导入镜像压缩文件的名称]
#命令参数(OPTIONS):
-i, --input string 指定要打入的文件,如没有指定,默认是STDIN
#为了更好的演示效果,我们先将nginx的镜像删除掉
docker rmi nginx:v1.0
docker rmi nginx
#导入镜像文件:
$ docker load < nginx.tar
#注意:
如果发现导入的时候没有权限需要使用chmod命令修改镜像文件的权限
chengpeng@chengpeng:~$ docker rmi 593aee2afb64 e4c58958181a
Untagged: nginx:latest
Untagged: nginx@sha256:add4792d930c25dd2abf2ef9ea79de578097a1c175a16ab25814332fe33622de
Deleted: sha256:593aee2afb642798b83a85306d2625fd7f089c0a1242c7e75a237846d80aa2a0
Deleted: sha256:5f40d2c2af6bd6c289f284b2ffb1022db6984edf7005ac791c3723730dd40111
Deleted: sha256:bd85a340ea268d71b49c16a693f1764267228a5787fb0da2b81dc6c19fa9f97f
Deleted: sha256:89fafeeb9db96ca37f3214c0d14ce160ce82041b284ecf3a26641d3b3b5359e5
Deleted: sha256:ec22d9ca60728c69acca7909d96922dfe5ceb4665ecd6c91b3282f18c3a58424
Deleted: sha256:3745a2d825305d88cd6b4aed9b5b2de8eb2a36d237dd471368d18cf5d96e907f
Deleted: sha256:87d5589860cd08d504e32e6e17498af935f95dca535bbb5439ea50049047dfb4
Deleted: sha256:cb4596cc145400fb1f2aa56d41516b39a366ecdee7bf3f9191116444aacd8c90
Untagged: ubuntu:latest
Untagged: ubuntu@sha256:2b7412e6465c3c7fc5bb21d3e6f1917c167358449fecac8176c6e496e5c1f05f
Deleted: sha256:e4c58958181a5925816faa528ce959e487632f4cfd192f8132f71b32df2744b4
Deleted: sha256:256d88da41857db513b95b50ba9a9b28491b58c954e25477d5dad8abb465430b
chengpeng@chengpeng:~$ docker images
REPOSITORY   TAG       IMAGE ID   CREATED   SIZE
chengpeng@chengpeng:~$ docker load < ubuntu.tar 
256d88da4185: Loading layer [==================================================>]  80.35MB/80.35MB
Loaded image: ubuntu:latest
chengpeng@chengpeng:~$ docker load --input nginx-panda.tar 
cb4596cc1454: Loading layer [==================================================>]  77.87MB/77.87MB
4ccbaf6751da: Loading layer [==================================================>]  113.1MB/113.1MB
f4e84f2b0154: Loading layer [==================================================>]  3.584kB/3.584kB
572e6b1b9ddf: Loading layer [==================================================>]  4.608kB/4.608kB
9c7a17c7c18b: Loading layer [==================================================>]   2.56kB/2.56kB
a7d081791a97: Loading layer [==================================================>]   5.12kB/5.12kB
97c766ccce63: Loading layer [==================================================>]  7.168kB/7.168kB
Loaded image: nginx:latest
chengpeng@chengpeng:~$ docker images
REPOSITORY   TAG       IMAGE ID       CREATED       SIZE
nginx        latest    593aee2afb64   5 days ago    187MB
ubuntu       latest    e4c58958181a   3 weeks ago   77.8MB

2.1.5 历史、创建

查看镜像历史

#作用:
查看本地一个镜像的历史(历史分层)信息
#查看镜像命令格式:
docker history [镜像名称]:[镜像版本]
docker history [镜像ID]
#我们获取到一个镜像,想知道他默认启动了哪些命令或者都封装了哪些系统层,那么我们可以使用docker
history这条命令来获取我们想要的信息
$ docker history sswang-nginx:v1.0
#IMAGE:编号
#CREATED:创建的
#CREATED BY :基于那些命令创建的
#SIZE:大小
#COMMENT:评论
chengpeng@chengpeng:~$ docker history 593aee2afb64
IMAGE          CREATED       CREATED BY                                       SIZE      COMMENT
593aee2afb64   5 days ago    /bin/sh -c #(nop)  CMD ["nginx" "-g" "daemon…   0B        
<missing>      5 days ago    /bin/sh -c #(nop)  STOPSIGNAL SIGQUIT            0B        
<missing>      5 days ago    /bin/sh -c #(nop)  EXPOSE 80                     0B        
<missing>      5 days ago    /bin/sh -c #(nop)  ENTRYPOINT ["/docker-entr…   0B        
<missing>      5 days ago    /bin/sh -c #(nop) COPY file:9e3b2b63db9f8fc7…   4.62kB    
<missing>      5 days ago    /bin/sh -c #(nop) COPY file:57846632accc8975…   3.02kB    
<missing>      5 days ago    /bin/sh -c #(nop) COPY file:3b1b9915b7dd898a…   298B      
<missing>      5 days ago    /bin/sh -c #(nop) COPY file:caec368f5a54f70a…   2.12kB    
<missing>      5 days ago    /bin/sh -c #(nop) COPY file:01e75c6dd0ce317d…   1.62kB    
<missing>      5 days ago    /bin/sh -c set -x     && groupadd --system -…   112MB     
<missing>      5 days ago    /bin/sh -c #(nop)  ENV PKG_RELEASE=1~bookworm    0B        
<missing>      5 days ago    /bin/sh -c #(nop)  ENV NJS_VERSION=0.8.2         0B        
<missing>      5 days ago    /bin/sh -c #(nop)  ENV NGINX_VERSION=1.25.3      0B        
<missing>      2 weeks ago   /bin/sh -c #(nop)  LABEL maintainer=NGINX Do…   0B        
<missing>      2 weeks ago   /bin/sh -c #(nop)  CMD ["bash"]                  0B        
<missing>      2 weeks ago   /bin/sh -c #(nop) ADD file:55ad846fa191e603f…   74.8MB    
chengpeng@chengpeng:~$ docker history nginx:latest 
IMAGE          CREATED       CREATED BY                                       SIZE      COMMENT
593aee2afb64   5 days ago    /bin/sh -c #(nop)  CMD ["nginx" "-g" "daemon…   0B        
<missing>      5 days ago    /bin/sh -c #(nop)  STOPSIGNAL SIGQUIT            0B        
<missing>      5 days ago    /bin/sh -c #(nop)  EXPOSE 80                     0B        
<missing>      5 days ago    /bin/sh -c #(nop)  ENTRYPOINT ["/docker-entr…   0B        
<missing>      5 days ago    /bin/sh -c #(nop) COPY file:9e3b2b63db9f8fc7…   4.62kB    
<missing>      5 days ago    /bin/sh -c #(nop) COPY file:57846632accc8975…   3.02kB    
<missing>      5 days ago    /bin/sh -c #(nop) COPY file:3b1b9915b7dd898a…   298B      
<missing>      5 days ago    /bin/sh -c #(nop) COPY file:caec368f5a54f70a…   2.12kB    
<missing>      5 days ago    /bin/sh -c #(nop) COPY file:01e75c6dd0ce317d…   1.62kB    
<missing>      5 days ago    /bin/sh -c set -x     && groupadd --system -…   112MB     
<missing>      5 days ago    /bin/sh -c #(nop)  ENV PKG_RELEASE=1~bookworm    0B        
<missing>      5 days ago    /bin/sh -c #(nop)  ENV NJS_VERSION=0.8.2         0B        
<missing>      5 days ago    /bin/sh -c #(nop)  ENV NGINX_VERSION=1.25.3      0B        
<missing>      2 weeks ago   /bin/sh -c #(nop)  LABEL maintainer=NGINX Do…   0B        
<missing>      2 weeks ago   /bin/sh -c #(nop)  CMD ["bash"]                  0B        
<missing>      2 weeks ago   /bin/sh -c #(nop) ADD file:55ad846fa191e603f…   74.8MB    
chengpeng@chengpeng:~$ 

镜像详细信息

#作用:
查看本地一个或多个镜像的详细信息
#命令格式:
$ docker image inspect [命令参数] [镜像名称]:[镜像版本]
$ docker inspect [命令参数] [镜像ID]
#查看镜像详细信息:
$ docker inspect nginx-->可以省略image
chengpeng@chengpeng:~$ docker inspect nginx:latest 
[{"Id": "sha256:593aee2afb642798b83a85306d2625fd7f089c0a1242c7e75a237846d80aa2a0","RepoTags": ["nginx:latest"],"RepoDigests": [],"Parent": "","Comment": "","Created": "2023-10-25T01:21:47.343274012Z","Container": "1e4063a23e5d6d56cbf5478ff7227b8c6940152770a0770585c3ae9480478b66","ContainerConfig": {"Hostname": "1e4063a23e5d","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.25.3","NJS_VERSION=0.8.2","PKG_RELEASE=1~bookworm"],"Cmd": ["/bin/sh","-c","#(nop) ","CMD [\"nginx\" \"-g\" \"daemon off;\"]"],"Image": "sha256:714c3cd63577a5ad14ad0b2a8fa67aef4f6ac055dec3e1f03a8f7e5d2f43b0b3","Volumes": null,"WorkingDir": "","Entrypoint": ["/docker-entrypoint.sh"],"OnBuild": null,"Labels": {"maintainer": "NGINX Docker Maintainers <docker-maint@nginx.com>"},"StopSignal": "SIGQUIT"},"DockerVersion": "20.10.23","Author": "","Config": {"Hostname": "","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.25.3","NJS_VERSION=0.8.2","PKG_RELEASE=1~bookworm"],"Cmd": ["nginx","-g","daemon off;"],"Image": "sha256:714c3cd63577a5ad14ad0b2a8fa67aef4f6ac055dec3e1f03a8f7e5d2f43b0b3","Volumes": null,"WorkingDir": "","Entrypoint": ["/docker-entrypoint.sh"],"OnBuild": null,"Labels": {"maintainer": "NGINX Docker Maintainers <docker-maint@nginx.com>"},"StopSignal": "SIGQUIT"},"Architecture": "amd64","Os": "linux","Size": 186779297,"VirtualSize": 186779297,"GraphDriver": {"Data": {"LowerDir": "/var/lib/docker/overlay2/9eb59efbda01990dd4b19604dc997dec5ab768659f3825d65deb064ec3295ee2/diff:/var/lib/docker/overlay2/00203ed850e6be3627df8c20e99af49e7f391a6230380832971944439fbe5be8/diff:/var/lib/docker/overlay2/948ea7e9017427233069c4c62a1af00f8f2672647c70e2a4cbe5d7eeaa9ff14e/diff:/var/lib/docker/overlay2/d4222ef1a966c4d60a2f0c0bc7706411d4bc548a97b7eff8544ab97ff86b3651/diff:/var/lib/docker/overlay2/77a7bdf40270b0486062046ae1451766fed5d395ee4de609eeaa32c9b1993b7d/diff:/var/lib/docker/overlay2/38b6ef20d10404d1a51cbf06546a7e76cd3e546535702e1c4663926d04e34681/diff","MergedDir": "/var/lib/docker/overlay2/69b3ffc978a1a1bafff6f18eb31f3c5c1fb021c0e7b0c60868c24e544512e7cb/merged","UpperDir": "/var/lib/docker/overlay2/69b3ffc978a1a1bafff6f18eb31f3c5c1fb021c0e7b0c60868c24e544512e7cb/diff","WorkDir": "/var/lib/docker/overlay2/69b3ffc978a1a1bafff6f18eb31f3c5c1fb021c0e7b0c60868c24e544512e7cb/work"},"Name": "overlay2"},"RootFS": {"Type": "layers","Layers": ["sha256:cb4596cc145400fb1f2aa56d41516b39a366ecdee7bf3f9191116444aacd8c90","sha256:4ccbaf6751daab588a8caf94f48006143fc46f8e7e29c355d00d3dedf5ada092","sha256:f4e84f2b0154b1e343a5e4c0dbce081694cccd34d073e3ff400f762aff8d8165","sha256:572e6b1b9ddfc87e7a80a05c50c256c668e03a4e314b88f80911266f323a9c75","sha256:9c7a17c7c18bca96c3d82b861b4bd3fe123b65011f52927b1a22edf0ce397149","sha256:a7d081791a97ca4d50c840ce5f48a0b052319cf3e133dc5a687e5b4c19fdfb38","sha256:97c766ccce63373a637872224ddeecc835835f26ae54ae9283ec8f679b06e8c9"]},"Metadata": {"LastTagTime": "0001-01-01T00:00:00Z"}}
]

根据模板创建镜像

#登录系统模板镜像网站:
#https://download.openvz.org/template/precreated/
#找到一个镜像模板进行下载,比如说ubuntu-16.04-x86_64.tar.gz,地址为:
#https://download.openvz.org/template/precreated/ubuntu-16.04-x86_64.tar.gz
#命令格式:
cat 模板文件名.tar | docker import - [自定义镜像名]
#演示效果:
$ cat ubuntu-16.04-x86_64.tar.gz | docker import - ubuntu-mini
chengpeng@chengpeng:~$ cat ubuntu-16.04-x86_64.tar.gz | docker import - ubuntu-mini
sha256:44117582c84e414a25feb3c6454e363195c370b705b11ca6fb581757073e7d7a
chengpeng@chengpeng:~$ docker images
REPOSITORY    TAG       IMAGE ID       CREATED         SIZE
ubuntu-mini   latest    44117582c84e   8 seconds ago   505MB
nginx         latest    593aee2afb64   6 days ago      187MB
ubuntu        latest    e4c58958181a   3 weeks ago     77.8MB
没有任何操作记录
chengpeng@chengpeng:~$ docker history 44117582c84e
IMAGE          CREATED              CREATED BY   SIZE      COMMENT
44117582c84e   About a minute ago                505MB     Imported from -

在这里插入图片描述

2.2 容器管理

docker容器技术指Docker是一个由GO语言写的程序运行的“容器”(Linux containers, LXCs)
containers的中文解释是集装箱。
Docker则实现了一种应用程序级别的隔离,它改变我们基本的开发、操作单元,由直接操作虚拟主机(VM),转换
到操作程序运行的“容器”上来。

2.2.1 容器简介

容器是什么?
容器(Container):容器是一种轻量级、可移植、并将应用程序进行的打包的技术,使应用程序可以在几乎任何
地方以相同的方式运行
•Docker将镜像文件运行起来后,产生的对象就是容器。容器相当于是镜像运行起来的一个实例。
•容器具备一定的生命周期。
•另外,可以借助docker ps命令查看运行的容器,如同在linux上利用ps命令查看运行着的进程那样。
我们就可以理解容器就是被封装起来的进程操作,只不过现在的进程可以简单也可以复杂,复杂的话可以运行1个操作
系统.简单的话可以运行1个回显字符串.
容器与虚拟机的相同点
•容器和虚拟机一样,都会对物理硬件资源进行共享使用。
•容器和虚拟机的生命周期比较相似(创建、运行、暂停、关闭等等)。
•容器中或虚拟机中都可以安装各种应用,如redis、mysql、nginx等。也就是说,在容器中的操作,如同在一个虚
拟机(操作系统)中操作一样。
•同虚拟机一样,容器创建后,会存储在宿主机上:linux上位于/var/lib/docker/containers下
容器与虚拟机的不同点
注意:容器并不是虚拟机,但它们有很多相似的地方
•虚拟机的创建、启动和关闭都是基于一个完整的操作系统。一个虚拟机就是一个完整的操作系统。而容器直接运
行在宿主机的内核上,其本质上以一系列进程的结合。

•容器是轻量级的,虚拟机是重量级的。
首先容器不需要额外的资源来管理,虚拟机额外更多的性能消耗;
其次创建、启动或关闭容器,如同创建、启动或者关闭进程那么轻松,而创建、启动、关闭一个操作系统就没那么
方便了。
•也因此,意味着在给定的硬件上能运行更多数量的容器,甚至可以直接把Docker运行在虚拟机上。

2.2.2 查看、创建、启动

查看容器

#作用
显示docker容器列表
#命令格式:
docker ps
#命令演示:
$ docker ps
#CONTAINER ID 容器ID
#IMAGE 基于那个镜像
#COMMAND 运行镜像使用了哪些命令?
#CREATED多久前创建时间
#STATUS 开启还是关闭
#PORTS端口号
#NAMES容器名称默认是随机的
#注意:
管理docker容器可以通过名称,也可以通过ID
ps是显示正在运行的容器, -a是显示所有运行过的容器,包括已经不运行的容器

创建待启动容器

#作用:
利用镜像创建出一个Created 状态的待启动容器
#命令格式:
docker create [OPTIONS] IMAGE [COMMAND] [ARG...]
docker create [参数命令] 依赖镜像 [容器内命令] [命令参数]
#命令参数(OPTIONS):查看更多
-t, --tty 分配一个伪TTY,也就是分配虚拟终端
-i, --interactive 即使没有连接,也要保持STDIN打开-->标准输入打开
--name 为容器起名,如果没有指定将会随机产生一个名称
#命令参数(COMMAND\ARG):
COMMAND 表示容器启动后,需要在容器中执行的命令,如ps、ls 等命令
ARG 表示执行 COMMAND 时需要提供的一些参数,如ps 命令的 aux、ls命令的-a等等
#创建容器(附上ls命令和a参数)
docker create -it --name ubuntu-1 ubuntu ls -a

只是创建,并没有执行

chengpeng@chengpeng:~$ docker create -it --name panda01-ubuntu ubuntu ls -al
c9efeb810bc10b58f268f804afa65039b000271838960e1b4663a114ff72309d
chengpeng@chengpeng:~$ docker ps -a
CONTAINER ID   IMAGE     COMMAND    CREATED          STATUS    PORTS     NAMES
c9efeb810bc1   ubuntu    "ls -al"   13 seconds ago   Created             panda01-ubuntu
chengpeng@chengpeng:~$ 

启动容器

启动容器有三种方式
1、启动待启动或已关闭容器
2、基于镜像新建一个容器并启动
3、守护进程方式启动docker
启动容器

#作用:
将一个或多个处于创建状态或关闭状态的容器启动起来
#命令格式:
docker start [容器名称][容器ID]
#命令参数(OPTIONS):
-a, --attach 将当前shell的 STDOUT/STDERR 连接到容器上-->标准出/标准错误
-i, --interactive 将当前shell的 STDIN连接到容器上
#启动上面创建的容器
docker start -a ubuntu-1
chengpeng@chengpeng:~$ docker ps -a
CONTAINER ID   IMAGE     COMMAND    CREATED          STATUS    PORTS     NAMES
c9efeb810bc1   ubuntu    "ls -al"   13 seconds ago   Created             panda01-ubuntu
chengpeng@chengpeng:~$ docker start -a ubuntu
Error response from daemon: No such container: ubuntu
chengpeng@chengpeng:~$ docker start -a c9efeb810bc1 
total 56
drwxr-xr-x   1 root root 4096 Oct 31 17:22 .
drwxr-xr-x   1 root root 4096 Oct 31 17:22 ..
-rwxr-xr-x   1 root root    0 Oct 31 17:22 .dockerenv
lrwxrwxrwx   1 root root    7 Oct  4 02:08 bin -> usr/bin
drwxr-xr-x   2 root root 4096 Apr 18  2022 boot
drwxr-xr-x   5 root root  360 Oct 31 17:29 dev
drwxr-xr-x   1 root root 4096 Oct 31 17:22 etc
drwxr-xr-x   2 root root 4096 Apr 18  2022 home
lrwxrwxrwx   1 root root    7 Oct  4 02:08 lib -> usr/lib
lrwxrwxrwx   1 root root    9 Oct  4 02:08 lib32 -> usr/lib32
lrwxrwxrwx   1 root root    9 Oct  4 02:08 lib64 -> usr/lib64
lrwxrwxrwx   1 root root   10 Oct  4 02:08 libx32 -> usr/libx32
drwxr-xr-x   2 root root 4096 Oct  4 02:08 media
drwxr-xr-x   2 root root 4096 Oct  4 02:08 mnt
drwxr-xr-x   2 root root 4096 Oct  4 02:08 opt
dr-xr-xr-x 267 root root    0 Oct 31 17:29 proc
drwx------   2 root root 4096 Oct  4 02:12 root
drwxr-xr-x   5 root root 4096 Oct  4 02:12 run
lrwxrwxrwx   1 root root    8 Oct  4 02:08 sbin -> usr/sbin
drwxr-xr-x   2 root root 4096 Oct  4 02:08 srv
dr-xr-xr-x  13 root root    0 Oct 31 17:29 sys
drwxrwxrwt   2 root root 4096 Oct  4 02:12 tmp
drwxr-xr-x  14 root root 4096 Oct  4 02:08 usr
drwxr-xr-x  11 root root 4096 Oct  4 02:12 var

创建新容器并启动

#作用:
利用镜像创建并启动一个容器
#命令格式:
docker run [命令参数] [镜像名称][执行的命令]
命令参数(OPTIONS):
-t, --tty 分配一个伪TTY,也就是分配虚拟终端
-i, --interactive 即使没有连接,也要保持STDIN打开
--name 为容器起名,如果没有指定将会随机产生一个名称
-d, --detach 在后台运行容器并打印出容器ID
--rm 当容器退出运行后,自动删除容器
#启动一个镜像输出内容并删除容器 /bin/echo-->回显
$ docker run --rm --name nginx1 nginx /bin/echo "hello docker"
#注意:
docker run 其实 是两个命令的集合体 docker create + docker start
chengpeng@chengpeng:~$ docker run --rm --name nginx-1 nginx /bin/echo echo "helloworld"
echo helloworld
chengpeng@chengpeng:~$ docker ps -a
CONTAINER ID   IMAGE     COMMAND    CREATED          STATUS                      PORTS     NAMES
c9efeb810bc1   ubuntu    "ls -al"   24 minutes ago   Exited (0) 17 minutes ago             panda01-ubuntu

守护进程方式启动容器<常用的方式>—>永久启动

更多的时候,需要让Docker容器在后台以守护形式运行。此时可以通过添加-d参数来实现

#命令格式:
docker run -d [image_name] command ...
#守护进程方式启动容器:
:~$ docker run -d nginx
chengpeng@chengpeng:~$ docker run -d nginx
85b37d430e2b7369caedc8d8f7e8e0ab16422c2c22c6b2e16683b0c8db238ae9
chengpeng@chengpeng:~$ docker ps -a
CONTAINER ID   IMAGE     COMMAND                   CREATED              STATUS                          PORTS     NAMES
85b37d430e2b   nginx     "/docker-entrypoint.…"   8 seconds ago        Up 7 seconds                    80/tcp    bold_kilby
059ddc8b516d   nginx     "/docker-entrypoint.…"   About a minute ago   Exited (0) About a minute ago             nginx-1
c9efeb810bc1   ubuntu    "ls -al"                  35 minutes ago       Exited (0) 28 minutes ago                 panda01-ubuntu
chengpeng@itcast:/var/lib/docker/containers# ls
059ddc8b516d30766e6d6e2d1b2a41cbc8f29ffcedd0edb89d2280a1f8c0d927  85b37d430e2b7369caedc8d8f7e8e0ab16422c2c22c6b2e16683b0c8db238ae9  c9efeb810bc10b58f268f804afa65039b000271838960e1b4663a114ff72309d

2.2.3暂停与取消暂停与重启

容器暂停

#作用:
暂停一个或多个处于运行状态的容器
#命令格式:
docker pause [容器名称][容器ID]
#暂停容器
docker pause a229eabf1f32
chengpeng@chengpeng:~$ docker pause 85b37d430e2b
85b37d430e2b
chengpeng@chengpeng:~$ docker ps -a
CONTAINER ID   IMAGE     COMMAND                   CREATED             STATUS                      PORTS     NAMES
85b37d430e2b   nginx     "/docker-entrypoint.…"   27 minutes ago      Up 27 minutes (Paused)      80/tcp    bold_kilby
059ddc8b516d   nginx     "/docker-entrypoint.…"   28 minutes ago      Exited (0) 28 minutes ago             nginx-1
c9efeb810bc1   ubuntu    "ls -al"                  About an hour ago   Exited (0) 55 minutes ago             panda01-ubuntu

容器取消暂停

#作用:
取消一个或多个处于暂停状态的容器,恢复运行
#命令格式:
docker unpause [容器名称][容器ID]
#恢复容器
docker unpause a229eabf1f32
chengpeng@chengpeng:~$ docker unpause 85b37d430e2b
85b37d430e2b
chengpeng@chengpeng:~$ docker ps -a
CONTAINER ID   IMAGE     COMMAND                   CREATED             STATUS                      PORTS     NAMES
85b37d430e2b   nginx     "/docker-entrypoint.…"   28 minutes ago      Up 28 minutes               80/tcp    bold_kilby
059ddc8b516d   nginx     "/docker-entrypoint.…"   29 minutes ago      Exited (0) 29 minutes ago             nginx-1
c9efeb810bc1   ubuntu    "ls -al"                  About an hour ago   Exited (0) 56 minutes ago             panda01-ubuntu

重启

#作用:
重启一个或多个处于运行状态、暂停状态、关闭状态或者新建状态的容器
该命令相当于stop和start命令的结合
#命令格式:
docker restart [容器名称][容器ID]
#命令参数(OPTIONS):
-t, --time int 重启前,等待的时间,单位秒(默认 10s)
#恢复容器
docker restart -t 20 a229eabf1f32

看不见效果—>重启

chengpeng@chengpeng:~$ docker restart -t 20 85b37d430e2b
85b37d430e2b
chengpeng@chengpeng:~$ docker ps -a
CONTAINER ID   IMAGE     COMMAND                   CREATED             STATUS                      PORTS     NAMES
85b37d430e2b   nginx     "/docker-entrypoint.…"   38 minutes ago      Up 14 seconds               80/tcp    bold_kilby
059ddc8b516d   nginx     "/docker-entrypoint.…"   39 minutes ago      Exited (0) 39 minutes ago             nginx-1
c9efeb810bc1   ubuntu    "ls -al"                  About an hour ago   Exited (0) 2 minutes ago              panda01-ubuntu

2.2.4 关闭、终止、删除

关闭容器
在生产中,我们会以为临时情况,要关闭某些容器,我们使用 stop 命令来关闭某个容器

#作用:
延迟关闭一个或多个处于暂停状态或者运行状态的容器
#命令格式:
docker stop [容器名称][容器ID]
#关闭容器:
$ docker stop 8005c40a1d16
chengpeng@chengpeng:~$ docker stop bold_kilby
bold_kilby
chengpeng@chengpeng:~$ docker ps -a
CONTAINER ID   IMAGE     COMMAND                   CREATED             STATUS                         PORTS     NAMES
85b37d430e2b   nginx     "/docker-entrypoint.…"   About an hour ago   Exited (0) 8 seconds ago                 bold_kilby
059ddc8b516d   nginx     "/docker-entrypoint.…"   About an hour ago   Exited (0) About an hour ago             nginx-1
c9efeb810bc1   ubuntu    "ls -al"                  2 hours ago         Exited (0) 41 minutes ago                panda01-ubuntu
chengpeng@chengpeng:~$ 

终止容器

#作用:
强制并立即关闭一个或多个处于暂停状态或者运行状态的容器
#命令格式:
docker kill [容器名称][容器ID]
#终止容器
$ docker kill 8005c40a1d16
chengpeng@chengpeng:~$ docker kill bold_kilby
bold_kilby
chengpeng@chengpeng:~$ docker ps -a
CONTAINER ID   IMAGE     COMMAND                   CREATED             STATUS                         PORTS     NAMES
85b37d430e2b   nginx     "/docker-entrypoint.…"   About an hour ago   Exited (137) 2 seconds ago               bold_kilby
059ddc8b516d   nginx     "/docker-entrypoint.…"   About an hour ago   Exited (0) About an hour ago             nginx-1
c9efeb810bc1   ubuntu    "ls -al"                  2 hours ago         Exited (0) 48 minutes ago                panda01-ubuntu

删除容器
删除容器有三种方法: 正常删除 – 删除已关闭的 强制删除 – 删除正在运行的 强制批量删除 – 删除全部的容器
正常删除容器–>不能删除正在运行的容器

#作用:
删除一个或者多个容器
#命令格式:
$ docker rm [容器名称][容器ID]
#删除已关闭的容器:
$ docker rm 1a5f6a0c9443
Error response from daemon: You cannot remove a running container
c7f5e7fe5aca00e0cb987d486dab3502ac93d7180016cfae9ddcc64e56149fc9. Stop the container
before attempting removal or force remove
错误响应守护进程:你不能删除一个容器
c7f5e7fe5aca00e0cb987d486dab3502ac93d7180016cfae9ddcc64e56149fc9运行。在尝试拆卸或强制拆
卸之前,先停止容器。
chengpeng@chengpeng:~$ docker rm  bold_kilby
Error response from daemon: You cannot remove a running container 85b37d430e2b7369caedc8d8f7e8e0ab16422c2c22c6b2e16683b0c8db238ae9. Stop the container before attempting removal or force remove
chengpeng@chengpeng:~$ docker rm c9efeb810bc1
c9efeb810bc1
chengpeng@chengpeng:~$ docker ps -a
CONTAINER ID   IMAGE     COMMAND                   CREATED             STATUS                         PORTS     NAMES
85b37d430e2b   nginx     "/docker-entrypoint.…"   About an hour ago   Up About a minute              80/tcp    bold_kilby
059ddc8b516d   nginx     "/docker-entrypoint.…"   About an hour ago   Exited (0) About an hour ago             nginx-1
chengpeng@chengpeng:~$ 

强制删除运行容器

#作用:
强制删除一个或者多个容器
#命令格式:
docker rm -f [容器名称][容器ID]
#删除正在运行的容器
$ docker rm -f 8005c40a1d16
chengpeng@chengpeng:~$ docker ps -a
CONTAINER ID   IMAGE     COMMAND                   CREATED             STATUS                         PORTS     NAMES
85b37d430e2b   nginx     "/docker-entrypoint.…"   About an hour ago   Up About a minute              80/tcp    bold_kilby
059ddc8b516d   nginx     "/docker-entrypoint.…"   About an hour ago   Exited (0) About an hour ago             nginx-1
chengpeng@chengpeng:~$ docker rm -f 85b37d430e2b 
85b37d430e2b
chengpeng@chengpeng:~$ docker ps -a
CONTAINER ID   IMAGE     COMMAND                   CREATED       STATUS                   PORTS     NAMES
059ddc8b516d   nginx     "/docker-entrypoint.…"   2 hours ago   Exited (0) 2 hours ago             nginx-1

拓展批量关闭容器

#作用:
批量强制删除一个或者多个容器
#命令格式:
$ docker rm -f $(docker ps -a -q)
-q:只拿id这一行
#按照执行顺序$(), 获取到现在容器的id然后进行删除
chengpeng@chengpeng:~$ docker ps -a
CONTAINER ID   IMAGE     COMMAND                   CREATED          STATUS                   PORTS     NAMES
f64123db1adf   nginx     "/docker-entrypoint.…"   6 seconds ago    Up 5 seconds             80/tcp    magical_curran
a6477d5d2ec7   nginx     "/docker-entrypoint.…"   7 seconds ago    Up 7 seconds             80/tcp    wizardly_lichterman
f39c0b852dd2   nginx     "/docker-entrypoint.…"   9 seconds ago    Up 8 seconds             80/tcp    optimistic_saha
3dec6ba9d06c   nginx     "/docker-entrypoint.…"   10 seconds ago   Up 9 seconds             80/tcp    infallible_khorana
32beaf63b5a4   nginx     "/docker-entrypoint.…"   15 seconds ago   Up 14 seconds            80/tcp    quirky_lalande
059ddc8b516d   nginx     "/docker-entrypoint.…"   2 hours ago      Exited (0) 2 hours ago             nginx-1
chengpeng@chengpeng:~$ docker rm -f $(docker ps -a -q)
f64123db1adf
a6477d5d2ec7
f39c0b852dd2
3dec6ba9d06c
32beaf63b5a4
059ddc8b516d
chengpeng@chengpeng:~$ docker ps -a
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
chengpeng@chengpeng:~$ 

2.2.5 进入、退出

进入容器我们学习三种方法:
1、创建容器的同时进入容器 2、手工方式进入容器 3、生产方式进入容器
创建并进入容器

#命令格式:
docker run --name [container_name] -it [docker_image] /bin/bash
#命令演示:
$ docker run -it --name panda-nginx nginx /bin/bash
#进入容器后
root@7c5a24a68f96:/# echo "hello world"
hello world
root@7c5a24a68f96:/# exit
exit
#docker 容器启动命令参数详解:
#--name:给容器定义一个名称
#-i:则让容器的标准输入保持打开。
#-t:让docker分配一个伪终端,并绑定到容器的标准输入上
#/bin/bash:执行一个命令

退出容器:

#方法一:
exit
#方法二:
Ctrl + D
chengpeng@chengpeng:~$ docker run -it --name panda-nginx nginx /bin/bash
root@f4e9887f4e08:/# ls
bin  boot  dev	docker-entrypoint.d  docker-entrypoint.sh  etc	home  lib  lib32  lib64  libx32  media	mnt  opt  proc	root  run  sbin  srv  sys  tmp	usr  var
root@f4e9887f4e08:/# ls -al
total 64
drwxr-xr-x   1 root root 4096 Oct 31 19:40 .
drwxr-xr-x   1 root root 4096 Oct 31 19:40 ..
-rwxr-xr-x   1 root root    0 Oct 31 19:40 .dockerenv
lrwxrwxrwx   1 root root    7 Oct  9 00:00 bin -> usr/bin
drwxr-xr-x   2 root root 4096 Sep 29 20:04 boot
drwxr-xr-x   5 root root  360 Oct 31 19:40 dev
drwxr-xr-x   1 root root 4096 Oct 25 01:21 docker-entrypoint.d
-rwxrwxr-x   1 root root 1620 Oct 25 01:21 docker-entrypoint.sh
drwxr-xr-x   1 root root 4096 Oct 31 19:40 etc
drwxr-xr-x   2 root root 4096 Sep 29 20:04 home
lrwxrwxrwx   1 root root    7 Oct  9 00:00 lib -> usr/lib
lrwxrwxrwx   1 root root    9 Oct  9 00:00 lib32 -> usr/lib32
lrwxrwxrwx   1 root root    9 Oct  9 00:00 lib64 -> usr/lib64
lrwxrwxrwx   1 root root   10 Oct  9 00:00 libx32 -> usr/libx32
drwxr-xr-x   2 root root 4096 Oct  9 00:00 media
drwxr-xr-x   2 root root 4096 Oct  9 00:00 mnt
drwxr-xr-x   2 root root 4096 Oct  9 00:00 opt
dr-xr-xr-x 267 root root    0 Oct 31 19:40 proc
drwx------   2 root root 4096 Oct  9 00:00 root
drwxr-xr-x   3 root root 4096 Oct  9 00:00 run
lrwxrwxrwx   1 root root    8 Oct  9 00:00 sbin -> usr/sbin
drwxr-xr-x   2 root root 4096 Oct  9 00:00 srv
dr-xr-xr-x  13 root root    0 Oct 31 17:29 sys
drwxrwxrwt   1 root root 4096 Oct 25 01:21 tmp
drwxr-xr-x   1 root root 4096 Oct  9 00:00 usr
drwxr-xr-x   1 root root 4096 Oct  9 00:00 var
root@f4e9887f4e08:/# echo "hello golang"
hello golang
root@f4e9887f4e08:/# exit
exit
chengpeng@chengpeng:~$ 

手工方式进入容器

#命令格式:
docker exec -it 容器id /bin/bash
#效果演示:
$ docker exec -it d74fff341687 /bin/bash
chengpeng@chengpeng:~$ docker run -it -d --name panda-nginx1 nginx /bin/bash
2080b5ed2f08219a6083ab75d909cd68384e57072c093c266d1a4e802c9709e0
chengpeng@chengpeng:~$ docker ps -a
CONTAINER ID   IMAGE     COMMAND                   CREATED         STATUS                     PORTS     NAMES
2080b5ed2f08   nginx     "/docker-entrypoint.…"   9 seconds ago   Up 8 seconds               80/tcp    panda-nginx1
f4e9887f4e08   nginx     "/docker-entrypoint.…"   6 minutes ago   Exited (0) 5 minutes ago             panda-nginx
itcast@itcast:~$ docker exec -it panda-nginx1 /bin/bash
root@2080b5ed2f08:/# ls
bin  boot  dev	docker-entrypoint.d  docker-entrypoint.sh  etc	home  lib  lib32  lib64  libx32  media	mnt  opt  proc	root  run  sbin  srv  sys  tmp	usr  var
root@2080b5ed2f08:/# mkdir hello world
root@2080b5ed2f08:/# ls
bin  boot  dev	docker-entrypoint.d  docker-entrypoint.sh  etc	hello  home  lib  lib32  lib64	libx32	media  mnt  opt  proc  root  run  sbin	srv  sys  tmp  usr  var  world
root@2080b5ed2f08:/# 
exit
chengpeng@chengpeng:~$ docker ps -a
CONTAINER ID   IMAGE     COMMAND                   CREATED          STATUS                      PORTS     NAMES
2080b5ed2f08   nginx     "/docker-entrypoint.…"   11 minutes ago   Up 11 minutes               80/tcp    panda-nginx1
f4e9887f4e08   nginx     "/docker-entrypoint.…"   18 minutes ago   Exited (0) 16 minutes ago             panda-nginx
chengpeng@chengpeng:~$ 

生产方式进入容器
我们生产中常用的进入容器方法是使用脚本,脚本内容如下

#!/bin/bash
#定义进入仓库函数
docker_in(){
NAME_ID=$1
PID=$(docker inspect --format {{.State.Pid}} $NAME_ID)
nsenter --target $PID --mount --uts --ipc --net --pid
}
docker_in $1

直接执行的话是没有执行权限的所以需要赋值权限

#赋权执行
$ chmod +x docker_in.sh
#进入指定的容器,并测试
$ ./docker_in.sh b3fbcba852fd

注意:

当拷贝到linux下的时候会出现

-bash: ./docker_in.sh: /bin/bash^M: 解释器错误: 没有那个文件或目录
这个问题大多数是因为你的脚本文件在windows下编辑过。windows下,每一行的结尾是\n\r,而在linux下
文件的结尾是\n,那么你在windows下编辑过的文件在linux下打开看的时候每一行的结尾就会多出来一个字
符\r,用cat -A docker_in.sh时你可以看到这个\r字符被显示为^M,这时候只需要删除这个字符就可以了。
可以使用命令 sed -i 's/\r$//' docker_in.sh

2.2.6 基于容器创建镜像

方式一:—>内部创建

#命令格式:
docker commit -m '改动信息' -a "作者信息" [container_id][new_image:tag]
#命令演示:
#进入一个容器,创建文件后并退出:
$ ./docker_in.sh d74fff341687
$ mkdir /hello
$ mkdir /world
$ ls
$ exit
#创建一个镜像:
$ docker commit -m 'mkdir /hello /world ' -a "panda" d74fff341687 nginx:v0.2
#查看镜像:
$ docker images
#启动一个容器
$ docker run -itd nginx:v0.2 /bin/bash
#进入容器进行查看
$ ./docker_in.sh ae63ab299a84
$ ls
chengpeng@chengpeng:~$ docker ps -a
CONTAINER ID   IMAGE     COMMAND                   CREATED          STATUS                      PORTS     NAMES
2080b5ed2f08   nginx     "/docker-entrypoint.…"   33 minutes ago   Up 33 minutes               80/tcp    panda-nginx1
f4e9887f4e08   nginx     "/docker-entrypoint.…"   39 minutes ago   Exited (0) 37 minutes ago             panda-nginx
chengpeng@chengpeng:~$ docker exec -it 2080b5ed2f08 /bin/bash
root@2080b5ed2f08:/# ls
bin  boot  dev	docker-entrypoint.d  docker-entrypoint.sh  etc	hello  home  lib  lib32  lib64	libx32	media  mnt  opt  proc  root  run  sbin	srv  sys  tmp  usr  var  world
root@2080b5ed2f08:/# mkdir golang beego
root@2080b5ed2f08:/# ls
beego  bin  boot  dev  docker-entrypoint.d  docker-entrypoint.sh  etc  golang  hello  home  lib  lib32	lib64  libx32  media  mnt  opt	proc  root  run  sbin  srv  sys  tmp  usr  var	world
root@2080b5ed2f08:/# exit
exit
chengpeng@chengpeng:~$ docker ps -a
CONTAINER ID   IMAGE     COMMAND                   CREATED          STATUS                      PORTS     NAMES
2080b5ed2f08   nginx     "/docker-entrypoint.…"   42 minutes ago   Up 42 minutes               80/tcp    panda-nginx1
f4e9887f4e08   nginx     "/docker-entrypoint.…"   49 minutes ago   Exited (0) 47 minutes ago             panda-nginx
chengpeng@chengpeng:~$ docker commit -m "mkdir hello world golang beego" -a "chengpeng" 2080b5ed2f08 panda-nginx1108:v1.0
sha256:c654adf64b78f4f7b47c92a95f6b7fa3a7b991eeac7fde141e8bf28947f304ef
chengpeng@chengpeng:~$ docker images
REPOSITORY        TAG       IMAGE ID       CREATED          SIZE
panda-nginx1108   v1.0      c654adf64b78   11 seconds ago   187MB
ubuntu-mini       latest    44117582c84e   19 hours ago     505MB
nginx             latest    593aee2afb64   6 days ago       187MB
ubuntu            latest    e4c58958181a   3 weeks ago      77.8MB
chengpeng@chengpeng:~$ docker run -d c654adf64b78
bc58c240aca1f578427773419784f2085dcbf5fde2cf377fd10c06d79e3fb4e8
chengpeng@chengpeng:~$ docker ps -a
CONTAINER ID   IMAGE          COMMAND                   CREATED          STATUS                      PORTS     NAMES
bc58c240aca1   c654adf64b78   "/docker-entrypoint.…"   17 seconds ago   Exited (0) 16 seconds ago             zen_margulis
2080b5ed2f08   nginx          "/docker-entrypoint.…"   46 minutes ago   Up 46 minutes               80/tcp    panda-nginx1
f4e9887f4e08   nginx          "/docker-entrypoint.…"   53 minutes ago   Exited (0) 51 minutes ago             panda-nginx
chengpeng@chengpeng:~$ 

方式二:

#命令格式:
docker export [容器id] > 模板文件名.tar
#命令演示:
#创建镜像:
$ docker export ae63ab299a84 > nginx.tar
#导入镜像:
$ cat nginx.tar | docker import - panda-test
chengpeng@chengpeng:~$ docker ps -a
CONTAINER ID   IMAGE          COMMAND                   CREATED             STATUS                         PORTS     NAMES
bc58c240aca1   c654adf64b78   "/docker-entrypoint.…"   8 minutes ago       Exited (0) 8 minutes ago                 zen_margulis
2080b5ed2f08   nginx          "/docker-entrypoint.…"   55 minutes ago      Up 55 minutes                  80/tcp    panda-nginx1
f4e9887f4e08   nginx          "/docker-entrypoint.…"   About an hour ago   Exited (0) About an hour ago             panda-nginx
chengpeng@chengpeng:~$ docker export 2080b5ed2f08 > panda-nginx1657.tar
chengpeng@chengpeng:~$ ls
app_private_key.pem  ,bashrc       examples.desktop  go              nginx-panda.tar      snap   test2                       ubuntu.tar                         vmware-tools-distrib  公共的  视频  文档  音乐
app_public_key.pem   docker_in.sh  git-openssl       GolandProjects  panda-nginx1657.tar  test1  ubuntu-16.04-x86_64.tar.gz  VMwareTools-10.0.6-3595377.tar.gz  workspace             模板    图片  下载  桌面
chengpeng@chengpeng:~$ cat panda-nginx1657.tar | docker import  - panda-nginx1657
sha256:62e2a6334363a45e6f95d632c20d3b111f450b71bffe775593f0b6edd24c63de
chengpeng@chengpeng:~$ docker im
image   images  import  
chengpeng@chengpeng:~$ docker images
REPOSITORY        TAG       IMAGE ID       CREATED          SIZE
panda-nginx1657   latest    62e2a6334363   15 seconds ago   185MB
panda-nginx1108   v1.0      c654adf64b78   19 minutes ago   187MB
ubuntu-mini       latest    44117582c84e   20 hours ago     505MB
nginx             latest    593aee2afb64   6 days ago       187MB
ubuntu            latest    e4c58958181a   3 weeks ago      77.8MB
chengpeng@chengpeng:~$ 

导出(export)导入(import)与保存(save)加载(load)的恩怨情仇

import与load的区别:
import可以重新指定镜像的名字,docker load不可以
export 与 保存 save 的区别:
1、export导出的镜像文件大小,小于 save保存的镜像。
2、export 导出(import导入)是根据容器拿到的镜像,再导入时会丢失镜像所有的历史。
chengpeng@chengpeng:~$ docker history panda-nginx1657
IMAGE          CREATED          CREATED BY   SIZE      COMMENT
62e2a6334363   12 minutes ago                185MB     Imported from -

2.2.7 日志、信息、端口、重命名

查看容器运行日志

#命令格式:
docker logs [容器id]
#命令效果:
$ docker logs 7c5a24a68f96

查看容器详细信息

#命令格式:
docker inspect [容器id]
#命令效果:
查看容器全部信息:
$ docker inspect 930f29ccdf8a
查看容器网络信息:
$ docker inspect --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}'
930f29ccdf8a

查看容器端口信息

#命令格式:
docker port [容器id]
#命令效果:
$ docker port 930f29ccdf8a
#没有效果没有和宿主机关联

容器重命名

#作用:
修改容器的名称
#命令格式:
docker rename [容器id][容器名称] [容器新名称]
#命令效果:
$ docker rename 930f29ccdf8a u1

在这里插入图片描述

2.3 数据管理

生产环境使用Docker的过程中,往往需要对数据进行持久化保存,或者需要更多容器之间进行数据共享,那我们
需要怎么要的操作呢?
答案就是:数据卷(Data Volumes)和数据卷容器(Data Volume Containers)

2.3.1 数据卷简介

什么是数据卷?
就是将宿主机的某个目录,映射到容器中,作为数据存储的目录,我们就可以在宿主机对数据进行存储
数据卷(Data Volumes):容器内数据直接映射到本地主机环境
数据卷特性
1、数据卷可以在容器之间共享和重用,本地与容器间传递数据更高效;
2、对数据卷的修改会立马有效,容器内部与本地目录均可;
3、对数据卷的更新,不会影响镜像,对数据与应用进行了解耦操作;
4、卷会一直存在,直到没有容器使用。
docker 数据卷命令详解

:~$ docker run --help
-v, --volume list Bind mount a volume (default [])
挂载一个数据卷,默认为空

我们可以使用命令 docker run 用来创建容器,可以在使用docker run 命令时添加 -v 参数,就可以创建并挂载一个
到多个数据卷到当前运行的容器中。 -v 参数的作用是将宿主机的一个目录作为容器的数据卷挂载到docker容器
中,使宿主机和容器之间可以共享一个 目录,如果本地路径不存在,Docker也会自动创建—>但是宿主机就不会映射了。

2.3.2 数据卷实践—>主机和容器共享

关于数据卷的管理我们从两个方面来说: 1、目录 2、普通文件
数据卷实践 之 目录

#命令格式:
docker run -itd --name [容器名字] -v [宿主机目录]:[容器目录][镜像名称] [命令(可选)]
#命令演示:
#创建测试文件:
$ echo "file1" > tmp/file1.txt
#启动一个容器,挂载数据卷:
$ docker run -itd --name test1 -v /home/chengpeng/tmp/:/test1/ nginx
#注意宿主机目录需要绝对路径
#测试效果
$ docker exec -it a53c61c77 /bin/bash
root@a53c61c77bde:/# cat /test1/file1.txt
file1
chengpeng@chengpeng:~$ docker run -itd --name test1 -v /home/chengpeng/tmp/:/tmp-text/ nginx
5fe23d16ec59ed29a16267a0f32e1754303d1c48c0c202cb8b06cfd0b04fd904
chengpeng@chengpeng:~$ docker ps -a
CONTAINER ID   IMAGE          COMMAND                   CREATED              STATUS                     PORTS     NAMES
5fe23d16ec59   nginx          "/docker-entrypoint.…"   About a minute ago   Up About a minute          80/tcp    test1
f9f147bcf0b0   nginx          "/docker-entrypoint.…"   3 minutes ago        Exited (0) 3 minutes ago             tmp-nginx
bc58c240aca1   c654adf64b78   "/docker-entrypoint.…"   3 hours ago          Exited (0) 3 hours ago               panda-nginx2
2080b5ed2f08   nginx          "/docker-entrypoint.…"   4 hours ago          Up 4 hours                 80/tcp    panda-nginx1
f4e9887f4e08   nginx          "/docker-entrypoint.…"   4 hours ago          Exited (0) 4 hours ago               panda-nginx
chengpeng@chengpeng:~$ cd tmp/
chengpeng@chengpeng:~/tmp$ ls
chengpeng@chengpeng:~/tmp$ cd /home/chengpeng/tmp/
chengpeng@chengpeng:~/tmp$ ls
chengpeng@chengpeng:~/tmp$ docker exec -it 5fe23d16ec59 /bin/bash
root@5fe23d16ec59:/# ls
bin  boot  dev	docker-entrypoint.d  docker-entrypoint.sh  etc	home  lib  lib32  lib64  libx32  media	mnt  opt  proc	root  run  sbin  srv  sys  tmp	tmp-text  usr  var
root@5fe23d16ec59:/# cd tmp-text/
root@5fe23d16ec59:/tmp-text# ls
root@5fe23d16ec59:/tmp-text# mkdir hello
root@5fe23d16ec59:/tmp-text# ls
root@5fe23d16ec59:/tmp-text# ls   
world
root@5fe23d16ec59:/tmp-text# 

第二个窗口

root@itcast:/home/chengpeng# cd tmp/
root@itcast:/home/chengpeng/tmp# ls
root@itcast:/home/chengpeng/tmp# ls
hello
root@itcast:/home/chengpeng/tmp# rm -rf hello/
root@itcast:/home/chengpeng/tmp# mkdir world
root@itcast:/home/chengpeng/tmp#

数据卷实践 之 文件{不推荐}

#命令格式:
docker run -itd --name [容器名字] -v [宿主机文件]:[容器文件][镜像名称] [命令(可选)]
#命令演示:
#创建测试文件
$ echo "file1" > /tmp/file1.txt
#启动一个容器,挂载数据卷
$ docker run -itd --name test2 -v /home/chengpeng/tmp/file1.txt:/nihao/nihao.sh nginx
#测试效果
:~$ docker exec -it 84c37743 /bin/bash
root@84c37743d339:/# cat /nihao/nihao.sh
file1
chengpeng@chengpeng:~$ docker run -itd --name tmp-txt -v /home/chengpeng/tmp/hello.go:/nihao/nihao.sh nginx
ded5648fc3203f12427546c02863289597ff32d5e64d03a7a066c9bf1741f294
chengpeng@chengpeng:~$ docker ps -a
CONTAINER ID   IMAGE          COMMAND                   CREATED          STATUS                      PORTS     NAMES
ded5648fc320   nginx          "/docker-entrypoint.…"   8 seconds ago    Up 7 seconds                80/tcp    tmp-txt
5fe23d16ec59   nginx          "/docker-entrypoint.…"   12 minutes ago   Up 12 minutes               80/tcp    test1
f9f147bcf0b0   nginx          "/docker-entrypoint.…"   15 minutes ago   Exited (0) 14 minutes ago             tmp-nginx
bc58c240aca1   c654adf64b78   "/docker-entrypoint.…"   3 hours ago      Exited (0) 3 hours ago                panda-nginx2
2080b5ed2f08   nginx          "/docker-entrypoint.…"   4 hours ago      Up 4 hours                  80/tcp    panda-nginx1
f4e9887f4e08   nginx          "/docker-entrypoint.…"   4 hours ago      Exited (0) 4 hours ago                panda-nginx
chengpeng@chengpeng:~$ docker exec -it ded5648fc320 /bin/bash
root@ded5648fc320:/# ls
bin  boot  dev	docker-entrypoint.d  docker-entrypoint.sh  etc	home  lib  lib32  lib64  libx32  media	mnt  nihao  opt  proc  root  run  sbin	srv  sys  tmp  usr  var
root@ded5648fc320:/# cd nihao/
root@ded5648fc320:/nihao# ls
nihao.sh
root@ded5648fc320:/nihao# cat nihao.sh 
1111111111111111111111111111111111111111111111111
root@ded5648fc320:/nihao# 

注意:

1、Docker挂载数据卷的默认读写权限(rw),用户可以通过ro设置为只读
格式:[宿主机文件]:[容器文件]:ro
2、如果直接挂载一个文件到容器,使用文件工具进行编辑,可能会造成文件的改变,从Docker1.1.0起,这会导致
报错误信息。所以推荐的方式是直接挂在文件所在的目录。

2.3.3 数据卷容器简介—>多个容器共享

什么是数据卷容器? 需要在多个容器之间共享一些持续更新的数据,最简单的方式是使用数据卷容器。数据卷容器
也是一个容器,但是它的目的是专门用来提供数据卷供其他容器挂载。
数据卷容器(Data Volume Containers):使用特定容器维护数据卷
简单点:数据卷容器就是为其他容器提供数据交互存储的容器
docker 数据卷命令详解

:~$ docker run --help
。。。
-v, --volumes-from list Mount volumes from the specified container(s) (default[])
#从指定的容器挂载卷,默认为空

数据卷容器操作流程
如果使用数据卷容器,在多个容器间共享数据,并永久保存这些数据,需要有一个规范的流程才能做得到:
1、创建数据卷容器 2、其他容器挂载数据卷容器
注意: 数据卷容器自身并不需要启动,但是启动的时候依然可以进行数据卷容器的工作。

2.3.4 数据卷容器实践

数据卷容器实践包括两部分:创建数据卷容器和使用数据卷容器
创建一个数据卷容器

#命令格式:
docker create -v [容器数据卷目录] --name [容器名字][镜像名称] [命令(可选)]
#执行效果
$ docker create -v /data --name v1-test1 nginx
chengpeng@chengpeng:~$ docker create -v /data-tmp --name v-tmp nginx
8498798a1df0ef96a160afe9a48a202759775feb9cd93d74c2c2e47dcab11d09
chengpeng@chengpeng:~$ docker ps -a
CONTAINER ID   IMAGE          COMMAND                   CREATED          STATUS                      PORTS     NAMES
8498798a1df0   nginx          "/docker-entrypoint.…"   13 seconds ago   Created                               v-tmp
ded5648fc320   nginx          "/docker-entrypoint.…"   15 minutes ago   Up 15 minutes               80/tcp    tmp-txt
5fe23d16ec59   nginx          "/docker-entrypoint.…"   27 minutes ago   Up 27 minutes               80/tcp    test1
f9f147bcf0b0   nginx          "/docker-entrypoint.…"   30 minutes ago   Exited (0) 29 minutes ago             tmp-nginx
bc58c240aca1   c654adf64b78   "/docker-entrypoint.…"   3 hours ago      Exited (0) 3 hours ago                panda-nginx2
2080b5ed2f08   nginx          "/docker-entrypoint.…"   4 hours ago      Up 4 hours                  80/tcp    panda-nginx1
f4e9887f4e08   nginx          "/docker-entrypoint.…"   4 hours ago      Exited (0) 4 hours ago                panda-nginx
chengpeng@chengpeng:~$ 

创建两个容器,同时挂载数据卷容器

#命令格式:
docker run --volumes-from [数据卷容器id/name] -tid --name [容器名字][镜像名称] [命令(可
选)]
#执行效果:
#创建 vc-test1 容器:
docker run --volumes-from 4693558c49e8 -tid --name vc-test1 nginx /bin/bash
#创建 vc-test2 容器:
docker run --volumes-from 4693558c49e8 -tid --name vc-test2 nginx /bin/bash

确认卷容器共享

#进入vc-test1,操作数据卷容器:
:~$ docker exec -it vc-test1 /bin/bash
root@c408f4f14786:/# ls /data/
root@c408f4f14786:/# echo 'v-test1' > /data/v-test1.txt
root@c408f4f14786:/# exit
#进入vc-test2,确认数据卷:
:~$ docker exec -it vc-test2 /bin/bash
root@7448eee82ab0:/# echo 'v-test2' > /data/v-test2.txt
root@7448eee82ab0:/# ls /data/
v-test1.txt
root@7448eee82ab0:/# exit
#回到vc-test1进行验证
:~$ docker exec -it vc-test1 /bin/bash
root@c408f4f14786:/# ls /data/
v-test1.txt v-test2.txt
root@c408f4f14786:/# cat /data/v-test2.txt
v-test2

第一个窗口

chengpeng@chengpeng:~$ docker run --volumes-from 8498798a1df0 -itd --name tmp01 nginx
4c2576bed7aab869699e3c7ba9d951fd4049f2e724bf0d21b24cc24ec0417696
itcast@itcast:~$ docker run --volumes-from 8498798a1df0 -itd --name tmp02 nginx
961f508facbfb6f99d476a29f768a715d2371721f2069044543876b4d620ff71
chengpeng@chengpeng:~$ docker exec -it 4c2576bed7aa /bin/bash
root@4c2576bed7aa:/# ls
bin  boot  data-tmp  dev  docker-entrypoint.d  docker-entrypoint.sh  etc  home	lib  lib32  lib64  libx32  media  mnt  opt  proc  root	run  sbin  srv	sys  tmp  usr  var
root@4c2576bed7aa:/# cd data-tmp/
root@4c2576bed7aa:/data-tmp# ls
root@4c2576bed7aa:/data-tmp# mkdir hello
root@4c2576bed7aa:/data-tmp# ls
root@4c2576bed7aa:/data-tmp# ls
world
root@4c2576bed7aa:/data-tmp# 

第二个窗口

root@itcast:~# docker exec -it 961f508facbf /bin/bash
root@961f508facbf:/# ls
bin  boot  data-tmp  dev  docker-entrypoint.d  docker-entrypoint.sh  etc  home	lib  lib32  lib64  libx32  media  mnt  opt  proc  root	run  sbin  srv	sys  tmp  usr  var
root@961f508facbf:/# cd data-tmp/
root@961f508facbf:/data-tmp# ls
root@961f508facbf:/data-tmp# ls
hello
root@961f508facbf:/data-tmp# rm -rf hello/
root@961f508facbf:/data-tmp# ls
root@961f508facbf:/data-tmp# mkdir world
root@961f508facbf:/data-tmp# ls
world
root@961f508facbf:/data-tmp# 

2.3.5 数据备份原理

为什么需要数据备份和恢复? 工作中很多的容器的数据需要查看,所有需要备份将数据很轻松的拿到本地目录。
原理图:
在这里插入图片描述
数据备份方案: 1 创建一个挂载数据卷容器的容器
2 挂载宿主机本地目录作为备份数据卷
3 将数据卷容器的内容备份到宿主机本地目录挂载的数据卷中
4 完成备份操作后销毁刚创建的容器

2.3.6 数据备份实践

在2.3.4的数据卷容器基础上做数据的备份

#命令格式:
$ docker run --rm --volumes-from [数据卷容器id/name] -v [宿主机目录]:[容器目录][镜像名称]
[备份命令]
#命令演示:
#创建备份目录:
$ mkdir /backup/
#创建备份的容器:
$ docker run --rm --volumes-from 60205766d61a -v /home/chengpeng/backup/:/backup/
nginx tar zcPf /backup/data.tar.gz /data
#验证操作:
$ ls /backup
$ zcat /backup/data.tar.gz

注释: -P:使用原文件的原来属性(属性不会依据使用者而变),恢复字段到它们的原始方式,忽略现有的用户权
限屏蔽位(umask)。 加了-p之后,tar进行解压后,生成的文件的权限,是直接取自tar包里面文件的权限(不会再
使用该用户的umask值进行运算),那么不加-p参数,将还要再减去umask的值(位运算的减),但是如果使用
root用户进行操作,加不加-p参数都一样。

chengpeng@chengpeng:~/backup$ docker ps -a
CONTAINER ID   IMAGE          COMMAND                   CREATED             STATUS                   PORTS     NAMES
961f508facbf   nginx          "/docker-entrypoint.…"   55 minutes ago      Up 55 minutes            80/tcp    tmp02
4c2576bed7aa   nginx          "/docker-entrypoint.…"   55 minutes ago      Up 55 minutes            80/tcp    tmp01
8498798a1df0   nginx          "/docker-entrypoint.…"   About an hour ago   Created                            v-tmp
ded5648fc320   nginx          "/docker-entrypoint.…"   About an hour ago   Up About an hour         80/tcp    tmp-txt
5fe23d16ec59   nginx          "/docker-entrypoint.…"   2 hours ago         Up 2 hours               80/tcp    test1
f9f147bcf0b0   nginx          "/docker-entrypoint.…"   2 hours ago         Exited (0) 2 hours ago             tmp-nginx
bc58c240aca1   c654adf64b78   "/docker-entrypoint.…"   5 hours ago         Exited (0) 5 hours ago             panda-nginx2
2080b5ed2f08   nginx          "/docker-entrypoint.…"   5 hours ago         Up 5 hours               80/tcp    panda-nginx1
f4e9887f4e08   nginx          "/docker-entrypoint.…"   5 hours ago         Exited (0) 5 hours ago             panda-nginx
chengpeng@chengpeng:~/backup$ docker exec -it tmp01 /bin/bash
root@4c2576bed7aa:/# ls
bin  boot  data-tmp  dev  docker-entrypoint.d  docker-entrypoint.sh  etc  home	lib  lib32  lib64  libx32  media  mnt  opt  proc  root	run  sbin  srv	sys  tmp  usr  var
root@4c2576bed7aa:/# cd data-tmp/
root@4c2576bed7aa:/data-tmp# ls
world
root@4c2576bed7aa:/data-tmp# mkdir hello adada
root@4c2576bed7aa:/data-tmp# mkdir golang beego
root@4c2576bed7aa:/data-tmp# ls
adada  beego  golang  hello  world
root@4c2576bed7aa:/data-tmp# exit
exit
chengpeng@chengpeng:~/backup$ docker exec -it tmp02 /bin/bash
root@961f508facbf:/# ls
bin  boot  data-tmp  dev  docker-entrypoint.d  docker-entrypoint.sh  etc  home	lib  lib32  lib64  libx32  media  mnt  opt  proc  root	run  sbin  srv	sys  tmp  usr  var
root@961f508facbf:/# cd data-tmp/
root@961f508facbf:/data-tmp# ls
adada  beego  golang  hello  world
root@961f508facbf:/data-tmp# exit
exit
chengpeng@chengpeng:~/backup$ docker run --rm --volumes-from v-tmp -v /home/chengpeng/backup/:/backup/ nginx tar -zcPf /backup/data.tar.gz /data-tmp
chengpeng@chengpeng:~/backup$ ls
data.tar.gz
chengpeng@chengpeng:~/backup$ 
chengpeng@chengpeng:~/backup$ tar -zxvf data.tar.gz 
tar: 从成员名中删除开头的“/”
/data-tmp/
/data-tmp/beego/
/data-tmp/adada/
/data-tmp/golang/
/data-tmp/hello/
/data-tmp/world/
chengpeng@chengpeng:~/backup$ ls
data.tar.gz  data-tmp
chengpeng@chengpeng:~/backup$ cd data-tmp/
chengpeng@chengpeng:~/backup/data-tmp$ ls
adada  beego  golang  hello  world
chengpeng@chengpeng:~/backup/data-tmp$ 

2.3.7 数据还原原理

原理图:
数据恢复方案
在这里插入图片描述
1、创建一个新的数据卷容器(或删除原数据卷容器的内容)
2、创建一个新容器,挂载数据卷容器,同时挂载本地的备份目录作为数据卷
3、将要恢复的数据解压到容器中
4、完成还原操作后销毁刚创建的容器

2.3.8 数据还原实践

#命令格式:
docker run --rm -itd --volumes-from [数据要到恢复的容器] -v [宿主机备份目录]:[容器备份目录]
[镜像名称] [解压命令]
#命令实践:
#启动数据卷容器:
$ docker start c408f4f14786
#删除源容器内容:
$ docker exec -it vc-test1 bash
root@c408f4f14786:/# rm -rf /data/*
#恢复数据:
docker run --rm --volumes-from v-test -v /home/chengpeng/backup/:/backup/ nginx tar
xPf /backup/data.tar.gz -C /data
#验证:
:~$ docker exec -it vc-test1/bin/bash
root@c408f4f14786:/# ls /data/data/
v-test1.txt v-test2.txt
#新建新的数据卷容器:
:~$ docker create -v /newdata --name v-test2 nginx
#简历新的容器挂载数据卷容器
:~$ docker run --volumes-from a7e9a33f3acb -tid --name vc-test3 nginx /bin/bash
#恢复数据:
docker run --rm --volumes-from v-test2 -v /home/chengpeng/backup/:/backup/ nginx tar
xPf /backup/data.tar.gz -C /newdata
#验证:
:~$ docker exec -it vc-test3 /bin/bash
root@c408f4f14786:/# ls /newdata
v-test1.txt v-test2.txt

注意: 解压的时候,如果使用目录的话,一定要在解压的时候使用 -C 制定挂载的数据卷容器,不然的话容器数据
是无法恢复的,因为容器中默认的backup目录不是数据卷,即使解压后,也看不到文件。
数据是最宝贵的资源,docker在设计上考虑到了这点,并且为数据的操作提供了充分的支持。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/128020.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

设计模式之两阶段终止模式

文章目录 1. 简介 2. 常见思路3. 代码实战 1. 简介 两阶段终止模式&#xff08;Two-Phase Termination Pattern&#xff09;是一种软件设计模式&#xff0c;用于管理线程或进程的生命周期。它包括两个阶段&#xff1a;第一阶段是准备阶段&#xff0c;该阶段用于准备线程或进程…

C++:string类!

Cstring 是C中的字符串。 字符串对象是一种特殊类型的容器&#xff0c;专门设计来操作的字符序列。 不像传统的c-strings,只是在数组中的一个字符序列&#xff0c;我们称之为字符数组&#xff0c;而C字符串对象属于一个类&#xff0c;这个类有很多内置的特点&#xff0c;在操作…

某国产中间件企业:提升研发安全能力,助力数字化建设安全发展

​某国产中间件企业是我国中间件领导者&#xff0c;国内领先的大安全及行业信息化解决方案提供商&#xff0c;为各个行业领域近万家企业客户提供先进的中间件、信息安全及行业数字化产品、解决方案及服务支撑&#xff0c;致力于构建安全科学的数字世界&#xff0c;帮助客户实现…

进程空间管理:用户态和内核态

用户态虚拟空间里面有几类数据&#xff0c;例如代码、全局变量、堆、栈、内存映射区等。在 struct mm_struct 里面&#xff0c;有下面这些变量定义了这些区域的统计信息和位置。 unsigned long mmap_base; /* base of mmap area */ unsigned long total_vm; /* Total page…

人工智能-多层感知机

隐藏层 该模型通过单个仿射变换将我们的输入直接映射到输出&#xff0c;然后进行softmax操作。 如果我们的标签通过仿射变换后确实与我们的输入数据相关&#xff0c;那么这种方法确实足够了。 但是&#xff0c;仿射变换中的线性是一个很强的假设。 线性模型可能会出错 例如&…

【Spring】配置文件-properties和xml

文章目录 1. 前言2. properties配置文件3. xml配置文件4. 总结 1. 前言 在Spring中,配置文件有两种,properties配置文件和xml配置文件 properties配置文件&#xff0c;在Java编程中是一种常见的配置文件形式&#xff0c;文件后缀为“.properties”&#xff0c;属于文本文件。它…

十分钟设置免费海外远程桌面 | 使用Amazon Lightsail服务的免费套餐轻松搭建远程桌面

目录 使用Amazon Lightsail服务的免费套餐轻松搭建远程桌面 1. 启动Amazon Lightsail实例 2. 配置远程桌面 3. 启动远程桌面 4. 使用远程桌面 使用Amazon Lightsail服务的免费套餐轻松搭建远程桌面 前言 ①本教程将向您介绍如何使用Amazon Lightsail服务的免费套餐轻松搭…

知心早安问候语,愿你享受美好的时光,幸福快乐每一天

人生万里路&#xff0c;走好每一步&#xff0c;身体是本钱&#xff0c;平安是财富&#xff0c;开心就是护身符&#xff0c;健康才是摇钱树。新的一天&#xff0c;事事顺意&#xff01; 晨起福门开&#xff0c;快乐安康在&#xff0c;愉悦心态好&#xff0c;生活充满爱&#xf…

DeepXDE学习笔记【1】——简单ODE方程求解

DeepXDE学习笔记【1】——简单ODE方程求解 1、背景 物理信息神经网络(PINN)自从2017年被提出&#xff0c;其应用范围在近两年也被挖掘的越来越广泛&#xff0c;除了可以解决物理方面的问题&#xff0c;信号处理、工程评估等等方向也开始有所涉及&#xff0c;所谓“物理数据双…

【软考】14.3 设计模式

《设计模式》 有下划线&#xff1a;类模式 / 对象模式无下划线&#xff1a;对象模式 创建型 设计模式 创建对象 构建器&#xff08;Builder&#xff09;&#xff1a;类和构造分离抽象工厂&#xff08;Abstract Factory&#xff09;&#xff1a;抽象接口工厂&#xff08;Factor…

MongoDB系例全教程

一、系列文章目录 一、MongoDB安装教程—官方原版 二、MongoDB 使用教程(配置、管理、监控)_linux mongodb 监控 三、MongoDB 基于角色的访问控制 四、MongoDB用户管理 五、MongoDB基础知识详解 六、MongoDB—Indexs 七、MongoDB事务详解 八、MongoDB分片教程 九、Mo…

如何在MacOS使用homebrew安装Nginx

文章目录 Homebrew安装nginxbrew启动Nginxbrew关闭Nginx 参考文章地址 Homebrew安装nginx 在确保MacOS 安装Homebrew成功以后&#xff0c;执行如下命令 brew install nginx注意&#xff1a;Nginx安装成功后会提示目录位置&#xff1b;每个人的系统可能因为Homebrew的安装位置…

【Linux学习笔记】进程概念(下)

进程地址空间1. 虚拟地址2. 什么是进程地址空间3. 进程地址空间的映射。4. 地址空间存在的意义5. 写时拷贝 进程地址空间 1. 虚拟地址 来看这样一段代码。 #include <stdio.h> #include <unistd.h>int global_value 100;int main() {pid_t id fork();if(id &l…

前端CSS

文章目录 引入标签的两大重要属性&#xff1a;区分标签class属性id属性学习CSS流程 CSS前言CSS层叠样式表1.CSS组成2.css语法结构3.注释语法4.引入css的多种方式 CSS选择器1.CSS基本选择器2.CSS组成选择器3.分组与嵌套4.属性选择器5.伪类选择器6.伪元素选择器 选择器优先级CSS继…

基于深度学习的水果识别 计算机竞赛

1 前言 Hi&#xff0c;大家好&#xff0c;这里是丹成学长&#xff0c;今天做一个 基于深度学习的水果识别demo 这是一个较为新颖的竞赛课题方向&#xff0c;学长非常推荐&#xff01; &#x1f9ff; 更多资料, 项目分享&#xff1a; https://gitee.com/dancheng-senior/pos…

什么情况会造成电表不走数?

电表是衡量用电量的重要设备&#xff0c;一旦出现不走数的情况&#xff0c;不仅会影响用户对用电量的准确计算&#xff0c;还可能造成电费纠纷。那么&#xff0c;究竟什么情况下会造成电表不走数呢&#xff1f;接下来&#xff0c;小编来为大家介绍下&#xff0c;一起来看下吧&a…

傅里叶分析和小波分析

从傅里叶变换到小波变换&#xff0c;并不是一个完全抽象的东西&#xff0c;可以讲得很形象。小波变换有着明确的物理意义&#xff0c;如果我们从它的提出时所面对的问题看起&#xff0c;可以整理出非常清晰的思路。 下面我就按照傅里叶-->短时傅里叶变换-->小波变换的顺…

Python---字符串切片-----序列名称[开始位置下标 : 结束位置下标 : 步长]

字符串切片&#xff1a;是指对操作的对象截取其中一部分的操作。字符串、列表、元组都支持切片操作。 本文以字符串为例。 基本语法&#xff1a; 顾头不顾尾&#xff1a; ----------类似range&#xff08;&#xff09; 范围&#xff0c;顾头不顾尾 相关链接Python----ran…

python使用ffmpeg来制作音频格式转换工具(优化版)

简介:一个使用python加上ffmpeg模块来进行音频格式转换的工具。 日志: 20231030:第一版,设置了简单的UI布局和配色,实现音频转为Mp3、AAC、wav、flac四种格式。可解析音频并显示信息,可设置转换后的保存路径 UI界面: 编程平台:visual studio code 编程语言:python 3…

SuperMap iServer 11i(2023)安全性提升汇总

作者&#xff1a;lisong 目录 账户信息合规度校验规则扩展功能图片验证码登录功能Web服务提供者密码加密数据库密码加密漏洞修复 SuperMap iServer 11i&#xff08;2023&#xff09;产品安全性相关的提升众多&#xff0c;涵盖账户安全、服务安全以及漏洞修复等方面&#xff0c;…