Docker从入门到实战(四)
一步一步走,写小白都能看懂的文章,将持续更新中,敬请期待!Docker从入门到实战(四)
Docker基础
一:Docker基本操作
一般情况安装Docker之后系统会自动创建一个Docker的用户组,如果没有创建可以手动创建
groupadd docker
把当前非root用户加入group内,然后退出重新登陆就生效了(本例是新建了一个用户cheng)
gpasswd -a cheng docker
service docker restart
https://s1.运维网.com/images/blog/201802/27/875cd71a6cbb2e5e7584a26ebf651bd8.png
切换当前会话到新group或者重启X会话
newgrp – docker 或者 pkill X
注意这一步是必须的,否则因为groups命令获取到的是缓存的组信息,刚添加的组信息未能生效,所以docker images 执行时同样有错,然后在终端中运行docker后按回车键,可以看到输出的关于docker的使用基本说明。
https://s1.运维网.com/images/blog/201802/27/ae818390c560b84637e02a176f0f51b0.png
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=
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
如此就完成了一个镜像的构建与运行
https://s1.运维网.com/images/blog/201802/27/e92df0b3bbd5dd698865a9f3a9a769e5.png
感谢楼主的分享!
页:
[1]