linux cpu占用率如何看
252
2022-11-02
docker 基础命令及网络模式,数据卷 数据卷容器 端口暴露
一 docker基础命令
docker run hello-world
run : 包含两个步骤
① 下载镜像 pull dockerhub 仓库中 项目/库/镜像
② 开启容器 start hello-world-image
工作流程:
docker client 客户端连接到了服务端(服务端是以一个守护进程的形式跑在操作系统里面的)通过restful api连接,典型的C/S架构
由docker 服务端的守护进程从docker hub 上下载了镜像(PS:服务端会先检查本地系统是否有这个镜像)
服务端创建了一个新的容器,然后从拉去的这个镜像启动了一个容器,容器执行了脚本/可执行程序让我们可以查看/使用(client)
docker 服务端把这些信息流(传递)返回到客户端并展示出来,(展示在终端上)
docker client 可以是多种形式,比如"docker"命令工具所在的终端
1,镜像基本操作命令
#查询docker 版本 docker version && docker info
#镜像搜索 docker search 关键字(nginx) 默认从Docker Hub 中搜索镜像
#镜像下载 docker pull 关键字(nginx) 不带标签的话默认最新版本latest
#镜像查询 docker images (docker image ls )
#查看镜像详细信息 docker inspect 镜像ID或者 镜像:标签
docker images --no-trunc 查看详细id号
#添加镜像标签 docker tag 镜像标签 新标签
docker tag nginx:latest nginx:web
#删除镜像 docker rmi 镜像标签(nginx:latest) 或者iD
不带标签默认的是latest 正在运行的删不掉
-f 为强制删除 docker rmi -f `docker images -q`强制删除全部镜像
#镜像输出 docker save -o nginx_img nginx:latest 保存到当前目录
docker save centos:7 > /opt/centos_new 保存到指定目录
#镜像导入 docker load <镜像文件(nginx_img)
Docker image load -i /opt/centos:7
把之前下载好的镜像通过 docker load -i 解压出来:
把 centos.tar.gz、nginx.tar.gz 镜像包上传到机器的 root 目录,
通过 docker load - i 解压镜像
[root@xuegod63 ~]# docker load -i /root/nginx.tar.gz
[root@xuegod63 ~]# docker load -i /root/centos.tar.gz
通常会结合ftp winscp ssh 登陆VPN 等使用
对没有标签的添加标签(REPOSITORY和TAG)
docker image tag 镜像ID 镜像名:版本号
可自定义镜像名和版本号
注:docker 镜像相当于对操作系统+程序+程序依赖的库打一个包
软件是依赖操作系统中的库或二进制文件。 如果我把软件所依赖的库和二进制文件打包在一起发布,不用物理机系统上的文件,也就不依赖操作系统了。
面试技能点
PS Linux 发行版:alpine centos redhat Debian(apt包管理,centos 是rpm) 生产环境可能会用的
2、容器的管理
一般分为两种容器种类:交互式和守护式容器
交互式容器:一般用于测试、开发、临时性任务等
守护式容器:一般用来跑服务
容器基本操作命令
#容器列表查询(包含所有) docker ps -a 或docker container ls -a
#查看运行中的容器 docker container ls
CONTAINER ID :运行中容器的唯一号码(自动生成)
NAMES :容器的名字(默认自动生成,可手工指定,不可重复)
手工指定:在开启容器时指定 docker container run -it --name="ljm" 9f266d35e02c
IMAGE :镜像的ID
STATUS :运行状态 (up为运行中,exited为关闭掉的容器。可使用 docker ps -a (docker container ls -a) 查看所有状态)
#面试题:
容器状态有哪些,分别是什么场景?
容器状态有7种:
created(已创建)
restarting(重启中)
up/running(运行中)
removing(迁移中)
paused(暂停)
exited(停止)
dead(死亡)
#创建容器 docker create -it nginx:latest /bin/bash
-i 让容器的标准输入保持打开
-t 分配一个伪终端
-d 后台守护进程的方式运行
#启动/停止/重启容器 docker start/stop/restart 容器ID
#一次性容器操作
docker run 镜像名称 操作指令
docker run centos:7 /usr/bin/bash -c ls /
#持续后台运行
docker run -d centos:7 /bin/bash -c "while true;do echo hello;done"
#进入容器
① 使用run docker run -it nginx:latest /bin/bash
② exec(容器必须为开启状态) docker exec -it 容器ID /bin/bash
exec 和shell 是两种运行模式
PS:
docker run -it 会创建前台进程,但是会在输入exit后终止进程。
docker attach 会通过连接stdin,连接到容器内输入输出流,会在输入exit后终止容器进程.
docker exec -it 会连接到容器,可以像SSH一样进入容器内部,进行操作,可以通过exit退出容器,不影响容器运行。
#容器导入
docker import 导入的容器名 指定镜像名
示例:
docker import nginx_a nginx:latest
cat 文件名(容器) | docker import - nginx:latest
#容器导出
docker export 容器ID > 导出的容器名
示例:
docker export 容器ID > nginx_a
批量删除容器&&批量删除镜像
#删除容器
docker rm 容器ID
#强制删除容器(正在运行的)
docker rm -f 容器ID
#删除非up状态的 rm -f : 强制删除所有
docker rm `docker ps -q`
#批量删除“exit”状态(指定状态)的容器
for i in `docker ps -a | grep -i exit | awk '{print $1}'`; do docker rm -f $i;done
#容器打包为镜像
docker run -it --name Nginx.01 nginx:latest /bin/bash 先运行
docker commit 39eaa5aa7332 nginx-v1beta
docker inspect 容器ID 查看容器内部细节
新建并启动容器
docker run [OPTIONS] IMAGE [COMMAND]
OPTIONS说明(常用):有些是一个减号,有些是两个减号
--name="容器新名字": 为容器指定一个名称;如果不写,docker会给默认指定的名字
-d: 后台运行容器,并返回容器ID,也即启动守护式容器;
-i:以交互模式运行容器,通常与 -t 同时使用;
-t:为容器重新分配一个伪输入终端,通常与 -i 同时使用;
-P: 随机端口映射;
-p: 指定端口映射,有以下四种格式
ip:hostPort:containerPort
ip::containerPort
hostPort:containerPort
containerPort
使用镜像redis:latest以交互模式启动一个容器,在容器内执行/bin/bash命令。docker run -it redis /bin/bash
启动守护式容器(容器后台运行):docker run -d tomcat
关于守护式容器注意:Docker容器后台运行就必须有一个前台进程。容器运行的命令如果不是那些一直挂起的命令(如:top,tail),容器会自动退出。
Docker run hello-world 都干了啥
4) 进入正在运行的容器
① 使用run
docker run -it nginx:latest /bin/bash
② exec(容器必须为开启状态)
docker exec -it 容器ID /bin/bashexec: 进入正在运行的容器,并以命令行交互docker exec -it 容器ID bashshell
attach 重新进入正在运行的容器
run,attach, exec的区别:
docker run 创建和启动一个新的容器实例,操作对象是镜像,选项较多,如果你要创建和启动一个容器,只能用run;
docker exec 在已运行的容器中,执行命令,操作对象是容器,如果你要进入已运行的容器,并且执行命令,用exec;
docker attach 同样操作的是已运行的容器,可以将本机标准输入(键盘输入)输到容器中,也可以将容器的输出显示在本机的屏幕上,如果你想查看容器运行过程中产生的标准输入输出,用attach;
5) 其他命令
docker container ls 列出本机正在运行的容器 同docker ps
docker container ls --all 列出本机所有容器,包括终止运行的容器
docker ps 列出当前所有正在运行的容器
-a :列出当前所有正在运行的容器+历史上运行过的
-l :显示最近创建的容器
-n:显示最近n个创建的容器
-q :静默模式,只显示容器编号
--no-trunc :不截断输出
exit 容器停止退出
ctrl+P+Q 容器不停止退出
docker attach 进入后台运行的容器
docker kill 强制停止容器
docker rm 删除已停止的容器 (-f强制删除)
一次删除多个容器:docker rm -f ${docker ps -a -q} 或docker ps -a -q | xargs docker rm
docker inspect 容器ID 查看容器内部细节
docker cp 容器ID:容器内路径 目的主机路径 从容器内拷贝文件到主机上
docker logs -tf --tail 10 4d2ba08f5929查看容器的日志
-t 是加入时间戳
-f 跟随最新的日志打印
--tail 数字 显示最后多少条
docker top 容器ID 查看容器内运行的进程
二 docker网络模式
1、基本概念
docker0网络:docker容器的虚拟网关,绑定物理网卡,负责做NAT 地址转换、端口映射。本身也是一种容器
loopback :回环网卡、TCP/IP网卡是否生效
virtual bridge:linux 自身继承了一个虚拟化功能(kvm架构),是原生架构的一个虚拟化平台,安装了一个虚拟化平台之后就会系统就会自动安装虚拟网卡,(示例:安装workstation (虚拟化平台)之后,会在网络适配器中会多出VMnet1 VMnet8 VMnet0)
2、docker 网络模式docker network ls
host模式 –net=host 容器和宿主机共享Network namespace。
container模式 –net=container:NAME_or_ID
多个容器共享一个Network namespace。
none模式 –net=none 容器有独立的Network namespace,但并没有对其进行任何网络设置,如分配veth pair 和网桥连接,配置IP等。
bridge模式 –net=bridge (默认为该模式)
以上不需要动手配置,真正需要配置的是自定义网络
host模式
如果启动容器的时候使用host模式,那么这个容器将不会获得一个独立的Network Namespace,而是和宿主机共用一个Network Namespace。容器将不会虚拟出自己的网卡,配置自己的IP等,而是使用宿主机的IP和端口。但是,容器的其他方面,如文件系统、进程列表等还是和宿主机隔离的。
使用host模式的容器可以直接使用宿主机的IP地址与外界通信,容器内部的服务端口也可以使用宿主机的端口,不需要进行NAT,host最大的优势就是网络性能比较好,但是docker host上已经使用的端口就不能再用了,网络的隔离性不好。
container模式
这个模式指定新创建的容器和已经存在的一个容器共享一个 Network Namespace,而不是和宿主机共享。新创建的容器不会创建自己的网卡,配置自己的 IP,而是和一个指定的容器共享 IP、端口范围等。同样,两个容器除了网络方面,其他的如文件系统、进程列表等还是隔离的。两个容器的进程可以通过 lo 网卡设备通信。
none模式
使用none模式,Docker容器拥有自己的Network Namespace,但是,并不为Docker容器进行任何网络配置。也就是说,这个Docker容器没有网卡、IP、路由等信息。需要我们自己为Docker容器添加网卡、配置IP等。
这种网络模式下容器只有lo回环网络,没有其他网卡。none模式可以在容器创建时通过--network=none来指定。这种类型的网络没有办法联网,封闭的网络能很好的保证容器的安全性。
bridge模式
当Docker进程启动时,会在主机上创建一个名为docker0的虚拟网桥,此主机上启动的Docker容器会连接到这个虚拟网桥上。虚拟网桥的工作方式和物理交换机类似,这样主机上的所有容器就通过交换机连在了一个二层网络中。
从docker0子网中分配一个IP给容器使用,并设置docker0的IP地址为容器的默认网关。在主机上创建一对虚拟网卡veth pair设备,Docker将veth pair设备的一端放在新创建的容器中,并命名为eth0(容器的网卡),另一端放在主机中,以vethxxx这样类似的名字命名,并将这个网络设备加入到docker0网桥中。可以通过brctl show命令查看。
bridge模式是docker的默认网络模式,不写--net参数,就是bridge模式。使用docker run -p时,docker实际是在iptables做了DNAT规则,实现端口转发功能。可以使用iptables -t nat -vnL查看
3、docker自定义网络
#查看网络列表
docker network ls
#查看容器信息(包含配置、环境、网关、挂载、cmd等等信息)
docker inspect 容器ID
#自定义网络固定IP
docker network create --subnet=172.18.0.0/16 mynetwork
docker run -itd --name test2 --net mynetwork --ip 172.18.0.100 centos:latest /bin/bash
4、暴露端口
-p 自定义端口 ( 宿主机端口:容器内端口)
-P 随机端口 (-P 49153起始 49153到65535)
docker run -itd -p 333:80 nginx /bin/bash (docker 0)
docker run -itd -P nginx /bin/bash
#在宿主机环境执行容器内命令
docker exec -it 容器ID /bin/bash -c 'nginx'
docker exec 容器ID/容器name 执行的命令
应用场景:如制作的镜像是没有开启,需要启动容器后执行启动命令
面试题
怎么把宿主机的文件传入到容器内部
docker cp /opt/abc 容器id:/opt/abc
#进入容器没有systemctl 命令解决:添加--privileged=true (指定此容器是否为特权容器),使用此参数,则不能用attach
示例:
docker run -itd --name test3 --privileged=true centos /sbin/init
/sbin/init 内核启动时主动呼叫的第一个进程
可以使用docker inspect 容器ID
docker ps -a
docker exec -it 容器id /bin/bash
yum install -y
systemctl status 数据卷
宿主机目录/var/挂载容器中的/data1
docker run -v /var/--name web1 -it centos /bin/bash
[root@202dd484fd62 /]# cd /data1/
[root@202dd484fd62 data1]# touch test123
//返回宿主机进行查看
[root@localhost ~]# ls /var/---> /container_nginx/conf/nginx.conf
② 容器内部产生的日志,如何收集 将容器内部存放日志文件的目录挂载到宿主机指定目录下/container_nginx/log/access_log /access_log
③ 传入变量 挂载到宿主机 在宿主机上添加变量内容,将变量放入共享目录,在容器中/etc/profile 直接加载就可以
export xxdir=/data/data1/xx.
四、数据卷容器
//数据卷容器
docker run --name web100 -v /data1 -v /data2 -it centos /bin/bash
/data1 和/data2目录会自动创建
//新容器挂载数据卷容器web100
docker run -it --volumes-from web100 --name db1 centos /bin/bash
原理:让两个容器实现数据共享
容器互联(使用centos镜像)
示例:
docker run -itd -P --name web1 centos /bin/bash //创建并运行容器取名web1,端口号自动映射
docker run -itd -P --name web2 --link web1的ID:web1 centos /bin/bash //创建并运行容器取名web2,链接到web1和其通信
进web2 容器 ping web1
应用场景:哨兵 ——》监控 redis
哨兵和redis包括哨兵和哨兵之间相互监控,会使用ping命令
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~