Docker基础1-3
时间:2023-01-02
https://www.bilibili.com/video/BV1gr4y1U7CY/
xmind文档:https://www.aliyundrive.com/s/6iaQt9zLDVm
一、Docker简介
1、Docker解决了什么问题
Docker打破了过去「程序即应用」的观念。透过镜像(images)将作业系统核心除外,运作应用程式所需要的系统环境,由下而上打包,达到应用程式跨平台间的无缝接轨运作。
举例:
传统方法部署博客系统,需要在服务器上安装mysql,redis,rabbitmq,nginx,运行jar包,将dist文件上传到指定位置,修改各软件的配置文件等;而Docker可以将上述数据库、中间件、配置文件、应用服务、程序运行所需要的依赖(最小化linux内核)等全部打包成一个image。在其他服务器上部署博客系统应用时,只需要安装docker,使用docker run image,即可完整部署该博客系统。
2、Docker理念
Docker是基于Go语言实现的云开源项目,Docker的主要目标是“Build,Ship and Run Any App,Anywhere”。一次镜像,处处运行。Docker是解决了运行环境和配置问题的软件容器,方便做持续集成并并有助于整体发布的容器虚拟化技术。
3、容器和虚拟机的比较
(1)虚拟机
虚拟机技术是虚拟出一套硬件后,在其上运行一个完整操作系统,在该系统上再运行所需应用进程。
虚拟机缺点:
1 资源占用多 ,虚拟机是在宿主机上运行Hypervisor层软件,并模拟出完整的guest OS
2 冗余步骤多
3 启动慢
(2)容器
容器不需要捆绑一整套操作系统,只需要软件工作所需的库资源和设置。Docker容器是在操作系统层面上实现虚拟化,Docker占用体积小,启动速度快。容器内的应用进程直接运行于宿主的内核,容器内没有自己的内核且也没有进行硬件虚拟。每个容器之间互相隔离,每个容器有自己的文件系统 ,容器之间进程不会相互影响,能区分计算资源。
(3) 为什么Docker比虚拟机快
docker不需要Hypervisor(虚拟机)
docker利用的是宿主机的内核,而不需要加载Guest OS内核
4、Docker官网
https://www.docker.com/
https://hub.docker.com/ 存放镜像image
二、Docker安装
1、安装前提条件
Docker必须部署在Linux内核系统上,要求系统为64位、Linux系统内核版本为 3.8以上。
查看内核
uname命令用于打印当前系统相关信息(内核版本号、硬件架构、主机名称和操作系统类型等)
-bash-4.2# cat /etc/redhat-release
CentOS Linux release 7.6.1810 (Core)
-bash-4.2# uname -r
3.10.0-1160.53.1.el7.x86_64
2、Docker基本组成
(1)镜像image
Docker 镜像是一个只读模板,可以用来创建 Docker 容器。docker镜像文件类似于Java的类模板,而docker容器实例类似于java中new出来的实例对象。
(2)容器container
从面向对象角度:
Docker 利用容器(Container)独立运行的一个或一组应用。镜像是静态的定义,容器是镜像运行时的实体。容器为镜像提供了一个标准的和隔离的运行环境,它可以被启动、开始、停止、删除。每个容器都是相互隔离的、保证安全的平台。
从镜像容器角度:
容器可以看做是一个简易版的 Linux 环境(包括root用户权限、进程空间、用户空间和网络空间等)和运行在其中的应用程序。
(3)仓库repository
仓库(Repository)是集中存放镜像文件的场所。仓库分为公开仓库(Public)和私有仓库(Private)两种形式。
最大的公开仓库:Docker公司提供的Docker Hub。
3、Docker平台架构
Docker 是一个 C/S 模式的架构。
Docker客户端发送指令给Docker Server端处理。
如docker 客户端发送docker pull centos命令,Docker daemon守护进程接收到该条命令后检查本地是否有centos镜像,有则使用本地镜像,无则去配置的docker 镜像地址下载centos镜像,这里没有写版本,那就默认取lastest版本,如果是docker pull centos:7.3 则获取指定版本的centos镜像。获取到镜像后,运行docker run centos命令,则以centos镜像为模板,创建一个容器。
4、Centos7安装Docker步骤
官方安装文档:https://docs.docker.com/engine/install/centos/
(1)确保Linux内核版本3.8以上
(2) 卸载旧版本Docker
sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
(3)yum安装gcc及相关软件包
yum -y install gcc
yum -y intsall gcc-c++
yum install -y yum-utils
(4)设置稳定的镜像仓库,docker官网的仓库太慢,建议使用阿里云的
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
(5) 更新yum软件包索引
yum makecache fast
(6) 安装Docker CE
yum -y install docker-ce docker-ce-cli containerd.io
(7) 启动docker
systemctl start docker
(8) 测试Docker是否启动成功
docker version
docker run hello-word
(9) 卸载Docker
systemctl stop docker
yum remove docker-ce docker-ce-cli containerd.io
rm -fr /var/lib/docker
rm -fr /var/lib/containerd
5、Docker配置阿里云镜像加速器
https://blog.csdn.net/weixin_45764765/article/details/1283672197
三、Docker常用命令
1、启动类命令
1 启动Docker
systemctl start docker
2 停止docker
systemctl stop docker
3 重启docker
systemctl restart docker
4 查看docker状态
systemctl status docker
5 设置docker开机自启
systemctl enable docker
6 查看docker概要信息
docker info
7 查看帮助信息
docker --help
8 查看某个具体命令的帮助信息
docker run --help
2、镜像命令
# 1 查看本地主机的镜像
-bash-4.2# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
redis latest 0256c63af7db 12 days ago 117MB
nginx latest 1403e55ab369 12 days ago 142MB
rabbitmq latest 3ddcc140fe5c 2 weeks ago 228MB
mysql 8.0 7484689f290f 3 weeks ago 538MB
primetoninc/jdk 1.8 f4b4fccc65bb 4 years ago 657MB
REPOSITORY:表示镜像的仓库源
TAG:镜像的标签版本号
IMAGE ID:镜像ID
CREATED:镜像创建时间
SIZE:镜像大小
docker images 参数说明
-a 列出本地所有的镜像,包含历史镜像层
-q 静默模式,只显示镜像id
-----------------------------------------------------------------------------------
# 2 查找镜像
-bash-4.2# docker search redis --limit 5
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
redis Redis is an open source key-value store that… 11695 [OK]
redislabs/redisinsight RedisInsight - The GUI for Redis 77
redislabs/redisearch Redis With the RedisSearch module pre-loaded… 56
redislabs/redis Clustered in-memory database engine compatib… 36
redislabs/rebloom A probablistic datatypes module for Redis 21 [OK]
NAME 镜像名称
DESCRIPTION 镜像描述
STARS 点赞数
OFFICIAL 是否官方
AUTOMATED 是否是自动构建的
参数说明 --limit N 只列出N个镜像,不写limit时,默认展示25个镜像
-----------------------------------------------------------------------------------
# 3、下载镜像 docker pull 镜像名称[:TAG]
-bash-4.2# docker pull mysql:5.7
5.7: Pulling from library/mysql
d26998a7c52d: Downloading [============================> ] 28.59MB/49.82MB
4a9d8a3567e3: Download complete
........
701dea355691: Pull complete
Digest: sha256:6306f106a056e24b3a2582a59a4c84cd199907f826eff27df36406f227cd9a7d
Status: Downloaded newer image for mysql:5.7
docker.io/library/mysql:5.7
# docker pull mysql:5.7 指下载5.7版本的mysql
# docker pull mysql 指下载最新版本的mysql,等价于docker pull mysql:lastest
-----------------------------------------------------------------------------------
# 4、查看镜像、容器、数据卷所占的空间
-bash-4.2# docker system df
TYPE TOTAL ACTIVE SIZE RECLAIMABLE
Images 6 4 2.097GB 1.233GB (58%)
Containers 4 3 1.708kB 1.093kB (63%)
Local Volumes 3 1 191.6kB 130.7kB (68%)
Build Cache 0 0 0B 0B
-----------------------------------------------------------------------------------
# 5、删除镜像 docker rmi 镜像名称或id
-bash-4.2# docker rmi redis
Error response from daemon: conflict: unable to remove repository
reference "redis" (must force) - container cec779594508 is using
its referenced image 0256c63af7db
删除镜像时,必须没有容器使用该镜像,docker stop 容器名称或id,再删除镜像
或者使用 -f 选项,无论是否有容器使用该镜像,都可以删掉镜像
3、容器命令
3.1 新建并启动容器
docker run [OPTIONS] IMAGES [COMMAND][ARGS]
------ OPTIONS说明----
--name="myredis" 为容器起一个新名字,否则系统随机给容器起名字
-d 后台运行容器,返回容器ID
-i interactive 交互式运行容器,通常与 -t 一起使用,提供一个可以操作容器的终端
-t tty 为容器分配一个伪终端,通常与-i 同时使用
-P 随机端口映射
docker run -it centos:lastest /bin/bash 创建启动centos容器,并提供一个交互式shell
3.2 列出当前正在运行的容器
docker ps [OPTIONS]
-a 列出当前所有正在运行的容器 + 历史上运行过的
-l 显示最近创建的容器
-n 显示最近n个创建的容器
-q quiet 静默模式,只显示容器编号
3.3 退出容器
两种退出方式
exit 退出,容器停止: docker run -it centos /bin/bash 进入容器,exit退出容器,exit退出后,容器会停止运行
ctrl + p + q退出,容器不停止: docker run -it centos /bin/bash 进入容器,退出容器,ctrl + p + q退出容器不停止
3.4 停止容器
docker stop 容器ID或容器名称
3.5 强制停止容器
docker kill 容器ID或容器名称
3.6 启动已停止的容器
docker start 容器ID或容器名称
3.7 重启容器
docker restart 容器ID或容器名称
3.8 删除已停止的容器
docker rm 容器ID或容器名称
3.9 启动守护式容器
docker run -d redis:6.0.8 后台启动
docker run -it redis:6.0.8 前台启动
3.10 查看容器日志
docker logs 容器名称或容器ID
3.11 查看容器内运行的进程
docker top 容器名称或容器ID
3.12 查看容器内部细节
docker inspect 容器名称或容器ID
3.13 进入正在运行的容器,并以命令行交互
(1)
docker exec -it 容器ID bashShell 使用exit退出不会导致容器停止。
exec是在容器中打开新的终端,并且可以启动新的进程
(2)
docker attach 容器ID 使用exit退出会导致容器停止
一般使用docker run -d redis 后台启动程序,然后docker exec -it redis redis-cli 进入容器操作
3.14 从容器拷贝文件到宿主机
docker cp 容器ID:容器内路径 宿主机路径
该命令在Linux命令行运行
3.15 导入和导出容器
docker export 容器ID > 文件名.tar
cat 文件名.tar | docker import - 镜像用户/镜像名:镜像版本号
4、总结
attach Attach to a running container # 当前 shell 下 attach 连接指定运行镜像
build Build an image from a Dockerfile # 通过 Dockerfile 定制镜像
commit Create a new image from a container changes # 提交当前容器为新的镜像
cp Copy files/folders from the containers filesystem to the host path #从容器中拷贝指定文件或者目录到宿主机中
create Create a new container # 创建一个新的容器,同 run,但不启动容器
diff Inspect changes on a container's filesystem # 查看 docker 容器变化
events Get real time events from the server # 从 docker 服务获取容器实时事件
exec Run a command in an existing container # 在已存在的容器上运行命令
export Stream the contents of a container as a tar archive # 导出容器的内容流作为一个 tar 归档文件[对应 import ]
history Show the history of an image # 展示一个镜像形成历史
images List images # 列出系统当前镜像
import Create a new filesystem image from the contents of a tarball # 从tar包中的内容创建一个新的文件系统映像[对应export]
info Display system-wide information # 显示系统相关信息
inspect Return low-level information on a container # 查看容器详细信息
kill Kill a running container # kill 指定 docker 容器
load Load an image from a tar archive # 从一个 tar 包中加载一个镜像[对应 save]
login Register or Login to the docker registry server # 注册或者登陆一个 docker 源服务器
logout Log out from a Docker registry server # 从当前 Docker registry 退出
logs Fetch the logs of a container # 输出当前容器日志信息
port Lookup the public-facing port which is NAT-ed to PRIVATE_PORT # 查看映射端口对应的容器内部源端口
pause Pause all processes within a container # 暂停容器
ps List containers # 列出容器列表
pull Pull an image or a repository from the docker registry server # 从docker镜像源服务器拉取指定镜像或者库镜像
push Push an image or a repository to the docker registry server # 推送指定镜像或者库镜像至docker源服务器
restart Restart a running container # 重启运行的容器
rm Remove one or more containers # 移除一个或者多个容器
rmi Remove one or more images # 移除一个或多个镜像[无容器使用该镜像才可删除,否则需删除相关容器才可继续或 -f 强制删除]
run Run a command in a new container # 创建一个新的容器并运行一个命令
save Save an image to a tar archive # 保存一个镜像为一个 tar 包[对应 load]
search Search for an image on the Docker Hub # 在 docker hub 中搜索镜像
start Start a stopped containers # 启动容器
stop Stop a running containers # 停止容器
tag Tag an image into a repository # 给源中镜像打标签
top Lookup the running processes of a container # 查看容器中运行的进程信息
unpause Unpause a paused container # 取消暂停容器
version Show the docker version information # 查看 docker 版本号
wait Block until a container stops, then print its exit code # 截取容器停止时的退出状态值