软件开发工程师必备技能之——Docker入门(中篇)

Posted weixin_43802541

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了软件开发工程师必备技能之——Docker入门(中篇)相关的知识,希望对你有一定的参考价值。

对于Docker的操作,主要是对Docker镜像和容器的操作,所以下面我们就来看下开发中常用到的一些镜像和容器操作。

一.镜像常用操作

之前提到过,Docker Hub 上有大量的高质量的镜像可以用,而我们想要对镜像进行操作先得搜索到它并下载下来。首先我们先搜索下镜像,这里我们以mysql为例,如下:

1.1查找镜像

$ docker search mysql
在这里插入图片描述

这里选择stars最多的也就是第一个mysql镜像。

1.2 拉取镜像

从 Docker 镜像仓库获取镜像的命令是 docker pull。

其命令格式为:
docker pull [选项] [Docker Registry 地址[:端口号]/]仓库名[:标签]

例如:docker pull mysql:5.7 表示要拉取5.7版本的mysql。

1.3 查看和删除镜像

docker images 可以查看到本地镜像仓库下载的所有镜像有哪些,例如:
在这里插入图片描述

上面查看镜像红色框标注的内容解释如下:

REPOSITORY: 镜像的仓库源;
TAG: 镜像标签名,例如:mysql镜像的标签为5.7,java的标签为8,latest表示最近版本;同一个仓库源可以有多个Tag,代表这个仓库的不同版本。例如:Mysql可以有5.7、8.0等多个版本;
IMAGE ID: 镜像的唯一ID,对于镜像的操作都可以使用这个镜像ID来操作;
CREATED: 镜像最后的更新时间;
SIZE: 镜像的大小;

而删除镜像的话可以通过镜像名字或者镜像ID删除,格式如下:
docker rmi 镜像名字/镜像ID

1.4给镜像打标签

我们可以使用 docker tag 命令给镜像打一个标签版本,就像git可以给项目打标签一样,这样我们就可以保留和使用镜像的多个版本。但是不管有几个版本,他们的镜像ID是一样的因为用了同一个镜像。

语法格式:
docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]

使用案例如下:
在这里插入图片描述

1.5 查看镜像详细信息

docker inspect 可以用来获取容器/镜像的详细定义信息。语法如下:
docker inspect [OPTIONS] NAME|ID [NAME|ID…]

OPTIONS说明:
-f :指定返回值的模板文件。
-s :显示总的文件大小。
–type :为指定类型返回JSON。

使用案例:
在这里插入图片描述

1.6查看镜像历史信息

使用docker history 可以查看docker镜像的创建历史。语法如下:
docker history [OPTIONS] IMAGE

OPTIONS说明:
-H : 数据以一种人类可读的方式显示。
–no-trunc :显示完整的提交记录;
-q :只显示历史提交记录的ID。
在这里插入图片描述

二.容器常用操作

2.1创建和运行容器

我们下载了镜像之后,想要使用镜像的话就需要创建容器来搭建环境了,docker create命令用使用一个镜像创建容器,例如我们为mysql创建容器:
docker create -it mysql:5.7

创建了容器之后,我们就可以使用 docker start 来启动它,语法:
docker start 容器名/容器ID

但是在docker的真实使用中我们往往使用一步就完成对容器的创建和运行过程,这时候我们使用的是docker run 命令。例如我们要创建并启动mysql,命令如下:
docker run -p 3306:3306 --name mysql8 -v $PWD/conf:/etc/mysql/conf.d -v $PWD/logs:/logs -v $PWD/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7

docker run常用参数说明:
–name:给容器起个名字;
-p:指定映射的端口,这里是对外暴露的服务端口为3306,容器端口也是3306;
-d:容器在后台运行;
-v: 指定主机和容器对于的挂载目录,例如上面的命令 -v $PWD/logs:/logs 表示把当前目录下logs文件夹里面的内容挂载到容器内logs文件。挂载的好处就是可以把主机的一些文件放到容器内,也可以把容器内的数据挂载到服务器云盘上;
-e:传递环境变量

更多参数查看:docker run --help

2.2查看和删除容器

创建了容器或者运行了容器之后,我们就可以来查看下docker有哪些运行的容器了。
docker ps

另外如果有一些容器创建了但是没有运行,想要查看所有的容器,我们就使用:
docker ps -a

如果要删除一个容器的话,我们使用
docker rm 容器名/容器ID

如果要删除的容器还在运行,但是还是想把它删除掉就可以强制删除:
docker rm -f 容器名/容器ID

2.2 停止和重启容器

停止正在运行的一个容器:
docker stop 容器名字/容器ID

如果想要停止所有的容器:
docker stop $(docker ps -a -q)

重启容器:
docker restart 容器名字/容器ID

如果想要重启所有的容器:
docker restart $(docker ps -a -q)

2.3进入容器

当容器运行起来时候,我们想要进入看看一些文件之类的,我们就可以使用docker exec来进入容器,使用如下:
在这里插入图片描述

使用docker exec 命令退出的时候不会导致容器的停止。参数 -i的意思是打开标准输入接受用户输入命令,-t分配一个伪终端设备。这里我们希望有个交互式 Shell,因此用的是/bin/bash。

2.4容器和宿主机间拷贝

有的时候我们可能需要把宿主机中的文件拷贝到容器中,或者从容器中把文件拷贝出来,这时候我们就可以使用docker cp 的命令来实现:

从主机复制到容器:
docker cp host_path containerID:container_path

从容器复制到主机:
docker cp containerID:container_path host_path

解释:
host_path:宿主机文件路径;
container_path:容器文件路径;
containerID:容器ID

2.5查看容器日志

如果docker中的容器运行起来之后,想要查看下容器运行的情况的话可以使用 docker logs 来查看容器运行的日志,例如查看下mysql的日志情况:
docker logs -f mysql

有的容器日志内容比较多(例如:mysql或者tomcat等),如果我们只是想看最后一部分最新的日志的话可以使用参数–tail来查看,语法如下:
docker logs -f --tail 行数 容器名
在这里插入图片描述

如果想要查看指定时间的日志话,可以使用 --since来查看,使用如下:
docker logs -f -t --since=时间 容器名
在这里插入图片描述

如果想要把日志输出到指定文件的话,可以按照如下方式:
docker logs 容器名 > 日志路径 2>&1
在这里插入图片描述

2.6查看容器占用内存情况

当我们的Docker中有很多的容器运行,服务器所占内存太大的时候我们就可以看下那个运行容器占用资源的情况来进行分析和解决,查看所有容器占用情况:
docker stats

要查看某一个容器的占用情况:
docker stats 容器名/容器ID
在这里插入图片描述

解释说明:
CPU %:容器使用CPU的百分比
MEM USAGE / LIMIT:容器使用的总内存和允许使用的内存总量
MEM %:容器所使用的内存百分比
NET I/O:容器通过网络接口接收和发送的数据量
BLOCK I/O:容器从主机上的设备写入和的读取数据量
PIDS:容器创建的进程或线程数

以上是关于软件开发工程师必备技能之——Docker入门(中篇)的主要内容,如果未能解决你的问题,请参考以下文章

Java架构师必备技能:docker使用大全

软件测试工程师必备技能之Java基础

运维工程师从入门到放弃必备书籍

Docker入门-中篇

Docker入门-中篇

测试必备技能系列6:软件安装部署是最基本的能力!