内容简介: 上篇文章介绍了有关Docker的基础与Linux下docker的安装,本文主要讲解安装docker后的基础使用方法以及命令的介绍,主要是docker镜像操作及容器操作命令。 当然,docker的相关命令非常多,可以使用docker help命令查看对应目录以及相关提示命令。命令描述:从Docker Hub中搜索并且显示你所需要的镜像
Docker基础命令详解——镜像及容器操作
前言
上篇文章介绍了有关 Docker 的基础与 Linux 下docker的安装,本文主要讲解安装docker后的基础使用方法以及命令的介绍,主要是docker镜像操作及容器操作命令。
当然,docker的相关命令非常多,可以使用docker help命令查看对应目录以及相关提示命令。
Docker镜像操作命令
[root@docker ~]# which docker /usr/bin/docker
1、镜像搜索:docker search
命令描述:从Docker Hub中搜索并且显示你所需要的镜像
命令格式:docker search [options] term
Options:
-f, --filter filter Filter output based on conditions provided
--format string Pretty-print search using a Go template
--limit int Max number of search results (default 25)
--no-trunc Don't truncate output
-s: -s 100 #表示收藏数大于100的镜像
实例操作演示:
[root@docker ~]# docker search nginx NAME DESCRIPTION STARS OFFICIAL AUTOMATED nginx Official build of Nginx. 12968 [OK] jwilder/nginx-proxy Automated Nginx reverse proxy for docker con… 1772 [OK] richarvey/nginx-php-fpm Container running Nginx + PHP-FPM capable of… 764 [OK] ...//省略部分内容 [root@docker ~]# docker search -s 100 nginx Flag --stars has been deprecated, use --filter=stars=3 instead NAME DESCRIPTION STARS OFFICIAL AUTOMATED nginx Official build of Nginx. 12968 [OK] jwilder/nginx-proxy Automated Nginx reverse proxy for docker con… 1772 [OK] richarvey/nginx-php-fpm Container running Nginx + PHP-FPM capable of… 764 [OK] linuxserver/nginx An Nginx container, brought to you by LinuxS… 104
简要说明:
- NAME:镜像名称
- DESCRIPTION:该镜像的描述信息
- STARS:星级,越高则说明使用者,喜欢的人越多
- OFFICIAL:是否为官方发布
- AUTOMATED:自动创建
该命令作为检索命令,下面我们需要获取你检索后选择的每个镜像
2、镜像获取:docker pull
命令描述:从镜像仓库中拉取(形象的说法嘛)或者更新指定镜像
命令格式:docker pull [OPTIONS] NAME[:TAG|@DIGEST]
Options:
-a, --all-tags Download all tagged images in the repository
--disable-content-trust Skip image verification (default true)
-q, --quiet Suppress verbose output
OPTIONS说明:
- -a : 拉取所有 tagged 镜像
- --disable-content-trust : 忽略镜像的校验,默认开启
实例演示:拉取nginx镜像为例
[root@docker ~]# docker pull nginx Using default tag: latest latest: Pulling from library/nginx c499e6d256d6: Pull complete 74cda408e262: Pull complete ffadbd415ab7: Pull complete Digest: sha256:282530fcb7cd19f3848c7b611043f82ae4be3781cb00105a1d593d7e6286b596 Status: Downloaded newer image for nginx:latest docker.io/library/nginx:lates
这样我们就拉取了一个nginx镜像,那么我们怎么查看呢?
3、镜像信息查看:docker images
命令描述:列出本地镜像
命令格式:docker images [OPTIONS] [REPOSITORY[:TAG]]
OPTIONS说明: -a :列出本地所有的镜像(含中间映像层,默认情况下,过滤掉中间映像层); --digests :显示镜像的摘要信息; -f :显示满足条件的镜像; --format :指定返回值的模板文件; --no-trunc :显示完整的镜像信息; -q :只显示镜像ID。
实例演示:
[root@docker ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE nginx latest ed21b7a8aee9 6 days ago 127MB #等价于下面的命令 [root@docker ~]# docker image ls REPOSITORY TAG IMAGE ID CREATED SIZE nginx latest ed21b7a8aee9 6 days ago 127MB
简要说明:
- REPOSITORY:仓库名称
- TAG:标签
- IMAGE ID:镜像id
- CREATE:创建状态(按照时间)
- SIZE:文件大小
PS:补充使用docker inspect IMAGE ID可以查看镜像的详细信息。
下面看看这个TAG的作用
4、镜像标签操作:docker tag
命令描述:标记本地镜像,将其归入某一仓库
命令格式:docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]
实例演示:
[root@docker ~]# docker tag nginx:latest nginx:lokott [root@docker ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE nginx latest ed21b7a8aee9 6 days ago 127MB nginx lokott ed21b7a8aee9 6 days ago 127MB
假设我们创建的时候发现有错误,或者在不需要的时候怎么删除镜像呢?继续来看哈!
5、删除镜像:docker rmi
命令描述:删除本地一个或多个镜像
命令格式:docker rmi [OPTIONS] IMAGE [IMAGE...]
Options:
-f, --force Force removal of the image
--no-prune Do not delete untagged parents
实例演示:
[root@docker ~]# docker rmi nginx:lokott Untagged: nginx:lokott [root@docker ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE nginx latest ed21b7a8aee9 6 days ago 127MB [root@docker ~]# docker rmi nginx:latest Untagged: nginx:latest Untagged: nginx@sha256:282530fcb7cd19f3848c7b611043f82ae4be3781cb00105a1d593d7e6286b596 Deleted: sha256:ed21b7a8aee9cc677df6d7f38a641fa0e3c05f65592c592c9f28c42b3dd89291 Deleted: sha256:8a305f371a6c3c445a1dfc500c1364743868a269ab8cdaf95902692e82168352 Deleted: sha256:d079ef06ec1f10a8050887365f9a940b39547ba6bcc46b16a463e740984f3223 Deleted: sha256:c3a984abe8a88059915bb6c7a1d249fd1ccc16d931334ac8816540b0eb686b45
删除打标签的镜像其实本质就是一个脱去标签的操作,与删除原镜像文件是不一样的。
尽量不要使用删除ID号的方式删除镜像,并且注意尽量删除依赖该镜像的所有容器后再删除这个镜像。
那么我们需要考虑我们拉取了镜像之后怎么存出镜像呢?这就需要使用下面的命令来实现了。
6、存出镜像:docker save
所谓存出,我们设想这样的场景应用:当需要将一台机器上的镜像迁移到另一台机器上的时候,需要将镜像保存成本地文件,这个过程就叫做存出镜像。
你可以简单理解为将镜像打成压缩包方便使用
命令描述:将指定镜像保存成 tar 归档文件
命令格式:docker save [OPTIONS] IMAGE [IMAGE...]
OPTIONS 说明: -o :输出到的文件。
实例演示:
[root@docker ~]# docker save -o /opt/nginx nginx:latest [root@docker ~]# ll /opt/ 总用量 127560 drwx--x--x. 4 root root 28 4月 6 09:45 containerd -rw-------. 1 root root 130618880 4月 6 14:04 nginx drwxr-xr-x. 2 root root 6 10月 31 2018 rh
那么有存出,就必定有对应的载入操作,我们将存出的文件从本地复制一份到其他机器上是,我们需要使用这个镜像,可以通过下面的命令实现载入镜像
7、载入镜像:docker load
命令描述:载入镜像文件
命令格式:docker load [OPTIONS]
Options: -i, --input string Read from tar archive file, instead of STDIN -q, --quiet Suppress the load output
实例演示:
[root@docker ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE #一: [root@docker ~]# docker load < /opt/nginx c3a984abe8a8: Loading layer 72.48MB/72.48MB 99134ec7f247: Loading layer 58.11MB/58.11MB d37eecb5b769: Loading layer 3.584kB/3.584kB Loaded image: nginx:latest [root@docker ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE nginx latest ed21b7a8aee9 6 days ago 127MB #二:从tar存档文件中读取,而不是从STDIN中读取 [root@docker ~]# docker load --input /opt/nginx #或者使用-i代替--input也是一样的 c3a984abe8a8: Loading layer 72.48MB/72.48MB 99134ec7f247: Loading layer 58.11MB/58.11MB d37eecb5b769: Loading layer 3.584kB/3.584kB Loaded image: nginx:latest
8、上传镜像:docker login (不做细说以及演示)
命令描述:将自己本地的镜像制作好后上传到仓库中
命令格式:docker login
结合docker push NAME[:TAG]使用
Docker容器操作命令
关于Docker容器的操作笔者换一种风格来介绍,但是还是会通过实例来方便大家理解。
首先,容器简单而言,是基于镜像的一个运行实例,是独立运行的一个或一组应用以及其所必需的运行环境,包括文件系统、系统类库、 shell 环境等。镜像是只读模板,而容器会给这个只读模板一个额外的可写层。
接下来就容器来讲述具体的操作命令。
1、容器创建与启动
容器创建就是将镜像加载到容器的过程,因为是docker是轻量级的应用工具,用户可以随时进行创建或者删除。新建的容器默认处于停止状态,不允许任何程序,需要在其中发起一个进程来启动容器,这个进程就是这个容器的唯一进程,因此在该进程结束的时候,容器也会完全停止。停止的容器可以重新启动并且保留原来的修改。
容器的创建
容器创建命令:docker create
命令格式:docker create [OPTIONS] IMAGE [COMMAND] [ARG...]
常用的options:
- -i:让容器的输入保持打开
- -t:让docker分配一个伪终端
实例演示:
[root@docker ~]# docker create -it nginx:latest /bin/bash a1a2e8468189b146b0215971cf76947987d8fc3f42c58e77371e8d48afb030d1 [root@docker ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES a1a2e8468189 nginx:latest "/bin/bash" 7 seconds ago Created gallant_feynman
相关说明:
CONTAINER ID:容器ID号
IMAGE:使用的镜像
COMMAND :
CREATED:显示操作时间
STATUS:显示状态,created表示已创建
PORTS:端口 信息和使用的连接类型(tcp/udp)
NAMES:自动分配容器的名称
容器的启动
命令:docker start
命令格式:docker start [OPTIONS] CONTAINER [CONTAINER...]
实例演示:
[root@docker ~]# docker start a1a2e8468189 a1a2e8468189 [root@docker ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES a1a2e8468189 nginx:latest "/bin/bash" 10 minutes ago Up 2 seconds 80/tcp gallant_feynman
启动后,发现端口信息出来了,并且显示是up状态,表示容器已经是启动状态了。
下面看另一种启动容器的方式:
[root@docker ~]# docker run centos /usr/bin/bash -c ls / Unable to find image 'centos:latest' locally latest: Pulling from library/centos 8a29a15cefae: Pull complete Digest: sha256:fe8d824220415eed5477b63addf40fb06c3b049404242b31982106ac204f6700 Status: Downloaded newer image for centos:latest bin dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var [root@docker ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 4835176a7d8e centos "/usr/bin/bash -c ls…" About a minute ago Exited (0) About a minute ago affectionate_keldysh a1a2e8468189 nginx:latest "/bin/bash" 28 minutes ago Up 17 minutes 80/tcp gallant_feynman
-c参数表示的是需要执行的命令,这种方式适用于一次执行,Exited (0) 表示正常正确退出,及终止运行。
docker run的命令执行流程为:先从本地查找镜像(本地没有image不表示容器不依赖image),如果没有会从公共仓库中下载;再通过镜像创建并且启动一个容器;分配一个文件系统给容器,在只读的镜像层外面挂载一层可读写层;从宿主机配置的网桥接口中桥接一个虚拟接口到容器中;分配一个地址池中的IP地址给容器;执行用户指定的应用程序;执行之后容器被终止(后台运行除外)。
后台运行:run 后面加参数-d即可。
2、容器运行与终止
想要在运行中的容器停下来,使用docker stop 命令
命令格式:docker stop [OPTIONS] CONTAINER [CONTAINER...]
实例演示:
[root@docker ~]# docker stop a1a2e8468189 a1a2e8468189 [root@docker ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 4835176a7d8e centos "/usr/bin/bash -c ls…" 9 minutes ago Exited (0) 9 minutes ago affectionate_keldysh a1a2e8468189 nginx:latest "/bin/bash" 36 minutes ago Exited (0) 3 seconds ago gallant_feynman
3、容器的进入
想要进入容器进行相应操作时可以使用docker exec命令进入运行着的容器。
命令格式:docker exec [OPTIONS] CONTAINER COMMAND [ARG...]
[root@docker ~]# docker ps -a #检查容器是否是运行状态(up) CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 4835176a7d8e centos "/usr/bin/bash -c ls…" 12 minutes ago Exited (0) 12 minutes ago affectionate_keldysh a1a2e8468189 nginx:latest "/bin/bash" 38 minutes ago Up 4 seconds 80/tcp gallant_feynman [root@docker ~]# docker exec -it a1a2e8468189 /bin/bash #进入伪终端 root@a1a2e8468189:/# ls bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var root@a1a2e8468189:/# exit #使用exit退出伪终端 exit [root@docker ~]#
4、容器的导出和导入
类似镜像,用户也可以将容器从一台机器迁移到另一台机器。在迁移过程中,首先需要将已经创建好的容器导出为文件,使用docker export实现,无论这个容器是处于运行状态还是停止状态均可以导出。导出之后可将导出文件传输到其他机器,通过对应的导入命令实现迁移过程。
容器导出命令:docker export
命令格式:docker export [OPTIONS] CONTAINER
实例演示:一个运行状态一个停止状态,都演示
[root@docker ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 4835176a7d8e centos "/usr/bin/bash -c ls…" 21 minutes ago Exited (0) 21 minutes ago affectionate_keldysh a1a2e8468189 nginx:latest "/bin/bash" 48 minutes ago Up 9 minutes 80/tcp gallant_feynman
运行中的容器导出:
[root@docker ~]# docker export a1a2e8468189 > nginx_contain [root@docker ~]# ls anaconda-ks.cfg initial-setup-ks.cfg nginx nginx_contain 公共 模板 视频 图片 文档 下载 音乐 桌面 [root@docker ~]# ll 总用量 253448 -rw-------. 1 root root 1954 4月 6 08:49 anaconda-ks.cfg -rw-r--r--. 1 root root 2002 4月 6 08:50 initial-setup-ks.cfg -rw-------. 1 root root 130618880 4月 6 14:04 nginx #镜像存出的文件 -rw-r--r--. 1 root root 128899072 4月 6 16:04 nginx_contain #容器导出文件 二者权限不同
终止的容器导出:
[root@docker ~]# docker export 4835176a7d8e > centos_contain [root@docker ~]# ls anaconda-ks.cfg initial-setup-ks.cfg nginx_contain 模板 图片 下载 桌面 centos_contain nginx 公共 视频 文档 音乐
导出的文件从本地拷贝到远程服务器,之后使用docker import命令导入,成为镜像
容器导入命令:docker import
命令格式:docker import [OPTIONS] file|URL|- [REPOSITORY[:TAG]]
实例演示:
[root@docker ~]# docker import centos_contain centos_new:54 sha256:f32b5354c81de72a71af50468d09803aa9e62e08741e3cd3e84c10c9a74e2204 [root@docker ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE centos_new 54 f32b5354c81d 10 seconds ago 0B nginx latest ed21b7a8aee9 6 days ago 127MB centos latest 470671670cac 2 months ago 237MB
或者使用cat 文件名 | docker import - 镜像名称:tag 执行命令也可以的
5、容器的删除
容器的删除:docker rm
命令格式:docker rm [OPTIONS] CONTAINER [CONTAINER...]
实例演示:
[root@docker ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 4835176a7d8e centos "/usr/bin/bash -c ls…" 31 minutes ago Exited (0) 31 minutes ago affectionate_keldysh a1a2e8468189 nginx:latest "/bin/bash" 58 minutes ago Up 19 minutes 80/tcp gallant_feynman
删除已终止的容器:
[root@docker ~]# docker rm 4835176a7d8e 4835176a7d8e [root@docker ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES a1a2e8468189 nginx:latest "/bin/bash" 59 minutes ago Up 20 minutes 80/tcp gallant_feynman
删除成功了!
删除还在运行中的容器:
[root@docker ~]# docker rm a1a2e8468189 Error response from daemon: You cannot remove a running container a1a2e8468189b146b0215971cf76947987d8fc3f42c58e77371e8d48afb030d1. Stop the container before attempting removal or force remove
发现Error了,不能这样删除运行状态中的容器,提示你的操作是尝试删除容器前停止容器的运行或者强制删除
推荐前者,后者只需要如下操作,但尽量不要随意使用哈!
[root@docker ~]# docker rm a1a2e8468189 -f a1a2e8468189 [root@docker ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
友情提示:docker默认的存储目录在/var/lib/docker目录下,docker的镜像、容器、日志等内容全部都存储在此,当然也可以单独使用大容量的分区来存储这些内容,并且一般选择建立在LVM逻辑卷,从而方便后续扩容操作。
总结
本文讲述的是docker基础命令(镜像和容器)的操作,通过实实在在的实际案例方便理解。对于docker的介绍与安装可以查阅笔者的前一篇文章。
感谢阅读!
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- 详解CopyOnWrite容器及其源码
- STL 之 vector 容器详解
- Flutter 基础Widgets之容器Container详解
- Kubernetes Pod 网络精髓:pause 容器详解
- 详解Web容器 - Jetty与Tomcat孰强孰弱
- Java容器(一)—CurrentHashMap详解(JDK1.8)
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Usability for the Web
Tom Brinck、Darren Gergle、Scott D. Wood / Morgan Kaufmann / 2001-10-15 / USD 65.95
Every stage in the design of a new web site is an opportunity to meet or miss deadlines and budgetary goals. Every stage is an opportunity to boost or undercut the site's usability. Thi......一起来看看 《Usability for the Web》 这本书的介绍吧!