Docker基本管理

1. 容器的概念

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

Docker是在Linux容器里运行应用的开源工具,是一种轻量级的"虚拟机"。

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

2.容器的作用

容器可以屏蔽底层操作系统的差异性,让业务应用不管在哪里都是使用容器的环境运行,从而保证开发测试环境与生产环境的一致性。

容器部署起来非常便捷和迅速,缩短开发测试部署的周期时间。
总结:docker是用go语言开发并开源的容器引擎,用来运行容器里的应用。docker也是可用来管理容器和镜像的一种工具。

3. 容器与虚拟机的区别

|----------------------------------------|----------------------------------------|
| 容器 | 虚拟机 |
| 所有容器共享宿主机的内核 | 每个虚拟机都有独立的操作系统和内核 |
| 通过namespace实现资源隔离,通过cgroup实现限制资源的最大使用量 | 完全隔离。每个虚拟机都有独立的硬件资源 |
| 秒级启动速度 | 分钟级启动速度 |
| 容器相当于宿主机的进程,性能几乎没有损耗 | 需要通过hypervisor虚拟机管理程序对宿主机资源虚拟访问,有一定的性能 |
| 单机容量能支持成百上千个容器 | 单机容器只能支持最多几十个虚拟机 |

4.Linux namespace的六大类型

5.Docker核心概念

镜像

Docker的镜像是创建容器的基础,类似虚拟机的快照,可以理解为一个面向 Docker 容器引擎的只读模板。

通过镜像启动一个容器,一个镜像是一个可执行的包,其中包括运行应用程序所需要的所有内容包含代码,运行时间,库、环境变量、和配置文件。

Docker镜像也是一个压缩包,只是这个压缩包不只是可执行文件,环境部署脚本,它还包含了完整的操作系统。因为大部分的镜像都是基于某个操作系统来构建,所以很轻松的就可以构建本地和远端一样的环境,这也是Docker镜像的精髓。

容器

Docker的容器是从镜像创建的运行实例,它可以被启动、停止和删除。所创建的每一个容器都是相互隔离、互不可见,以保证平台的安全性。

可以把容器看做是一个简易版的linux环境(包括root用户权限、镜像空间、用户空间和网络空间等)和运行在其中的应用程序。

仓库

Docker仓库是用来集中保存镜像的地方,当创建了自己的镜像之后,可以使用push命令将它上传到公有仓库(Public)或者私有仓库(Private)。当下次要在另外一台机器上使用这个镜像时,只需从仓库获取。

6. 安装Docker

试验前准备

bash 复制代码
目前 Docker 只能支持 64 位系统。

systemctl stop firewalld.service
setenforce 0

#安装依赖包
yum install -y yum-utils device-mapper-persistent-data lvm2

设置阿里云镜像源安装docker

bash 复制代码
#设置阿里云镜像源
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

systemctl start docker.service
systemctl enable docker.service 

docker info 信息查看

7.Docker镜像操作

#搜索镜像

格式:docker search 关键字

docker search nginx

获取镜像

格式:docker pull 仓库名称[:标签]

#如果下载镜像时不指定标签,则默认会下载仓库中最新版本的镜像,即选择标签为 latest 标签。

docker pull nginx

bash 复制代码
浏览器访问 https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors 获取镜像加速器配置
 
mkdir -p /etc/docker
 
tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://pbt7lb0q.mirror.aliyuncs.com"]
}
EOF
 
systemctl daemon-reload
systemctl restart docker
bash 复制代码
#查看镜像信息
镜像下载后存放在 /var/lib/docker 。
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号

为本地的镜像添加新的标签

bash 复制代码
格式:docker tag 名称:[标签] 新名称:[新标签]
bash 复制代码
删除镜像
格式:
docker rmi 仓库名称:标签				#当一个镜像有多个标签时,只是删除其中指定的标签
或者
docker rmi 镜像ID号						#会彻底删除该镜像

注意:如果该镜像已经被容器使用,正确的做法是先删除依赖该镜像的所有容器,再去删除镜像。
bash 复制代码
存出镜像:将镜像保存成为本地文件
格式:docker save -o 存储文件名 存储的镜像
bash 复制代码
#载入镜像:将镜像文件导入到镜像库中
格式:
docker load < 存出的文件
或者
docker load -i 存出的文件

docker load < nginx

上传镜像

bash 复制代码
默认上传到 docker Hub 官方公共仓库,需要注册使用公共仓库的账号。https://hub.docker.com
可以使用 docker login 命令来输入用户名、密码和邮箱来完成注册和登录。
在上传镜像之前,还需要先对本地镜像添加新的标签,然后再使用 docker push 命令进行上传。
docker tag nginx:latest soscscs/nginx:web		#添加新的标签时必须在前面加上自己的dockerhub的username
docker login								#登录公共仓库
Username:soscscs
password:abc123456
docker push soscscs/nginx:web					#上传镜像

Docker容器操作

容器创建

  • 将镜像加载到容器的过程
bash 复制代码
格式:docker create [选项] 镜像
常用选项:
-i:让容器开启标准输入接受用户输入命令
-t:让 Docker 分配一个伪终端 tty
-it :合起来实现和容器交互的作用,运行一个交互式会话 shell 
bash 复制代码
#查看容器的运行状态
docker ps -a			#-a 选项可以显示所有的容器
CONTAINER ID   IMAGE          COMMAND                  CREATED          STATUS    PORTS     NAMES
8b0a7be0ff58   nginx:latest   "/docker-entrypoint...."   57 seconds ago   Created             inspiring_swanson

容器的ID号	   加载的镜像     运行的程序               创建时间       当前的状态  端口映射  名称

启动容器

bash 复制代码
#启动容器
格式:docker start 容器的ID/名称

创建并启动容器

可以直接执行 docker run 命令, 等同于先执行 docker create 命令,再执行 docker start 命令。

注意:容器是一个与其中运行的 shell 命令/进程共存亡的终端,命令/进程运行容器运行, 命令/进程结束容器退出。

docker 容器默认会把容器内部第一个进程,也就是 pid=1 的程序作为docker容器是否正在运行的依据,如果docker容器中 pid = 1 的进程挂了,那么docker容器便会直接退出,也就是说Docker容器中必须有一个前台进程,否则认为容器已经挂掉。

当利用 docker run 来创建容器时,Docker 在后台的标准运行过程是

检查本地是否有镜像,如果有则直接使用本地镜像创建容器,如果没有则从仓库拉取镜像再创建容器

在只读的镜像层上挂载一层可读可写的容器层

从docker网桥给容器分配一个虚拟接口和IP

使用镜像的默认启动命令或者指定的启动命令启动容器,直到容器中PID=1的主进程退出为止。

bash 复制代码
当利用 docker run 来创建容器时, Docker 在后台的标准运行过程是:
(1)检查本地是否存在指定的镜像。当镜像不存在时,会从公有仓库下载;
(2)利用镜像创建并启动一个容器;
(3)分配一个文件系统给容器,在只读的镜像层外面挂载一层可读写层;
(4)从宿主主机配置的网桥接口中桥接一个虚拟机接口到容器中;
(5)分配一个地址池中的 IP 地址给容器;
(6)执行用户指定的应用程序,执行完毕后容器被终止运行。

终止容器运行

bash 复制代码
docker stop 容器名|容器ID        #发送 SIGTERM 信号,默认等待10s
或
docker kill 容器名|容器ID        #发送 SIGKILL 信号,强制停止容器

容器的进入

  • 需要进入容器进行命令操作时,可以使用 docker exec 命令进入运行着的容器。
bash 复制代码
格式:
docker exec -it 容器ID/名称 /bin/bash
-i 选项表示让容器的输入保持打开;
-t 选项表示让 Docker 分配一个伪终端。
exit				                  #退出容器后,容器仍在运行
docker ps -a

复制到容器中

bash 复制代码
从容器复制文件到主机
docker cp 宿主机文件路径  容器名|容器ID:绝对路径
 
复制到容器中
docker cp 容器名|容器ID:绝对路径  宿主机文件路

容器的导出与导入

用户可以将任何一个 Docker 容器从一台机器迁移到另一台机器。在迁移过程中,可以使用docker export 命令将已经创建好的容器导出为容器快照文件,无论这个容器是处于运行状态还是停止状态均可导出。可将导出文件传输到其他机器,通过相应的导入命令实现容器的迁移。

bash 复制代码
#导出格式: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

删除容器

bash 复制代码
格式:docker rm [-f] 容器ID/名称
相关推荐
老大白菜1 分钟前
Windows 11 安装 Dify 完整指南 非docker环境
windows·docker·容器
檀越剑指大厂3 分钟前
【Linux系列】Shell 脚本中的条件判断:`[ ]`与`[[ ]]`的比较
linux·运维·服务器
2301_819287122 小时前
ce第六次作业
linux·运维·服务器·网络
CIb0la2 小时前
GitLab 停止为中国区用户提供 GitLab.com 账号服务
运维·网络·程序人生
武汉联从信息2 小时前
如何使用linux日志管理工具来管理oracle osb服务器日志文件?
linux·运维·服务器
天天进步20152 小时前
STUN服务器实现NAT穿透
运维·服务器
PieroPc3 小时前
Python 自动化 打开网站 填表登陆 例子
运维·python·自动化
VinciYan3 小时前
基于Jenkins+Docker的自动化部署实践——整合Git与Python脚本实现远程部署
python·ubuntu·docker·自动化·jenkins·.net·运维开发
冷曦_sole4 小时前
linux-19 根文件系统(一)
linux·运维·服务器
AI大模型学徒4 小时前
Linux(二)_清理空间
linux·运维·服务器