Docker基本管理
目录
查看docker信息
Docker镜像操作
Docker挂载阿里云加速器
1.阿里云官网获取加速器地址
2.在服务器上挂载加速器
3.重启docker服务
搜索,下载镜像
查看镜像信息
本地的镜像添加新的标签
删除镜像
如何将镜像传送给其他主机的docker?
镜像导出成文件
镜像文件导入镜像库
上传镜像
创建阿里云个人镜像仓库(免费)
设置registry密码
创建命名空间和镜像仓库
编辑创建完毕
上传阿里云仓库
Docker容器操作
创建容器
查看容器的运行状态
启动容器
停止容器
删除容器
命令docker run
docker run的启动过程
创建并启动容器
进入容器
将本地文件复制到容器中
从容器复制文件到本地主机
查看容器日志
如何将镜像传送给其他主机的docker?
导出容器
导入容器
查看docker信息
docker version #查看docker版本docker info #查看docker详细信息
—————————————————————————————————————————————————————————————————————————————————————————
Client:Context: defaultDebug Mode: falsePlugins:app: Docker App (Docker Inc., v0.9.1-beta3)buildx: Build with BuildKit (Docker Inc., v0.5.1-docker)Server:Containers: 0 # 容器数量Running: 0Paused: 0Stopped: 0Images: 1 # 镜像数量Server Version: 20.10.3 # server 版本Storage Driver: overlay2 # docker 使用的是 overlay2 文件驱动Backing Filesystem: xfs # 宿主机上的底层文件系统Supports d_type: trueNative Overlay Diff: trueLogging Driver: json-fileCgroup Driver: cgroupfs # Cgroups 驱动Cgroup Version: 1Plugins:Volume: localNetwork: bridge host ipvlan macvlan null overlayLog: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslogSwarm: inactiveRuntimes: io.containerd.runtime.v1.linux runc io.containerd.runc.v2Default Runtime: runcInit Binary: docker-initcontainerd version: 269548fa27e0089a8b8278fc4fc781d7f65a939brunc version: ff819c7e9184c13b7c2607fe6c30ae19403a7affinit version: de40ad0Security Options:seccompProfile: defaultKernel Version: 3.10.0-693.el7.x86_64 # 宿主机的相关信息Operating System: CentOS Linux 7 (Core)OSType: linuxArchitecture: x86_64CPUs: 1Total Memory: 976.3MiBName: localhost.localdomainID: Y4ES:FTH2:ZJL7:MRVE:RJVB:WJIB:S7BV:C5IZ:LMBR:E4G5:QWSM:SNDTDocker Root Dir: /var/lib/docker # docker 数据存储目录Debug Mode: falseRegistry: https://index.docker.io/v1/ # registry 地址Labels:Experimental: falseInsecure Registries:127.0.0.0/8Registry Mirrors: # 加速站点https://6ijb8ubo.mirror.aliyuncs.com/Live Restore Enabled: false
Docker镜像操作
Docker挂载阿里云加速器
- 防止docker拉取镜像失败:download failed after attempts=6: dial tcp 104.18.125.25:443: i/o timeout
1.阿里云官网获取加速器地址
每个阿里云账号都会生成一个加速器
2.在服务器上挂载加速器
cd /etc/docker/ #切换目录tee /etc/docker/daemon.json <<-'EOF'
{"registry-mirrors": ["加速器地址"]}
EOF #使用加速器
3.重启docker服务
systemctl restart docker.service
搜索,下载镜像
docker search 关键字 #根据仓库或镜像的关键字搜索镜像docker pull 仓库名/镜像名:标签
#如果下载镜像时不指定标签,则默认会下载仓库中最新版本的镜像,即选择标签为 latest 标签。
查看镜像信息
镜像下载后存放在 /var/lib/docker 。
Docker 相关的本地资源存放在 /var/lib/docker/ 目录下,其中 containers 目录存放容器信息,image 目录存放镜像信息,overlay2 目录下存放具体的镜像底层文件。#查看下载的镜像文件信息
cat /var/lib/docker/image/overlay2/repositories.jsondocker images [-q] #查看下载到本地的所有镜像 #-q 表示仅显示镜像ID
docker inspect 镜像ID号 #根据镜像的唯一标识 ID 号,获取镜像详细信息
- lowerdir是镜像层,目录或者文件是只读的,其实就是rootfs,image layer可以分很多层,所以对应的lowerdir是可以有多个目录
- upperdir是在lowerdir之上的容器层,这层是可读可写的,在启动一个容器时候会进行创建,所有的对容器数据更改都发生在这层
- MergedDir是表现层,是容器的挂载点
本地的镜像添加新的标签
docker tag 名称:旧标签 新名称:新标签 #添加新的标签但ID号不会变
删除镜像
docker rmi 镜像名或镜像ID [-f] #删除镜像-f #强制删除#快速删除所有镜像
docker rmi $(docker images -q)docker rmi nginx:1.18
docker rmi 50fe74b50e0d
docker rmi 605c77e624dd -f注意:如果该镜像已经被容器使用,正确的做法是先删除依赖该镜像的所有容器,再去删除镜像。
docker rmi nginx:web
如何将镜像传送给其他主机的docker?
镜像导出成文件
有镜像主机操作
docker save -o 存储文件名 存储的镜像 #将镜像导出成文件
scp /opt/nginx-1.20.tar 20.0.0.70:/opt #传输文件给另一台主机
镜像文件导入镜像库
无镜像主机操作
#将镜像文件导入镜像库
docker load < 存出的文件
docker load -i 存出的文件
上传镜像
- 默认上传到 docker Hub 官方公共仓库,需要注册使用公共仓库的账号。https://hub.docker.com
- 可以使用 docker login 命令来输入用户名、密码和邮箱来完成注册和登录
- 在上传镜像之前,还需要先对本地镜像添加新的标签,然后再使用 docker push 命令进行上传
docker login #输入用户名及密码
docker tag nginx:1.20 别名 #添加别名
docker push 别名 #上传即可
官网账户稍有问题,改上传阿里云
创建阿里云个人镜像仓库(免费)
设置registry密码
创建命名空间和镜像仓库
创建完毕
上传阿里云仓库
docker login --username=aliyun6346886006 registry.cn-hangzhou.aliyuncs.com
#登录阿里云,输入密码docker tag nginx:latest registry.cn-hangzhou.aliyuncs.com/xy101-jlh/nginx:1.20
#设置别名docker push registry.cn-hangzhou.aliyuncs.com/xy101-jlh/nginx:1.20
#上传镜像
Docker容器操作
创建容器
- 容器创建:就是将镜像加载到容器的过程。
- 新创建的容器默认处于停止状态,不运行任何程序,需要在其中发起一个进程来启动容器。
docker create [选项] 镜像名:标签 [容器启动命令] #创建容器常用选项:
-i:让容器开启标准输入接受用户输入命令
-t:让Docker分配一个伪终端tty
-it :合起来实现和容器交互的作用,运行一个交互式会话shell
--name : 指定容器名例:docker create -it nginx:latest /bin/bash
查看容器的运行状态
docker ps -a #-a选项可以显示所有的容器
docker ps -a -q #查看容器id号
docker inspect 容器名/容器id #查看容器详细信息
启动容器
docker start 容器的ID/名称
docker ps -a #查看所有容器
docker ps #查看正在运行的容器
停止容器
docker stop 容器的ID/名称 [-t 等待时间] #停止容器,发送SIGTERM信号,默认等待10d
docker kill 容器的ID/名称 #强制退出容器,默认发送SIGKILL信号
删除容器
docker rm [-f] 容器ID/名称 #删除已经停止的容器 [-f]选项强制删除
#若想删除正在 运行的容器,必须先暂停该容器的启动状态,在进行删除或使用-f选项,否则无法删除docker rm $(docker ps -a -q) #批量清理后台停止的容器
docker rm $(docker ps -a -q) -f #批量清理后台所有容器
命令docker run
docker run的启动过程
- 检查本地是否有指定镜像,如果有则直接使用本地镜像创建容器,如果没有则从仓库拉取镜像再创建容器
- 在只读的镜像层上再挂载一层可读可写的容器层
- 从docker网桥给容器分配一个虚拟接口和IP地址
- 使用镜像的默认启动命令或docker run 指定的命令来启动容器,直到容器中的PID=1的主进程退出为止
创建并启动容器
- 等同于先执行docker create命令,再执行docker start命令
- 当运行一个容器时,镜像不存在会先自动创建镜像,然后再创建容器并启动容器
docker run -d [-i -t] [--name 容器名] 镜像名:标签 [容器启动命令] #创建并启动容器-P #使用随机的宿主机端口映射容器端口(从32768开始)-p 宿主机端口:容器端口 #使用指定的宿主机端口映射容器端口
同时也会在本地为这个容器创建一个IP
进入容器
需要进入容器进行命令操作时,可以使用docker exec命令进入运行着的容器
docker exec -it 容器ID/名称 容器启动命令-i 选项表示让容器的输入保持打开;-t 选项表示让Docker分配一个伪终端。
———————————————————————————————————————————————————————————————————————————————————————————
例#进入容器前,确保容器正在运行docker exec -it c3 /bin/shlsexit #退出容器后,容器仍在运行
将本地文件复制到容器中
docker cp 宿主机文件路径 容器名或容器ID:绝对路径 #复制宿主机文件到容器中
从容器复制文件到本地主机
docker cp 容器名或容器ID:绝对路径 宿主机文件路径 #复制容器文件到宿主机中
查看容器日志
docker logs 容器名/容器id #查看容器中PID=1的主进程的日志
如何将镜像传送给其他主机的docker?
导出容器
有容器主机操作
docker export 容器名/id > 保存目录/文件名
docker export -o 保存目录/文件名 容器id/容器名
导入容器
无容器主机操作
#镜像是创建容器的根本,因此只能先将容器文件导出为镜像,再有镜像创建、启动容器,才能导入容器
docker import 容器文件 -- 名称:标签
cat 容器文件 | docker import - 镜像名:标签 #将容器模板文件导入成镜像