Docker基本管理

目录

查看docker信息

Docker镜像操作

Docker挂载阿里云加速器

1.阿里云官网获取加速器地址

2.在服务器上挂载加速器

3.重启docker服务

搜索,下载镜像

查看镜像信息

本地的镜像添加新的标签

删除镜像

如何将镜像传送给其他主机的docker?

镜像导出成文件

镜像文件导入镜像库

上传镜像

创建阿里云个人镜像仓库(免费)

设置registry密码

创建命名空间和镜像仓库

​编辑创建完毕

上传阿里云仓库

Docker容器操作

创建容器

查看容器的运行状态

启动容器

停止容器

删除容器

[命令docker run](#命令docker run)

[docker run的启动过程](#docker run的启动过程)

创建并启动容器

进入容器

将本地文件复制到容器中

从容器复制文件到本地主机

查看容器日志

如何将镜像传送给其他主机的docker?

导出容器

导入容器


查看docker信息

复制代码
docker version                #查看docker版本

docker info                   #查看docker详细信息
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
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

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.json
 

docker 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的启动过程

  1. 检查本地是否有指定镜像,如果有则直接使用本地镜像创建容器,如果没有则从仓库拉取镜像再创建容器
  2. 在只读的镜像层上再挂载一层可读可写的容器层
  3. 从docker网桥给容器分配一个虚拟接口和IP地址
  4. 使用镜像的默认启动命令或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/sh
   ls
   exit				#退出容器后,容器仍在运行

将本地文件复制到容器中

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

从容器复制文件到本地主机

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

查看容器日志

复制代码
docker logs 容器名/容器id    #查看容器中PID=1的主进程的日志

如何将镜像传送给其他主机的docker?

导出容器

有容器主机操作

复制代码
docker export 容器名/id > 保存目录/文件名
docker export -o 保存目录/文件名 容器id/容器名

导入容器

无容器主机操作

复制代码
#镜像是创建容器的根本,因此只能先将容器文件导出为镜像,再有镜像创建、启动容器,才能导入容器
docker import 容器文件 -- 名称:标签
cat 容器文件 | docker import - 镜像名:标签     #将容器模板文件导入成镜像
相关推荐
考虑考虑3 小时前
Jpa使用union all
java·spring boot·后端
用户3721574261354 小时前
Java 实现 Excel 与 TXT 文本高效互转
java
浮游本尊5 小时前
Java学习第22天 - 云原生与容器化
java
渣哥6 小时前
原来 Java 里线程安全集合有这么多种
java
间彧7 小时前
Spring Boot集成Spring Security完整指南
java
间彧7 小时前
Spring Secutiy基本原理及工作流程
java
Java水解8 小时前
JAVA经典面试题附答案(持续更新版)
java·后端·面试
洛小豆10 小时前
在Java中,Integer.parseInt和Integer.valueOf有什么区别
java·后端·面试
前端小张同学11 小时前
服务器上如何搭建jenkins 服务CI/CD😎😎
java·后端
ytadpole11 小时前
Spring Cloud Gateway:一次不规范 URL 引发的路由转发404问题排查
java·后端