Docker从入门到实战(四)
Docker基础
一:Docker基本操作
一般情况安装Docker之后系统会自动创建一个Docker的用户组,如果没有创建可以手动创建
groupadd docker
把当前非root用户加入group内,然后退出重新登陆就生效了(本例是新建了一个用户cheng)
gpasswd -a cheng docker
service docker restart
切换当前会话到新group或者重启X会话
newgrp – docker 或者 pkill X
注意这一步是必须的,否则因为groups命令获取到的是缓存的组信息,刚添加的组信息未能生效,所以docker images 执行时同样有错,然后在终端中运行docker后按回车键,可以看到输出的关于docker的使用基本说明。
Docker命令分为管理命令、镜像命令、容器命令、仓库命令、网路命令、数据卷命令、编排命令等,命令的分类在每次版本发布时都有调整,不过大同小异(下面以26个英文字母排序,帮助文档请-h或者—help查看)
- 依附容器的docker attach命令
中文意思是附加、贴上、系上等意思,所以dokcer attach主要的作用就是进入容器,这个容器和后面的docker exec类似但是完全不一样。
使用exit命令或者ctrl+C命令是停止容器,退出容器命令可使用ctrl+P,然后使用ctrl+Q命令,即可退出容器的虚拟终端,此时容器还在运行。
官方不推荐使用docker attach命令进入开启了交互模式的容器,docker attach的主要功能是查看信息,容器内部操作有更加方便的docker exec命令,将在稍后介绍。 - 构建镜像的docker build 命令
-c :控制cpu使用
-f :选择dockerfile名称
-m:设置构建内存上限
-q:不显示构建过程的一些信息
-t:为构建的镜像打上标签 - 提交容器的docker commit命令
-a:添加作者信息,方便维护
-c:修改dockerfile指令,目前支持的有以下指令
CMD |ENTRYPOINT |ENV |EXPOSE |LABEL |ONBUILD |USER |VOLUME |WORKDIR
-m:类似git commit -m这样,提交修改信息
-p: 暂停正在commit的操作 - 复制文件到宿主机的docker cp 命令
命令解释如下:
docker cp <containerID>:/file/path/within/container /host/path/target - 创建容器的docker create 命令
在docker容器状态中有一种是created,表示容器已经创建,但是没有启动,它和stop不同,stop通常都是手动或者外部操作容器停止的,而created有可能是手动创建但是没有成功启动,created状态的容器不占用内存和CPU资源。创建后的容器可以使用docker start containerID的方式启动容器。 - 查看容器变化的docker diff命令
docker diff 的语法如下:
docker diff containerID
docker diff命令主要用于显示当前运行容器和镜像的不同,docker diff的运行与容器的状态无关,只是显示文件差异 - 查看事件的docker events命令
docker events涵盖了几乎全部docker事件,通过-f指定参数,还可以过滤不必要的事件,得到更精简的事件信息
使用说明如下:
docker events -f container=<name or id>
docker events -f image=<tag or id >
docker events -f volume=<name or id>
docker events -f network=<name or id>
docker events -f daemon=<name or id>
只有reload一个值,用于监控记录docker守护进程的状态
其他还有
docker events -f label=<key> or label=<key>=<value>
docker events -f event=<event action>
docker events -f type=<container or image or volume or network r daemon> - 进入容器的docker exec命令
docker exec主要用于进入容器内部进行操作的一个重要命令,比attach功能更强大,通过docker exec可以像使用ssh登陆服务器一样操作容器,所以一般进入容器的命令都是使用docker exec而不是docker attach
常用参数有以下几个:
-d:分离模式,在后台运行的命令
-i:交互模式
-t:分配一个TTY
-u:指定用户和用户组,格式:<name|uid>[:<group|gid>]
使用exec命令进入容器内部就如同进入另一个机器一样,并且使用exit命令,不会像attach那样导致容器停止,所以非常适合容器内部操作 - 导出容器的docker export命令
docker export命令用于导出本地存储的容器和docker save类似(用于导出本地镜像),docker export导出的容器通常为tar包,方便传输到其他地方
使用方法有两种:
docker export -o containerName.tar containerName
docker export containerName > containerName.tar
使用docker export命令导出的容器并不会压缩容器大小 - 查看镜像历史的docker history命令
以ubuntu:14.04为例,查看镜像历史
docker history ubuntu:14.04 - 查看本地镜像的docker images命令
docker images命令用于查看本地存储的docker镜像
主要参数如下:
-a:显示所有镜像,包括中间镜像(悬挂镜像),默认不显示
-f:过滤显示,可选的值有
docker images -f dangling=[true|false]
docker images -f label=<key>[=<=value>]
docker images -f before=(<image-name>[:tag] |<image-id> |<image@digest>)
docker images -f since=(<image-name>[:tag] |<image-id> |<image@digest>)
-q:只显示ID - 导入容器的docker import命令
docker import命令和docker export命令相对,用于导入容器,导入后会变成镜像,用法和docker export命令相似
使用网络地址导入
docker import https;//example.com/container.tar
通过管道导入
cat exampleContainer.tgz |Docker import –message “New image imported from tarball”- exampleContainerlocal:newtag
还可以直接导入本地tar包
docker import /path/to/exapmpleContainer.tgz
甚至可以从目录导入
sudo tar -c . |docker import – exampleContainerdir - 查看docker信息得docker info命令
这个大概是这么多命令中最简单易懂的命令了,-D参数显示docker system的debug信息
docker info -D - 查看各项详细信息的docker inspect命令
inspect有检阅,检查的意思,该命令的用途是检查容器或者镜像详细信息的一个命令 - 杀死容器的docker kill命令
stop和kill的区别在于docker stop命令给容器中的进程发送SIGTERM信号,默认行为是会导致容器退出,当然,容器内程序可以捕获该信号并自行处理,例如可以选择忽略。而docker kill命令则是给容器的进程发送SIGKILL信号,该信号将会使容器必然退出。 - 导入镜像的docker load命令
docker load命令的作用是导入使用docker save导出的镜像,和export、import负责容器的导出导入类似,save、load负责镜像的导出导入。
-i:指定导出文件
例如: docker load -I ubuntu.tar
-q:可以不显示导入的一些信息,在一些脚本中可有效减少输出干扰
还可以通过<符号导入,下面以一个之前导出的镜像busybox为例
docker load < busybox.tar.gz - 登陆仓库的docker login命令
docker login命令时 一个登陆到Registry的命令,Registry是docker公司为了更方便镜像流通而设计的一种镜像仓库,像手机上的应用商店一样,用户可以在上面发布镜像和拉取镜像,官方的docker hub还提供更高级的企业服务
使用docker login命令直接登陆到docker hub
使用docker login localhost:8080的方式可以登录到第三方仓库
登陆信息均会保存在$HOME/.docker/config.json目录下
D-Bus Secret Service网址为https://github.com/docker/docker-credential-helpers/releases
Apple OS X keychain网址为https://github.com/docker/docker-credential-helpers/releases
Microsoft Windows Credential Manager网址为https://github.com/docker/docker-credential-helpers/releases
在config.json中修改
{
“credStore”:“osxkeychain”
} - 登出仓库的docker logout命令
docker logout命令是登出命令,使用该命令可以登出仓库,如果使用第三方证书存储,只需要删除证书文件以及config.json即可。 - 查看容器日志的docker logs命令
docker logs用于显示容器的日志,这一点和attach有点类似,不同的地方在于attach可以相对输出更自由,用户可以定制输出内容,而logs则是根据容器命令输出信息,是无交互的
主要参数如下
--details:显示更详细的日志
-f:持续输出日志
--since<string>:显示某字符串开始的日志
--tail<string>:显示某字符串之前的日志
-t:显示时间戳 - 管理网路的docker network命令
docker network命令说明
命令 说明
network connect 连接一个容器到指定网路
network create 创建一个网路
network disconnect 指定一个网路断开一个容器
network inspect 显示指定网络详细信息
network ls 显示全部docker网络
network rm 删除指定网络
例如:docker netowork ls - 管理节点的docker node命令
docker node命令
命令 说明
node demote 将集群中的指定manager节点降权
node inspect 显示节点的详细信息
node update 更新节点属性
node ps 显示正在运行的节点
node ls 显示集群的全部节点
node rm 从集群中删除指定节点 - 暂停容器的docker pause命令
docker pause命令会暂停容器内的所有进程,此时,通过docker stats可以观察到此时的资源使用情况是固定不变的,通过docker logs -f 也观察不到日志的进一步输出
命令格式如下:
docker pause <container> - 查看容器端口的docker port命令
docker port命令用来输出容器的端口信息,与docker ps 的显示不同,该命令只会显示”暴露”的端口,对于未指定的暴露端口不会显示 - 查看本地容器信息的docker ps命令
docker ps命令显示当前正在运行的容器
主要参数如下
-a:显示全部容器,包括各种状态的容器,只要存在就显示
-f:添加过滤条件
-n:显示最近创建的几个容器(包括所有状态的容器,-l显示最近创建的一个,遇到持续输出的信息还可以使用—no-trunc进行追加)
-q:只显示ID
-s:显示容器大小
例:删除所有已经停止的容器
docker rm $(docker ps -a -q)
删除所有容器(包括运行中的容器)
docker kill $(docker ps -q);docker rm $(docker ps -a -q)
杀死所有正在运行的容器
docker kill $(docker ps -a -q) - 拉取镜像的docker pull命令
docker pull命令为拉取镜像的命令,通过该命令不仅可以拉取docker hub的镜像,还可以通过指定仓库地址拉取私有仓库镜像
使用docker pull -a 会把所有标签都拉取到本地,使用—disable-content-trust=false会在拉取时校验镜像,保证传输安全,默认是关闭的 - 推送镜像的docker push命令
docker push命令的作用是把本地的镜像推送到镜像仓库,和docker pull一样,使用—disable-content-trust=false会在拉取时校验镜像,保证传输安全,默认是关闭的
使用此命令时,如果不指定tag会默认把该镜像的全部镜像都推送到仓库。例如本地存在ubuntu:14.04和ubuntu:16.04两个镜像,如果使用docker push ubuntu命令推送会把这两个镜像都推送到仓库 - 重命名容器的docker rename命令
该命令可以在不改变容器状态的情况下重命名容器,格式为:docker rename<旧容器名><新容器名>,该命令一次只能更改一个容器名称
该命令只能更改容器名称,镜像重命名会用docker tag命令 - 重启容器的docker restart命令
此命令用来重启容器(不是重启docker,重启docker可以使用systemctl restart docker命令或者service docker restart命令重启docker),使用docker restart <Contailner1> <Contailner2>命令可以重启多个容器
-t参数可以在重启设置等待容器停止的时间,如果容器在指定秒数之内没有停止,docker就会执行docker kill操作杀死容器,以便完成重启操作 - 删除容器的docker rm 命令
docker rm <Container Name / Container ID>命令可以删除已经停止的容器,可以删除一个或多个容器
-f:直接删除一个正在运行的容器
-l:删除容器与其他容器的关联,但是会保留容器
-v:删除容器的数据卷 - 删除镜像的docker rmi命令
此命令时删除镜像的命令,删除镜像时最好指定镜像的tag,如果不指定会默认删除镜像的latest标签。该命令同样可以在后面接上多个镜像名称,删除多个镜像
使用docker rmi命令删除镜像时,要确保没有容器使用该镜像也就是没有容器是使用该镜像启动的,才可以删除,否则会报错
-f:强制删除镜像,即便有容器正在使用该镜像,但是这样只会删除镜像标签,不会影响正在运行的容器,实际上只有容器还在运行,镜像就不会被真正删除,用户使用docker commit操作提交容器为镜像,可以恢复镜像。 - 运行容器的docker run命令
此命令参数超级多,可docker run –help查看 - 导出镜像的docker save命令
此命令是用来导出镜像的,后面可以连接多个镜像,默认输出是STDOUT,意味着需要指定一个目标文件,可以通过-o参数来指定
例:导出一个镜像
docker save -o ubuntu.tar ubuntu:14.04
导出多个容器
docker save -o nginx_php.tar nginx:1.9 php:7.0-fpm
除了-o参数,还可以使用>符号导出镜像
docker save ubuntu:14.04 > ubuntu.tar - 搜索镜像的docker search命令
-f:可以定制返回信息,可选参数有以下三个
is-automated=(true|false)
is-official=(true|false)
stars=<number>
例如:搜索ubuntu的官方镜像
搜索stars超过20并且是官方构建的ubuntu镜像
docker search -f stars=20 -f is-official=true ubuntu
搜索stars超过20并且是自动构建的ubuntu镜像
docker search -f stars=20 -f is-automated=true ubuntu
还有如—limit int这样的参数用来限制显示数量,默认是返回25个结果 - 管理docker service命令
docker service命令的作用是管理集群中的服务,需要与docker swarm配合使用。使用docker service时,主机必须是swarm的manager
命令 说明
service create 创建service
service inspect 取得service的详细信息
service ps 取得service的任务信息
service ls 取得service的列表信息
service rm 删除service
service scale 调整service的replicas
service update 更新service - 启动容器的docker start命令
此命令是启动一个或多个停止状态的容器,docker start命令后边可以是容器名称也可以是容器ID
-a:显示STDOUT/STDERR信息
-i:显示STDIN信息 - 查看容器的docker stats命令
此命令可以查看任何状态下的容器状态,该命令输出的内容是实时更新的,取消查看时使用Ctrl+c即可
不使用任何参数,会显示所有正在运行的容器状态,要显示全部(包括非运行状态)的容器状态,可以添加-a参数
只想查看某一时刻的状态,可以使用--no-stream参数,这样终端输出结束后会自动返回可交互shell界面
例:docker stats –-no-stream nginx - 停止容器的docker stop命令
此命令会停止一个或者多个正在运行的容器,docker stop命令会向容器发送正常的信号,而docker kill命令会强制终止容器进程,后者可能造成数据丢失 - 管理集群的docker swarm命令
docker swarm与前面的docker node,docker service命令共同组成集群管理编排的“三剑客”
操作 详细说明
init 初始化集群
join 以node(worker)或者manager的身份加入集群
join-token 管理join-token
update 更新集群
leave 退出集群 - 设置镜像标签的docker tag命令
docker tag命令可以给镜像重命名,在docker中镜像、容器、网路、数据卷等组件在运行时都会获取一个ID,这个ID是独一无二的,但是这个ID太长了,不容易记忆,所以有了tag的概念,给镜像打上标签
例如:给一个没有打标签的镜像打上标签
docker tag a70c7fad1812 myusername/images:default
还可以只修改镜像标签,不改动名称
docker tag myusername/images:default myusername/images:new
常用的情况还有修改名称以及标签
docker tagmyusername/images:default myusername/images-new:latest - 查看容器进程的docker top命令
此命令与linux下的top命令一样,使用docker top <Container ID/Name>可以查看指定容器内正在运行的进程 - 恢复暂停容器的docker unpause命令
这个与前面的docker pause命令是相对的 - 更新容器的docker update命令
对容器的是指额更新时可以使用docker update命令,使用时容器不需要停止或者重启。需要注意的是,这里说的容器设置是指容器启动时添加的参数,例如:使用docker run命令时设置cpu限制,可以使用docker update命令取消
在docker update命令的参数中,大部分与docker run命令的参数相同,唯一不同的是—restart参数,添加该参数是不会立刻修改容器配置,而是在未来容器重启时生效 - 查看docker版本的docker version命令
查看docker版本,使用-f参数可以格式化输出,例如:docker version -f '{{.Server}}'
常用的是docker version - 管理数据卷的docker volume命令
此命令是用来管理数据卷,数据卷是容器数据持久化的一个组件。
ls:可以查看本机的全部数据卷
rm:删除不需要的数据卷(数据卷与容器的生命周期完全独立,所以容器删除后数据卷并不会删除,时间久了数据卷就会越来越多)
inspect:查看数据卷的详细信息
create:创建一个数据卷
prune:删除所有未使用的卷 - 设置等待的docker wait命令
执行docker wait命令后,该命令会“hang”在当前终端,直到容器停止,此时会打印出容器的退出码。该命令一般会用在容器监控、异常捕捉方面。
二:启动第一个容器
第一件事就是打印Hello World,就像我们学Python一样,先开是学写Hello World,下面直接运行hello-world镜像,使用docker run命令是如果本地没有该镜像,那么会自动从Docker Hub中拉取镜像
docker run --rm hello-world
这里使用的—rm表示容器退出后自动删除该容器
运行后信息如下
Hello from Docker!
This message shows that your installation appears to be working correctly.
To generate this message, Docker took the following steps:
- The Docker client contacted the Docker daemon.
- The Docker daemon pulled the "hello-world" image from the Docker Hub.
(amd64) - The Docker daemon created a new container from that image which runs the
executable that produces the output you are currently reading. - The Docker daemon streamed that output to the Docker client, which sent it
to your terminal.
To try something more ambitious, you can run an Ubuntu container with:
$ docker run -it ubuntu bash
Share images, automate workflows, and more with a free Docker ID:
https://cloud.docker.com/
For more examples and ideas, visit:
https://docs.docker.com/engine/userguide/
这就是hello-world输出的内容,显示这些信息则说明docker运行正常了
三:构建第一个docker镜像
vi Dockerfile
FROM alpine
CMD "echo" "Hello World !”
保存文件,打开终端,使用docker build命令构建第一个镜像
docker build -t hello .
-t 参数表示给构建的镜像打上名为hello的标签,构建完成后直接运行
docker run –-rm hello
如此就完成了一个镜像的构建与运行
Docker从入门到实战(四)的更多相关文章
- Docker从入门到实战(三)
Docker从入门到实战(三) 一:安装Docker 1. linux系统脚本安装 Docker基于linux容器技术,面向服务器端,Docker只能安装运行在64位计算机上(社区有对32位的支持), ...
- Docker技术入门与实战 第二版-学习笔记-8-网络功能network-3-容器访问控制和自定义网桥
1)容器访问控制 容器的访问控制,主要通过 Linux 上的 iptables防火墙来进行管理和实现. iptables是 Linux 上默认的防火墙软件,在大部分发行版中都自带. 容器访问外部网络 ...
- Docker技术入门与实战第2版-高清文字版
Docker技术入门与实战第2版-高清文字版 下载地址https://pan.baidu.com/s/1bAoRQQlvBa-PXy5lgIlxUg 扫码下面二维码关注公众号回复100011 获取 ...
- Docker技术入门与实战
Docker技术入门与实战 下载地址https://pan.baidu.com/s/1bAoRQQlvBa-PXy5lgIlxUg 扫码下面二维码关注公众号回复100011 获取分享码 本书目录结 ...
- 赞一个 kindle电子书有最新的计算机图书可买了【Docker技术入门与实战】
最近对docker这个比较感兴趣,找一个比较完整的书籍看看,在z.cn上找到了电子书,jd dangdang看来要加油啊 Docker技术入门与实战 [Kindle电子书] ~ 杨保华 戴王剑 曹亚仑 ...
- docker-9 supervisord 参考docker从入门到实战
参考docker从入门到实战 使用 Supervisor 来管理进程 Docker 容器在启动的时候开启单个进程,比如,一个 ssh 或者 apache 的 daemon 服务.但我们经常需要在一个机 ...
- Docker技术入门与实战 第二版-学习笔记-10-Docker Machine 项目-2-driver
1>使用的driver 1〉generic 使用带有SSH的现有VM/主机创建机器. 如果你使用的是机器不直接支持的provider,或者希望导入现有主机以允许Docker Machine进行管 ...
- Docker从入门到实战(二)
Docker从入门到实战(二) 一:什么是docker Docker是一个开源的应用容器引擎,开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到主流的Linux.MacOS.Windo ...
- Docker从入门到实战(一)
Docker从入门到实战(一) 一:容器技术与Docker概念 1 什么是容器 容器技术并不是一个全新的概念,它又称为容器虚拟化.虚拟化技术目前主要有硬件虚拟化.半虚拟化.操作系统虚拟化等.1.1关于 ...
随机推荐
- BZOJ3064:CPU监控
浅谈区间最值操作和历史最值问题:https://www.cnblogs.com/AKMer/p/10225100.html 题目传送门:https://lydsy.com/JudgeOnline/pr ...
- 洛谷【P1090】合并果子&&洛谷【P1334】瑞瑞的木板
浅谈堆:https://www.cnblogs.com/AKMer/p/10284629.html 合并果子题目传送门:https://www.luogu.org/problemnew/show/P1 ...
- bzoj 3157 & bzoj 3516 国王奇遇记 —— 推式子
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3157 https://www.lydsy.com/JudgeOnline/problem.p ...
- HTML5对表单的约束验证
在HTML5中增加了许多新的功能,用于表单提交到服务器之前对表单进行数据的验证(抢了javascript的饭碗),有了这些功能,即便是javascript没有加载进来还是可以确保基本的验证.换句话说, ...
- Linux keepalived与lvs的深入分析
一)概述 在本篇文章里,我们会涉及两部份内容,一个是LVS,另一个则是keepalived. 即我们用LVS和keepalived实现了负载均衡及高可用的服务器. LVS有实现三种IP负载均衡技术 ...
- 自己写的一个多应用程序多目录的Makefile
DIR_INC = ./includeDIR_SRC = ./srcDIR_OBJ = ./objDIR_BIN = ./binINCLUDES = -I${DIR_INC} -I.CC => ...
- UML核心元素--边界
定义:边界是无形的,是可大可小的,同时参与者.用例和边界又有着相生相克的性质.与其说边界是UML元素,还不如说它是一种分析方法. 1.需求是动态的过程:系统边界是无形的,看不到的,不好理解,倒不如说需 ...
- JavaScript跳转和打开新窗口
跳转: window.location.href = "www.baidu.com" // 跳转到百度首页,不打开新的浏览器窗口 等价于html中的<a href=&quo ...
- .NET生成ICO图标
using System; using System.Collections.Generic; using System.Web; using System.Drawing; using System ...
- USACO-Your Ride Is Here(你的飞碟在这儿)-Section1.2<1>
[英文原题] Your Ride Is Here It is a well-known fact that behind every good comet is a UFO. These UFOs o ...