You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

12 KiB

!Docker.svg

说明


[toc]

📙一、 系统介绍

1 概括性介绍

1.1 Docker Run做了什么

  • 查找本地镜像
  • 查找网络镜像

1.2 Docker工作机制

作者:步尔斯特 链接:https://www.zhihu.com/question/485967221/answer/2556644950 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

Docker是一个Client-Server结构的系统,Docker守护进程运行在主机上, 然后通过Socket从客户端访问,DockerServer(守护进程)接受到DockerClient(客户端)的指令,就会执行这个命令。

守护进程管理运行在主机上的容器 。

容器,是一个运行时环境,就是我们前面说到的集装箱。

1.3 Docker比VMware快的原因

作者:步尔斯特 链接:https://www.zhihu.com/question/485967221/answer/2556644950 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

  • docker有着比虚拟机更少的抽象层。由于docker不需要Hypervisor实现硬件资源虚拟化,运行在docker容器上的程序直接使用的都是实际物理机的硬件资源。因此在CPU、内存利用率上docker将会在效率上有明显优势。
  • docker利用的是宿主机的内核,而不需要Guest OS。因此,当新建一个容器时,docker不需要和虚拟机一样重新加载一个操作系统内核。仍而避免引寻、加载操作系统内核返个比较费时费资源的过程,当新建一个虚拟机时,虚拟机软件需要加载Guest OS,返个新建过程是分钟级别的。而docker由于直接利用宿主机的操作系统,则省略了返个过程,因此新建一个docker容器只需要几秒钟。
  • Docker底层共用物理机的实际资源,而虚拟机需要模拟物理机的操作系统资源,所以Docker加载得更快,而虚拟机更慢。

!Docker和VMware区别.png

Docker是一个解决了运行环境和配置问题,并且方便做持续集成以及有助于整体发布的容器虚拟化技术。

  • 镜像
  • 容器
  • 仓库

📦二、 安装

1 脚本安装

$ curl -fsSL https://get.docker.com -o get-docker.sh
$ DRY_RUN=1 sh ./get-docker.sh	# 了解脚本在安装过程中将执行哪些步骤
$ sudo sh test-docker.sh	# 直接执行

2 package包

$ sudo dpkg -i package.deb
  • 运行
$ sudo docker run hello-world

3 软件源

参考:

在 Debian | 上安装 Docker 引擎泊坞窗文档

Debian安装Docker(国内源) - 简书 (jianshu.com)

容器镜像服务 (aliyun.com)

3.1 卸载

3.1.1 普通卸载

卸载内容:docker docker.io docker-engine

$ sudo apt-get remove docker docker-engine docker.io containerd runc

将保留 的内容,包括映像、容器、卷和网络。

3.1.2 完全卸载

  • 卸载泊坞引擎、CLI、容器化和泊坞窗撰写包:

    $ sudo apt-get purge docker-ce docker-ce-cli containerd.io docker-compose-plugin
    $ # purge不保留配置文件
    
  • 主机上的映像、容器、卷或自定义配置文件不会自动删除。删除所有映像、容器和卷:

    $ sudo rm -rf /var/lib/docker
    $ sudo rm -rf /var/lib/containerd
    

您必须手动删除任何已编辑的配置文件。

3.2 安装

3.2.1 设置源

  1. 基础源
$ # 编辑/etc/apt/sources.list
# 阿里云源 
deb https://mirrors.aliyun.com/debian/ bullseye main non-free contrib
deb-src https://mirrors.aliyun.com/debian/ bullseye main non-free contrib
deb https://mirrors.aliyun.com/debian-security/ bullseye-security main
deb-src https://mirrors.aliyun.com/debian-security/ bullseye-security main
deb https://mirrors.aliyun.com/debian/ bullseye-updates main non-free contrib
deb-src https://mirrors.aliyun.com/debian/ bullseye-updates main non-free contrib
deb https://mirrors.aliyun.com/debian/ bullseye-backports main non-free contrib
deb-src https://mirrors.aliyun.com/debian/ bullseye-backports main non-free contrib

$ sudo apt-get update
$ sudo apt-get install \
	apt-transport-https \
	ca-certificates \
	curl \
	gnupg \
	lsb-release
  1. 设置Docker源
  • 官方源
    • 添加Docker官方的GPG key
    • 设置stable源
# 添加Docker官方的GPG key
$ sudo mkdir -p /etc/apt/keyrings
$ curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
# 设置stable源
$ echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/debian \
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
  • 国内源
    • 添加Docker官方的GPG key
    • 设置stable源
# 添加Docker官方的GPG key
$ sudo mkdir -p /etc/apt/keyrings
$ curl -fsSL http://mirrors.ustc.edu.cn/docker-ce/linux/debian/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
# 设置stable源
$ echo \
  "deb [arch=amd64 signed-by=/etc/apt/keyrings/docker.gpg] http://mirrors.ustc.edu.cn/docker-ce/linux/debian \
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
  1. 安装
  • 更新包索引安装最新的Docker
$ sudo apt-get update
  • 查看可用版本
$ apt-cache madison docker-ce

 docker-ce | 5:20.10.18~3-0~debian-bullseye | https://download.docker.com/linux/debian bullseye/stable amd64 Packages
 docker-ce | 5:20.10.17~3-0~debian-bullseye | https://download.docker.com/linux/debian bullseye/stable amd64 Packages
 docker-ce | 5:20.10.16~3-0~debian-bullseye | https://download.docker.com/linux/debian bullseye/stable amd64 Packages
 docker-ce | 5:20.10.15~3-0~debian-bullseye | https://download.docker.com/linux/debian bullseye/stable amd64 Packages
 docker-ce | 5:20.10.14~3-0~debian-bullseye | https://download.docker.com/linux/debian bullseye/stable amd64 Packages
 docker-ce | 5:20.10.13~3-0~debian-bullseye | https://download.docker.com/linux/debian bullseye/stable amd64 Packages
 docker-ce | 5:20.10.12~3-0~debian-bullseye | https://download.docker.com/linux/debian bullseye/stable amd64 Packages
 docker-ce | 5:20.10.11~3-0~debian-bullseye | https://download.docker.com/linux/debian bullseye/stable amd64 Packages
 docker-ce | 5:20.10.10~3-0~debian-bullseye | https://download.docker.com/linux/debian bullseye/stable amd64 Packages
 docker-ce | 5:20.10.9~3-0~debian-bullseye | https://download.docker.com/linux/debian bullseye/stable amd64 Packages
 docker-ce | 5:20.10.8~3-0~debian-bullseye | https://download.docker.com/linux/debian bullseye/stable amd64 Packages
 docker-ce | 5:20.10.7~3-0~debian-bullseye | https://download.docker.com/linux/debian bullseye/stable amd64 Packages
 docker-ce | 5:20.10.6~3-0~debian-bullseye | https://download.docker.com/linux/debian bullseye/stable amd64 Packages
  • 安装最新版
$ sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin
  • 安装指定版本,版本号为5:20.10.8~3-0~debian-bullseye
$ sudo apt-get install docker-ce=<VERSION_STRING> docker-ce-cli=<VERSION_STRING> containerd.io docker-compose-plugin
  1. 运行测试
  • 通过运行hello-world镜像来验证是否正确安装了 Docker 引擎。
$ sudo docker run hello-world
  1. 设置仓库(配置docker加速器)
$ sudo mkdir -p /etc/docker
$ sudo touch /etc/docker/daemon.json

#	编辑此文件,加入以下内容
{
 "registry-mirrors" : [
 "https://8xpk5wnt.mirror.aliyuncs.com" # 自己的阿里云镜像源,每个人不一样
 # https://docker.mirrors.ustc.edu.cn	# 中科大的源
 ]
}

# 重启
systemctl daemon-reload
systemctl restart docker
# 设置开机启动
systemctl enable docker

#查看是否运行
ps aux | grep docker

docker ps
docker images
docker version

3.3 以非root身份运行

3.3.1 查看用户组

$ sudo cat /etc/group |grep docker

# docker:x:998:表示存在

3.3.2 创建用户组

$ sudo groupadd docker

3.3.3 将用户添加到用户组

$ sudo usermod -aG docker $USER
$ newgrp docker	# 激活组更改,无效的话尝试重连ssh,退出登录,重启计算机等

3.4 为Docker指定DNS服务器

Linux |的安装后步骤泊坞窗文档 (docker.com)

3.5 CentOS上安装

大同小异,参考在 CentOS |上安装Docker引擎文档 (docker.com)


📒三、入门

1 基础组件

1.1 Docker引擎

!Docker Engine.png

1.2 Docker核心

!Docker核心.png

1.3 Docker平台组成

!Docker平台组成.png

1.4 Docker生命周期

!Docker生命周期.png

1.5 Docker分层原理

!镜像分层原理.png


🔯四、命令

镜像

查看本地镜像列表

docker images

搜索镜像

docker search imagesName

拉取镜像

docker pull imagesName/id
docker pull imagesName:Tag

保存镜像

docker save imagesName/id -o 镜像保存的位置和名称

导入镜像

docker load -i 镜像位置

删除镜像

#删除一个
docker rmi -f 镜像名/镜像ID

#删除多个 其镜像ID或镜像用用空格隔开即可 
docker rmi -f 镜像名/镜像ID 镜像名/镜像ID 镜像名/镜像ID

#删除全部镜像  -a 意思为显示全部, -q 意思为只显示ID
docker rmi -f $(docker images -aq)

容器

容器列表

docker ps # 正在运行的
docker ps -a # 所有的容器

创建和删除容器

# 创建容器
docker run -it -d --name 要取的别名 -p 宿主机端口:容器端口 -v 宿主机文件存储位置:容器内文件位置 镜像名:Tag /bin/bash 


#删除一个容器
docker rm -f 容器名/容器ID
#删除多个容器 空格隔开要删除的容器名或容器ID
docker rm -f 容器名/容器ID 容器名/容器ID 容器名/容器ID
#删除全部容器
docker rm -f $(docker ps -aq)

参数含义

  • -it 表示 与容器进行交互式启动
  • -d 表示可后台运行容器 (守护式运行)  
  • --name 给要运行的容器 起的名字  
  • /bin/bash  交互路径
  • -p 将容器的端口映射到宿主机上,通过宿主机访问内部端口
  • -v 将容器内的指定文件夹挂载到宿主机对应位置

启动和停止容器

# 启动
docker start 容器ID/名称
docker restart 容器ID/名称
# 停止
docker stop 容器名/id

退出和进入容器

exit
# Ctrl + D 直接退出并关闭容器
# CTRL + P + Q 退出到后台

docker attach 容器ID/名称 # 需要Ctrl + P + Q才可以退出至后台,Ctrl + D会直接退出,exit也会直接退出
docker exec -it 容器ID/名称 bash # Ctrl + D可以直接退出到后台

修改容器名

# 修改容器名称
docker rename 原容器名 要修改的容器名

暂停和恢复容器

# 暂停容器
docker pause 容器名
# 恢复容器
docker unpause 容器名

生成镜像

使用场景:

  • 构建临时的测试镜像;
  • 容器被入侵后,使用docker commit,基于被入侵的容器构建镜像,从而保留现场,方便以后追溯。

弊端:

  • 使用docker commit构建的镜像包含了编译构建、安装软件,以及程序运行产生的大量无用文件,这会导致镜像体积很大,非常臃肿。
  • 使用docker commit构建的镜像会丢失掉所有对该镜像的操作历史,无法还原镜像的构建过程,不利于镜像的维护。
docker commit 容器ID 镜像名称:TAG