一文搞懂Docker基础知识及常用命令

it2023-07-05  69

简介

Docker的意思是码头工人,码头工人在码头从船上装卸海运的货物,你可以把你的所有货物打包起来,装到同一个标准规格的集装箱里,这样不仅可以跟别人的集装箱隔离开、互不影响,而且便于装卸。

再看Docker的logo,一头船一样的鲸鱼,背上背着一些小方块,这些小方块就是一个个集装箱,是不是很有意思?这也是Docker的基本思想。我们可以把我们需要的一些应用打包到一个“集装箱”里,只需要管理这个“集装箱”即可,应用的部署和卸载都变的容易。

接下来了解一些Docker的基本概念:

Docker是一个开源的应用容器引擎;是一个轻量级容器技术;Docker支持将软件编译成一个镜像;然后在镜像中各种软件做好配置,将镜像发布出去,其他使用者都可以使用这个镜像;容器是完全使用沙箱机制,相互之间不会有任何接口,更重要的是容器性能开销极低;运行中的这个镜像称为容器,容器启动是非常快速的;Docker 容器通过 Docker 镜像来创建。容器与镜像的关系类似于面向对象编程中的对象与类。

Docker和虚拟机

                

容器在Linux上本地运行,并与其他容器共享主机的内核。它运行一个离散进程,不占用任何其他可执行文件更多的内存,从而使其轻巧。相比之下,虚拟机(VM)运行具有“虚拟机管理程序”对主机资源进行虚拟访问的成熟的“ guest”操作系统。通常,VM会产生大量开销,超出了应用程序逻辑所消耗的开销。简单来说,容器仅包含我们的应用程序以及一些命令和依赖库,而虚拟机则必须包含一个操作系统。

核心概念

docker主机(Host)安装了Docker程序的机器(Docker直接安装在操作系统之上) docker客户端(Client)

连接docker主机进行操作

docker仓库(Registry)

Docker 仓库用来保存镜像,可以理解为代码控制中的代码仓库。

Docker Hub(https://hub.docker.com) 提供了庞大的镜像集合供使用。 一个 Docker Registry 中可以包含多个仓库(Repository);每个仓库可以包含多个标签(Tag);每个标签对应一个镜像。 通常,一个仓库会包含同一个软件不同版本的镜像,而标签就常用于对应该软件的各个版本。我们可以通过 <仓库名>:<标签> 的格式来指定具体是这个软件哪个版本的镜像。如果不给出标签,将以 latest 作为默认标签。

docker镜像(lmages)Docker 镜像是用于创建 Docker 容器的模板,放在docker仓库中docker容器(Container)镜像启动后的实例称为-个容器;容器是独立运行的一个或一组应用数据卷(Volume)

Docker中的数据可以存储在类似于虚拟机磁盘的介质中,在Docker中称为数据卷(Data Volume)。数据卷可以用来存储Docker应用的数据,也可以用来在Docker容器间进行数据共享。

数据卷呈现给Docker容器的形式就是一个目录,支持多个容器间共享,修改也不会影响镜像。使用Docker的数据卷,类似在系统中使用 mount 挂载一个文件系统。

 

Docker MachineDocker Machine是一个简化Docker安装的命令行工具,通过一个简单的命令行即可在相应的平台上安装Docker,比如VirtualBox、 Digital Ocean、Microsoft Azure。

Docker安装和卸载

Docker安装和卸载

Docker镜像加速

Docker镜像仓库地址-镜像加速

常用命令

镜像仓库

docker login

登陆到一个Docker镜像仓库,如果未指定镜像仓库地址,默认为官方仓库 Docker Hub 

例:docker login -u 用户名 -p 密码

docker logout登出一个Docker镜像仓库,如果未指定镜像仓库地址,默认为官方仓库 Docker Hubdocker pull

从镜像仓库中拉取或者更新指定镜像

例:docker pull nginx:tag

tag 版本号,可以任意写,如果不写,默认是latest,后面的tag也是一样的意思

docker search

从镜像仓库查找镜像

例:docker search nginx:tag

docker push将本地镜像上传到镜像仓库 例:docker push mynginx:tag本地镜像管理docker images列出本地所有镜像docker tag

标记本地镜像,将其归入某一仓库

例:docker tag ubuntu:15.10 bukale/ubuntu:v3   将镜像ubuntu:15.10标记为 bukale/ubuntu:v3 镜像

docker rmi

删除本地镜像

例:docker rmi [镜像id或镜像名称]

docker build

使用 Dockerfile 创建镜像

例:docker build -t bukale/mynginx:v1 . 

-t 创建的镜像的名称

最后面参数是Dockerfile文件目录,. 代表当前目录,也可以写该文件绝对路径

docker history

查看指定镜像创建历史

例:docker history bukale/im

docker save

将指定镜像保存成 tar 归档文件

例:docker save -o ./Desktop/mynginx.tar nginx

-o 指定保存的文件

docker load

导入使用docker save命令导出的镜像

例:docker load -i ./Desktop/mynginx.tar

--input , -i  指定导入的文件,代替 STDIN

--quiet , -q  精简输出信息。

docker import

从归档文件中创建镜像

例:docker import  mynginx.tar bukale/mynginx:v1    从镜像归档文件my_ubuntu_v3.tar创建镜像,命名为bukale/mynginx:v1  

容器rootfs命令

docker commit

从容器创建一个新的镜像

例:docker commit -m="updated nginx" -a="bukale" edcfc87a3295 bukale/nginx

-m 描述信息;-a 作者信息;edcfc87a3295是容器id,bukale/nginx是创建后的镜像名

docker cp

用于容器与主机之间的数据拷贝

例:

1、将主机/www/kaka目录拷贝到容器edcfc87a3295的/www目录下。       docker cp /www/kaka edcfc87a3295:/www/ 2、将主机/www/kaka目录拷贝到容器edcfc87a3295中,目录重命名为www。       docker cp /www/kaka edcfc87a3295:/www 3、将容器edcfc87a3295的/www目录拷贝到主机的/tmp目录中。       docker cp edcfc87a3295:/www /tmp/

docker diff

检查容器里文件结构的更改

例:docker diff mynginx

容器操作docker ps

列出所有运行中的容器,加-a,则是列出所有容器

docker inspect获取容器/镜像的元数据docker top

查看容器中运行的进程信息,支持 ps 命令参数

例:docter top mynginx

docker attach连接到正在运行中的容器docker events从服务器获取实时事件docker logs

获取指定容器的日志

例:docker logs --tail 10 mynginx   列出最新10条容器mynginx的日志

docker wait阻塞运行直到容器停止,然后打印出它的退出代码docker export

将指定容器保存成 tar 归档文件

例:docker save -o ./Desktop/mynginx.tar nginx

docker port

列出指定的容器的端口映射,或者查找将PRIVATE_PORT NAT到面向公众的端口

例:docker port mynginx

容器生命周期管理

docker run

创建一个容器

例:

docker run -it -d -v ./Desktop/nginx/conf/nginx.conf:/etc/nginx/conf/nginx.conf -p 8088:80 --name mynginx nginx /bin/bash

-i 以交互模式运行;

-t 分配一个伪输入终端;

-d 后台运行;

-v 挂载宿主机目录或文件到容器的目录或文件;

-p 端口映射,宿主机端口:容器端口;

-P 容器内部端口随机映射到主机端口;

-m 设置容器使用内存最大值;

--name 为容器指定名称;

-h 指定容器hostname;

--dns 指定容器使用的dns服务器,默认和宿主机一致;

/bin/bash 使用-it参数时,在容器内执行/bin/bash命令;

docker start

启动容器

例:docker start mynginx

docker restart重新启动容器docker stop停止容器docker kill杀掉一个运行中的容器docker rm

删除一个或多个容器,需先停止容器的运行

例:docker rm mynginx

-f 通过 SIGKILL 信号强制删除一个运行中的容器

-l 移除容器间的网络连接,而非容器本身

-v 删除与容器关联的卷

docker pause

暂停容器中所有进程

例:docker pause mynginx

docker unpause

恢复容器中所有进程

例:docker unpause mynginx

docker create

创建一个新的容器,但不启动它,用法与docker run一样,但docker run是创建并启动

docker exec

在运行的容器中执行命令

例:docker exec -it mynginx /bin/bash

-i 以交互模式运行;

-t 分配一个伪输入终端;

/bin/bash 使用-it参数时,在容器内执行/bin/bash命令;

要退出,先按CTRL+P,然后按CTRL+Q,这样不会中断容器的运行;

数据卷操作docker volume

docker volume ls 列出所有数据卷

docker volume create nginx_vol 创建数据卷nginx_vol

docker volume rm nginx_vol 删除数据卷

docker volume inspect nginx-vol 查看指定数据卷详情

其它docker info显示docker信息docker version显示docker版本

 

最新回复(0)