学无先后,达者为师

网站首页 编程语言 正文

docker基本概念及安装

作者:wmc995620 更新时间: 2022-07-13 编程语言

Docker一次封装,到处运行

●Docker是一个开源的应用容器引擎,基于go语言开发并遵循了apache2.0协议开源

●是在Linux容器里运行应用的开源工具

●是一种轻量级的“虚拟机”

●Docker的容器技术可以在一台主机上轻松为任何应用创建一个轻量级的、可移植的、自给自足的容器。

Docker与虚拟机的区别

特性 Docker容器 虚拟机
启动速度 秒级 分钟级
计算能力损耗 几乎无 损耗50%左右
性能 接近原生 弱于
系统支持量(单机) 上千个 几十个
隔离性 资源隔离/限制 完全隔离

Linux 的namespace (命名空间)

namespace 的六项隔离

namespace 系统调用参数 隔离内容
UTS CLONE_NEWUTS 主机名和域名
IPC CLONE_NEWWIPS 信号量,消息队列和共享内存
PID CLONE_NEWPID 进程编号
NETWORK CLONE_NEWNET 网络设备,网络栈,端口等
MOUNT CLONE_NEWNS 挂载点(文件系统)
USER CLONE_NEWUSER 用户和用户组(3.8以后的内核才支持)

Docker运行流程

在这里插入图片描述

Docker的使用场景

●打包应用程序简化部署

●可脱离底层硬件任意迁移

例:服务器从腾讯云迁移到阿里云

Docker的核心概念

①镜像 一个面向Docker容器引擎的只读模板

②容器 从镜像创建的运行实例

③仓库 集中保留镜像的地方

仓库分为 公有仓库:Docker官方仓库 私有仓库:个人化、私有化的仓库

总结:Docker是容器管理工具,容器由镜像创建而来,镜像从仓库中获取而来,仓库分为公有、私有。

Docker安装

#关闭防火墙
systemctl stop firewalld.service
setenforce 0
​
yum install -y yum-utils device-mapper-persistent-data lvm2
​
#配置阿里云镜像源
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
​
#安装Docker-CE,并启动,同时设置为开机自启
yum -y install docker-ce
systemctl enable --now docker.service 
​
#查看docker的版本信息
docker version
​
#查看当前docker的详细信息
docker info
​
​
#镜像加速
通过修改daemon配置文件/etc/docker/daemon.json来使用加速器
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://hgfiuss0.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
​
​
​
##为什么要开启路由转发功能?
开启路由转发 是让docker0能根据虚拟机ip为自己所有的docker容器分配虚拟ip
vim /etc/sysctl.conf
net.ipv4.ip_forward=1  #开启路由转发
​
sysctl -p
systemctl restart network
systemctl restart docker
​
​
###docker-server端配置文件建议配置
#在daemon. json文件中配置
{
  "graph":"/data/docker",       #数据目录,数据存储位置
  "storage-driver":"overlay2",  #存储引擎,docker1.18以上版本默认使用overlay2存储引擎。早期的适合存储引擎使用的aufs
  "insecure-registries":["registry.access.redhat.com","quary.io"],  #私有仓库
#registry-mirrors 以下添加
  "bip":"172.184.70.1/24",      #docker网络
  "exec-opts":["native.cgroupdriver-systemd"],  #启动时的额外参数,(是一种挂在驱动,k8s使用)
  "live-restore":true   #当docker容器引擎挂掉的时候,使用docker跑起来的容器还能继续运行
}
[root@localhost yum.repos.d]# docker info
Client:
 Context:    default
 Debug Mode: false
 Plugins:
  app: Docker App (Docker Inc., v0.9.1-beta3)
  buildx: Docker Buildx (Docker Inc., v0.8.2-docker)
  scan: Docker Scan (Docker Inc., v0.17.0)
​
Server:
 Containers: 0    #有多少容器
  Running: 0    #正在运行的数量
  Paused: 0   #暂停的数量
  Stopped: 0  #停止的数量
 Images: 0  #镜像的数量
 Server Version: 20.10.17   #服务端版本号
 Storage Driver: overlay2   #文件类型的驱动引擎
  Backing Filesystem: xfs   #文件系统类型
  Supports d_type: true
  Native Overlay Diff: true
  userxattr: false
 Logging Driver: json-file
 Cgroup Driver: cgroupfs   #Cgroup引擎类型
 Cgroup Version: 1
 Plugins:
  Volume: local
  Network: bridge host ipvlan macvlan null overlay
  Log: awslogs fluentd gcplogs gelf journald json-file local logentries splunk
 Swarm: inactive
 Runtimes: io.containerd.runc.v2 io.containerd.runtime.v1.linux runc
 Default Runtime: runc
 Init Binary: docker-init
 containerd version: 10c12954828e7c7c9b6e0ea9b0c02b01407d3ae1
 runc version: v1.1.2-0-ga916309
 init version: de40ad0
 Security Options:
  seccomp
   Profile: default
 Kernel Version: 3.10.0-693.el7.x86_64   #当前系统的内核版本
 #以下是当前系统的信息,因为docker共享系统配置
 Operating System: CentOS Linux 7 (Core)
 OSType: linux
 Architecture: x86_64
 CPUs: 1
 Total Memory: 1.781GiB
 Name: localhost.localdomain   
 ID: LQWK:2C26:54YI:XEIW:XZP3:Q44T:LB3J:3PAC:LKE3:HMNW:YE3Q:7FIN
 Docker Root Dir: /var/lib/docker
 Debug Mode: false
 Registry: https://index.docker.io/v1/  #默认仓库地址
 Labels:
 Experimental: false
 Insecure Registries: #指定私有仓库地址
  127.0.0.0/8
 Live Restore Enabled: false
 

docker镜像与容器基本的基本操作

docker 镜像操作

●搜索镜像(公共仓库)——docker search
默认是在公共仓库找,如果有私有仓库,会在私有仓库找
​
#格式:docker search 关键字
#示例: 
docker search nginx 
​
​
●下载镜像——docker pull
#格式:docker pull 仓库名称[:标签]
#如果下载镜像时不指定标签,则默认会下载仓库中最新版本的镜像,即选择标签为 latest 标签。
docker pull centos:7
docker pull nginx
​
​
​
●查看镜像——docker images
#查看下载到本地的所有镜像
docker images
​
REPOSITORY   TAG       IMAGE ID       CREATED        SIZE
nginx        latest    55f4b40fe486   27 hours ago   142MB
--------------------------------------------------------------------
REPOSITORY:镜像属于的仓库;
TAG:镜像的标签信息,标记同一个仓库中的不同镜像;
IMAGE ID:镜像的唯一ID 号,唯一标识一个镜像,经过md5方式加密过;
CREATED:镜像创建时间;
VIRTUAL SIZE:镜像大小;
​
​
●获取镜像信息——docker inspect
#格式:docker inspect  镜像ID
#示例:查看nginx镜像信息
docker insect 605c77e624dd
​
​
●添加镜像标签——docker tag
#格式:docker tag 名称:[旧标签] 新名称:[新标签]
#示例:
docker tag nginx:latest nginx:lnmp  #给nginx打上标签lnmp,原来的标签是latest
​
​
●删除镜像——docker rmi
docker rmi是docker rm image的简写
#格式:
docker rmi 仓库名称:标签   #当一个镜像有多个标签时,只是删除其中指定的标签
docker rmi 镜像ID号       #会彻底删除该镜像
​
​
●批量删除镜像
#docker images -q 可以加载镜像id
#批量删除所有镜像
docker rmi `docker images -q`
#批量删除nginx镜像
docker rmi `docker images|grep "nginx"`
​
​
●导出/导入镜像——docker save/load
#导出镜像
#格式:docker save -o 存储文件名 存储的镜像
docker save -o nginx_v1 nginx:latest   #存出镜像命名为nginx存在当前目录下
scp nginx_v1 @root:192.168.59.111:/opt   #将导出的镜像以scp方式导到别的服务器上
​
#导入镜像,可以异地导入,但是必须要有docker引擎,并且版本不可以差太多
#格式:docker load < 存出的文件
      docker load -i 存出的文件
docker load < nginx_v1

docker容器操作

●查询所有容器运行状态——docker ps -a
docker ps -a
​
CONTAINER ID   IMAGE   COMMAND   CREATED   STATUS    PORTS    NAMES
​
容器的ID号   加载的镜像   运行的程序  创建时间  当前的状态  端口映射   名称
​
​
●创建容器——docker create
新创建的容器默认处于停止状态,不运行任何程序,需要在其中发起一个进程来启动容器。
​
#格式:docker create [选项] 镜像
#常用选项:
-i:让容器的输入保持打开
-t:让 Docker 分配一个伪终端
​
#示例:
docker create -it nginx:latest /bin/bash
​
​
●启动容器——docker start
#格式:docker start 容器的ID/名称
docker start b2a57b3ea48a
docker ps -a
​
​
启动容器(一次性执行)—— docker run
#加 -d 选项让 Docker 容器以守护形式在后台运行。并且容器所运行的程序不能结束。
​
#示例1:
docker run -itd nginx:latest /bin/bash
​
#示例2:执行后退出
docker run centos:7 /usr/local/bash -c ls /   
​
#示例3:执行后不退出,以守护进程方式执行持续性任务
docker run -d centos:7 /usr/local/bash -c "while true;do echo hello;done" 
​
​
●终止容器运行
格式: docker   stop/kill   容器ID/名称
​
stop: 停止容器,可以给容器一个等待时间,以防止数据的丢失。
​
kill: 立即强行停止一个容器(相当于linux命令 kill -9) ,不会给容器反应时间,可能会造成数据丢失
​
●进入容器
需要进入容器进行命令操作时,可以使用 docker exec 命令进入运行着的容器。
​
格式:docker exec -it 容器ID/名称 /bin/bash
-i 选项表示让容器的输入保持打开;
-t 选项表示让 Docker 分配一个伪终端。
 
docker start 2592d3fad0fb   #进入容器前,确保容器正在运行
docker exec -it 2592d3fad0fb /bin/bash
ls
exit    #退出容器后,容器仍在运行
docker ps -a
​
●从宿主机上将文件导入到容器中
docker ps -a                                               #先获取需要导入到的容器ID,然后重新开一个终端
 
另一个终端上操作
echo "wmc" >> cc.txt                   #创建测试文件
docker cp 123.txt cef59022a4dd:/opt 
​
●容器的导出与导入
#导出格式:docker export 容器ID/名称 > 文件名
docker export 2592d3fad0fb > centos7.tar
 
#导入格式:cat 文件名 | docker import – 镜像名称:标签
cat centos7.tar | docker import - centos7:test  #导入后会生成镜像,但不会创建容器
​
●删除容器
格式:docker rm [-f] 容器ID/名称
docker stop 2592d3fad0fb
docker rm 2592d3fad0fb  #删除已经终止状态的容器
 
docker rm -f 2592d3fad0fb   #强制删除正在运行的容器
 
docker ps -a | awk 'NR>=2{print "docker stop "$1}' | bash    #批量停止容器
 
docker ps -a | awk 'NR>=2{print "docker rm "$1}' | bash  #批量删除所有容器
 
docker images | awk 'NR>=2{print "docker rmi "$3}' | bash    #批量删除镜像

原文链接:https://blog.csdn.net/wmc995620/article/details/125385589

栏目分类
最近更新