一.docker解决的问题与定义
1.1 docker原因:
运行环境 微服务
1.2 docker本质定义:
并不是容器,容器是一个封装的方式
定义(docker是什么):docker是go语言开发的,用于运行容器里面应用的容器引擎 (用于管理容器并作为底层硬件(内核)与容器的 '中间程序')用来管理容器和镜像, 可以看作是一个程序
轻量级的虚拟机(小型虚拟机)
所有容器共用一个宿主机的内核, 使得容器可以在在任何平台都可以运行
通过docker管理,封装一次,随处可以运行。
虚拟机:hypervisor调用硬件资源为上层提供服务,
容器:docker引擎运行各种应用,共享内核,减少虚拟化管理程序对资源的开销。容器相当宿主机上面的一个进程。应用运行时,性能上面比在虚拟机上减少最多百分之五十的损耗。
虚拟机的资源会打折 有性能损耗,最多百分之五十
一个容器就是一个进程
Docker是一个开源的应用容器引擎,基于go语言开发并遵循了apache2.0协议开源。
Docker是在Linux容器里运行应用的开源工具,是一种轻量级的“虚拟机”。
Docker 的容器技术可以在一台主机上轻松为任何应用创建一个轻量级的、可移植的、自给自足的容器。
Docker的Logo设计为蓝色鲸鱼,拖着许多集装箱。
鲸鱼可看作为宿主机,集装箱可理解为相互隔离的容器,每个集装箱中都包含自己的应用程序。
Docker的设计宗旨:Build,Ship and Run Any App,Anywhere,
即通过对应用组件的封装、发布、部署、运行等生命周期的管理,达到应用组件级别的“一次封装,到处运行”的目的。这里的组件,既可以是一个应用,也可以是一套服务,甚至是一个完整的操作系统。
容器化越来越受欢迎,因为容器是:
●灵活:即使是最复杂的应用也可以集装箱化。
●轻量级:容器利用并共享主机内核。
●可互换:可以即时部署更新和升级。
●便携式:可以在本地构建,部署到云,并在任何地方运行。
●可扩展:可以增加并自动分发容器副本。
●可堆叠:可以垂直和即时堆叠服务。
容器是在linux上本机运行,并与其他容器共享主机的内核,它运行的是一个独立的进程,不占用其他任何可执行文件的内存,非常轻量。
虚拟机运行的是一个完整的操作系统,通过虚拟机管理程序对主机资源进行虚拟访问,相比之下需要的资源更多。
二.docker容器与虚拟机的区别
2.1区别
docker运行容器 虚拟机
内核配置 所有容器共享宿主机内核 每个虚拟机都有自己独立的操作系统和内核
速度 (进程启动速度)秒级 (硬件启动)分钟级
性能 基本无损耗接近于原身(因为容器相当于宿主机进程) (由于是模拟的)损耗二三十(一般为完成同样性能需要多给百分之二三十资源)到五十
支持量 可达上千个 一台主机课支持成千上百个容器 最多几十个 一台主机最多支持几十台虚拟机
隔离性 命名空间实现资源隔离 cgroup资源限制 完全隔离(初始就设置好了,规定死了的,每个虚拟机都有自己独立的硬件资源)
、
2.2 Linux基于docker容器的资源限制问题的命名空间方案:
linux 有六大命名空间(用于隔离) IPC(进程) mount (挂载) network (网络) PID (进程编号) user (用户名) uts(主机名)
cgroup用于资源限制,限制进程最大使用的资源量,为防止作为进程的docker容器占用全部资源使用cgroup限制
写时复制技术(写的时候做快照,备份,实现数据持久化)
k8s管理容器集群,使用docker需要使用中间插件 性能有损耗
容器引擎:docker rocket podman cantainerd
2.3 docker 三大核心概念:
镜像
包含容器中的应用程序所需要的所有内容,是一个完整的操作系统的压缩包,创建容器的基础。
相当于一个模板,包含代码,环境变量,配置文件,操作系统,使用docker引擎可以驱动成为容器。可依此创建多个容器
只读模板文件,只能读不能写(创建后不可以修改,但可以复制,直接改的话将不可用)要改的话生成新的容器后再生成新的镜像。
容器 从镜像创建的运行实列,默认互相隔离,互不可见,命名空间机器中运行的程序。容器可以被创建,启动,停止,删除。相当于克隆实体
仓库 保存镜像的地方,push 上传公有仓库或私有仓库(定制化功能,一个网络中所有授权的人共享),可以使得其他主机可以使用
docker默认工作目录:/var/lib/docker
三. docker的安装,与容器的搭建使用:
3.1 安装
二进制安装:二进制文件,解压就可用。
tar zxvf docker-19.03.9.tgz
mv docker/* /usr/bin
cat > /usr/lib/systemd/system/docker.service << EOF
[Unit]
Description=Docker Application Container Engine
Documentation=https://docs.docker.com
After=network-online.target firewalld.service
Wants=network-online.target
[Service]
Type=notify
ExecStart=/usr/bin/dockerd
ExecReload=/bin/kill -s HUP $MAINPID
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity
TimeoutStartSec=0
Delegate=yes
KillMode=process
Restart=on-failure
StartLimitBurst=3
StartLimitInterval=60s
[Install]
WantedBy=multi-user.target
EOF
版本:按照年份定义更新。每一年一更新
yum安装:(目前 Docker 只能支持 64 位系统。)
1 关闭防火墙
systemctl stop firewalld.service
setenforce 0
2 依赖包
yum install -y yum-utils device-mapper-persistent-data lvm2
yum-utils:提供了 yum-config-manager 工具。
device mapper: 是Linux内核中支持逻辑卷管理的通用设备映射机制,它为实现用于存储资源管理的块设备驱动提供了一个高度模块化的内核架构。
device mapper存储驱动程序需要 device-mapper-persistent-data 和 lvm2。
3 yum镜像文件缺少两个插件 安装缺少的插件
设置安装插件的镜像和下载插件:
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
yum install epel-release -y
yum install container-selinux -y
4 yum仓库配置文件 :指定阿里云镜像文件
#推荐使用国内的阿里镜像作为下载源
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
5 安装 Docker-CE(用于管理所有容器和客户端进程)并设置为开机自动启动
安装好的Docker系统有两个程序,Docker服务端和Docker客户端。其中Docker服务端是一个服务进程,负责管理所有容器。 Docker客户端则扮演着Docker服务端的远程控制器,可以用来控制Docker的服务端进程。大部分情况下Docker服务端和客户端运行在一台机器上。
yum install -y docker-ce docker-ce-cli containerd.io
systemctl start docker.service
systemctl enable docker.service
完整安装代码:
systemctl stop firewalld.service
setenforce 0
yum install -y yum-utils device-mapper-persistent-data lvm2
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
yum install epel-release -y
yum install container-selinux -y
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum install -y docker-ce docker-ce-cli containerd.io
systemctl start docker.service
systemctl enable docker.service
##**yum install -y epel-release:** 此命令用于在系统上安装 EPEL 存储库,提供对大量附加软件包的访问。
##container-selinux 安装成功后,容器的 SELinux 策略模块将会可用,提供了更强大的安全保障,适用于运行容器化应用的环境。通过强制访问控制策略来限制进程对系统资源的访问。
5 docker信息查看与解释
#查看 docker 版本信息
docker version
#docker 信息查看
docker info
Client:
Context: default
Debug Mode: false
Plugins:
app: Docker App (Docker Inc., v0.9.1-beta3)
buildx: Build with BuildKit (Docker Inc., v0.5.1-docker)
Server:
Containers: 0 # 容器数量
Running: 0
Paused: 0
Stopped: 0
Images: 1 # 镜像数量
Server Version: 20.10.3 # server 版本
Storage Driver: overlay2 # docker 使用的是 overlay2 文件驱动
Backing Filesystem: xfs # 宿主机上的底层文件系统
Supports d_type: true
Native Overlay Diff: true
Logging Driver: json-file
Cgroup Driver: cgroupfs # Cgroups 驱动
Cgroup Version: 1
Plugins:
Volume: local
Network: bridge host ipvlan macvlan null overlay
Log: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslog
Swarm: inactive
Runtimes: io.containerd.runtime.v1.linux runc io.containerd.runc.v2
Default Runtime: runc
Init Binary: docker-init
containerd version: 269548fa27e0089a8b8278fc4fc781d7f65a939b
runc version: ff819c7e9184c13b7c2607fe6c30ae19403a7aff
init version: de40ad0
Security Options:
seccomp
Profile: default
Kernel Version: 3.10.0-693.el7.x86_64 # 宿主机的相关信息
Operating System: CentOS Linux 7 (Core)
OSType: linux
Architecture: x86_64
CPUs: 1
Total Memory: 976.3MiB
Name: localhost.localdomain
ID: Y4ES:FTH2:ZJL7:MRVE:RJVB:WJIB:S7BV:C5IZ:LMBR:E4G5:QWSM:SNDT
Docker Root Dir: /var/lib/docker # docker 数据存储目录
Debug Mode: false
Registry: https://index.docker.io/v1/ # registry 地址
Labels:
Experimental: false
Insecure Registries:
127.0.0.0/8
Registry Mirrors: # 加速站点
https://6ijb8ubo.mirror.aliyuncs.com/
Live Restore Enabled: false
3.2 docker镜像的操作
docker服务端(守护进程 管理镜像)和客户端都在一台服务器上
docker build 搭建 pull 拉取 run 跑
docker daemon 从仓库中获取镜像
3.2.1 镜像的下载 以及上传拉取删除
#搜索镜像
格式:docker search 关键字
docker search nginx
name /前面是仓库名 后面是镜像 看stars数量来推断可信度
#获取镜像
将镜像文件从本地仓库或私有仓库中获取到本地仓库
格式:docker pull 仓库名称[:标签]
#如果下载镜像时不指定标签,则默认会下载仓库中最新版本的镜像,即选择标签为 latest 标签。
docker pull nginx
cgroup驱动器有两种:cgroupfs systemd
docker 镜像管理
#本地镜像的位置:
/var/lib/docker/image
安装完启动后自动生成文件:/etc/docker
镜像下载后放在/var/lib/docker
image下存放镜像
#为本地的镜像添加新的标签
格式:docker tag 名称:[标签] 新名称:[新标签]
docker tag nginx:latest nginx:web
若不指定标签下载,自动下载镜像:下载最新版本,tag为latest 通常标签为版本号 ,
docker images 查看下载的镜像信息
docker pull 镜像名
指定获取镜像
#加快镜像下载:
使用阿里云的镜像加速器
浏览器打开阿里云,产品 容器 镜像服务 管理控制台 镜像工具 镜像加速器 按对应版本做加速
浏览器访问 https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors 获取镜像加速器配置
mkdir -p /etc/docker
tee /etc/docker/daemon.json <<-'EOF' #tee 将程序的输出写到标准输出 同时将其复制到指定的一个或多个文件
{
"registry-mirrors": ["https://6ijb8ubo.mirror.aliyuncs.com"]
}
EOF
systemctl daemon-reload #加载新的unit 配置文件
systemctl restart docker #重启docker
#查看镜像信息
镜像下载后存放在 /var/lib/docker 。
cd /var/lib/docker/image
ls
Docker 相关的本地资源存放在 /var/lib/docker/ 目录下,其中 containers 目录存放容器信息,image 目录存放镜像信息,overlay2 目录下存放具体的镜像底层文件。
#查看下载的镜像文件信息
cat /var/lib/docker/image/overlay2/repositories.json
#查看下载到本地的所有镜像
docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest ae2feff98a0c 9 days ago 133MB
--------------------------------------------------------------------------------------------
REPOSITORY:镜像属于的仓库;
TAG:镜像的标签信息,标记同一个仓库中的不同镜像;
IMAGE ID:镜像的唯一ID 号,唯一标识一个镜像;
CREATED:镜像创建时间;
VIRTUAL SIZE:镜像大小;
--------------------------------------------------------------------------------------------
#根据镜像的唯一标识 ID 号,获取镜像详细信息
#查看指定镜像详细信息
格式:docker inspect 镜像ID号
docker inspect ae2feff98a0c
●lowerdir是镜像层,目录或者文件是只读的,其实就是rootfs,image layer可以分很多层,所以对应的lowerdir是可以有多个目录
●upperdir是在lowerdir之上的容器层,这层是可读可写的,在启动一个容器时候会进行创建,所有的对容器数据更改都发生在这里层
●MergedDir是表现层,是容器的挂载点
#删除镜像
格式:
docker rmi -f 仓库名称:标签 #当一个镜像有多个标签时,只是删除其中指定的标签
或者
docker rmi -f 镜像ID号 #会彻底删除该镜像
注意:如果该镜像已经被容器使用,正确的做法是先删除依赖该镜像的所有容器,再去删除镜像。
docker rmi nginx:web
删除标签不影响
除非全部删除
docker rmi -f
删除需要加 -f选项,强制删除
#存出镜像:将镜像保存成为本地文件
格式:docker save -o 存储文件名(新名字) 存储镜像名
docker save -o nginx nginx:latest #存出镜像命名为nginx存在当前目录下
ls -lh
将镜像文件从本地镜像仓库(/var/lib/docker/image)写到当前文件
#载入镜像:将镜像文件导入到镜像库中
格式:
docker load < 存出的文件
或者
docker load -i 存出的文件
docker load < nginx
与存出相反:将当前目录下镜像上传到/var/lib/docker/image本地仓库中
#上传镜像 (三步:设置标签指定用户名与仓库名 登录仓库 上传镜像)
默认上传到 docker Hub 官方公共仓库,需要注册使用公共仓库的账号。https://hub.docker.com
可以使用 docker login 命令来输入用户名、密码和邮箱来完成注册和登录。
在上传镜像之前,还需要先对本地镜像添加新的标签,然后再使用 docker push 命令进行上传。
为镜像设置新标签
docker tag 镜像原名/镜像ID 用户名/仓库名:新标签名
docker tag nginx:latest soscscs/nginx:web #添加新的标签时必须在前面加上自己的dockerhub的username
#如果要推送到某仓库,则必须是[ 用户名 ]/[ 仓库 ]这样,推送上去之后如果仓库在这个用户下不存在则会新建一个这个名字的仓库。
登录仓库
docker login #登录公共仓库
Username:soscscs
password:abc123456
#上传镜像:
docker push 用户名/仓库名:镜像标签名
docker push soscscs/nginx:web #上传镜像
可登录 https://hub.docker.com查看上传的信息
#指定查看本地镜像仓库中指定镜像
docker images | grep nginx
#镜像可以有多个标签及别名,但镜像ID是唯一的
imageID确定是否为同一镜像
其他不同只是标签不同而已
3.3 docker容器的操作
#容器创建:就是将镜像加载到容器的过程。
新创建的容器默认处于停止状态,不运行任何程序,需要在其中发起一个进程来启动容器。
格式:docker create [选项] 镜像 指定环境
常用选项:
-i:让容器开启标准输入接受用户输入命令 /bin/bash
-t:让 Docker 分配一个伪终端 tty
-it :合起来实现和容器交互的作用,运行一个交互式会话 shell
docker create -it nginx:latest /bin/bash
#查看容器的运行状态
docker ps -a #-a 选项可以显示所有的容器
docker ps #显示正在运行的容器
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
8b0a7be0ff58 nginx:latest "/docker-entrypoint.…" 57 seconds ago Created inspiring_swanson
容器的ID号 加载的镜像 运行的程序 创建时间 当前的状态 端口映射 名称
#启动容器
格式:docker start 容器的ID/名称
docker start 8b0a7be0ff58
docker ps -a
#创建并启动容器
可以直接执行 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 centos:7 /usr/bin/bash -c ls /
docker ps -a #会发现创建了一个新容器并启动执行一条 shell 命令,之后就停止了
#在后台持续运行 docker run 创建的容器
需要在 docker run 命令之后添加 -d 选项让 Docker 容器以守护形式在后台运行。并且容器所运行的程序不能结束。
docker run -d centos:7 /usr/bin/bash -c "while true;do echo hello;done"
docker ps -a #可以看出容器始终处于 UP,运行状态
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
2592d3fad0fb centos:7 "/usr/bin/bash -c 'w…" 2 seconds ago Up 2 seconds peaceful_chatelet
docker run -itd --name test1 centos:7 /bin/bash #创建容器并持续运行容器
#终止容器运行
格式:docker stop 容器的ID/名称
docker stop 2592d3fad0fb
docker ps -a
#容器的进入
需要进入容器进行命令操作时,可以使用 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 run -it centos:7 bash #不加 -d 选项会创建容器后直接进入容器进行交互,但是退出容器,容器也会停止
#复制到容器中
echo abc123 > ~/test.txt
docker cp ~/test.txt 2592d3fad0fb:/opt/
#从容器复制文件到主机
docker cp 2592d3fad0fb:/opt/test.txt ~/abc123.txt
#容器的导出与导入
用户可以将任何一个 Docker 容器从一台机器迁移到另一台机器。在迁移过程中,可以使用docker export 命令将已经创建好的容器导出为容器快照文件,无论这个容器是处于运行状态还是停止状态均可导出。可将导出文件传输到其他机器,通过相应的导入命令实现容器的迁移。
#导出格式:docker export 容器ID/名称 > 文件名
docker export 2592d3fad0fb > centos7.tar
docker export -o centos7.tar 2592d3fad0fb
#导入格式:cat 文件名 | docker import – 镜像名称:标签
cat centos7.tar | docker import - centos7:test #导入后会生成镜像,但不会创建容器
docker import centos7.tar -- 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 $1}'| xargs docker stop
docker ps -a | awk 'NR>=2{print "docker rm "$1}' | bash #批量删除所有容器
docker ps -a | awk 'NR>=2{print $1}'| xargs docker rm
docker images | awk 'NR>=2{print "docker rmi "$3}' | bash #批量删除镜像
docker images | grep none | awk '{print $3}' | xargs docker rmi #删除none镜像
docker rm $(docker ps -a -q) #批量清理后台停止的容器
3.4 配置文件选项代表意义
docker 容器生产经验
daemon.json 配置文件里面
bip 配置项中可以配置docker 的网段
{
"graph": "/data/docker", #数据目录,此行可不加
"storage-driver": "overlay2", #存储引擎,此行可不加
"insecure-registries": ["registry.access.redhat.com","quary.io"], #私有仓库
"registry-mirrors": ["https://q"], #镜像加速,必加项
"bip": "172.7.5.1/24", #docker网络,必加项
"exec-opts": ["native.cgroupdriver=systemd"], #启动时候的额外参数(驱动),结合K8S使用
"live-restore": true #当docker容器引擎挂掉的时候,使用docker跑起来的容器还能运行(分离) ,必加项
}
以上是建议的配置项
Kubernetes 推荐使用 systemd 来代替 cgroupfs
因为systemd是Kubernetes自带的cgroup管理器, 负责为每个进程分配cgroups,
但docker的cgroup driver默认是cgroupfs,这样就同时运行有两个cgroup控制管理器,
当资源有压力的情况时,有可能出现不稳定的情况
########docker 容器网络生产经验#######
docker 的网路建议 和宿主机的IP“对照”
比如宿主机 10.2.5.6 容器的地址就可以修改为172.5.6,这样方便在故障发生时,更容易定位故障节点位置
# daemon.json 配置介绍
{
"graph": "/data/docker",
"storage-driver": "overlay2",
"insecure-registries": ["registry.access.redhat.com","quay.io"],
"registry-mirrors": ["https://q2gr04ke.mirror.aliyuncs.com"],
"bip": "172.24.38.1/24",
"exec-opts": ["native.cgroupdriver=systemd"],
"live-restore": true
}
# 配置项注意点:
# graph: 该关键字未来将被弃用,可以采用 "data-root" 替代
# storage-driver: 存储驱动,即分层文件系统
# insecure-registries: 不安全的docker registries,即使用http协议推拉镜象
# registry-mirrors: 加速站点,一般可以使用阿里、网易云、docker中国(https://registry.docker-cn.com)的地址
# bip: 指定docker bridge地址(不能以.0结尾),生产中建议采用 172.xx.yy.1/24,其中xx.yy为宿主机ip后四位,方便定位问题
# 若启动失败,查看 /var/log/message 日志排错
# live-restore 启用实时还原
默认情况下,当Docker守护程序终止时,它将关闭正在运行的容器。从Docker Engine 1.12开始,您可以配置守护程序,以便在守护程序不可用时容器仍在运行。此功能称为实时还原。实时还原选项有助于减少由于守护程序崩溃,计划内的停机或升级而导致的容器停机时间。
使用配置文件 /etc/docker/daemon.json(没有时新建该文件)
{
"insecure-registries": ["192.168.10.7:666"],
"registry-mirrors": ["https://9yhxvwku.mirror.aliyuncs.com"]
"live-restore": true
}
参数说明:
insecure-registries 私有仓库地址
registry-mirrors 镜像加速地址,也就是第三方仓库,也可以改成自己的仓库地址http://192.168.10.7:666,这样docker pull的时候就不用加上私有仓库的地址和端口了。
live-restore 启用实时还原
默认情况下,当Docker守护程序终止时,它将关闭正在运行的容器。从Docker Engine 1.12开始,您可以配置守护程序,以便在守护程序不可用时容器仍在运行。此功能称为实时还原。实时还原选项有助于减少由于守护程序崩溃,计划内的停机或升级而导致的容器停机时间。
将配置添加到守护程序配置文件。在Linux上,默认为/etc/docker/daemon.json
重新加载Docker守护程序
systemctl reload docker
四.常见的基本命令
41 docker包:.
安装依赖包
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 install -y docker-ce docker-ce-cli containerd.io
查看 docker 版本信息
docker version
docker 信息查看
docker info
4.2 docker 镜像
搜索镜像
docker search 关键字
获取镜像
docker pull 仓库名称[:标签]
镜像加速下载
浏览器访问 https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors 获取镜像加速器配置
查看下载到本地的所有镜像
docker images
根据镜像的唯一标识 ID 号,获取镜像详细信息
格式:docker inspect 镜像ID号
为本地的镜像添加新的标签
格式:docker tag 名称:[标签] 新名称:[新标签]
删除镜像
docker rmi 仓库名称:标签
docker rmi 镜像ID号 #会彻底删除该镜像
存出镜像:将镜像保存成为本地文件
格式:docker save -o 存储文件名 存储的镜像
上传镜像
默认上传到 docker Hub 官方公共仓库,需要注册使用公共仓库的账号。https://hub.docker.com
在上传镜像之前,还需要先对本地镜像添加新的标签,然后再使用 docker push 命令进行上传。
docker tag nginx:latest soscscs/nginx:web #添加新的标签时必须在前面加上自己的dockerhub的username
docker login #登录公共仓库
Username:soscscs
password:abc123456
docker push soscscs/nginx:web #上传镜像
载入镜像:将镜像文件导入到镜像库中
格式:
docker load < 存出的文件
或者
docker load -i 存出的文件
docker load < nginx
docker search 关键词 搜索 pull 仓库名或镜像名:标签 images rmi 镜像ID 所有标签名 删除 tag (修改镜像标签) inspect(详细信息) save load login push
上传共有仓库
先访问hub.docker.com(共有仓库,需要翻墙)
先注册账号 才可以使用
上传过的镜像是无法再次上传(自动去重)
无法直接登录 需要输入密码 然后push推送
4.3 容器的管理操作
创建容器
docker create 选项 【--name 容器名称】 镜像:标签
-i 命令行中对容器操作
-t 用伪终端登录到容器
-it 一般结合使用,实现和容器交互,运行一个交互会话shell.
默认操作都需要 docker create -it
docker ps (显示处于运行状态的容器)
docker ps -a (所有容器)
登录要么使用bash 要么使用sh 总有一个可以登录
容器复制到宿主机 (很重要)
宿主机文件复制到容器中(很重要)
docker cp 文件 容器ID:/目录
docker start 容器的ID/名称 启动
docker stop 容器的ID/名称 停止 向容器放送kill -15信号(请求,让容器优雅关闭(30s)可以等进程完成写入退出)
rm 删除
inspect 查看
docker exec -it 容器ID/名称 /bin/bash 进入
cp 复制
run 创建并启动 create + start
kill 立即关闭
docker export 容器ID/名称 > 文件名 导出
cat 文件名 | docker import – 镜像名称:标签 导入
docker rm [-f] 容器ID/名称 删除容器(先停再删)
docker rm $(docker ps -a -q) #批量清理后台停止的容器
创建一个容器 docker inspect查看
daemon off nginx启动容器启动,nginx退出容器退出 nginx为第一个进程,nginxpid为一 docker必须有一个前台进程,必须前台运行,不能后台运行
docker run --name 镜像 命令
看输入的命令是否为启动完旧退出的命令来决定容器是否退出
容器放后台运行
ctrl C 只能给宿主机发信号
dockers stop
docker yum安装失败 解决方案
1. 检查centos版本 大于7.0
2. 安装需要两个插件 epel-release container-selinux
yum install epel-release -y
yum install container-selinux -y
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
docker在线安装脚本:
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
sed -i 's/enforcing/disabled/' /etc/selinux/config
iptables -F && iptables -t nat -F && iptables -t mangle -F && iptables -X
swapoff -a
sed -ri 's/.*swap.*/#&/' /etc/fstab
for i in $(ls /usr/lib/modules/$(uname -r)/kernel/net/netfilter/ipvs|grep -o "^[^.]*");do echo $i; /sbin/modinfo -F filename $i >/dev/null 2>&1 && /sbin/modprobe $i;done
hostnamectl set-hostname master
su
hostnamectl set-hostname node01
su
hostnamectl set-hostname node02
su
echo'192.168.92.80 master
192.168.92.30 node01
192.168.92.40 node02' >> /etc/hosts
cat > /etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge-nf-call-ip6tables=1
net.bridge.bridge-nf-call-iptables=1
net.ipv6.conf.all.disable_ipv6=1
net.ipv4.ip_forward=1
EOF
sysctl --system
yum install ntpdate -y
ntpdate time.windows.com
##安装docker
yum install -y yum-utils device-mapper-persistent-data lvm2
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
yum install epel-release -y
yum install container-selinux -y
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum install -y docker-ce docker-ce-cli containerd.io
mkdir /etc/docker
cat > /etc/docker/daemon.json <<EOF
{
"registry-mirrors": ["https://8rbafdz7.mirror.aliyuncs.com"],
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m"
}
}
EOF
systemctl daemon-reload
systemctl restart docker.service
systemctl enable docker.service
docker info | grep "Cgroup Driver"