一、docker概述

1、docker为什么会出现

本质:所有技术的出现都是因为出现了一些问题,我们需要去解决,才去研究和学习;

问题:

​ 开发环境、测试环境、仿真环境、正式环境等诸多环境都需要进行频繁的服务更新、环境维护等;

​ 不同的环境由于成本的问题很难做到完全一致和统一,导致同样的服务在不同环境出现服务不可用等问题;

docker给以上问题提出的解决方案:带上运行环境一起打包、更新、上线即可。docker的核心思想就是打包装箱,每个箱子互相隔离,互不影响。

2、docker为什么火

核心原因:docker十分的轻巧。因为在容器技术出现之前我们使用的都是虚拟技术。

虚拟机:在windows上面安装一个vmware虚拟机软件,通过这个软件我们可以虚拟出多台机器;其实虚拟机属于虚拟化技术,docker容器技术其实也属于虚拟化技术。

虚拟机和docker对比:

传统虚拟机技术:虚拟机相关硬件资源,运行一个完整的操作系统,然后在该操作系统上面安装和运行相关需要的软件;
容器技术:容器公用宿主机相关硬件资源,容器没有自己的内核也没有虚拟任何硬件,这样就轻便了许多。每个容器都相互隔离,并且拥有自己的文件系统,互不影响;

3、docker优势

  • 应用更加快速的交付和部署

    传统:一堆帮助文档和安装程序;

    docker:打包镜像、发布测试一件运行;

  • 更便捷的升级和扩容

    使用docker之后,我们部署应用就跟搭积木一样,项目打包为一个镜像,可以很方便的扩展容器1、容器2等

  • 更简单的系统维护

    docker之后,我们的开发环境、测试环境、线上环境是高度一致的;

  • 更高效的计算资源利用

    docker是一个内核级别的虚拟化技术,可以在一台物理机上运行多个容器实例。服务器的性能可以被压榨到极致;

二、docker安装

1、docker基本组成

![image-20210306142331618](/Users/zhaoyang/Library/Application Support/typora-user-images/image-20210306142331618.png)

  • 镜像(image)

    docker镜像就好比是一个目标,可以通过这个目标来创建容器服务,tomcat镜像>run>容器(提

    供服务器),通过这个镜像可以创建多个容器(最终服务运行或者项目运行就是在容器中的)。

  • 容器(container)

    Docker利用容器技术,独立运行一个或者一组应用,通过镜像来创建的.

    启动,停止,删除,基本命令

    目前就可以把这个容器理解为就是一个简易的 Linux系统。

  • 仓库(repository)

    仓库就是存放镜像的地方!

    仓库分为公有仓库和私有仓库。(很类似git)

    Docker Hub是国外的。

2、docker安装

直接yum安装即可:

#查看linux内核版本
[root@ecs-x-large-2-linux-20200305213344 ~]# uname -r
3.10.0-1160.6.1.el7.x86_64#查看系统版本详情
[root@ecs-x-large-2-linux-20200305213344 ~]# cat /etc/os-release
NAME="CentOS Linux"
VERSION="7 (Core)"
ID="centos"
ID_LIKE="rhel fedora"
VERSION_ID="7"
PRETTY_NAME="CentOS Linux 7 (Core)"
ANSI_COLOR="0;31"
CPE_NAME="cpe:/o:centos:centos:7"
HOME_URL="https://www.centos.org/"
BUG_REPORT_URL="https://bugs.centos.org/"
CENTOS_MANTISBT_PROJECT="CentOS-7"
CENTOS_MANTISBT_PROJECT_VERSION="7"
REDHAT_SUPPORT_PRODUCT="centos"
REDHAT_SUPPORT_PRODUCT_VERSION="7"#查看docker是否安装成功
[root@ecs-x-large-2-linux-20200305213344 ~]# docker version
Client:Version:         1.13.1API version:     1.26Package version: docker-1.13.1-203.git0be3e21.el7.centos.x86_64Go version:      go1.10.3Git commit:      0be3e21/1.13.1Built:           Thu Nov 12 15:11:46 2020OS/Arch:         linux/amd64Server:Version:         1.13.1API version:     1.26 (minimum version 1.12)Package version: docker-1.13.1-203.git0be3e21.el7.centos.x86_64Go version:      go1.10.3Git commit:      0be3e21/1.13.1Built:           Thu Nov 12 15:11:46 2020OS/Arch:         linux/amd64Experimental:    false#测试docker[root@ecs-x-large-2-linux-20200305213344 ~]# docker run hello-world
Unable to find image 'hello-world:latest' locally
Trying to pull repository docker.io/library/hello-world ...
latest: Pulling from docker.io/library/hello-world
b8dfde127a29: Pull complete
Digest: sha256:89b647c604b2a436fc3aa56ab1ec515c26b085ac0c15b0d105bc475be15738fb
Status: Downloaded newer image for docker.io/hello-world:latestHello 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.(amd64)3. The Docker daemon created a new container from that image which runs theexecutable that produces the output you are currently reading.4. The Docker daemon streamed that output to the Docker client, which sent itto your terminal.To try something more ambitious, you can run an Ubuntu container with:$ docker run -it ubuntu bashShare 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@ecs-x-large-2-linux-20200305213344 ~]# docker images
REPOSITORY              TAG                 IMAGE ID            CREATED             SIZE
docker.io/hello-world   latest              d1165f221234        7 hours ago         13.3 kB
docker.io/nginx         latest              35c43ace9216        2 weeks ago         133 MB

3、docker运行原理

docker是一个client-server结构的系统,docker的守护进程运行在主机上,通过socker从客户端访问。server接收到client指令,就只执行这个命令。

三、docker常用命令

1、帮助命令

docker version #显示dokcer版本信息
docker info #显示docker的系统信息,包括镜像和容器数量
docker 命令 --help #帮助命令

2、镜像命令

docker images #查看所有本地主机上的镜像
docker search #搜索某个镜像
docker pull #下载镜像
docker rmi #删除镜像

docker images #查看所有本地主机上的镜像

[root@ecs-x-large-2-linux-20200305213344 ~]# docker images
REPOSITORY              TAG                 IMAGE ID            CREATED             SIZE
docker.io/hello-world   latest              d1165f221234        7 hours ago         13.3 kB
docker.io/nginx         latest              35c43ace9216        2 weeks ago         133 MB
#解释#REPOSITORY  镜像的仓库源
#TAG         镜像标签
#IMAGE ID    镜像id
#CREATED     镜像创建时间
#SIZE        镜像大小#可选项
Options:-a, --all             Show all images (default hides intermediate images)#查看所有镜像-q, --quiet           Only show numeric IDs #只显示镜像id[root@ecs-x-large-2-linux-20200305213344 ~]# docker images -aq  #显示所有镜像id
d1165f221234
35c43ace9216

docker pull #下载镜像

#下载镜像 docker pull 镜像名[:tag]  如果不写tag默认下载最新
[root@ecs-x-large-2-linux-20200305213344 ~]# docker pull redis
Using default tag: latest
Trying to pull repository docker.io/library/redis ...
latest: Pulling from docker.io/library/redis
45b42c59be33: Already exists   #分层下载
5ce2e937bf62: Pull complete
2a031498ff58: Pull complete
2f3d47096658: Pull complete
04f5cb8ac4c0: Pull complete
9ed141398658: Pull complete
Digest: sha256:9a1a2bb9fd2bd8b2c15aaca44d8e6ba8bc448df9b7b8d7d24ba4b472e0da1b8a
Status: Downloaded newer image for docker.io/redis:latest #镜像的真实地址

docker rmi #删除镜像

docker rmi -f 镜像id #删除指定的镜像
docker rmi -f 镜像id 镜像id #删除指定的镜像
docker rmi -f $(docker images -aq) #删除全部的镜像

3、容器命令

备注:我们有了镜像才能创建容器

docker run 镜像id #新建容器并启动
docker ps #列出所有运行的容器
docker rm 容器id #删除指定容器
docker start 容器id #启动容器
docker restart容器id #重启容器
docker stop 容器id #停止当前正在运行的容器
docker kill 容器id #强制停止当前容器
#查看容器所有命令
[root@ecs-x-large-2-linux-20200305213344 ~]# docker containerUsage:    docker container COMMANDManage containersOptions:--help   Print usageCommands:attach      Attach to a running containercommit      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 on a container's filesystemexec        Run a command in a running containerexport      Export a container's filesystem as a tar archiveinspect     Display detailed information on one or more containerskill        Kill one or more running containerslogs        Fetch the logs of a containerls          List containerspause       Pause all processes within one or more containersport        List port mappings or a specific mapping for the containerprune       Remove all stopped containersrename      Rename a containerrestart     Restart one or more containersrm          Remove one or more containersrun         Run a command in a new containerstart       Start one or more stopped containersstats       Display a live stream of container(s) resource usage statisticsstop        Stop one or more running containerstop         Display the running processes of a containerunpause     Unpause all processes within one or more containersupdate      Update configuration of one or more containerswait        Block until one or more containers stop, then print their exit codes

新建容器并启动

docker runb [可选参数] image
#参数说明
--name =”name“ #容器名字,用于区分不同的的容器
-d #后台运行
-it #使用交互模式运行,进入容器查看相关内容
-p #指定容器端口-p 主机端口:容器端口#测试-it
[root@ecs-x-large-2-linux-20200305213344 ~]# docker run -it 300e315adb2f /bin/bash
[root@9f5b41ce646c /]# ls
bin  dev  etc  home  lib  lib64  lost+found  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
[root@9f5b41ce646c /]# exit  #退出容器
exit#测试 --name -p -d
[root@ecs-x-large-2-linux-20200305213344 ~]# docker run --name nginx01 -d -p 3334:80 35c43ace9216
cacf7a960d29dc24755f6b9896aaa85f2e9f902ff7f620470c907acf5e17bd7a
[root@ecs-x-large-2-linux-20200305213344 ~]# curl localhost:3334
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title> #成功访问3334端口
<style>body {width: 35em;margin: 0 auto;font-family: Tahoma, Verdana, Arial, sans-serif;}
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p><p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p><p><em>Thank you for using nginx.</em></p>
</body>
</html>#测试是否后台运行
[root@ecs-x-large-2-linux-20200305213344 ~]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED              STATUS              PORTS                  NAMES
cacf7a960d29        35c43ace9216        "/docker-entrypoin..."   About a minute ago   Up About a minute   0.0.0.0:3334->80/tcp   nginx01

列出所有运行的容器

#docker ps #列出当前正在运行的容器
Options:-a, --all             Show all containers (default shows just running)#列出目前所有容器-q, --quiet           Only display numeric IDs #只显示容器id[root@ecs-x-large-2-linux-20200305213344 ~]# docker ps -aq    #显示所有容器id
9f5b41ce646c
7aab85f14183

退出容器

exit #退出容器

删除容器

docker rm 容器id #删除指定的容器,不能删除正在运行的容器,如果要强制删除 rm -rf docker
rm -f $(docker ps -aq) #删除指定的容器
docker ps -a -q|xargs docker rm #删除所有的容器

启动和停止容器

docker start 容器id #启动容器
docker restart 容器id #重启容器
docker stop 容器id #停止当前正在运行的容器
docker kill 容器id #强制停止当前容器

查看日志

[root@ecs-x-large-2-linux-20200305213344 ~]# docker logs --helpOptions:--details        Show extra details provided to logs-f, --follow         Follow log output--help           Print usage--since string   Show logs since timestamp--tail string    Number of lines to show from the end of the logs (default "all")-t, --timestamps     Show timestamps#显示日志
-tf #显示日志信息(一直更新)
--tail number #需要显示日志条数
docker logs -t --tail n 容器id #查看n行日志 docker logs -ft 容器id #跟着日志

查看容器中的进程信息

#docker top 容器id
[root@ecs-x-large-2-linux-20200305213344 ~]# docker top cacf7a960d29
UID                 PID                 PPID                C                   STIME               TTY                 TIME                CMD
root                27859               27841               0                   16:26               ?                   00:00:00            nginx: master process nginx -g daemon off;
101                 27908               27859               0                   16:26               ?                   00:00:00            nginx: worker process

查看容器元数据

#docker inspect 容器id
[root@ecs-x-large-2-linux-20200305213344 ~]# docker inspect cacf7a960d29
[{"Id": "cacf7a960d29dc24755f6b9896aaa85f2e9f902ff7f620470c907acf5e17bd7a","Created": "2021-03-06T08:26:19.015315592Z","Path": "/docker-entrypoint.sh","Args": ["nginx","-g","daemon off;"],"State": {"Status": "running","Running": true,"Paused": false,"Restarting": false,"OOMKilled": false,"Dead": false,"Pid": 27859,"ExitCode": 0,"Error": "","StartedAt": "2021-03-06T08:26:19.32665951Z","FinishedAt": "0001-01-01T00:00:00Z"},"Image": "sha256:35c43ace9216212c0f0e546a65eec93fa9fc8e96b25880ee222b7ed2ca1d2151","ResolvConfPath": "/var/lib/docker/containers/cacf7a960d29dc24755f6b9896aaa85f2e9f902ff7f620470c907acf5e17bd7a/resolv.conf","HostnamePath": "/var/lib/docker/containers/cacf7a960d29dc24755f6b9896aaa85f2e9f902ff7f620470c907acf5e17bd7a/hostname","HostsPath": "/var/lib/docker/containers/cacf7a960d29dc24755f6b9896aaa85f2e9f902ff7f620470c907acf5e17bd7a/hosts","LogPath": "","Name": "/nginx01","RestartCount": 0,"Driver": "overlay2","MountLabel": "","ProcessLabel": "","AppArmorProfile": "","ExecIDs": null,"HostConfig": {

进入当前正在运行的容器

#我们通常容器都是在后台运行方式,如果需要修改一些配置或其他操作,那么我们需要进入运行的容器
#方式一:docker exec - it容器id /bin/bash
[root@ecs-x-large-2-linux-20200305213344 ~]# docker exec -it cacf7a960d29 /bin/bash
root@cacf7a960d29:/# ls
bin   dev          docker-entrypoint.sh  home  lib64  mnt  proc  run   srv  tmp  var
boot  docker-entrypoint.d  etc           lib   media  opt  root  sbin  sys  usr
#方式二:docker attach 容器id
[root@ecs-x-large-2-linux-20200305213344 ~]# docker attach cacf7a960d29
正在执行的代码******
[root@ecs-x-large-2-linux-20200305213344 ~]#  #ctrl+c 退出
#区别
#docker exec #进入当前容器后开启一个新的终端,可以在里面操作。(常用)
#docker attach # 进入容器正在执行的终端

从容器内拷贝到主机

#docker cp 容器id:容器内路径 主机目的路径#测试
#进入容器内部
[root@ecs-x-large-2-linux-20200305213344 ~]# docker exec -it cacf7a960d29 /bin/bash
root@cacf7a960d29:/# ls
bin   dev          docker-entrypoint.sh  home  lib64  mnt  proc  run   srv  tmp  var
boot  docker-entrypoint.d  etc           lib   media  opt  root  sbin  sys  usr
#新建一个文件
root@cacf7a960d29:/# echo "hello" >test.java
root@cacf7a960d29:/# ls
bin   dev          docker-entrypoint.sh  home  lib64  mnt  proc  run   srv  test.java  usr
boot  docker-entrypoint.d  etc           lib   media  opt  root  sbin  sys  tmp        var
#退出容器
exit
#拷贝
docker cp cacf7a960d29:test.java /home/
#验证是否copy到主机
[root@ecs-x-large-2-linux-20200305213344 ~]# ls /home/
test.java

commit镜像

命令:docker commit -m=“描述信息” -a=“作者” 容器id 目标镜像名:[tag]实战测试:
#1、启动tomcat默认镜像文件
[root@ecs-x-large-2-linux-20200305213344 ~]# docker run -d -p 3344:8080 bf4709e77b18
7984fe235242c4164dcede5053663a44db96ae89e0035a13e351faab03634d17
#2、查看容器的webapp文件
[root@ecs-x-large-2-linux-20200305213344 ~]# docker exec -it 7984fe235242c4164dcede5053663a44db96ae89e0035a13e351faab03634d17 /bin/bash
root@7984fe235242:/usr/local/tomcat# ls
BUILDING.txt     LICENSE  README.md  RUNNING.txt  conf  logs        temp     webapps.dist
CONTRIBUTING.md  NOTICE   RELEASE-NOTES  bin          lib   native-jni-lib  webapps  work
root@7984fe235242:/usr/local/tomcat# cd webapps
root@7984fe235242:/usr/local/tomcat/webapps# ls
#3、拷贝webapps.dist下文件到webapps下
root@7984fe235242:/usr/local/tomcat# cp -r webapps.dist/* webapps/
root@7984fe235242:/usr/local/tomcat# ls webapps
ROOT  docs  examples  host-manager  manager
root@7984fe235242:/usr/local/tomcat#
#4、将该容器提交为一个新的镜像文件
[root@ecs-x-large-2-linux-20200305213344 ~]# docker commit -m="梵响测试容器提交为一个新的镜像" -a="fanxiang" 7984fe235242c4164dcede5053 tomcat01:1.0
sha256:3622a772f2315dc2d22140698a45cc8c30a9c8b5e7fb961937429307669ced92
[root@ecs-x-large-2-linux-20200305213344 ~]# docker images
REPOSITORY              TAG                 IMAGE ID            CREATED             SIZE
tomcat01                1.0                 3622a772f231        12 seconds ago      672 MB
docker.io/hello-world   latest              d1165f221234        2 days ago          13.3 kB
docker.io/redis         5.0                 d00afcde654e        5 days ago          98.4 MB
docker.io/redis         latest              f877e80bb9ef        5 days ago          105 MB
docker.io/nginx         latest              35c43ace9216        2 weeks ago         133 MB
docker.io/tomcat        latest              bf4709e77b18        3 weeks ago         667 MB
docker.io/centos        latest              300e315adb2f        3 months ago        209 MB

save镜像

[root@ecs-x-large-2-linux-20200305213344 ~]#docker save --help
Usage:  docker save [OPTIONS] IMAGE [IMAGE...]
Save one or more images to a tar archive (streamed to STDOUT by default)
Options:--help            Print usage-o, --output string   Write to a file, instead of STDOUT实战:
[root@ecs-x-large-2-linux-20200305213344 ~]# docker save -o /home/redis01.tar docker.io/redis:5.0
[root@ecs-x-large-2-linux-20200305213344 ~]# ls /home
redis01.tar  test.java  tomcat02.tar

load镜像

[root@ecs-x-large-2-linux-20200305213344 ~]# docker load --help
Usage:  docker load [OPTIONS]
Load an image from a tar archive or STDIN
Options:--help           Print usage-i, --input string   Read from tar archive file, instead of STDIN-q, --quiet          Suppress the load output
实战:[root@ecs-x-large-2-linux-20200305213344 ~]# docker load -i /home/redis01.tar
01b7eeecc774: Loading layer [==================================================>]  24.7 MB/24.7 MB
f2df42e57d5e: Loading layer [==================================================>] 1.536 kB/1.536 kB
b537eb7339bc: Loading layer [==================================================>] 3.584 kB/3.584 kB
Loaded image: docker.io/redis:5.0
[root@ecs-x-large-2-linux-20200305213344 ~]# docker images
REPOSITORY              TAG                 IMAGE ID            CREATED             SIZE
docker.io/hello-world   latest              d1165f221234        2 days ago          13.3 kB
docker.io/redis         5.0                 d00afcde654e        5 days ago          98.4 MB
docker.io/redis         latest              f877e80bb9ef        5 days ago          105 MB
docker.io/nginx         latest              35c43ace9216        2 weeks ago         133 MB
docker.io/tomcat        latest              bf4709e77b18        3 weeks ago         667 MB
docker.io/centos        latest              300e315adb2f        3 months ago        209 MB

4、命令总结

![image-20210306164709448](/Users/zhaoyang/Library/Application Support/typora-user-images/image-20210306164709448.png)

四、docker镜像

1、镜像是什么

镜像是一种轻量级、可执行的独立软件包,用来打包软件运行环境和基于运行环境开发的软件,它包含了运行某个软件所需的所有内容,包括代码、运行时库、环境变量和配置问价等。将所有的应用和环境直接打包成镜像,就可以直接运行。

2、镜像分层原理

docker的镜像实际上由一层一层的文件系统组成,这种层级的文件系统UnionFS。平时我们安装进虚拟机的CentOS都是好几个G,为什么Docker这里才200M?

对于个精简的OS,rootfs可以很小,只需要包合最基本的命令,工具和程序库就可以了,因为底层直接用 Host的kernel,自己只需要提供rootfs就可以了。由此可见对于不同的Linux发行版, boots基本是一致 的, rootfs会有差別,因此不同的发行版可以公用bootfs. 虚拟机是分钟级别,容器是秒级!

3、分层理解

[root@ecs-x-large-2-linux-20200305213344 ~]# docker pull redis:5.0
Trying to pull repository docker.io/library/redis ...
5.0: Pulling from docker.io/library/redis
45b42c59be33: Already exists
5ce2e937bf62: Already exists
2a031498ff58: Already exists
ec50b60c87ea: Pull complete
2bf0c804a5c0: Pull complete
6a3615492950: Pull complete
Digest: sha256:6ba62effb31d8d74e6e2dec4b7ef9c8985e7fcc85c4f179e13f622f5785a4135
Status: Downloaded newer image for docker.io/redis:5.0

docker镜像为什么要采用这种分层的结构呢?

最大的好处,我觉得莫过于资源共享了!比如有多个镜像都从相同的Base镜像构建而来,那么宿主机
只需在磁盘上保留一份base镜像,同时内存中也只需要加载一份base镜像,这样就可以为所有的容器
服务了,而且镜像的每一层都可以被共享。

总结:
所有的 Docker镜像都起始于一个基础镜像层,当进行修改或培加新的内容时,就会在当前镜像层之
上,创建新的镜像层。Docker 镜像都是只读的,当容器启动时,一个新的可写层加载到镜像的顶部!这一层就是我们通常说的容器层,容器之下的都叫镜像层!

查看docker镜像分层信息

命令:docker inspect 镜像id或镜像名称

[root@ecs-x-large-2-linux-20200305213344 ~]# docker inspect d00afcde654e
[{"Id": "sha256:d00afcde654e3125384d52fb872c88986d2046fa598a12abcee52ff0d98e7562","RepoTags": ["docker.io/redis:5.0"],"RepoDigests": ["docker.io/redis@sha256:6ba62effb31d8d74e6e2dec4b7ef9c8985e7fcc85c4f179e13f622f5785a4135"],"Parent": "","Comment": "","Created": "2021-03-02T23:29:46.396151327Z","Container": "6a7820655f2592fdc2b254036170652520beb98f79a41e6aedc17987ccec3829","ContainerConfig": {"Hostname": "6a7820655f25","Domainname": "","User": "","AttachStdin": false,"AttachStdout": false,"AttachStderr": false,"ExposedPorts": {"6379/tcp": {}},"Tty": false,"OpenStdin": false,"StdinOnce": false,"Env": ["PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin","GOSU_VERSION=1.12","REDIS_VERSION=5.0.12","REDIS_DOWNLOAD_URL=http://download.redis.io/releases/redis-5.0.12.tar.gz","REDIS_DOWNLOAD_SHA=7040eba5910f7c3d38f05ea5a1d88b480488215bdbd2e10ec70d18380108e31e"],"Cmd": ["/bin/sh","-c","#(nop) ","CMD [\"redis-server\"]"],"Image": "sha256:f43399b52be67a391b4bf53e210c55002a2bce5e4fa5f1021d4dc9725ec7f537","Volumes": {"/data": {}},"WorkingDir": "/data","Entrypoint": ["docker-entrypoint.sh"],"OnBuild": null,"Labels": {}},"DockerVersion": "19.03.12","Author": "","Config": {"Hostname": "","Domainname": "","User": "","AttachStdin": false,"AttachStdout": false,"AttachStderr": false,"ExposedPorts": {"6379/tcp": {}},"Tty": false,"OpenStdin": false,"StdinOnce": false,"Env": ["PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin","GOSU_VERSION=1.12","REDIS_VERSION=5.0.12","REDIS_DOWNLOAD_URL=http://download.redis.io/releases/redis-5.0.12.tar.gz","REDIS_DOWNLOAD_SHA=7040eba5910f7c3d38f05ea5a1d88b480488215bdbd2e10ec70d18380108e31e"],"Cmd": ["redis-server"],"Image": "sha256:f43399b52be67a391b4bf53e210c55002a2bce5e4fa5f1021d4dc9725ec7f537","Volumes": {"/data": {}},"WorkingDir": "/data","Entrypoint": ["docker-entrypoint.sh"],"OnBuild": null,"Labels": null},"Architecture": "amd64","Os": "linux","Size": 98358570,"VirtualSize": 98358570,"GraphDriver": {"Name": "overlay2","Data": {"LowerDir": "/var/lib/docker/overlay2/343be33bc297acdf8bc2b57b335c025ea76b8d1263548ba269c0aefb81aaf28d/diff:/var/lib/docker/overlay2/3302ce8415cd3a8a1e1e9753eebbb38df5b15cc02fef109e30be41f4310ee810/diff:/var/lib/docker/overlay2/44c8b45db6fd63960703e604f43a4acc5633f09a3a91a8d7263ad2f9bfd0d038/diff:/var/lib/docker/overlay2/5eb368e142c6079aa1f507149216281ca79b5df08ba19bad51390d74dfbf3c1f/diff:/var/lib/docker/overlay2/219cf0492ba08d03dc4f2a5649ec1124fff82ebe22c6f9a0a26ccf303be0e0d1/diff","MergedDir": "/var/lib/docker/overlay2/d38f31592715a55459f4556623786c5878014bf8ffdcc1e88506069e32ba75dc/merged","UpperDir": "/var/lib/docker/overlay2/d38f31592715a55459f4556623786c5878014bf8ffdcc1e88506069e32ba75dc/diff","WorkDir": "/var/lib/docker/overlay2/d38f31592715a55459f4556623786c5878014bf8ffdcc1e88506069e32ba75dc/work"}},"RootFS": {"Type": "layers",  "Layers": [     #镜像分层信息"sha256:9eb82f04c782ef3f5ca25911e60d75e441ce0fe82e49f0dbf02c81a3161d1300","sha256:f973e3e0e07c6e9f9418a6dd0c453cd70c7fb87a0826172275883ab4bdb61bf4","sha256:c16b4f3a3f99ebbcd59795b54faf4cdf2e00ee09b85124fda5d0746d64237ca6","sha256:01b7eeecc774b7669892f89fc8b84eea781263448978a411f0f429b867410fc5","sha256:f2df42e57d5eef289656ef8aad072d2828a61e93833e2928a789a88bc2bc1cbc","sha256:b537eb7339bcbff729ebdc63a0f910b39ae3d5540663a74f55081b62e92f66e3"]}}
]

测试工程师Docker基础相关推荐

  1. 渗透测试工程师零基础学习教程2023年最新版,想入门学习这一篇就够了。

    什么是渗透测试? 渗透测试是指通过模拟黑客攻击的方式,评估一个系统或网络的安全性能,以发现潜在的漏洞或安全弱点.渗透测试通常包括对目标系统或网络进行多种攻击方式的测试,如密码破解.漏洞利用.社会工程学 ...

  2. 成为一个优秀的测试工程师需要具备哪些知识和经验?

    先说下做软件测试所必须掌握的技能范围 我按照薪资的不同大致划分成3个档位: 月薪5-9k:从零基础入门到能够找到工作 月薪15-25k:测试在职搞定性能测试和自动化测试 年薪30W+:搞定测试开发,进 ...

  3. 测试工程师真的35岁就干不动了吗?

    能干的,依然能够很好的在这个行业发展,干不了的,注定会被一浪比一浪高的后浪,拍死在沙滩上. 如果你到了这个年龄,还没有到高级测试开发工程师或者架构师的级别,那么真的是不好干了. 如果你是30+的年龄, ...

  4. 零基础学软件测试难吗?小白怎么半年内成为测试工程师

    软件测试(Software Testing),描述一种用来促进鉴定软件的正确性.完整性.安全性和质量的过程.换句话说,软件测试是一种实际输出与预期输出之间的审核或者比较过程.软件测试的经典定义是:在规 ...

  5. 摸爬滚打大半年,我是如何从零基础进阶到渗透测试工程师

    前言 做渗透测试工程师工作也好几年了,想当年,自己也是从零基础小白开始学起,在这期间摸爬滚打之中,遭遇到了服务器被黑,网站被人DDOS攻击,数据库被篡改等等-服务器也不是你说不让人上就不让人上的,所以 ...

  6. [转载]面向非射频测试工程师的射频测量技术基础

    http://blog.sciencenet.cn/home.php?mod=space&uid=80520&do=blog&id=453587 [以下内容均收集自网络,必要处 ...

  7. 软件测试体系学习及构建(13)-测试基础之测试工程师的基本要求

    (13)-测试基础之测试工程师的基本要求 1 软性能力 1.1 沟通表达能力 1.2 逻辑思维能力 1.3 原则和立场 1.4 情绪管理 1.5 抗压性 1.6 学习成长 1.7 时间管理 1.8 问 ...

  8. 软件测试基础丨测试工程师之间要善于发现闪光点——测试理念篇

    测试理念有多种,有一些理念,深藏于我的心中, 而这些理念,您或许偶尔想到,却没有说出,或许您感受到了,却因为工作生活的忙碌,没有将其背后的含义想具体, 在此我非常愿意和大家进行分享这些理念. 第一篇: ...

  9. 测试工程师必备linux基础一(服务器磁盘篇)

    测试工程师必备linux基础 第一篇服务器磁盘认识及操作 测试过程中,有一个很重要的东西,测试环境搭建,希望大家在看了本文后能够对于磁盘有一个初步的概念.本文讲述linux服务器中,磁盘的操作流程,R ...

  10. 测试工程师的面试基础题目

    前言 例如:测试工程师面试题目 1.软件的生命周期有哪些阶段? 需求阶段 分析和学习阶段,团队去查看这个需求是不是可测的 计划阶段 辨别出哪些活动和资源和测试的目标时匹配的,辨别并追踪这些测试的指标. ...

最新文章

  1. mysql with语句_MySQL列举数据库(SHOW DATABASES语句)
  2. python横向柱状图-python绘制横向水平柱状条形图Bar
  3. Android之LinearLayout线性布局
  4. linux cache and buffer【转】
  5. 巨型机是一种什么的超级计算机,这个世界其实是一个超级计算机
  6. iso qemu 安装ubuntu_我该如何安装qemu?
  7. java记住用户名和密码_JAVA--高级基础开发Cookie实现记住用户名和密码
  8. ORA-600 各个参数含义说明
  9. 读书笔记《推荐系统实践》- 个性化推荐系统总结
  10. latex中文小标题_latex定制标题样式
  11. 文件上传5-uploads靶场
  12. 2022 年 React Native 的全新架构更新
  13. sql注入学习笔记1
  14. freemarker导出excel单元格内换行
  15. 解决谷歌浏览器Chrome不能播放央视新闻视频的问题
  16. docker生态-mysql客户端phpAdmin
  17. Java进阶(七)Java加密技术之非对称加密算法RSA
  18. 新年新气象,2021来了,用Python换一张头像迎新年吧!
  19. C++ —— 宏对于简化类接口的奇技淫巧
  20. (中级)系统集成项目管理工程师常用英语汇总

热门文章

  1. Linux 操作系统下的指纹开发
  2. [王垠系列]GTF - Great Teacher Friedman
  3. 汇编语言 王爽 第四版 第二章 检测点2.1
  4. 廖雪峰Python学习
  5. linux系统怎么改输入法,linux系统输入法怎么切换
  6. 常规英文字体 电商_最强电商美工逆袭系列1——最全的电商字体应用详解
  7. linux运维零基础学习,没有基础怎么学习Linux运维?Linux学习
  8. 计算不确定度(C语言-大物实验)-复制即可使用
  9. 《软件项目管理案例教程》应考概念要点及重点整理
  10. 计算机系统运维服务方案,xx局信息化系统运维服务方案+标准版.doc