Docker--学习--(一)

 一路走来,所有遇到的人,帮助过我的、伤害过我的都是朋友,没有一个是敌人。

文章目录


前言

Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源。
Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。
容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。

一、Docke的逻辑关系

Docker 架构图

Docker 包括三个基本概念:

镜像(Image):Docker 镜像(Image),就相当于是一个 root 文件系统。比如官方镜像 ubuntu:16.04 就包含了完整的一套 Ubuntu16.04 最小系统的 root 文件系统。
容器(Container):镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。
仓库(Repository):仓库可看成一个代码控制中心,用来保存镜像。仓库分为公开仓库(Public)和私有仓库(Private)两种形式。目前最大的公开仓库是 Docker Hub。

二、Docker常用命令、

1、使用Docker执行“Hellow World”

第一次执行:

[root@master ~]# docker run centos /bin/echo "Hello world"  
Unable to find image 'centos:latest' locally
latest: Pulling from library/centos
a1d0c7532777: Pull complete    #---执行命令会从docker镜像仓库,拉取docker最新的镜像,执行。
Digest: sha256:a27fd8080b517143cbbbab9dfb7c8571c40d67d534bbdee55bd6c473f432b177
Status: Downloaded newer image for centos:latest
Hello world

第二次执行

[root@master ~]# docker run centos /bin/echo "Hello world"
Hello world
[root@master ~]#

2、Docker运行Linux交互模式

#-1docker基础运行

[root@master ~]# docker run -i -t centos /bin/bash
[root@acedb672f66e /]# ls
bin  dev  etc  home  lib  lib64  lost+found  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
[root@acedb672f66e /]# uname -r
5.4.241-1.el7.elrepo.x86_64
[root@acedb672f66e /]#

-t: 在新容器内指定一个伪终端或终端。
-i: 允许你对容器内的标准输入 (STDIN) 进行交互

[root@acedb672f66e /]# exit

#或者CTRL+D 来退出容器。

#-2使用docker安装centos7 ,连接公网可以使用官方的镜像仓库

Docker

#-3 选择需要的版本 执行:docker pull centos:centos7.9.2009

[root@master ~]# docker pull centos:centos7
centos7: Pulling from library/centos
2d473b07cdd5: Pull complete 
Digest: sha256:9d4bcbbb213dfd745b58be38b13b996ebb5ac315fe75711bd618426a630e0987
Status: Downloaded newer image for centos:centos7

#-4查看镜像仓库

root@master ~]#  docker images | grep  centos7
centos                                                            centos7             eeb6ee3f44bd        19 months ago       204MB
You have new mail in /var/spool/mail/root
[root@master ~]# 

#-5使用docker启动centos7容器

[root@master ~]# docker run -itd --name centos-test centos:centos7

#-6查看容器状态

[root@master ~]# docker ps  | grep  centos7
84541e23d392        centos:centos7                                      "/bin/bash"              11 seconds ago      Up 9 seconds                            centos-test
[root@master ~]# 

         

3、Docker ps 内容解析

[root@master ~]# docker ps   #查看运行的容器
CONTAINER ID     IMAGE         COMMAND                   CREATED                 STATUS                          PORTS               NAMES
39ccc610e5d9        centos         "/bin/sh -c 'while t…"      About a minute ago   Up About a minute                                    loving_swanson

[root@master ~]# docker ps  -a | grep centos | grep  39ccc610e5d9 # 查看所有的容器,包含停止状态的。
39ccc610e5d9        centos                                              "/bin/sh -c 'while t…"   About an hour ago   Exited (137) 2 minutes ago                         loving_swanson
[root@master ~]# 

CONTAINER ID: 容器 ID。

IMAGE: 使用的镜像。

COMMAND: 启动容器时运行的命令。

CREATED: 容器的创建时间。

STATUS: 容器7种状态。(created(已创建)restarting(重启中)running 或 Up(运行中)removing(迁移中)paused(暂停)exited(停止)dead(死亡))

4、Docker logs 命令——查看docker容器日志

查看指定时间后的日志,只显示最后100行:
[root@master ~]#docker logs -f -t --since="2023-05-01" --tail=100 39ccc610e5d9
查看最近30分钟的日志:
[root@master ~]#docker logs --since 30m 39ccc610e5d9
查看某时间之后的日志:
[root@master ~]#docker logs -t --since="2023-05-01T21:00:00" 39ccc610e5d9
查看某时间之后最新的100条日志:
[root@master ~]#docker logs -t --since="2023-05-01T21:00:00" --tail=100 39ccc610e5d9
查看某时间段日志:
[root@master ~]# docker logs -t --since="2023-05-01T21:00:00" --until "2023-05-01T21:47:37" 39ccc610e5d9
使用 grep 过滤日志-1:
[root@master ~]#docker logs 39ccc610e5d9 | grep 'error'

4、停止docker 

[root@master ~]# docker stop  39ccc610e5d9 
5、进入容器

docker attach 进入容器,退出后容器停止,不建议使用

docker exec:推荐大家使用 docker exec 命令,因为此命令会退出容器终端,但不会导致容器的停止

[root@master ~]# docker exec -it 2785378ddc12 bash

[root@2785378ddc12 /]# pwd

6、导出、删除和导入容器

#1导出容器

[root@master ~]# docker export 2785378ddc12  > centos7v1.tar

[root@master ~]# ls -lrt  centos7v1*
-rw-r--r-- 1 root root 211688960 May  1 22:45 centos7v1.tar

#2删除容器

#-2.1停止容器

[root@master ~]# docker stop 2785378ddc12

#-2.2查看容器状态

[root@master ~]# docker ps  -a | grep  2785378ddc12
2785378ddc12        centos:centos7                                      "/bin/bash"              4 hours ago         Exited (137) 12 seconds ago                       centos-test1
[root@master ~]# docker rm -rf  2785378ddc12

#-2.3删除容器

[root@master ~]# docker rm -f 2785378ddc12
2785378ddc12

#-2.4 再次查看容器状态,2785378ddc12 已经不存在
[root@master ~]# docker ps  -a | grep  2785378ddc12 
#3导入容器

[root@master ~]# docker import - centosN7/centos7v1.tar:centosN7 
invalid reference format: repository name must be lowercase #导入容器必须使用小写字母

7、容器误删后恢复

#1查看centos7容器并删除

[root@master ~]# docker ps -a | grep centos  | grep centos7

a417c2ae1ecb        centos:centos7 
7b29fbd7e38b        centos:centos7 
[root@master ~]# docker rm -f a417c2ae1ecb
a417c2ae1ecb
[root@master ~]# docker rm -f 7b29fbd7e38b
7b29fbd7e38b
[root@master ~]# docker ps -a | grep centos

[root@master ~]# docker ps -a | grep centos | grep centos7

#2开始恢复

[root@master ~]# cd /var/lib/docker/volumes
You have new mail in /var/spool/mail/root
[root@master volumes]# ls -lrt
total 48
-rw------- 1 root root 32768 Apr 30 02:04 metadata.db #找到这个文件并备份
-rw------- 1 root root 32768 May  1 23:22 metadata.db.bk
[root@master volumes]# 

#3 使用docker inspect 读取metadata.db

[root@master volumes]# docker inspect  musing_volhard

8、docker删除镜像,如果镜像中有两个或多个镜像名称相同,那么就使用依次使用下面的方法

docker删除镜像的三种方法

#-1 按照镜像名称 来删除镜像

[root@master volumes]#  docker rmi -f centos

#-2 按照标签名称 来删除镜像
[root@master volumes]# docker rmi -f centos:v2

#-3 按照镜像ID 来删除镜像,同时会删除所有该镜像的
[root@master volumes]# docker rmi  -f  5d0da3dc9764

-----------------------------------------------------------------------------

[root@master ~]# docker image ls | grep centos
centos                                                            centos7             eeb6ee3f44bd        19 months ago       204MB
centos                                                            latest                 5d0da3dc9764        19 months ago       231MB  #演示使用镜像ID删除镜像

镜像名                                                            标签名               镜像ID  
[root@master ~]

[root@master ~]# docker rmi -f  5d0da3dc9764
Untagged: centos:latest
Untagged: centos@sha256:a27fd8080b517143cbbbab9dfb7c8571c40d67d534bbdee55bd6c473f432b177
Deleted: sha256:5d0da3dc976460b72c77d94c8a1ad043720b0416bfc16c52c45d4847e53fadb6
[root@master ~]# 
[root@master ~]# docker image ls | grep centos
centos                                                            centos7             eeb6ee3f44bd        19 months ago       204MB
[root@master ~]# 5d0da3dc9764 ID 已经删除

9、修改镜像的标签

#修改镜像的标签,不会删除镜像,而是在镜像的基础上,复制一个新的镜像,TAG为更改后标签,镜像ID 相同

命令格式

docker tag IMAGEID(镜像id) REPOSITORY:TAG(仓库:标签)

[root@master ~]# docker images
REPOSITORY                                                        TAG                 IMAGE ID            CREATED             SIZE
centos                                                               centos7             eeb6ee3f44bd        19 months ago       204MB

#执行命令

[root@master ~]# docker tag  eeb6ee3f44bd centos:7.6
You have new mail in /var/spool/mail/root

#查看镜像

[root@master ~]# docker images | grep cent
centos                                                            7.6                     eeb6ee3f44bd        19 months ago       204MB
centos                                                            centos7             eeb6ee3f44bd        19 months ago       204MB

#使用新标签启动容器

[root@master ~]#  docker run -itd --name testv1 centos:7.6
479a027a2a9ac03f435b1306bbf0305b9c6f4f16b8b86fc4b05f83102f5742c4
[root@master ~]# docker ps  | grep centos
479a027a2a9a        centos:7.6                                          "/bin/bash"              About a minute ago   Up About a minute                       testv1
[root@master ~]#


总结

路虽远行则将至,事虽难做则必成!

滴水穿石,聚沙成塔!

感谢CSDN各位大佬的经典博文,在迷茫时能够拨云见日,指点迷津,让我继续一路前行!

如有侵权,请留言,我及时删除!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值