docker基础知识!(代码片段)

handsomeboy-东 handsomeboy-东     2022-12-09     426

关键词:

docker

Docker概述

Docker是Linux中运行应用的开源工具,是一种轻量级的虚拟机,它诞生于2013年,最初发起者是dotCloud公司,它的设计宗旨是:“Build,Ship and Run Any App,Anywhere”,即通过对应用最简的封装、发布、部署、运行等生命周期的管理,达到应用组件级别的“一次封装,到处运行”

Docker与传统虚拟化的区别

特性Docker容器虚拟机
计算能力损耗几乎无损耗50%左右
性能接近原生弱于原生
系统支持单机量成百上千个几十个
隔离性资源限制(进程隔离)完全隔离
磁盘占用MBGB

Docker原理

cgroup(资源控制)和namespases(名称空间)两种构成,控制管理六个名称空间

6个名称空间:

  • user:操作进程的用户和用户组
  • net:网络设备、端口
  • pid:进程号
  • uts:主机名和主句域
  • ipc:应用间的通信使用的内存空间
  • mount:文件系统和挂载点

Docker三大组件

  • 镜像:一组资源的集合,包含了应用程序、相关依赖包和运行环境等,相当于容器的模板
  • 容器:基于镜像的一种运行时状态,每个容器都是相互隔离的
  • 仓库:存放image镜像

Docker网络模式

  • HOST模式:docker容器没有自己的网卡和IP,而是使用宿主机的ip和端口,和宿主机共用一个网络名称空间,它的最大优势时网络性能比较好,但是因为它是直接使用的宿主机的IP地址,其隔离性不好,安全性相对不高
  • Container模式:容器不会创建自己的网卡和ip,而是和一个指定容器共享IP,端口范围,它不是跟宿主机共享IP地址,相对host模式安全性较高,两个容器的进程可以通过lo:0网卡设备通信
  • None模式:该模式下容器只有lo回环网卡,关闭了网络功能
  • Bridge模式:该模式会为每一个容器设置IP地址,将容器连接到一个docker虚拟网,通过docker0网桥及iptables的nat表配置与宿主机通信,从docker0子网中分配一个IP给容器使用

Dockerfile

  • Dockerfile中每个指令都会创建一个新的镜像层
  • 镜像层将被缓存和复用(前一层会缓存给后一层使用)
  • 当Dockerfile的指令修改了,复制的文件变化了,或者构建镜像时指定的变量不同了,对应的镜像层缓存就会失效
  • 某一层的镜像缓存失效过后,它只会的镜像层缓存都会失效,镜像层时不可变的,如果在某一层中添加一个文件,然后在下一层中删除它,则镜像中依然会包含该文件
  • 涉及技术有bootfs和rootfs,docker的启动时是与宿主机共享内核空间bootfs即rootfs这类的操作系统基础环境

Docker镜像的分层

docker镜像分成基于AUFS(能把多个文件内容合并在一起)构建

  • worker层:读写,container容器层
  • upper层:应用
  • lower:依赖环境
  • base image :基础镜像

Docker安装部署

##安装依赖包
[root@docker ~]# yum install -y yum-utils device-mapper-persistent-data lvm2

##设置阿里云镜像源
[root@docker ~]# cd /etc/yum.repos.d/
[root@docker yum.repos.d]# yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

##安装docker-ce社区版
[root@docker yum.repos.d]# yum install -y docker-ce

[root@docker yum.repos.d]# systemctl start docker
[root@docker yum.repos.d]# systemctl enable docker
Created symlink from /etc/systemd/system/multi-user.target.wants/docker.service to /usr/lib/systemd/system/docker.service.

##这里我们暂时不用镜像仓库,设置镜像加速,镜像加速可以到阿里免费领取
[root@docker yum.repos.d]# mkdir -p /etc/docker
[root@docker yum.repos.d]# tee /etc/docker/daemon.json <<-'EOF'
> 
>   "registry-mirrors": ["https://r4f0p1ia.mirror.aliyuncs.com"]
> 
> EOF

[root@docker yum.repos.d]# systemctl daemon-reload
[root@docker yum.repos.d]# systemctl restart docker

##网络优化
[root@docker yum.repos.d]# vim /etc/sysctl.conf
net.ipv4.ip_forward=1
[root@docker yum.repos.d]# systemctl restart network
[root@docker yum.repos.d]# systemctl restart docker

##修改配置文件
[root@docker yum.repos.d]# cd /etc/docker/
[root@docker docker]# ls
daemon.json  key.json
[root@docker docker]# vim daemon.json 	##添加以下内容

 "graph": "/data/docker",							##数据目录
 "storage-driver": "overlay2",						##存储引擎
 "insecure-registries": ["registry.access.redhat.com","quary.io"]		##私有仓库
 "regustry-mirrors": ["https://r4f0p1ia.mirror.aliyuncs.com"]			##镜像加速			
 "bip": "172.7.5.1/24",								##docker网络
 "exec-opts": ["native.cgroupdriver-systemd"],		##启动时额外参数
 "live-restore": true								


Docker命令

管理镜像

##查看docker版本
[root@docker yum.repos.d]# docker -v
Docker version 20.10.8, build 3967b7d

##从官方docker hub下载镜像
[root@docker docker]# docker pull hello-world:latest		
latest: Pulling from library/hello-world
b8dfde127a29: Pull complete 
Digest: sha256:7d91b69e04a9029b99f3585aaaccae2baa80bcf318f4a5d2165a9898cd2dc0a1
Status: Downloaded newer image for hello-world:latest
docker.io/library/hello-world:latest

##查看镜像
[root@docker docker]# docker images
REPOSITORY    TAG       IMAGE ID       CREATED        SIZE
hello-world   latest    d1165f221234   5 months ago   13.3kB

##运行镜像
[root@docker docker]# docker run hello-world

##搜索镜像
[root@docker ~]# docker search nginx

##查看镜像信息
[root@docker ~]# docker inspect d1165f221234(容器ID)

##给镜像打标签
[root@docker ~]# docker tag hello-world:latest hello-world:whd
[root@docker ~]# docker images
REPOSITORY    TAG       IMAGE ID       CREATED        SIZE
hello-world   latest    d1165f221234   6 months ago   13.3kB
hello-world   whd       d1165f221234   6 months ago   13.3kB
centos        7         8652b9f0cb4c   9 months ago   204MB

##删除镜像,docker rmi 镜像名称/标签
[root@docker ~]# docker rmi hello-world:whd
Untagged: hello-world:whd
[root@docker ~]# docker images
REPOSITORY    TAG       IMAGE ID       CREATED        SIZE
hello-world   latest    d1165f221234   6 months ago   13.3kB
centos        7         8652b9f0cb4c   9 months ago   204MB

##导出镜像为文件
[root@docker ~]# docker save -o hello-world hello-world:latest 
[root@docker ~]# ls
anaconda-ks.cfg  hello-world  initial-setup-ks.cfg  公共  模板  视频  图片  文档  下载  音乐  桌面
[root@docker ~]# scp hello-world root@192.168.118.88:/opt	##传入另一台服务器
[root@node2 opt]# docker load < hello-world 				##导入镜像
f22b99068db9: Loading layer [==================================================>]  15.36kB/15.36kB
Loaded image: hello-world:latest
[root@node2 opt]# docker images
REPOSITORY    TAG       IMAGE ID       CREATED        SIZE
hello-world   latest    d1165f221234   6 months ago   13.3kB

容器操作

[root@docker ~]# docker run hello-world		##运行一个镜像为容器
[root@docker ~]# docker ps -a				##查看所有容器状态
CONTAINER ID   IMAGE         COMMAND    CREATED          STATUS                      PORTS     NAMES
f5d09aed4e48   hello-world   "/hello"   11 seconds ago   Exited (0) 10 seconds ago             festive_wiles
[root@docker ~]# docker rm f5d09aed4e48		##删除容器,只删除未运行的,加-f可强制删除运行的容器			
f5d09aed4e48
[root@docker ~]# docker ps -a
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES

##创建容器
[root@docker ~]# docker create -it nginx:latest /bin/bash
978de36e212ce0611030e85f3c45dac885bed07989dcbefcee7ba4d79b482d8e
[root@docker ~]# docker ps -a
CONTAINER ID   IMAGE          COMMAND                  CREATED         STATUS    PORTS     NAMES
978de36e212c   nginx:latest   "/docker-entrypoint.…"   7 seconds ago   Created             dazzling_pascal
[root@docker ~]# docker start 978de36e212c   		##根据容器ID启动容器
978de36e212c
[root@docker ~]# docker ps -a
CONTAINER ID   IMAGE          COMMAND                  CREATED          STATUS         PORTS     NAMES
978de36e212c   nginx:latest   "/docker-entrypoint.…"   23 seconds ago   Up 3 seconds   80/tcp    dazzling_pascal

##一次性创建容器
[root@docker ~]# docker run centos:7 /usr/bin/bash -c ls /
[root@docker ~]# docker ps -a
CONTAINER ID   IMAGE          COMMAND                  CREATED          STATUS                      PORTS     NAMES
720bc6dc8403   centos:7       "/usr/bin/bash -c ls…"   13 seconds ago   Exited (0) 12 seconds ago             romantic_khorana
978de36e212c   nginx:latest   "/docker-entrypoint.…"   14 minutes ago   Up 13 minutes               80/tcp    dazzling_pascal

##停止容器
[root@docker ~]# docker stop 978de36e212c
978de36e212c
[root@docker ~]# docker ps -a
CONTAINER ID   IMAGE          COMMAND                  CREATED          STATUS                       PORTS     NAMES
720bc6dc8403   centos:7       "/usr/bin/bash -c ls…"   3 minutes ago    Exited (0) 3 minutes ago               romantic_khorana
978de36e212c   nginx:latest   "/docker-entrypoint.…"   18 minutes ago   Exited (137) 6 seconds ago             dazzling_pascal

##持续后台运行
[root@docker ~]# docker run -d centos:7 /usr/bin/bash -c "while true;do echo hello;done"
4f3e6ae802c124acd0ae2927f00f51aba0d95aaaf315fac5ac1be1d0dc3e4694
[root@docker ~]# docker ps -a
CONTAINER ID   IMAGE          COMMAND                  CREATED          STATUS                       PORTS     NAMES
4f3e6ae802c1   centos:7       "/usr/bin/bash -c 'w…"   6 seconds ago    Up 5 seconds                           musing_chaplygin
720bc6dc8403   centos:7       "/usr/bin/bash -c ls…"   9 minutes ago    Exited (0) 8 minutes ago               romantic_khorana
978de36e212c   nginx:latest   "/docker-entrypoint.…"   23 minutes ago   Exited (137) 5 minutes ago             dazzling_pascal

##进入容器
[root@docker ~]# docker exec -it 4f3e6ae802c1 /bin/bash		#容器必须为开启状态
[root@4f3e6ae802c1 /]# exit				#退出容器,也可以用ctrl+d

##导出容器
[root@docker ~]# docker export 720bc6dc8403 > centos7_01
[root@docker ~]# ls
anaconda-ks.cfg  centos7_01  hello-world  initial-setup-ks.cfg  公共  模板  视频  图片  文档  下载  音乐  桌面
[root@docker ~]# docker import centos7_01 centos:7		##导入容器生成镜像,先删除原有镜像
sha256:b8fd67de266efab02246838b6fa0579f9d7371a0a22b757a242de1dd9e276c03
[root@docker ~]# docker images
REPOSITORY    TAG       IMAGE ID       CREATED         SIZE
centos        7         b8fd67de266e   8 seconds ago   204MB
nginx         latest    822b7ec2aaf2   3 hours ago     133MB
hello-world   latest    d1165f221234   6 months ago    13.3kB

网络管理

[root@docker ~]# docker network ls				##查看网络列表
NETWORK ID     NAME      DRIVER    SCOPE
27c66017f197   bridge    bridge    local
81e631b13efa   host      host      local
f330b96785dc   none      null      local

##自定义网络
[root@docker ~]# docker network create --subnet=172.18.0.0/16 mynetwork		#未指定网络模式,默认为bridge
[root@docker ~]# docker network ls
NETWORK ID     NAME        DRIVER    SCOPE
27c66017f197   bridge      bridge    local
81e631b13efa   host        host      local
da866d133585   mynetwork   bridge    local
f330b96785dc   none        null      local
[root@docker ~]# docker run -itd --name test2 --net mynetwork --ip 172.18.0.100 centos:7 /bin/bash
fdd8a497d4daa9f89976da05ed4f25dbb89fe15347930738dcc5bbe803083cb1

##添加nginx服务,设置nat端口映射
[root@docker ~]# docker run -itd --name nginx_01 --network mynetwork --ip 172.18.0.10 nginx:latest /bin/bash
66b34e794169a7817057b10afce835103136c600220d5e9075a9605664b3de87
[root@docker ~]# docker ps -a
CONTAINER ID   IMAGE          COMMAND                  CREATED          STATUS          PORTS     NAMES
66b34e794169   nginx:latest   "/docker-entrypoint.…"   12 seconds ago   Up 11 seconds   80/tcp    nginx_01
fdd8a497d4da   centos:7       "/bin/bash"              25 minutes ago   Up 25 minutes             test2
[root@docker ~]# docker run -itd -p 333:80 nginx /bin/bash		##指定端口映射固定IP地址
068caa856ec34884b9962b6cc6e8a171f3658dce22184adf0db49bf403ec3caa
[root@docker ~]# docker ps -a
CONTAINER ID   IMAGE          COMMAND                  CREATED              STATUS              PORTS                                 NAMES
068caa856ec3   nginx          "/docker-entrypoint.…"   About a minute ago   Up About a minute   0.0.0.0:333->80/tcp, :::333->80/tcp   awesome_curie
66b34e794169   nginx:latest   "/docker-entrypoint.…"   5 minutes ago        Up 5 minutes        80/tcp                                nginx_01
fdd8a497d4da   centos:7       "/bin/bash"              30 minutes ago       Up 30 minutes                                             test2
[root@docker ~]# docker exec 068caa856ec3 nginx			#运行服务

在浏览器查看

[root@docker ~]#  docker run -itd -P nginx /bin/bash		##用大写P表示随机给予端口映射
ea84118985ca363917b41da6829d263ae344a8b283f79c476b6271ce7ea3155b
[root@docker ~]# docker ps -a
CONTAINER ID   IMAGE          COMMAND                  CREATED          STATUS          PORTS                                     NAMES
ea84118985ca   nginx          "/docker-entrypoint.…"   49 seconds ago   Up 48 seconds   0.0.0.0:49153->80/tcp, :::49153->80/tcp   nice_meitner
068caa856ec3   nginx          "/docker-entrypoint.…"   5 minutes ago    Up 5 minutes    0.0.0.0:333->80/tcp, :::333->80/tcp       awesome_curie
66b34e794169   nginx:latest   "/docker-entrypoint.…"   9 minutes ago    Up 9 minutes    80/tcp                                    nginx_01
fdd8a497d4da   centos:7       "/bin/bash"              35 minutes ago   Up 35 minutes  
[root@docker ~]# docker exec ea84118985ca nginx

##指定容器为特权容器
[root@docker ~]# docker run -itd --name centos-systemd --privileged=true centos:7 /sbin/init
55a1a7c675bcc22c5f33b48cba54779482d0106c0183fc19a7417e229644d66c
[root@docker ~]# docker exec -it fdd8a497d4da /bin/bash
[root@55a1a7c675bc /]# yum install -y httpd
[root@55a1a7c675bc /]# systemctl start httpd 
[root@55a1a7c675bc /]# systemctl status httpd
● httpd.service - The Apache HTTP Server
   Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled; vendor preset: disabled)
   Active: active (running) since Sat 2021-09-04 11:32:36 UTC; 20s ago
…………………………

Docker数据卷

  • 数据卷:实现宿主机与容器之间的数据共享
  • 数据卷容器:实现容器与容器之间的数据共享
##宿主机米兰/var/www挂载容器中的/data1,/var/html挂载/data2
[root@docker ~]# docker run -v /var/www:/data1 -v /var/html:/data2 --name centos_v1 -it centos:7 /bin/bash 
[root@8d19fd5f44a2 /]# ls				##查看自动创建的data1和data2
anaconda-post.log  bin  data1  data2  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var

##分别在容器两个目录下创建文件
[root@8d19fd5f44a2 /]# cd data1/
[root@8d19fd5f44a2 data1]# touch txt.1
[root@8d19fd5f44a2 data1]# ls
txt.1
[root@8d19fd5f44a2 data1]# cd ../data2/
[root@8d19fd5f44a2 data2]# touch txt.2
[root@8d19fd5f44a2 data2]# ls
txt.2

##返回宿主机查看
[root@8d19fd5f44a2 data2]# exit
[root@docker ~]# cd /var/www/
[root@docker www]# ls
txt.1
[root@docker www]# cd /var/html/
[root@docker html]# ls
txt.2

##创建数据卷容器,指定卷来自centos_01
[root@docker html]# docker run -it --volumes-from centos_v1 --name db1 centos:7 /bin/bash
[root@aa687b5b14ba /]# cd data1/
[root@aa687b5b14ba data1]# ls   
txt.1

##容器互联(先删除前面创建的所有容器)
[root@docker html]# docker run -itd --name centos_01 centos:7 /bin/bash
f7695de3066212eb55b275b23cd97ed0aa83e28016e3bb51f42e8cfc9783c5a7
[root@docker html]# docker run -itd --name centos_02 --link centos_01:centos_01 centos:7 /bin/bash
##--link设置centos_01和centos_02互联
b7b1a5c49eb00338c0d0a46b05837d0d2310f9a78b85c0df3ca1ce0c2e844bf6
[root@docker html]# docker ps -a
CONTAINER ID   IMAGE      COMMAND       CREATED         STATUS         PORTS     NAMES
b7b1a5c49eb0   centos:7   "/bin/bash"   2 minutes ago   Up 2 minutes             centos_02
f7695de30662   centos:7   "/bin/bash"   6 minutes ago   Up 6 minutes             centos_01
[root@docker html]# docker inspect --format='.NetworkSettings.IPAddress' b7b1a5c49eb0 
##查看centos_02容器IP地址
172.17.0.3
[root@docker html]# docker exec -it f7695de30662 /bin/bash		#进入centos_01容器
[root@f7695de30662 /]# yum install -y net-tools					#下载ifconfig工具,也可以用ipconfig查看IP地址
[root@f7695de30662 /]# ping 172.17.0.3							#
PING 172.17.0.3 (172.17.0.3) 56(84) bytes of data.
64 bytes from 172.17.0.3: icmp_seq=1 ttl=64 time=0.111 ms
64 bytes from 172.17.0.3: icmp_seq=2 ttl=64 time=0.056 ms
64 bytes from 172.17.0.3: icmp_seq=3 ttl=64 time=0.057 ms

docker基础知识!(代码片段)

dockerDocker概述Docker与传统虚拟化的区别Docker原理Docker三大组件Docker网络模式DockerfileDocker镜像的分层Docker安装部署Docker命令管理镜像容器操作网络管理Docker数据卷Docker概述Docker是Linux中运行应用的开源工具,是一种轻量级的虚... 查看详情

docker基础知识!(代码片段)

dockerDocker概述Docker与传统虚拟化的区别Docker原理Docker三大组件Docker网络模式DockerfileDocker镜像的分层Docker安装部署Docker命令管理镜像容器操作网络管理Docker数据卷Docker概述Docker是Linux中运行应用的开源工具,是一种轻量级的虚... 查看详情

docker基础命令(代码片段)

docker帮助命令1、查看版本。dockerversion2、docker详细信息dockerinfo3、docker帮助命令docker--help 查看详情

docker基础(代码片段)

目录Docker基础一docker容器介绍1.1docker的理念1.2docker的组成1.3docker能干什么1.4docker改变了什么1.5基于docker的不可变基础设施二Docker镜像和容器管理2.1相关站点2.2Docker部署与实践三Docker的网络访问和数据管理3.1Docker网络3.2Docker数据数... 查看详情

docker学习---docker基础知识(代码片段)

目录docker的基础1、安装docker2、使用镜像3、镜像迁移|导入和导出4、dockerHub介绍5、搭建私有镜像仓库5.1、docker开源的镜像分发工具--dockerRegistry5.2、harbor部署6、使用容器7、容器导出和导入8、数据卷9、网络访问10、dockerfile10.1、基... 查看详情

docker-基础(代码片段)

Docker基础知识:Docker简介:清华大学docker镜像网站:https://mirrors.tuna.tsinghua.edu.cn阿里云docker镜像rpm包下载:https://mirrors.aliyun.com/docker-ce/linux/centos/7/x86_64/stable/Packages/Docker:1基于go语言编写的开源pass服务2交付速度快,资源消耗 查看详情

docker基础知识-入门篇(代码片段)

1.Docker简介和KVM区别1.1docker的三大理念构建运输运行ps:有点类似于java代码,一次构建到处运行1.2docker结构相关说明:image:和虚拟机的镜像类似container:用镜像创建的实例repository:类似于yum仓库dockerclient:命令行输入的docker命令dockerserv... 查看详情

docker知识(代码片段)

Docker安装docker的官方网站:https://www.docker.com/docker镜像的网站:https://hub.docker.com/docker安装网址:https://docs.docker.com/engine/install/centos/卸载老版本$>>sudoaptremovedockerdocker-enginedocker.iocontainerd 查看详情

docker入门基础(代码片段)

目录一、简介1、docker架构2、docker的概念二、docker的安装和管理1、docker安装2、docker配置阿里云镜像加速3、基础命令一、简介参考https://www.cnblogs.com/linuxk/p/8984242.html1、docker架构Docker使用客户端-服务器(C/S)架构模式,使用远程API来... 查看详情

docker基础命令(代码片段)

Docker基础命令Docker基础命令1、查看Docker版本信息2、镜像操作搜索镜像下载镜像查看镜像信息/获取镜像信息添加新标签(打标签)删除镜像将镜像存储到本机上,命名为nginx_latest载入镜像上传镜像3、容器操作查询容... 查看详情

docker基础(代码片段)

 kvm和docker   1、安装dockeryum-yinstalldockersystemctlstartdocker.servicesystemctlenabledocker.servicesystemctlstatusdocker.service#查看docker库大于100M关于mysql的镜像有哪些[[email protected] 查看详情

docker03基础操作(代码片段)

 【Docker 本体操作相关】检查Docker版本:docker-v 检查Docker当前状态:systemctlstatusdocker 停止Docker与开启Dockersystemctlstopdockersystemctlstartdocker 设置Linux开机自启动Dockersystemctlenabledocker【镜像操作Mir 查看详情

docker镜像管理基础(代码片段)

docker镜像管理基础文章目录docker镜像管理基础镜像的概念docker镜像层docker存储驱动AUFSOverlayFSDeviceMapperdockerregistrydocker镜像的制作DockerHubdocker镜像的获取镜像的生成基于容器制作镜像镜像的概念镜像可以理解为应用程序的集装箱&#x... 查看详情

docker镜像管理基础(代码片段)

docker镜像管理基础文章目录docker镜像管理基础镜像的概念docker镜像层docker存储驱动AUFSOverlayFSDeviceMapperdockerregistrydocker镜像的制作DockerHubdocker镜像的获取镜像的生成基于容器制作镜像镜像的概念镜像可以理解为应用程序的集装箱&#x... 查看详情

docker基础命令(代码片段)

Docker常用命令介绍1、docker常用命令命令作用dockersearch查询镜像dockerpull从网上拉取镜像dockercreate创建容器dockerps查看容器进程dockerstart启动容器进程dockerstop终止容器进程dockerlogs查看日志dockerimages查看docker中的镜像dockerrm删除镜像do... 查看详情

docker基础(代码片段)

三、docker安装官方地址:https://docs.docker.com/engine/install/centos/3.1.安装步骤1.卸载旧版本[root@docker~]#yumremovedockerdocker-clientdocker-client-latestdocker-commondocker-latestdocker-latest-logrotatedocker-logro 查看详情

docker基础必会!!!(代码片段)

docker基础必会!!!一.容器技术产生的背景二.docker理论2.1什么是docker?有什么作用?2.2docker的使用场景2.3docker引擎(DockerEngine)2.4docker与虚拟化的区别三.docker的架构(dockerarchitecture)四.docker三大组件 查看详情

docker知识概括(代码片段)

Docker知识概括Docker简介Docker安装Docker常用命令Docker镜像Docker容器数据卷DockerFile解析Docker常用安装本地镜像发布到阿里云Docker总结Docker简介为什么会有docker出现?一款产品从开发到上线,从操作系统,到运行环境,... 查看详情