docker的原理和基础操作
发表于:2024-11-23 作者:千家信息网编辑
千家信息网最后更新 2024年11月23日,Docker 概念Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互
千家信息网最后更新 2024年11月23日docker的原理和基础操作
Docker 概念
Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。'
一个完整的Docker有以下几个部分组成:
dockerClient客户端
Docker Daemon守护进程
Docker Image镜像
DockerContainer容器
Docker 与虚拟机的区别:
!!!相同点:①可在不同的主机之间迁移;②都具备 root 权限;③都可以远程控制;④都有备份、回滚操作。
!!!不同点:**1、操作系统上:**docker:在性能上有优势,可以轻易的运行多个操作系统;虚拟机:可以安装任何系统,但是性能不及容器。**2、原理:**docker:和宿主机共享内核,所有容器运行在容器引擎之上,容器并非一个完整的操作系统,所有容器共享操作系统,在进程级进行隔离。虚拟机:每一个虚拟机都建立在虚拟的硬件之上,提供指令级的虚拟,具备一个完整的操作系统。**3、优点:**docker:高效、集中。一个硬件节点可以运行数以百计的的容器,非常节省资源,QoS 会尽量满足,但不保证一定满足。内核由提供者升级,服务由服务提供者管理。虚拟机:对操作系统具有绝对权限,对系统版本和系统升级具有完全的管理权限。具有一整套的的资源:CPU、RAM 和磁盘。QoS 是有保证的,每一个虚拟机就像一个真实的物理机一样,可以实现不同的操作系统运行在同一物理节点上。**4、缺点:**docker:对内核没有控制权限,只有容器的提供者具备升级权限。只有一个内核运行在物理节点上,几乎不能实现不同的操作系统混合。容器提供者一般仅提供少数的几个操作系统。虚拟机:每一台虚拟机都具有更大的负载,耗费更多的资源,用户需要全权维护和管理。一台物理机上能够运行的虚拟机非常有限。(3)Docker的使用场景:1、打包应用程序简化部署;2、可脱离底层硬件任意迁移;例:服务器从腾讯云迁移到阿里云。(4)Docker 核心概念:镜像容器仓库
-------------------------------------------------------------部署19版docker--------------------------------------------------------
#安装软件包,存储映射等依赖包yum install yum-utils device-mapper-persistent-data lvm2 -y#设置阿里云镜像源yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo#安装docker-ce引擎yum install -y docker-ce#关闭防火墙,开启docker[root@localhost ~]# systemctl stop firewalld.service[root@localhost ~]# setenforce 0[root@localhost ~]# systemctl start docker#公有仓库搜索nginx镜像[root@localhost ~]# docker search nginxNAME DESCRIPTION STARS OFFICIAL AUTOMATEDnginx Official build of Nginx. 12370 #下载次数 [OK] jwilder/nginx-proxy Automated Nginx reverse proxy for docker con… 1703 [OK]#镜像加速#tee标准输入到daemon.json中,指向阿里云的镜像加速地址tee /etc/docker/daemon.json <<-'EOF'{ "registry-mirrors": ["https://8ulga20n.mirror.aliyuncs.com"]}EOF#重新加载系统守护进程,重启docker[root@localhost ~]# cd /etc/docker/[root@localhost docker]# lsdaemon.json key.json[root@localhost docker]# cat daemon.json { "registry-mirrors": ["https://8ulga20n.mirror.aliyuncs.com"]}[root@localhost docker]# systemctl daemon-reload [root@localhost docker]# systemctl restart docker#下载nginx镜像[root@localhost docker]# docker pull nginx#查看docker镜像列表[root@localhost docker]# docker imagesREPOSITORY TAG IMAGE ID CREATED SIZEnginx #名称 latest #标识 231d40e811cd 4 weeks ago 126MB#查看docker,通过id查看详细信息[root@localhost docker]# docker inspect 231d40e811cd[ { "Id": "sha256:231d40e811cd970168fb0c4770f2161aa30b9ba6fe8e68527504df69643aa145", "RepoTags": [#修改镜像标签[root@localhost docker]# docker tag nginx:latest nginx:web[root@localhost docker]# docker imagesREPOSITORY TAG IMAGE ID CREATED SIZEnginx latest 231d40e811cd 4 weeks ago 126MBnginx web 231d40e811cd 4 weeks ago 126MB#删除某个镜像[root@localhost docker]# docker rmi nginx:web Untagged: nginx:web[root@localhost docker]# docker imagesREPOSITORY TAG IMAGE ID CREATED SIZEnginx latest 231d40e811cd 4 weeks ago 126MB#导出镜像[root@localhost docker]# cd /opt/[root@localhost opt]# docker save -o nginx nginx:latest [root@localhost opt]# lscontainerd mysql-5.7.20 nginx rh school.json top10.json#迁移镜像方便第二台docke节点也可用#第二台docker同样的操作1[root@localhost opt]# scp /opt/nginx root@192.168.136.167:/opt/#导入镜像[root@localhost opt]# docker load < nginx831c5620387f: Loading layer 72.48MB/72.48MB5fb987d2e54d: Loading layer 57.67MB/57.67MB4fc1aa8003a3: Loading layer 3.584kB/3.584kBLoaded image: nginx:latest[root@localhost opt]# docker imagesREPOSITORY TAG IMAGE ID CREATED SIZEnginx latest 231d40e811cd 4 weeks ago 126MB
容器管理
#创建容器[root@localhost opt]# docker create -it nginx:latest /bin/bashf6be6d4fd3ba040770da758b94b559a5de7d5cd53c661ced6c2a5f27bab3a3cd#查看容器[root@localhost opt]# docker ps -aCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMESf6be6d4fd3ba nginx:latest "/bin/bash" 18 seconds ago Created #创建的状态 zen_kapitsa#开启容器[root@localhost opt]# docker start f6be6d4fd3ba[root@localhost opt]# docker ps -aCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMESf6be6d4fd3ba nginx:latest "/bin/bash" About a minute ago Up 8 seconds #开启状态 80/tcp zen_kapitsa#docker run 相当于加载了这个镜像(如果没有这个镜像就会去下载),还开启docker,还创建了容器docker run paigeeworld/centos7 /usr/bin/bash -c ls /[root@localhost opt]# docker ps -aCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES9cd607702893 paigeeworld/centos7 "/usr/bin/bash -c ls…" 18 seconds ago Exited (0) 16 seconds ago confident_newtonf6be6d4fd3ba nginx:latest "/bin/bash" 9 minutes ago Up 8 minutes 80/tcp zen_kapitsa#容器进入[root@localhost opt]# docker exec it 9cd607702893 /bin/bash#持续在后台执行[root@localhost opt]# docker run -d paigeeworld/centos7 /bin/bash -c "while true;do echo hello;done"ebe894f3fdf8f64d9e1daf24ef957b2f027ca805f8acd9262e1c3572ff3ab08d[root@localhost opt]# docker ps -aCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMESebe894f3fdf8 paigeeworld/centos7 "/bin/bash -c 'while…" 5 seconds ago Up 3 seconds ecstatic_swanson9cd607702893 paigeeworld/centos7 "/usr/bin/bash -c ls…" 8 minutes ago Exited (0) 3 minutes ago confident_newtonf6be6d4fd3ba nginx:latest "/bin/bash" 18 minutes ago #容器导出[root@localhost opt]# docker export ebe894f3fdf8 > nginx_c[root@localhost opt]# lscontainerd mysql-5.7.20 nginx nginx_c rh school.json top10.json#容器导入,迁移[root@localhost opt]# scp /opt/nginx_c root@192.168.136.167:/opt/[root@localhost opt]# cat nginx_c | docker import - nginx:websha256:3461d80047f4f5465d8842f52094ee171fb9a259f606862fab607b9f024db2c6[root@localhost opt]# docker imagesREPOSITORY TAG IMAGE ID CREATED SIZEnginx web 3461d80047f4 4 seconds ago 355MB#删除容器[root@localhost opt]# docker rmi 231d40e811cd Untagged: nginx:latestDeleted: sha256:231d40e811cd970168fb0c4770f2161aa30b9ba6fe8e68527504df69643aa145Deleted: sha256:dc8adf8fa0fc82a56c32efac9d0da5f84153888317c88ab55123d9e71777bc62Deleted: sha256:77fcff986d3b13762e4777046b9210a109fda20cb261bd3bbe5d7161d4e73c8eDeleted: sha256:831c5620387fb9efec59fc82a42b948546c6be601e3ab34a87108ecf852aa15f[root@localhost opt]# docker imagesREPOSITORY TAG IMAGE ID CREATED SIZE#批量删除容器,关闭的才能删除#通过awk输出删除第一个位置id[root@localhost opt]# docker ps -a | awk '{print "docker rm "$1}' | bash[root@localhost opt]# docker ps -aCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMESebe894f3fdf8 paigeeworld/centos7 "/bin/bash -c 'while…" 15 minutes ago Up 15 minutes ecstatic_swansonf6be6d4fd3ba nginx:latest "/bin/bash" 33 minutes ago Up 31 minutes 80/tcp zen_kapitsa
资源控制
#cpu使用率控制#设置容器占用cpu资源为20%[root@localhost docker]# docker run --cpu-quota 20000 nginx:latest#按比例,权重分配创建两个容器为c1和c2,若只有这两个容器,设置容器的权重,是的c1和c2的cpu资源占比为33.3%和66.7%docker run -itd --name c1 --cpu-shares 512 nginx:latestdocker run -itd --name c2 --cpu-shares 1024 nginx:latest[root@localhost docker]# docker ps -aCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMESd28b1d73b0ed nginx:latest "nginx -g 'daemon of…" 6 seconds ago Up 5 seconds 80/tcp c2de49e4d6b4f9 nginx:latest "nginx -g 'daemon of…" 17 seconds ago Up 16 seconds 80/tcp c135cb117c9cc7 nginx:latest "nginx -g 'daemon of…" 6 minutes ago Exited (0) 5 minutes ago dazzling_goldberg2286b99c2c6d nginx:latest "/bin/bash" 7 minutes ago Up 7 minutes 80/tcp flamboyant_booth#限制容器使用指定的cpu,0,1核心数为2[root@localhost docker]# docker run --name c3 --cpuset-cpus 0,1 nginx:latest [root@localhost docker]# docker ps -aCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES83e56a65c604 nginx:latest "nginx -g 'daemon of…" About a minute ago Exited (0) 52 seconds ago c3#对blkio某一块磁盘的读写的限制--device-read-bps 限制读某个设备的bps(数据量)--device-write-bps 限制写入某个设备的bps--device-read-iops 限制读某个设备的ipos(次数)--device-write-iops 限制写某个设备的ipos[root@localhost docker]# docker run -d --device-write-bps /dev/sda:30mb nginx:latest 1a386d9c306baa36c02edda2df793ff673b46f4ace4e5ee5f72177d8cd4a3d42[root@localhost docker]# docker ps -aCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES1a386d9c306b nginx:latest "nginx -g 'daemon of…" 4 seconds ago
docker数据卷管理
数据管理操作
方便查看容器内产生的数据
多容器间实现数据共享
两种管理方式
数据卷 :宿主机和容器之间的数据共享
数据卷容器 :容器和容器之间的数据共享
[root@localhost ~]# docker pull centos#数据卷[root@localhost ~]# docker run -v /var/www:/data1 --name web1 -it centos /bin/bash#-v指定宿主机的目录,:连接容器中的目录,-it,标准型输出,登录终端[root@e95aad3dee7a /]# lsbin dev home lib64 media opt root sbin sys usrdata1 etc lib lost+found mnt proc run srv tmp var[root@e95aad3dee7a /]# cd data1/[root@e95aad3dee7a data1]# echo "123" > chen01.txt[root@e95aad3dee7a data1]# lschen01.txt[root@e95aad3dee7a data1]# exitexit[root@localhost ~]# cd /var/www/[root@localhost www]# lschen01.txt[root@localhost www]# cat chen01.txt 123#数据卷容器[root@localhost www]# docker run --name web100 -v /data1 -v /data2 -it centos /bin/bash[root@a0687fef8d8f /]# lsbin data2 etc lib lost+found mnt proc run srv tmp vardata1 dev home lib64 media opt root sbin sys usr[root@a0687fef8d8f /]# cd data1[root@a0687fef8d8f data1]# echo "111" > 111.txt[root@a0687fef8d8f data1]# cd ../data2/[root@a0687fef8d8f data2]# echo "222" > 222.txt[root@a0687fef8d8f data2]# exit#新容器挂载到我们刚才创建的web100容器,web100提供两个共享目录[root@localhost www]# docker run -it --volumes-from web100 -it centos /bin/bash[root@7a360567847b /]# lsbin data2 etc lib lost+found mnt proc run srv tmp vardata1 dev home lib64 media opt root sbin sys usr[root@7a360567847b /]# cd data1/[root@7a360567847b data1]# ls111.txt[root@7a360567847b data1]# cd ../data2/[root@7a360567847b data2]# ls222.txt
#端口映射,-P随机映射端口,-p指定自己设置的映射端口 docker run -d -P httpd:centosdocker run -d -p 23764:80 httpd:centos
容器互联(使用centos镜像)
#创建并运行容器取名为web1,端口号自动映射docker run -itd -P --name web1 centos /bin/bash #创建并运行容器取名web2docker run -itd -P --name web2 --link web1:web1 centos /bin/bash进web2容器ping web1[root@localhost ~]# docker ps -aCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMESca605a29a8f5 centos "/bin/bash" 15 seconds ago Up 11 seconds web20e46fd7a0f96 centos "/bin/bash" 42 seconds ago Up 41 seconds web1[root@localhost ~]# docker exec it ca605a29a8f5 /bin/bashError: No such container: it[root@localhost ~]# docker exec -it ca605a29a8f5 /bin/bash[root@ca605a29a8f5 /]# ping web1PING web1 (172.17.0.2) 56(84) bytes of data.64 bytes from web1 (172.17.0.2): icmp_seq=1 ttl=64 time=0.087 ms64 bytes from web1 (172.17.0.2): icmp_seq=2 ttl=64 time=0.120 ms64 bytes from web1 (172.17.0.2): icmp_seq=3 ttl=64 time=0.046 ms64 bytes from web1 (172.17.0.2): icmp_seq=4 ttl=64 time=0.060 ms64 bytes from web1 (172.17.0.2): icmp_seq=5 ttl=64 time=0.051 ms
容器
镜像
系统
数据
操作系统
运行
管理
资源
限制
权限
不同
之间
内核
提供者
物理
节点
设备
控制
两个
只有
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
dns解析服务器架设
三大数据库软件哪个好
服务器文件删除 日志
php是数据库语言吗
中学网络安全数据
软件开发遵循的法律法规
原神国际服选哪一个服务器
怎么看数据库白名单添加成功
ado 跨数据库
瀑布模型软件开发范文
管家婆数据库备份恢复
2019国家网络安全法
服务器的主机需要什么配置
网络安全培训 开班讲稿
软件开发动画效果
惠普服务器硬盘管理软件
未来之役好友服务器不一样能玩吗
江西房硕互联网科技有限公司
调入外部数据库错误
农信银网络安全大赛
解决网络安全思维
网络安全受威胁的危害
vr软件开发需要学什么
软件开发公司没有进项票
网络安全专题网络培训研讨
企业级软件开发编程语言
检索期刊中文数据库有
软件开发API接口开发
数据库 group by
互联网电子科技行业发展