一路走来,所有遇到的人,帮助过我的、伤害过我的都是朋友,没有一个是敌人。
前言
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 ,连接公网可以使用官方的镜像仓库
#-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各位大佬的经典博文,在迷茫时能够拨云见日,指点迷津,让我继续一路前行!
如有侵权,请留言,我及时删除!