DOCKER01_概述、软件安装、镜像命令、容器命令、(日志、进入容器、拷贝)、提交、push、(导入、导出)、(save、load)

如果调试一个程序让你很苦恼,千万不要放弃,请记住,坚持不懈,直到成功。

①. Docker简介

  • ①. docker是基于go语言开发,主要目标是一次封装、到处运行。使用Docker可以实现开发人员的开发环境、测试人员的测试环境、运维人员的生产环境的一致性
    在这里插入图片描述

  • ②. docker借鉴了标准集装箱的概念。标准的集装箱将货物运往世界各地,Docker将这个模型运用到自己的设置中,唯一不同的是:集装箱运输货物,而Docker运输软件

  • ③. Docker运行在CentOS-6.5或更高的版本的CentOS上,要求系统为64位、系统内核版本为2.6.32-431或者更高版本

  • ④. Docker是一个Client-Server结构的系统,Docker守护进程运行在主机上,然后通过Socket连接从客户端访问,守护进程从客户端接受命令并管理运行在主机上的容器。容器,是一个运行时环境,就是我们前面说到的集装箱
    在这里插入图片描述

  • ⑤. 为什么Docker比VM快 掌握

  1. docker有着比虚拟机更少的抽象层。由于docker不需要Hypervisor实现硬件资源虚拟化,运行在docker容器上的程序直接使用的都是实际物理机的硬件资源。因此在CPU、内存利用率上docker将会在效率上有明显优势
  2. docker利用的是宿主机的内核,而不需要Guest OS。因此,当新建一个容器时,docker不需要和虚拟机一样重新加载一个操作系统内核。仍而避免引寻、加载操作系统内核返个比较费时费资源的过程,当新建一个虚拟机时,虚拟机软件需要加载Guest OS,返个新建过程是分钟级别的。而docker由于直接利用宿主机的操作系统,则省略了返个过程,因此新建一个docker容器只需要几秒钟。

在这里插入图片描述

②. 镜像、容器、仓库

  • ①. Docker 镜像(Image)就是一个只读的模板。镜像可以用来创建 Docker 容器,一个镜像可以创建很多容器
    (镜像相当于是类、而容器则是它的具体实现)

  • ②. Docker 利用容器(Container)独立运行的一个或一组应用。容器是用镜像创建的运行实例。可以把容器看做是一个简易版的 Linux 环境(包括root用户权限、进程空间、用户空间和网络空间等)和运行在其中的应用程序。

  • ③. 仓库(Repository)是集中存放镜像文件的场所

  1. 仓库(Repository)和仓库注册服务器(Registry)是有区别的。仓库注册服务器上往往存放着多个仓库,每个仓库中又包含了多个镜像,每个镜像有不同的标签(tag)
  2. 仓库分为公开仓库(Public)和私有仓库(Private)两种形式
    最大的公开仓库是 Docker Hub(https://hub.docker.com/)
    存放了数量庞大的镜像供用户下载。国内的公开仓库包括阿里云 、网易云等
  • ④. Docker的架构图

在这里插入图片描述

③. Docker、Mysql、Redis、Vagrant的安装详解

④. 帮助命令 docker version、info、–help

  • ①.查看docker的版本 docker version | 显示系统信息 docker info
[root@k8s-master ~]# docker version
Client: Docker Engine - Community
 Version:           19.03.9
 API version:       1.40
 Go version:        go1.13.10
 Git commit:        9d988398e7
 Built:             Fri May 15 00:25:27 2020
 OS/Arch:           linux/amd64
 Experimental:      false

Server: Docker Engine - Community
 Engine:
  Version:          19.03.9
  API version:      1.40 (minimum version 1.12)
  Go version:       go1.13.10
  Git commit:       9d988398e7
  Built:            Fri May 15 00:24:05 2020
  OS/Arch:          linux/amd64
  Experimental:     false
 containerd:
  Version:          1.4.9
  GitCommit:        e25210fe30a0a703442421b0f60afac609f950a3
 runc:
  Version:          1.0.1
  GitCommit:        v1.0.1-0-g4144b63
 docker-init:
  Version:          0.18.0
  GitCommit:        fec3683
  • ②. docker --help
命令作用
attach绑定到运行中容器的 标准输入, 输出,以及错误流(这样似乎也能进入容器内容,但是一定小心,他们操作的就是控制台,控制台的退出命令会生效,比如redis,nginx…)
build从一个 Dockerfile 文件构建镜像
commit把容器的改变 提交创建一个新的镜像
cp容器和本地文件系统间 复制 文件/文件夹
create创建新容器,但并不启动(注意与docker run 的区分)需要手动启动。start、stop
diff检查容器里文件系统结构的更改[A:添加文件或目录 D:文件或者目录删除 C:文件或者目录更改]
events获取服务器的实时事件
exec在运行时的容器内运行命令
export导出容器的文件系统为一个tar文件。commit是直接提交成镜像,export是导出成文件方便传输
history显示镜像的历史
images列出所有镜像
import导入tar的内容创建一个镜像,再导入进来的镜像直接启动不了容器。/docker-entrypoint.sh nginx -g ‘daemon ow;’ docker ps --no-trunc 看下之前的完整启动命令再用他
info显示系统信息
inspect获取docker对象的底层信息
kill杀死一个或者多个容器
load从 tar 文件加载镜像
login登录Docker registry
logout退出Docker registry
logs获取容器日志;容器以前在前台控制台能输出的所有内容,都可以看到
pause暂停一个或者多个容器
port列出容器的端口映射
ps列出所有容器
pull从registry下载一个image 或者repository
push给registry推送一个image或者repository
rename重命名一个容器
restart重启一个或者多个容器
rm移除一个或者多个容器
rmi移除一个或者多个镜像
run创建并启动容器
save把一个或者多个镜像保存为tar文件
search去docker hub寻找镜像
start启动一个或者多个容器
stats显示容器资源的实时使用状态
stop停止一个或者多个容器
tag给源镜像创建一个新的标签,变成新的镜像
top显示正在运行容器的进程
unpause取消暂停容器
update更新一个或者多个docker容器配置
versionShow the Docker version information
container管理容器
image管理镜像
network管理网络
volume管理卷

⑤. Docker常用命令图 超级重要

在这里插入图片描述

⑥. 查看docker start| stop| restart| enable

  • ①. 查看docker启动、停止、再次开启、状态 systemctl start/status/stop/restart docker

  • ②. 开机自启:systemctl enable docker

⑦. 镜像命令 images search pull rmi

  • ①. docker images [OPTIONS]
  1. -a:列出本地所有的镜像(含中间映像层)
  2. -q:只显示镜像ID
  3. –digests :显示镜像的摘要信息(- -)
  4. –no-trunc :显示完整的镜像信息(- -)

在这里插入图片描述

  • ②. docker search [OPTIONS] 镜像名字
  1. –filter , -f:基于给定条件过滤输出
  2. –no-trunc : 显示完整的镜像描述(- -)
  3. –automated : 只列出 automated build类型的镜像;(- -)
  4. -s : 列出收藏数不小于指定值的镜像(已经废弃)
// 搜索 Stars 数超过 500 的 mysql 镜像
docker search --filter stars=500 mysql

在这里插入图片描述

  • ③. docker pull 镜像名字[:TAG]
    (docker pull tomcat:latest 等价于 docker pull tomcat)

  • ④.docker rmi 某个XXX镜像名字ID (-f 是强制刪除)
    docker image prune : 移除游离镜像(dangling:游离镜像(没有镜像名字的))

  1. 删除单个 docker rmi -f 镜像ID
  2. 删除多个 docker rmi -f 镜像名1:TAG镜像名2:TAG
  3. 删除全部 docker rmi -f $(docker images -aq)

在这里插入图片描述

⑧. 容器命令 run ps kill stop create 状态

(有镜像才能创建容器,这是根本前提(下载一个CentOS镜像演示))

  • ①. 新建并启动容器: docker run [OPTIONS] IMAGE [COMMAND] [ARG…]
    ( OPTIONS说明(常用):有些是一个减号,有些是两个减号)
  1. exit:容器停止退出
  2. ctrl+P+Q:容器不停止退出
	docker run -it --name=mycentos centos:7
	docker run -it --name mycentos2 centos:7 /bin/bash
	--name="容器新名字": 为容器指定一个名称;
	-d: 后台运行容器,并返回容器ID,也即启动守护式容器;
	-i: 以交互模式运行容器,通常与 -t 同时使用;
	-t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用;
	-v: 表示目录映射关系(前者是宿主机目录,后者是映射到宿主机上的目录),可以使用多个-v做多个目录或
文件映射。注意:最好做目录映射,在宿主机上做修改,然后共享到容器上	
	-P: 随机端口映射;
	-p: 指定端口映射,有以下四种格式
	      ip:hostPort:containerPort
	      ip::containerPort
	      hostPort:containerPort
	      containerPort

在这里插入图片描述

  • ②. 列出当前所有正在运行的容器:docker ps [OPTIONS] (OPTIONS说明(常用))
  1. -a :列出当前所有正在运行的容器+历史上运行过的
  2. -q:静默模式,只显示容器编号
  3. -n:显示最近n个创建的容器
  4. -l :显示最近创建的容器(上一个容器)
  5. –no-trunc :不截断输出(- -)
  • ③. 启动、重启、停止容器
    docker start|restart |stop 容器ID或者容器名

    docker stop可以允许优雅停机(当前正在运行中的程序处理完所有事情后再停止)

  • ④. 强制停止容器:docker kill 容器ID或者容器名 (直接拔电源)

  • ⑤. 删除已停止的容器

  1. docker rm 容器ID:这个命令已经启动的无法删除
  2. 一次性删除多个容器(f是强制删除)
	docker rm -f $(docker ps -a -q)
	docker ps -a -q | xargs docker rm
  • ⑥. create:创建新容器,但并不启动(注意与docker run 的区分)需要手动启动(start | stop)
    在这里插入图片描述
  • ⑦. 容器的状态 : Created(新建)、Up(运行中)、Pause(暂停)、Exited(退出)
    docker run的立即启动,docker create得稍后自己启动

⑨. 详解docker run [OPTIONS] IMAGE [COMMAND] [ARG…]

  • ①. -d: 后台运行容器,并返回容器ID

  • ②. -i: 以交互模式运行容器,通常与 -t 同时使用

  • ③. -P: 随机端口映射,容器内部端口随机映射到主机的端口

  • ④. -p:指定端口映射,格式为:主机(宿主)端口:容器端口

  • ⑤. -t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用 --name=“nginx-lb”:为容器指定一个名称

  • ⑥. --volume , -v: 绑定一个卷。一般格式 主机文件或文件夹:虚拟机文件或文件夹

  • ⑦. --restart , 指定重启策略,可以写–restart=awlays 总是故障重启

  • ⑧. -e username=“ritchie”: 设置环境变量

  • ⑨. -m :设置容器使用内存最大值

  • ⑩. --net=“bridge”: 指定容器的网络连接类型,支持 bridge/host/none/container: 四种类型

  • ⑩①. --dns 8.8.8.8: 指定容器使用的DNS服务器,默认和宿主一致

  • ⑩②. --dns-search example.com: 指定容器DNS搜索域名,默认和宿主一致

  • ⑩③. -h “mars”: 指定容器的hostname

  • ⑩④. --env-file=[]: 从指定文件读入环境变量

  • ⑩⑤. --cpuset=“0-2” or --cpuset=“0,1,2”: 绑定容器到指定CPU运行

  • ⑩⑥. --link=[]: 添加链接到另一个容器;

  • ⑩⑦. --expose=[]: 开放一个端口或一组端口;

⑩. 查看日志logs、进入容器exec、拷贝cp

  • ①. 查看容器日志(docker logs -f -t --tail 容器ID或名称)
  1. -t 是加入时间戳
  2. -f 跟随最新的日志打印(实时打印最新日志)
  3. –tail 数字 显示最后多少条(- -)

在这里插入图片描述

  • ②. 进入正在运行的容器并以命令行交互
  1. docker exec -it 容器ID /bin/bash(attach 直接进入容器启动命令的终端,不会启动新的进程)
    docker exec -it -u 0:0 --privileged mynginx4 /bin/bash: 0用户,以特权方式进入容器
  2. 重新进入docker attach 容器ID(绑定的是控制台,可能导致容器停止。不要用这个),如果使用attach进入容器,当我们退出容器的时候,容器就会导致停止
    在这里插入图片描述
  • ③. 拷贝(如果不清楚.可以使用docker cp --help查看)
  1. 从容器内拷贝文件到主机上:docker cp 容器ID(容器名):容器内路径 目的主机路径
  2. 将宿主机的文件拷贝到容器内: docker cp cc.txt 容器ID或容器名:/

在这里插入图片描述
在这里插入图片描述

⑩①. Docker镜像commit操作

  • ①. 提交镜像:docker commit提交容器副本使之成为一个新的镜像
    (docker commit -m=“提交的描述信息” -a=“作者” 容器ID 要创建的目标镜像名:[标签名])

  • ②. 从Hub上下载tomcat镜像到本地并成功运行
    docker pull tomcat
    docker run -it -p 8080:8080 tomcat
    在这里插入图片描述
    在这里插入图片描述

  • ③. 故意删除上一步镜像生产tomcat容器的文档
    在这里插入图片描述

  • ④. 也即当前的tomcat运行实例是一个没有文档内容的容器,以它为模板commit一个没有doc的tomcat新镜像atguigu/tomcat02
    在这里插入图片描述

  • ⑤. 启动我们的新镜像并和原来的对比

  1. 启动atguigu/tomcat02,它没有docs
  2. 新启动原来的tomcat,它有docs

在这里插入图片描述
在这里插入图片描述

⑩②. 推送镜像docker push

  • ①. 注册docker hub并登录

  • ②. 可以创建一个仓库,选为public
    在这里插入图片描述

  • ③. docker hub一个完整镜像的全路径是:
    官方docker.io/library/redis:alpine3.13
    自己的docker push tangzhiyx/mynginx:tagname
    完整版:docker push docker.io/tangzhiyx/mynginx:tagname
    (阿里云等其他的仓库可能这里的docker.io不一样)

  • ④. 输入docker login,所有的东西都会push到这个人的仓库
    怎么知道是否登录了cat ~/.docker/config.json 有没有auth的值,没有就是没有登录
    docker hub太慢了,用阿里云的镜像仓库,或者以后的habor仓库

    在这里插入图片描述

  • ⑤. 注意推送的镜像一定要和远程仓库名称一样,如果不一样一定要改名字
    在这里插入图片描述

  • ⑥.使用dock push进行推送
    在这里插入图片描述

  • ⑦. 如何退出登录docker logout

[root-master ~]# docker logout
Removing login credentials for https://index.docker.io/v1/

⑩③. 容器export导出jar和import导入为一个镜像

  • ①. 导出: docker export [OPTIONS] CONTAINER
    –output , -o:写到指定的文件中,而不是标准输出流上
[root@master kafka_2.12-2.5.1]# docker run --name my_nginx -d -p 80:80 nginx
2ccd9d92501d31eeee282c5a3d29f756cb5856f1bf3f51088187e7b1bb9994c8
[root@master kafka_2.12-2.5.1]# docker ps
CONTAINER ID  IMAGE                           COMMAND               CREATED        STATUS            PORTS               NAMES
2ccd9d92501d  docker.io/library/nginx:latest  nginx -g daemon o...  8 seconds ago  Up 4 seconds ago  0.0.0.0:80->80/tcp  my_nginx
[root@master kafka_2.12-2.5.1]# cd
[root@master ~]# docker export -o "my_nginx.tar" 2ccd9d92501d
[root@master ~]# ls
anaconda-ks.cfg  my_nginx.tar

在这里插入图片描述

  • ②. 导入:docker import [OPTIONS] file|URL|- [REPOSITORY[:TAG]]
    –message,-m:在导入镜像时设置提交信息

在这里插入图片描述

  • ③. 大坑 docker export导出的文件被import导入以后变成镜像,并不能直接启动容器,需要知道之前的启动命令 (docker ps --no-trunc),然后再用下面启动
    在这里插入图片描述

①④. 镜像 save保存镜像jar和load将jar转换为镜像

  • ①. save --output,-o写到指定的文件中,而不是标准输出流上

  • ②. load -input,-i从文件加载而不是从标准输入流

#把busybox镜像保存成tar文件
docker save -o busybox.tar busybox:latest 
#把压缩包里面的内容直接导成镜像
docker load -i busybox.tar 
  • 8
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

所得皆惊喜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值