Docker基本管理

1、Docker概述

容器:一种依赖于linu内核特性Namespace和Croups的虚拟化技术
  • 是一个开源的应用容器引擎,基于go语言开发并遵循了apache2.0协议开源

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

  • 是一种轻量级的"虚拟机'

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

Docker与虚拟机的区别

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

技术支持

namespace实现资源隔离
cgroups实现资源限制
(写时复制技术)copy-on-write实现高效的文件操作

核心概念

  • 镜像:创建容器的基础,类似于虚拟机快照,面向Docker容器引擎的只读模板

  • 容器:用镜像创建的运行实列

  • 仓库:用来保存镜像的地方

Docker的镜像、容器、日志等内容全部默认存储在/var/lib/docker

2、安装Docker

注:目前Docker只能支持64位系统。
​
1、关闭防火墙
systemctl stop firewalld.service
setenforce 0
​
​
2、将repo.bak里面以CtenOS的都移到上层目录
[root@localhost yum.repos.d]# ls
abc.repo  bak  docker-ce.repo
[root@localhost yum.repos.d]# mv bak/* ./
[root@localhost yum.repos.d]# ls
--------------------------------------------
备注:这一步不能少,不然后续第五步有问题
​
3、安装依赖包
yum install -y yum-utils device-mapper-persistent-data lvm2
-------------------------------------
yum-utils:提供了yum-config-manager工具。
devicemapper:是Linux内核中支持逻辑卷管理的通用设备映射机制,它为实现用于存储资源管理的块设备驱动提供了一个高度模块化的内核架构。
device mapper:存储驱动程序需要device-mapper-persistent-data和lvm2。
​
4、设置阿里云镜像源
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
​
5、安装Docker-CE并设置为开机自动启动
yum install -y docker-ce docker-ce-cli containerd.io
-----------------------------------
报错解决:
这个报错是container-selinux版本低或者是没安装的原因
yum 安装container-selinux 一般的yum源又找不到这个包
需要安装epel源 才能yum安装container-selinux
然后在安装docker-ce就可以了。
########################
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
yum install epel-release
yum makecache
yum install container-selinux
####################
​
systemctl start docker.service
systemctl enable docker.service
--------------------------------------------------
安装好的Docker系统有两个程序,Docker服务端和Docker客户端。其中Docker服务端是一个服务进程,负责管理所有容器。
Docker客户端则扮演着Docker服务端的远程控制器,可以用来控制Docker的服务端进程。大部分情况下Docker服务端和客户端运行在一台机器上。

3、Docker镜像创建与操作

3.1、操作

1、查看版本信息
docker version
​
2、查看docker信息
docker info 

3.2、镜像管理命令

3.2.1、搜索镜像

1、搜索镜像
--------------------------------
格式:docker search <仓库/镜像名>
例:docker search nginx

3.2.2、下载镜像

2、下载镜像
--------------------------------
格式:docker pull <仓库名称/镜像名>
#如果下载镜像时不指定标签,则默认会下载仓库中最新版本的镜像,即选择标签为latest标签
例:docker pull mysql
例:docker pull soscscs/myapp:v1

3.2.3、镜像加速下载

3、镜像加速下载(去阿里巴巴查看)
当您下载安装的Docker Version不低于1.10时,建议通过daemon config进行配置。
​
修改配置文件/etc/docker/daemon.json(没有时新建该文件)。
-------------------
{
    "registry-mirrors": ["镜像加速器地址"]  #地址:https://sbqw40em.mirror.aliyuncs.com
}            
---------------------
systemctl daemon-reload    ###然后重启Docker Daemon。
systemctl restart docker

 

3.2.4、查看本地镜像

5、查看下载的本地镜像
例:docker images
---------------------------------------
[root@localhost yum.repos.d]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED       SIZE
nginx        latest    0e901e68141f   3 weeks ago   142MB

3.2.5、查看镜像信息

4、查看镜像信息
--------------------------------------
镜像下载后存放在/var/lib/docker/image/overlay2下的repositories.json文件
docker inspect <ID>  ##获取容器/镜像的元数据。

 

3.2.6、更改镜像标签

6、更改镜像文件标签
docker tag 镜像名:旧标签 镜像名:新标签(仓库/镜像名:新标签)
--------------------------------------------
例:docker tag nginx:latest nginx:ky18

3.2.7、删除镜像

7、删除镜像
docker rmi 仓库名/镜像:标签
docker rmi ID -f  (-f:强制删除)  ######一个镜像有多个标签需要强制删除
---------------------------------
例:docker rmi mysql:latest 

3.2.8、打包镜像

8、打包镜像到当前目录
docker save -o 镜像文件.tar  镜像名称:标签
--------------------------------
例:docker save -o nginx.tar nginx

3.2.9、解压加入镜像文件

9、解压加入镜像文件
[root@localhost kervin24]# docker load -i nginx.tar   ## -i指定压缩包
[root@localhost kervin24]# docker load <  nginx.tar   ## <重定向也可以 

3.2.10、登录docker仓库

官方仓库https://hub.docker.com/
--------------------------------------------
10、登录仓库
[root@localhost ~]# docker login 
Login with your Docker ID to push and pull images from Docker Hub. If you don't have a Docker ID, head over to https://hub.docker.com to create one.
Username: kervin24
Password: 
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store

Login Succeeded

3.2.11、上传镜像

11、上传镜像到仓库
docker push 仓库名/镜像名:标签
---------------------------------------
例:docker push kervin24/mysql:ky18

 

 

3.3、容器管理命令

3.3.1、创建容器

格式:docker create [选项] 镜像
常用选项:
-i:让容器开启标准输入
-t:让Dokcer分配一个伪终端tty
-it:合起来实现和容器交互的作用,运行一个交互式会话shell
----------------------------------------------------------
docker create -it [--name=容器名称]  镜像名 <命令>
例:docker create -it kervin24/centos:ky18 /bin/bash

-----------------------------------------------------------
遇到警告:WARNING: IPv4 forwarding is disabled. Networking will not work.
解决方案:
662385f7b48c4a0aac74838378e9836a1d0ccb2d95211af22c757178c5cfb5cc
[root@localhost ~]# vim /etc/sysctl.conf 
[root@localhost ~]# echo 'net.ipv4.ip_forward=1' > /etc/sysctl.conf 
[root@localhost ~]# sysctl -p
net.ipv4.ip_forward = 1
[root@localhost ~]# systemctl restart docker
[root@localhost ~]# 

3.3.2、查看容器状态

docker ps -a
----------------------
-q:只查看ID号
-a:所有

3.3.3、启动容器

docker start <容器ID/名称>

没有指定名称(会随机分配)

3.3.4、停止容器

docker stop <容器ID/名称>
docker kill <容器ID/名称>

3.3.5、删除容器

docker rm [-f强制删除] <容器ID/名称>

3.3.6、创建并启动容器

docker run等于docker create + docker start
------------------------------------------
注意:容器是与其中运行的shell命令共存亡的终端,命令运行容器运行, 命令结束容器退出。
docker容器默认会把容器内部第一个进程,也就是pid=1的程序作为docker容器是否正在运行的依据,如果docker容器中pid=1的进程挂了,那么docker容器便会直接退出,也就是说Docker容器中必须有一个前台进程,否则认为容器已经挂掉。
当利用docker run来创建容器时,
Docker在后台的标准运行过程是:
(1)检查本地是否存在指定的镜像。当镜像不存在时,会从公有仓库下载
(2)利用镜像创建并启动一个容器;
(3)分配一个文件系统给容器,在只读的镜像层外面扭载层呵读写层;
(4)从宿主主机配置的网桥接口中桥接一个虚拟机接口到容器中
(5)分配一个地址池中的IP地址给容器
(6)执行用户指定的应用程序,执行完毕后容器被终止运行。

docker run [--name] -itd  名称  bin|bash
-------------------------------------------------------
例:docker run -itd [--name] c4 kervin24:mysql bash -c ls 
-d:后台启动
-c:不进入执行

3.3.7、进入容器

需要进入容器进行命令操作时,使用docker exec命令进入运行着的容器
---------------------------------------
格式:docker exec -it 容器ID/名称 /bin/bash
-it:合起来实现和容器交互的作用,运行一个交互式会话shell

例:docker exec -it zealous_tharp  /bin/bash

3.3.8、查看容器日志

docker logs 容器ID/名称   ###查看容器pid=1的进程日志
----------------------------------

3.3.9、容器复制文件到主机

docker cp 容器ID/名称:路径
---------------------------
例:docker cp 8453e1cc0109:/opt/abc.txt ~/xikai.txt 

3.3.10、容器的导入导出

导入:docker export 容器ID/名称 > 导出文件
导入:cat 导入文件 |docker import - 镜像名:标签
--------------------------------------------------

例:
docker export 8453e1cc0109 > xikai.tar
scp xikai.tar 192.168.80.200:/opt
cat xikai.tar | docker import - xikai:ky18

 

4、Docker网络

4.1、Docker网络实现原理

#Docker网络实现原理
---------------------------
Docker使用Linux桥接,在宿主机虚拟一个Docker容器网桥(docker0)
Docker启动一个容器时会根据网桥的网段分配给容器一个IP地址,称为Container-IP,
Docker网桥是每个容器的默认网关。因为在同一宿主机内的容器都接入同一个网桥,这样容器之间就能够通过容器的Container-IP直接通信。

4.1.1、端口映射

docker run -P      ###映射容器端口到宿主主机(端口映射)     [宿主机IP]:[容器端口]访问容器
docker run -p     
---------------------------
Docker网桥是宿主机虛拟出来的,并不是真实存在的网络设备,
外部网络是无法寻址到的,外部网络无法直接通过Container-IP参数来启动访问到容器。

4.1.2、查看端口网络模式

Host:使用宿主机的IP和的端口
Container:和一个指定容器共享IP、端口范围
None:关闭了容器的网络功能
Bridge:默认模式,为每一个容器分配、设置IP等,容器连接到一个docker0网桥,利用网桥及iptables nat表配置与宿主机通信
----------------------------------
查看端口网络模式
docker network ls
docker network list

4.1.3、指定端口模式

docker run --net|--network
--net=host:指定host模式
--net=none:指定none模式
--net=container:指定container
--net=bridge:指定bridge模式。默认设置,可省略

4.2、Docker网络模式

4.2.1、Host模式

共享端口范围,相互之间不能重复
IP地址用的是宿主机的IP地址

4.2.2、Container模式

新创建的容器和已经存在的容器共享网络,但是不能共享端口
容器IP和宿主机的IP地址不一致

4.2.3、None模式

Docker容器没有网卡、IP、路由等信息,容器只有lo回路,没有其他网卡,没有办法联网

4.2.4、Bridge模式

docker模型是docker默认网络模式,不用--net参数
相当于Vmware中的nat模式,容器使用独立network Namespace,连接到docker0虚拟网卡

4.2.5、自定义网络

直接使用bridge模式,是无法支持指定IP运行docker

1、创建自定义网络
##先自定义网络,再使用指定IP运行docker
docker network  create --subnet=172.18.0.0/16 --opt "com.docker.network.bridge.name"="docker1" mynetwork

docker run -id --name c6 --network mynetword --ip 172.18.0.10 centos:latest bash

5、资源控制

5.1、对cpu限制

cpu资源控制

cgroups,是一个非常强大的1inux内核工具,
可以限制被namespace隔离起来的资源,为资源设置权重、计算使用量、操控进程启停等,实现了对资源的配额和度量。

cgroups有四大功能

  • 资源限制:可以对任务使用的资源总额进行限制

  • 优先级分配:通过分配的cpu时间片数量以及磁盘I0带宽大小,实际上相当于控制了任务运行优先级

  • 资源统计:可以统计系统的资源使用量,如cpu时长, 内存用量等

  • 任务控制: cgroup可以对任务执行挂起、恢复等操作

5.1.1、设置cpu使用率上限

CFS(Completely Fair Scheduler,完全公平调度器)调度各个进程对CPU的使用。默认的调度周期是100ms
-----------------------------------------------------------------------
CFS周期有效范围:1ms~1s
--cpu-period:设置调度周期,数值范围是1000~1000000。
--cpu-quota:设置在每个周期内容器能使用的CPU时间。有效值>=1000。

默认路径:/sys/fs/cgroup/cpu/

5.1.2、设置cpu资源占用比(设置多个容器才有效)

--cpu-shares:指定cpu份额,默认值为1024,值为1024的倍数
---------------------------------------------------
#创建两个容器为c1和c2,若只有这两个容器,设置容器的权重,使得c1和c2的CPU资源占比为1/3和2/3。
docker run -itd --name c1 --cpu-shares 618  centos:7
docker run -itd --name c2 --cpu-shares 1024 centos:7

5.1.3、设置容器绑定指定的cpu

docker run -itd --name test --cpuset-cpus 1,3 centos:latest  /bin/bash
####绑核(第一个cpu从0开启)

5.2、对内存限制

-m(--memory=)  物理内存     --memory-swap=总值 总值=物理内存+可用swap
######--memory-swap必须要和--memory一起使用
--memory-swap=0或者不设置, 容器可使用的swap大小为-m值的两倍
--memory-swap的值与-m值相同,容器不能使用swap
--memory-swap的值为-1,表示容器程序使用的内存受限,可使用的swap不受限制

-------------------------------
例:docker run -itd --name c4 -m 512m centos:latest  bash
docker stats 查看内存

5.3、对磁盘IO配置控制(blkio)的限制

--device-read-bps:限制某个设置上的读速度
--device-write-bps:限制某个设置上的写速度
--device-read-iops:限制读某个设备的iops(次数)
--device-write-iops:限制读某个设备的iops(次数)

例:docker run -itd --name c6 --device-write-bps /dev/sda:1mb centos:latest bash

测试:dd if=/dev/zero of=/opt/test.out bs=10M count=5 oflag=direct

5.4、清理docker占用的磁盘空间

docker system prune -a   ##可以用于清理磁盘,删除关闭的容器、无用的数据卷和网络

 

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
引用\[1\]:Docker镜像命令思维导图是一篇文章,主要用来记录Docker命令的思维导图,方便回顾和复习使用。文章中提供了多个思维导图源文件,包括docker服务、docker整体、docker镜像、docker容器和补充的redis-cli命令。这些思维导图可以帮助用户回顾和学习Docker命令的使用。\[1\] 引用\[2\]:Docker使用思维导图及各种命令是一篇文章,介绍了Docker的架构和常用命令。文章中提供了Docker的架构图和常用命令的思维导图,包括搜索命令、下载镜像、列出镜像、删除本地镜像、保存镜像、加载镜像、构建镜像以及容器相关的命令。这些思维导图可以帮助用户更好地理解和使用Docker。\[2\] 根据提供的引用内容,可以看出这些思维导图主要是为了帮助用户回顾和学习Docker基本管理命令。这些思维导图提供了Docker的架构图、常用命令的概览以及具体命令的使用示例。用户可以根据自己的需求选择相应的思维导图来学习和使用Docker。 #### 引用[.reference_title] - *1* [Docker命令大全(带思维导图)](https://blog.csdn.net/bzu_mei/article/details/127627898)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [Docker及其使用思维导图](https://blog.csdn.net/hliq5399/article/details/106021348)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值