一步一步走,写小白都能看懂的文章,将持续更新中,敬请期待!
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 :/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=
docker events -f image=
docker events -f volume=
docker events -f network=
docker events -f daemon=
只有reload一个值,用于监控记录docker守护进程的状态
其他还有
docker events -f label= or label==
docker events -f event=
docker events -f type=
进入容器的docker exec命令
docker exec主要用于进入容器内部进行操作的一个重要命令,比attach功能更强大,通过docker exec可以像使用ssh登陆服务器一样操作容器,所以一般进入容器的命令都是使用docker exec而不是docker attach
常用参数有以下几个:
-d:分离模式,在后台运行的命令
-i:交互模式
-t:分配一个TTY
-u:指定用户和用户组,格式:[:]
使用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=[=]
docker images -f before=([:tag] | |)
docker images -f since=([:tag] | |)
-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:可以不显示导入的一些信息,在一些脚本中可有效减少输出干扰
还可以通过符号导出镜像
docker save ubuntu:14.04 > ubuntu.tar
搜索镜像的docker search命令
-f:可以定制返回信息,可选参数有以下三个
is-automated=(true|false)
is-official=(true|false)
stars=
例如:搜索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 可以查看指定容器内正在运行的进程
恢复暂停容器的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
如此就完成了一个镜像的构建与运行
运维网声明
1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网 享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com