DOCKER总结1:安装使用及基本概念

一、总结namespace的类型及功能

1)MNT namespace:提供文件系统隔离能力,为每个容器提供独立的根文件系统,在容器中运行的服务使用容器运行的系统环境目录,但是不能访问宿主机的资源,相当于宿主机使用chroot技术锁定容器到一个指定的目录。
2)IPC namespace:提供进程通信的隔离能力,允许一个容器内的不同进程进行数据访问,但是不能跨容器访问。
3)UTS namespace:提供主机名隔离能力,包含了运行内核的名称,版本,底层体系结构类型等信息,用于系统标识,其中包含的hostname和域名,使得每个容器都拥有属于自己hostname标识,这个主机名独立于宿主机系统和其他的容器。
4)PID namespace:提供进程隔离能力,linux系统中,有一个pid为1的进程(init/systemd),是其他所有进程的父进程,在每个容器中也有一个pid为1的父进程用来管理子进程,容器内的进程都会在宿主机上有与之对应的进程,在宿主机上对应进程的父进程为containerd进程,这也就是容器的主进程对应的父进程。
5)NET namespace:提供网络隔离能力,每个容器都用自己的网卡,监听端口,TCP/IP协议栈等,docker使用network namespace启动一个vethX接口,容器将拥有自己的桥接ip地址,通常是docker0,而docker0实质就是Linux的虚拟网桥, 容器启动后,都会有一个宿主机上vethX的接口与容器中的ethX网卡相对应,也会在iptables中添加对应规则。
6)User Namespace:提供用户隔离能力,每个宿主机都用可能存在相同的用户、uid、gid,User namespace允许宿主机上的每个容器有自己的用户,其作用范围也仅限所在的容器,不能访问另外一个容器的文件系统,相互隔离,互不影响,永不相见。

二、总结docker的命令使用(镜像管理、容器管理)

镜像管理命令:

docker build	# 从dockerfile构建镜像
docker images #查看本地所有镜像
docker commit -a "jack jack@magedu.com" -m "v2" --change="EXPOSE 80 443" 8ddf4ce923ef new-nginx-image # 将现有的提交为一个名为new-nginx-image的镜像,-a 作者信息 
docker export 8ddf4ce923ef -o new-nginx-image.tar.gz #将容器的文件系统导出为一个本地压缩包,非镜像格式
docker import new-nginx-image.tar.gz #导入export导出的压缩包,导入后的镜像不完整,不能用于创建容器
docker history centos:7.9.2009 #查看的镜像的构建历史
docker load -i nginx-1.20.2.tar.gz #从一个tar包或标准输入导入镜像
docker save 50fe74b50e0d > nginx-1.20.2.tar.gz #保存一个或多个镜像到一个压缩文件(默认是标准输出)
docker login #登录镜像仓库
docker logout #登出镜像仓库
docker pull nginx:1.20.2 #从镜像仓库下载镜像
docker push nginx:1.20.2 #从本地上传镜像到镜像仓库(需要登录认证)
docker rmi -f 53ec353d8dc4 90a4cd9dfe4c #删除一个或多个镜像
docker search nginx #搜索镜像

容器管理命令:

docker info #显示系统信息
docker run -it centos:7.9.2009       # 运行docker 容器
docker attach 63fbc2d5a3ec           # 进入容器,退出容器终端后其他终端也会退出
docker cp 源 目的		# 从容器和宿主机相互拷贝文件或目录
docker create -it --name test1 nginx:1.20.2 # 创建一个新的容器且创建后的容器处于退出状态
docker diff 8ddf4ce923ef #对比容器和镜像有差异的文件或目录
docker events # 获取dockerd的实时事件,创建删除容器等操作
docker exec -it 40e6379cf371 sh/bash # 推进入到容器执行命令操作,推荐使用此方式
docker inspect 50fe74b50e0d #显示docker对象(镜像、网络、容器等)的详细信息
docker kill $(docker ps -a -q) # 强制关闭所有运行中的容器
docker logs -f nginx-container-test1 #持续查看容器标准输出和错误输出的日志
docker pause 81b344cff55d #暂停一个或者多个容器
docker unpause 81b344cff55d #取消一个或多个容器的暂停
docker port 81b344cff55d #列出一个容器端口映射关系
docker ps #列出容器,加上-a是列出包含为运行的所有容器
docker rename awesome_cerf nginx-container1 #重命名容器
docker restart ID/容器名称 #重启容器
docker rm -f 11445b3a84d3 #强制删除运行中的容器
docker rm -f `docker ps -aq -f status=exited` #批量删除已退出容器
docker rm -f $(docker ps -a -q) #批量删除所有容器
docker run -it docker.io/centos bash #创建并进入容器,ctrl+p+q退出容器不注销
docker run -it --name nginx-test1 nginx:1.20.2 #--name自定义容器名称
docker run -p 80:80/tcp -p 443:443/tcp -p 53:53/udp --name nginx-container-test1 nginx:1.20.2 #-p创建容器并指定多端口映射
docker run -d -p 80:80 --name nginx-container-test1 nginx:1.20.2 #-d后台运行容器
docker run -it --rm --name nginx-delete-test nginx:1.20.2 bash #--rm单次运行容器,退出后容器删除
docker run -it -d centos:7.9.2009 /usr/bin/tail -f '/etc/hosts' #创建容器的时候传递命令及参数
docker start ID/容器名称 #启动一个或多个容器
docker stats #显示容器资源的实时统计信息
docker stop ID/容器名称 #停止一个或多个容器
docker tag nginx:1.20.2 harbor.magedu.net/myserver/nginx:1.20.2 #为镜像添加一个新的tag
docker update 容器 --cpus 2 #更新容器配置信息,比如资源限制的值--cpus限制cpu数
docker version #显示docker client和docker server的版本信息
docker wait #一直等待容器退出并显示容器的退出状态码

三、熟练使用各种方式安装docker

1.apt(centos使用yum安装)

apt-get -y install apt-transport-https ca-certificates curl software-properties-common
add-apt-repository "deb [arch=amd64] https://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"
apt-get update
apt-get install docker-ce docker-ce-cli containerd.io

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

2.脚本安装

tar -xf docker-19.03.15-binary-install.tar 
docker info
./docker-install.sh 
docker --version

在这里插入图片描述

3.rpm包安装

wget https://mirrors.aliyun.com/docker-ce/linux/centos/7/x86_64/stable/Packages/docker-ce-24.0.2-1.el7.x86_64.rpm
wget https://mirrors.aliyun.com/docker-ce/linux/centos/7/x86_64/stable/Packages/docker-ce-cli-24.0.2-1.el7.x86_64.rpm
yum install docker-ce-24.0.2-1.el7.x86_64.rpm -y
yum install docker-ce-cli-24.0.2-1.el7.x86_64.rpm -y

四、总结docker的存储引擎

1)AUFS(AnotherUnionFS)是一种 Union FS,是文件级的存储驱动。所谓 UnionFS就是把不同物理位置的目录合并 mount 到同一个目录中。简单来说就是支持将不同目录挂载到同一个虚拟文件系统下的文件系统。这种文件系统可以一层一层地叠加修改文件。无论底下有多少层都是只读的,只有最上层的文件系统是可写的。当需要修改一个文件时,AUFS 创建该文件的一个副本,使用 CoW 将文件从只读层复制到可写层进行修改,结果也保存在可写层。在 Docker 中,底下的只读层就是 image,可写层就是 Container,是 Docker 18.06 及更早版本的首选存储驱动程序,在内核 3.13 上运行 Ubuntu 14.04 时不支持overlay2。

2)Overlay:一种 Union FS 文件系统,Linux 内核 3.18 后支持。不能直接使用overlay存储引擎,除非新添加一快磁盘作为docker的数据盘, 并在格式化的时候指定格式化参数-n ftype=1,否则报错如下: (Centos7.3版本开始修复此问题)。

在这里插入图片描述

3)overlay2: Overlay 的升级版,到目前为止,所有 Linux 发行版推荐使用的存储类型,目前 docker 的默认存储引擎为 overlay2,不同的存储引擎需要相应的系统支持,如需要磁盘分区的时候传递 d-type 文件分层功能,即需要传递内核参数开启格式化磁盘的时候的指定功能。

4)devicemapper:是 CentOS 和 RHEL 的推荐存储驱动程序,因为之前的内核版本不支持 overlay2,但是当前较新版本的 CentOS 和 RHEL 现在已经支持overlay2,因此推荐使用 overlay2,centos 7.2及之前的版本默认使用devicemapper存储引擎。 devicemapper 存在使用空间方面的一些限制,虽然可以通过后期配置解决,但是官方依然推荐使用 overlay2。

  1. ZFS(Sun-2005)/btrfs(Oracle-2007):目前没有广泛使用。

  2. vfs:用于测试环境,适用于无法使用copy-on-write文件系统的情况。此存储驱动程序的性能很差,通常不建议用于生产。

五、总结docker的-v和-p的使用

# docker -v使用,逻辑卷映射,把宿主机的目录映射到容器中,用于持久化保存数据
docker run -d -v /data/log:/sys/log:挂载方式 nginx:v1  # 将宿主机的 /data/log目录映射到容器的/sys/log目录,容器目录不存在会自动创建,宿主机的目录需要提前创建好。挂载方式:默认为rw可读写挂载,ro以只读方式挂载
# docker -p使用,端口映射
docker run -d -P nginx:v1  # -P 随机映射宿主机的端口到容器的80端口
docker run -d -p 8080:80  nginx:v1  # -p,指定端口映射,宿主机8080映射到容器80端口,
docker run -d -p 192.168.1.100:8080:80  nginx:v1  # 有多块网卡的话可以指定使用那块网卡的地址做映射
docker run -d -p 443:443:TCP  nginx:v1  # -p,指定端口映射,宿主机443映射到容器443端口,指定使用UDP,默认为TCP协议
docker run -d -p 443:443:TCP -p 52:52:UDP nginx:v1  # -p,多次使用,一次性映射多个端口

六、使用docker创建MySQL容器并把数据保存到宿主机的/data/mysql

docker load -i mysql-5.6.44.tar.gz	# 导入mysql镜像
docker images	# 查看镜像
docker run -p 3306:3306 --name mysql -v /mydata/mysql/log:/var/log/mysql  -v /mydata/mysql/data:/var/lib/mysql  -e MYSQL_ROOT_PASSWORD=root -d mysql:5.6.44 # 启动容器,映射端口3306,宿主机目录/mydata/mysql/log映射容器内/var/log/mysql目录,宿主机/mydata/mysql/data映射到容器/var/lib/mysql,MYSQL_ROOT_PASSWORD=root环境变量指定密码,-d放到后台运行

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值