docker基本操作和原理

网友投稿 251 2022-10-30

docker基本操作和原理

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

(2)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 nginx NAME DESCRIPTION STARS OFFICIAL AUTOMATED nginx 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]# ls daemon.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 images REPOSITORY TAG IMAGE ID CREATED SIZE nginx #名称 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 images REPOSITORY TAG IMAGE ID CREATED SIZE nginx latest 231d40e811cd 4 weeks ago 126MB nginx web 231d40e811cd 4 weeks ago 126MB #删除某个镜像 [root@localhost docker]# docker rmi nginx:web Untagged: nginx:web [root@localhost docker]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE nginx latest 231d40e811cd 4 weeks ago 126MB #导出镜像 [root@localhost docker]# cd /opt/ [root@localhost opt]# docker save -o nginx nginx:latest [root@localhost opt]# ls containerd 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 < nginx 831c5620387f: Loading layer 72.48MB/72.48MB 5fb987d2e54d: Loading layer 57.67MB/57.67MB 4fc1aa8003a3: Loading layer 3.584kB/3.584kB Loaded image: nginx:latest [root@localhost opt]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE nginx latest 231d40e811cd 4 weeks ago 126MB

容器管理

#创建容器 [root@localhost opt]# docker create -it nginx:latest /bin/bash f6be6d4fd3ba040770da758b94b559a5de7d5cd53c661ced6c2a5f27bab3a3cd #查看容器 [root@localhost opt]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES f6be6d4fd3ba nginx:latest "/bin/bash" 18 seconds ago Created #创建的状态 zen_kapitsa #开启容器 [root@localhost opt]# docker start f6be6d4fd3ba [root@localhost opt]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES f6be6d4fd3ba 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 -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 9cd607702893 paigeeworld/centos7 "/usr/bin/bash -c ls…" 18 seconds ago Exited (0) 16 seconds ago confident_newton f6be6d4fd3ba 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 -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES ebe894f3fdf8 paigeeworld/centos7 "/bin/bash -c 'while…" 5 seconds ago Up 3 seconds ecstatic_swanson 9cd607702893 paigeeworld/centos7 "/usr/bin/bash -c ls…" 8 minutes ago Exited (0) 3 minutes ago confident_newton f6be6d4fd3ba nginx:latest "/bin/bash" 18 minutes ago #容器导出 [root@localhost opt]# docker export ebe894f3fdf8 > nginx_c [root@localhost opt]# ls containerd 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:web sha256:3461d80047f4f5465d8842f52094ee171fb9a259f606862fab607b9f024db2c6 [root@localhost opt]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE nginx web 3461d80047f4 4 seconds ago 355MB #删除容器 [root@localhost opt]# docker rmi 231d40e811cd Untagged: nginx:latest Deleted: sha256:231d40e811cd970168fb0c4770f2161aa30b9ba6fe8e68527504df69643aa145 Deleted: sha256:dc8adf8fa0fc82a56c32efac9d0da5f84153888317c88ab55123d9e71777bc62 Deleted: sha256:77fcff986d3b13762e4777046b9210a109fda20cb261bd3bbe5d7161d4e73c8e Deleted: sha256:831c5620387fb9efec59fc82a42b948546c6be601e3ab34a87108ecf852aa15f [root@localhost opt]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE #批量删除容器,关闭的才能删除 #通过awk输出删除第一个位置id [root@localhost opt]# docker ps -a | awk '{print "docker rm "$1}' | bash [root@localhost opt]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES ebe894f3fdf8 paigeeworld/centos7 "/bin/bash -c 'while…" 15 minutes ago Up 15 minutes ecstatic_swanson f6be6d4fd3ba 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:latest docker run -itd --name c2 --cpu-shares 1024 nginx:latest [root@localhost docker]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES d28b1d73b0ed nginx:latest "nginx -g 'daemon of…" 6 seconds ago Up 5 seconds 80/tcp c2 de49e4d6b4f9 nginx:latest "nginx -g 'daemon of…" 17 seconds ago Up 16 seconds 80/tcp c1 35cb117c9cc7 nginx:latest "nginx -g 'daemon of…" 6 minutes ago Exited (0) 5 minutes ago dazzling_goldberg 2286b99c2c6d 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 -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 83e56a65c604 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 -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 1a386d9c306b nginx:latest "nginx -g 'daemon of…" 4 seconds ago

docker数据卷管理

数据管理操作方便查看容器内产生的数据多容器间实现数据共享两种管理方式数据卷 :宿主机和容器之间的数据共享数据卷容器 :容器和容器之间的数据共享

[root@localhost ~]# docker pull centos #数据卷 [root@localhost ~]# docker run -v /var/--name web1 -it centos /bin/bash #-v指定宿主机的目录,:连接容器中的目录,-it,标准型输出,登录终端 [root@e95aad3dee7a /]# ls bin dev home lib64 media opt root sbin sys usr data1 etc lib lost+found mnt proc run srv tmp var [root@e95aad3dee7a /]# cd data1/ [root@e95aad3dee7a data1]# echo "123" > chen01.txt [root@e95aad3dee7a data1]# ls chen01.txt [root@e95aad3dee7a data1]# exit exit [root@localhost ~]# cd /var/www/ [root@localhost ls chen01.txt [root@localhost cat chen01.txt 123 #数据卷容器 [root@localhost docker run --name web100 -v /data1 -v /data2 -it centos /bin/bash [root@a0687fef8d8f /]# ls bin data2 etc lib lost+found mnt proc run srv tmp var data1 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 docker run -it --volumes-from web100 -it centos /bin/bash [root@7a360567847b /]# ls bin data2 etc lib lost+found mnt proc run srv tmp var data1 dev home lib64 media opt root sbin sys usr [root@7a360567847b /]# cd data1/ [root@7a360567847b data1]# ls 111.txt [root@7a360567847b data1]# cd ../data2/ [root@7a360567847b data2]# ls 222.txt

#端口映射,-P随机映射端口,-p指定自己设置的映射端口 docker run -d -P httpd:centos docker run -d -p 23764:80 httpd:centos

容器互联(使用centos镜像)

#创建并运行容器取名为web1,端口号自动映射 docker run -itd -P --name web1 centos /bin/bash #创建并运行容器取名web2 docker run -itd -P --name web2 --link web1:web1 centos /bin/bash 进web2容器ping web1 [root@localhost ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES ca605a29a8f5 centos "/bin/bash" 15 seconds ago Up 11 seconds web2 0e46fd7a0f96 centos "/bin/bash" 42 seconds ago Up 41 seconds web1 [root@localhost ~]# docker exec it ca605a29a8f5 /bin/bash Error: No such container: it [root@localhost ~]# docker exec -it ca605a29a8f5 /bin/bash [root@ca605a29a8f5 /]# ping web1 PING 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 ms 64 bytes from web1 (172.17.0.2): icmp_seq=2 ttl=64 time=0.120 ms 64 bytes from web1 (172.17.0.2): icmp_seq=3 ttl=64 time=0.046 ms 64 bytes from web1 (172.17.0.2): icmp_seq=4 ttl=64 time=0.060 ms 64 bytes from web1 (172.17.0.2): icmp_seq=5 ttl=64 time=0.051 ms

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:如何将MPO接口光模块与LC接口光模块进行连接?
下一篇:SpringBoot实现yml配置文件为变量赋值
相关文章

 发表评论

暂时没有评论,来抢沙发吧~