学习笔记:Docker

一、认识Docker

在这里插入图片描述

1.1 概述

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

Sandboxie(又叫沙箱、沙盘)即是一个虚拟系统程序,允许你在沙盘环境中运行浏览器或其他程序,因此运行所产生的变化可以随后删除。它创造了一个类似沙盒的独立作业环境,在其内部运行的程序并不能对硬盘产生永久性的影响。 在网络安全中,沙箱指在隔离环境中,用以测试不受信任的文件或应用程序等行为的工具。

1.2 相关链接

Docker官网:https://www.docker.com/
Github Docker 源码:https://github.com/docker/docker-ce
Daocker菜鸟教程:https://www.runoob.com/docker/docker-tutorial.html

二、Docker(Centos7)安装、卸载

Docker支持以下的64位Centos版本:Centos7、Centos8、…(更高版本)

#查看CentOS版本
uname -r

在这里插入图片描述

2.1 相关依赖安装

#查看是否已安装相关依赖
yum list installed | grep gcc

在这里插入图片描述

#安装相关依赖
yum -y install gcc
yum -y install gcc-c++

2.2 安装

#安装命令
yum install docker
#安装成功后,查看docker版本信息
docker -v
#或
docker version

在这里插入图片描述

2.3 卸载

#1、查看当前docker状态
systemctl status docker
#2、如果是运行状态则停掉
systemctl stop docker 
#3、查看yum安装的docker文件包
yum list installed | grep docker
#4、查看docker相关的rpm源文件
rpm -qa | grep docker
#5、删除所有安装的docker文件包
yum -y remove docker.x86_64  docker-client.x86_64  docker-common.x86_64
#6、删除后执行 rpm -qa | grep docker  命令再次确认是否已删除干净
#7、删除docker的镜像文件,默认在/var/lib/docker目录下 
rm -rf /var/lib/docker

#至此卸载完成!!!

在这里插入图片描述
在这里插入图片描述

三、Docker命令

#显示 Docker 系统信息,包括镜像和容器数
docker info

#显示 Docker 版本信息
docker version

在这里插入图片描述

3.1 启动/停止Docker

#1、启动
systemctl start docker
#2、停止
systemctl stop docker
#3、重启
docker restart docker
#4、查看服务状态
systemctl status docker

在这里插入图片描述

3.2 镜像仓库 相关命令

官方仓库 Docker Hub:https://hub.docker.com/

#1、从Docker Hub查找镜像
docker search [OPTIONS] term
/**
*   OPTIONS:
*  --automated :只列出 automated build类型的镜像;
*  --no-trunc :显示完整的镜像描述;
*  -s :列出收藏数不少于指定值的镜像
*  -f  <过滤条件> :列出收藏数不小于指定值的镜像。
*/
#示例:从 Docker Hub 查找所有镜像名包含 nginx,并且收藏数大于 100 的镜像
docker  search --no-trunc -f stars =100 nginx

在这里插入图片描述

#2、从镜像仓库中拉取或者更新指定镜像
docker pull [OPTIONS]  NAME[:TAG|@DIGEST]
/**
*  OPTIONS:
*   -a :拉取所有 tagged 镜像
*  --disable-content-trust  :忽略镜像的校验,默认开启
*/
#示例:(不指定版本拉最新的)
docker pull  tomcat
docker pull tomcat:8.5

#3、docker login : 登陆到一个Docker镜像仓库,如果未指定镜像仓库地址,默认为官方仓库 Docker Hub
#示例:
docker login -u 用户名 -p 密码

#4、docker logout : 登出一个Docker镜像仓库,如果未指定镜像仓库地址,默认为官方仓库 Docker Hub
#示例:
docker logout

#5、docker push : 将本地的镜像上传到镜像仓库,要先登陆到镜像仓库
#示例:
docker push  mytomcat:v1

3.3 本地镜像管理 相关命令

#1、列出本地镜像
docker images [OPTIONS] [REPOSITORY[:TAG]]
/**
* OPTIONS:
*    -a:列表本地的所有镜像及子镜像
*   -q:只显示镜像id
*   --digests:显示镜像的摘要信息
*   --no-trunc:显示完整的镜像信息
* 
*/

![在这里插入图片描述](https://img-blog.csdnimg.cn/20210513213400887.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4OTI1ODU5,size_16,color_FFFFFF,t_70

#2、标记本地镜像,将其归入某一仓库
docker tag [OPTIONS] IMAGE[:TAG] [REGISTRYHOST/][USERNAME/]NAME[:TAG]
#示例:将镜像tomcat:8.5标记为mytomcat:8.5.1 镜像
docker tag tomcat:8.5  mytomcat:8.5.1
#3、删除本地一个或多少镜像
docker rmi [OPTIONS] IMAGE [IMAGE...]
/**
* OPTIONS:
*  -f :强制删除
*  --no-prune :不移除该镜像的过程镜像,默认移除
* /
#示例:
docker  rmi -f  镜像id1  镜像id2  镜像id3
#4、docker build 命令用于使用 Dockerfile 创建镜像
docker build [OPTIONS] PATH | URL | -
/**
* OPTIONS:
* --build-arg=[] :设置镜像创建时的变量;
* --cpu-shares :设置 cpu 使用权重;
* --cpu-period :限制 CPU CFS周期;
* --cpu-quota :限制 CPU CFS配额;
* --cpuset-cpus :指定使用的CPU id;
* --cpuset-mems :指定使用的内存 id;
* --disable-content-trust :忽略校验,默认开启;
* -f :指定要使用的Dockerfile路径;
* --force-rm :设置镜像过程中删除中间容器;
* --isolation :使用容器隔离技术;
* --label=[] :设置镜像使用的元数据;
* -m :设置内存最大值;
* --memory-swap :设置Swap的最大值为内存+swap,"-1"表示不限swap;
* --no-cache :创建镜像的过程不使用缓存;
* --pull :尝试去更新镜像的新版本;
*  --quiet, -q :安静模式,成功后只输出镜像 ID;
* --rm :设置镜像成功后删除中间容器;
* --shm-size :设置/dev/shm的大小,默认值是64M;
* --ulimit :Ulimit配置。
* --squash :将 Dockerfile 中所有的操作压缩为一层。
* --tag, -t: 镜像的名字及标签,通常 name:tag 或者 name 格式;可以在一次构建中为一个镜像设置多个标签。
* --network: 默认 default。在构建期间设置RUN指令的网络模式
* /
#示例:使用当前目录的 Dockerfile 创建镜像,标签为 nginx:v1
docker build -t nginx:v1 .
#5、docker history : 查看指定镜像的创建历史。
docker history [OPTIONS] IMAGE
/**
*  OPTIONS:
*  -H :以可读的格式打印镜像大小和日期,默认为true;
*  --no-trunc :显示完整的提交记录;
*  -q :仅列出提交记录ID
* /
#示例:查看本地镜像nginx的创建历史
docker history nginx

3.4 容器生命周期管理 相关命令

容器镜像是一个软件的轻量级独立可执行软件包,包含运行它所需的一切:代码,运行时,系统工具,系统库,设置。不管环境如何,集装箱化软件都可以运行相同的Linux和Windows应用程序。容器将软件与其周围环境隔离开来,例如开发环境和生产环境之间的差异,并有助于减少在同一基础架构上运行不同软件的团队之间的冲突。

#1、创建一个新的容器并运行
docker run [OPTIONS]   镜像名称/镜像id
/**
*  run:运行-->变成容器
*  OPTIONS:
* -d: 后台运行容器,并返回容器ID
* -i: 以交互模式运行容器,通常与 -t 同时使用
* -t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用
* -P: 随机端口映射,容器内部端口随机映射到主机的端口
* -p: 指定端口映射,格式为:主机(宿主)端口:容器端口
* --name="newname": 为容器指定一个名称newname
* -h "mars": 指定容器的hostname
* --volume , -v: 绑定一个卷
* -m :设置容器使用内存最大值
* --net="bridge": 指定容器的网络连接类型,支持 bridge/host/none/container: 四种类型
* --link=[]: 添加链接到另一个容器
* --expose=[]: 开放一个端口或一组端口
* /
* 
#示例1:使用docker镜像nginx(或镜像id)以后台模式启动一个容器,并将容器命名为mynginx
docker run -h 10.xx.xx.156 -p 8088:80 --name="mynginx"  -d nginx

/**
* 容器卷---为了能保存数据在docker中
* 容器数据的持久化,容器之间继承和共享数据
* /
docker run -h 10.xx.xx.154 -p 8089:80 -it -v /宿主机目录:/容器内目录 --privileged=true  镜像id  /bin/bash
#查看是否挂载成功
docker inspect 容器id

#示例2:使用镜像 nginx,以后台模式启动一个容器,将容器的 8090 端口映射到主机的 80 端口,主机的目录 /data 映射到容器的 /data
docker run -p 8090:80 -v /data:/data  -d nginx

#示例3:使用镜像nginx以交互模式启动一个容器,在容器内执行/bin/bash命令
docker run -it nginx /bin/bash

在这里插入图片描述
在这里插入图片描述

#2、docker start :启动一个或多个已经被停止的容器
docker start 容器名称/容器id

#3、docker stop :停止一个运行中的容器
docker stop 容器名称/容器id

#4、docker restart :重启容器
docker restart  容器名称/容器id

在这里插入图片描述

#5、docker kill :杀掉一个运行中的容器
docker kill -s KILL  容器名称/容器id     # -s :向容器发送一个信号

在这里插入图片描述

#6、docker rm :删除一个或多个容器
/**
* OPTIONS:
* -f :通过 SIGKILL 信号强制删除一个运行中的容器。
* -l :移除容器间的网络连接,而非容器本身。
* -v :删除与容器关联的卷。
* /
#示例1:强制删除多个容器:
docker  rm  -f  id1  id2  id3

#示例2:移除容器 nginx01 对容器 db01 的连接,连接名 db:
docker rm -l db

#示例3:删除容器 nginx01, 并删除容器挂载的数据卷:
docker rm -v nginx01

#示例4:删除所有已经停止的容器:
docker rm $(docker ps -aq)

#示例5:强制删除所有的容器,包括停止的和运行中的:
docker rm -f  $(docker ps -aq)

在这里插入图片描述

#7、docker pause :暂停容器中所有的进程
docker pause  容器名称/id

#8、docker unpause :恢复容器中所有的进程
docker  unpause  容器名称/id

在这里插入图片描述

#9、docker create :创建一个新的容器但不启动它(用法同 run )
docker create [OPTIONS] IMAGE [COMMAND] [ARG...]

#示例:创建一个nginx容器,并将容器命名为mynginx
docker create  --name="mynginx"  nginx

在这里插入图片描述

#10、docker exec :在运行的容器中执行命令(进入正在进行的容器并以命令行交互)
docker exec [OPTIONS] CONTAINER COMMAND [ARG...]
/**
* OPTIONS:
* -d :分离模式: 在后台运行
* -i :即使没有附加也保持STDIN 打开
* -t :分配一个伪终端
* /
#示例:在容器中打开新的终端,并且可以启动新的进程
docker exec -it  容器名称/id  /bin/bash

在这里插入图片描述

3.5 容器操作 相关命令

#1、docker ps : 列出容器
/**
* OPTIONS:
* -a :显示所有的容器,包括未运行的
* -f :根据条件过滤显示的内容
* --format :指定返回值的模板文件
* -l :显示最近创建的容器
* -n :列出最近创建的n个容器
* --no-trunc :不截断输出
* -q :静默模式,只显示容器编号
* -s :显示总的文件大小
* /
#示例1:列出所有在运行的容器信息
docker ps

#示例2:列出所有创建的容器
docker ps -a 

#示例3:列出所有创建的容器id
docker ps -aq

#示例4:列出最近创建的5个容器信息
docker ps -n 5

在这里插入图片描述

#2、docker inspect : 获取容器/镜像的元数据
docker inspect [OPTIONS] NAME|ID [NAME|ID...]
/**
* OPTIONS:
* -f :指定返回值的模板文件
* -s :显示总的文件大小
* --type :为指定类型返回JSON
* /
#示例1:获取镜像nginx的元信息
docker inspect  nginx

#示例2:获取正在运行的容器mynginx的ip
docker inspect --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}'  mynginx

在这里插入图片描述
在这里插入图片描述

#3、docker top :查看容器中运行的进程信息,支持 ps 命令参数
docker top [OPTIONS] CONTAINER [ps OPTIONS]

#示例:查看容器mynginx的进程信息
docker top mynginx

在这里插入图片描述

#4、docker attach :连接到正在运行中的容器(直接进入容器终端,不会启动新的进程)
docker  attach 容器名称/id

/**
* 要attach上去的容器必须正在运行,可以同时连接上同一个container来共享屏幕
* attach后可以通过CTRL-C来detach
* attach是可以带上--sig-proxy=false来确保CTRL-D或CTRL-C不会关闭容器
* /

在这里插入图片描述

#5、docker events : 从服务器获取实时事件
docker events [OPTIONS]
/**
* OPTIONS:
* -f :根据条件过滤事件
* --since :从指定的时间戳后显示所有事件
* --until :流水时间显示到指定的时间为止
* /

#示例1:显示docker xxx年xx月xx日后的所有事件
docker events --since="时间戳"
docker events --since="2020-10-01"

#示例2:显示docker 镜像为nginx 2020年10月1日后的相关事件
docker events -f  "image"="nginx"  --since="2020-10-01"

在这里插入图片描述

#6、docker logs : 获取容器的日志
docker logs [OPTIONS] CONTAINER

/**
* OPTIONS说明:
* -f : 跟踪日志输出
* --since :显示某个开始时间的所有日志
* -t : 显示时间戳
* --tail :仅列出最新N条容器日志
* /

#示例1:跟踪查看容器mynginx的日志输出
docker logs -f mynginx

#示例2:查看容器mynginx从2016年7月1日后的最新10条日志
docker logs --since="2016-07-01"  --ttail=10  mynginx

在这里插入图片描述

#7、docker export :将文件系统作为一个tar归档文件导出到STDOUT(-o :将输入内容写到文件)
#示例:将id为a404c6c174a2的容器按日期保存为tar文件
docker export -o nginx-`date +%Y%m%d`.tar a404c6c174a2

在这里插入图片描述

#8、docker port :列出指定的容器的端口映射,或者查找将PRIVATE_PORT NAT到面向公众的端口
docker port  容器名称/id

在这里插入图片描述

9、docker commit :从容器创建一个新的镜像(当镜像运行之后可以修改容器里面的内容,再提交成一个新的镜像)
docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]

/**
* OPTIONS:
* -a :提交的镜像作者;
* -c :使用Dockerfile指令来创建镜像;
* -m :提交时的说明文字;
* -p :在commit时,将容器暂停;
* /
#示例:docker commit -m="描述信息" -a="作者" 容器id  要创建的目标镜像名:[标签名]

在这里插入图片描述

#10、docker cp :用于容器与主机之间的数据拷贝(参数  -L :保持源目标中的链接)
docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH|-
docker cp [OPTIONS] SRC_PATH|- CONTAINER:DEST_PATH

#示例1:将主机/www/runoob目录拷贝到容器96f7f14e99ab的/www目录下
docker cp /www/runoob  96f7f14e99ab:/www/

#示例2:将主机/www/runoob目录拷贝到容器96f7f14e99ab中,目录重命名为www
docker cp  /www/runoob   96f7f14e99ab:/www

#示例3:将容器96f7f14e99ab的/www目录拷贝到主机的/tmp目录中
docker cp  96f7f14e99ab:/www /tmp/
#11、docker diff : 检查容器里文件结构的更改
docker diff   容器名/id

#示例:查看容器mynginx的文件结构更改。
 docker diff  mynginx

在这里插入图片描述

未完待续。。。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值