您的位置:首页 > 运维架构 > Docker

docker【4】docker基本命令

2015-12-15 11:31 218 查看
这篇博客主要罗列了一些docker的基本命令和一些进阶命令,以及一些命令的详解:

基本命令


1、先添加当前用户到docker组(非root用户) 用户lin

不添加用户的话,每次执行docker 都需要使用sudo,所以进行添加一下,方便操作;
sudo gpasswd -a lin docker

[/code]


2、查看docker信息 docker version | docker info

lin@ubuntu:~$ docker info

[/code]


3、安装镜像 pull

ubuntu15.10为例,镜像可以从docker hub 寻找,根据自己的需要进行镜像系统和版本的安装

lin@ubuntu:~$ docker pull u
buntu:15.10

[/code]


4、查看安装镜像 docker images

lin@ubuntu:~$ docker images

[/code]


5、运行容器 docker run

所有的容器运行命令主要为 docker run。

下面的命令输出一个 hello docker ,然后终止容器。

lin@ubuntu:~$ docker run ubuntu:15.10 /bin/echo hello docker

hello docker

[/code]

这跟在本地执行 /bin/echo hello docker 几乎感觉不出来任何区别

下面的命令则启动一个bash终端,允许用户进行交互

sudo docker run -t -i --name myubuntu ubuntu:15.10 /bin/bash

[/code]

-t 分配一个伪终端(pseudo-tty)并绑定到容器的标准输入上,-i 则让容器的标准输入保持打开,--name 给容器命名为myubuntu。

退出的话使用exit 或者 ctrl+d,一旦退出,容器便停止;

后台运行的,可以重新进入容器
docker exec -it [容器ID] /bin/bash

[/code]

也可以使用

lin@ubuntu:~$ docker attach containId

[/code]

bin/bash 是用命令模式进入

使用-p提供容器接口 例如

$ docker run -d -P training/webapp python app.py

[/code]

-d 命令不多解释(下面会有-d的说明),是告诉docker我们需要后台运行,-p是告诉docker我们会影射一个内部的端口到外部 不加代表默认

也可以自己定义
$ docker run -d -p 80:5000 training/webapp python app.py

[/code]

5000是docker内部接口,80是影射到外部的接口,为什么要这么写,是因为,若是两个容器的python被启动,都是5000端口,那么外部就不知道该怎么访问,所以这里影射需要影射一下外网访问的端口。这样你就可以在本地使用 localhost:80来访问应用程序

查看端口影射情况

docker port containID 5000

[/code]


6、后台(background)运行 -d

更多的时候,需要让docker在后台运行而不是直接把执行命令的结果输出在当前宿主机下。此时可以通过添加-d 来实现;

如果不是用-d参数

docker run  ubuntu:15.10 /bin/sh -c "while true ;do echo hello docker ; sleep 2; done"

[/code]

容器就会把输入的结果(STDOUT)打印到宿主机上

若是是用-d

myjob=$(docker run -d ubuntu:15.10 /bin/sh -c "while true ;do echo hello docker ; sleep 2; done")

[/code]

此时容器会在后台运行并不会把输出的结果(STDOUT)打印到宿主机上面(输出结果可以用docker logs 查看)。

这里给这个job起了一个名字叫myjob,hello docker 将会两秒运行一次,因为若是不自己命名,就会默认自动生成一个名字,往后的日志将会很难查找。

注: 容器是否会长久运行,是和docker run指定的命令有关,和 -d 参数无关。

更多的参数 可以使用docker run --help 查看


7、查看日志 docker logs[container ID or name]

lin@ubuntu:~$ docker logs $myjob

hello docker

[/code]


8、进入容器 attach

在使用 -d 参数时,容器启动后会进入后台。
某些时候需要进入容器进行操作,有很多种方法,包括使用docker attach 命令或 nsenter 工具等。

lin@ubuntu:~$ docker attach myubuntu1
root@0fec10a4f28a:/#

[/code]
docker exec -it myubuntu1 /bin/bash

[/code]


9、查看正在运行的容器 docker ps

lin@ubuntu:~$ docker ps

[/code]


10、查看所有容器 docker ps -a

lin@ubuntu:~$ docker ps -a

[/code]


使用如下命令查看程序最近一次的运行情况
$ docker ps -l

[/code]


11、停止/启动容器 docker stop/start[continer ID or name]

lin@ubuntu:~$ docker stop $myjob

e34198448f878c1f1cff3d34f2707f137962fc622919c35a9059d11232629f7e

[/code]

lin@ubuntu:~$ docker start $myjob

e34198448f878c1f1cff3d34f2707f137962fc622919c35a9059d11232629f7e

[/code]

使用restart命令,会先停止该容器再重新启动


12、导入导出容器 export/import

export 这个命令用于将容器的系统文件打成jar包导出到本地,在本地就能看到从容器中打的while.tar;

docker export 0bbea06cac56 >while.tar

lin@ubuntu:~$ ls

Desktop    Downloads         Music     Public     Videos

Documents  examples.desktop  Pictures  Templates  while.tar

[/code]

import 可以导入远程文件、本地文件和目录成为镜像

使用远程的文件命令式
$ docker import http://example.com/example.tar[/code] [/code]

本地文件或者目录的导入需要使用 -参数 使用docker import --help查看参数
sudo cat while.tar  |docker import - ubuntu:15.10v1

[/code]

*注:用户既可以使用 docker load 来导入镜像存储文件到本地镜像库,也可以使用 docker import 来导入一个容器快照到本地镜像库。这两者的区别在于容器快照文件将丢弃所有的历史记录和元数据信息(即仅保存容器当时的快照状态),而镜像存储文件将保存完整记录,体积也要大。此外,从容器快照文件导入时可以重新指定标签等元数据信息。


13、从tar文件中载入镜像或者仓库到stdin。 load

$ docker load -i  example.tar

[/code]


14、保存镜像为tar文件并发送到stdout save

$ docker save image

[/code]


15、将容器的状态提交为镜像 comint

保存后用docker images 查看会多出这个镜像

lin@ubuntu:~$ docker commit $myjob myjob1

764c656f5fc53db19194226cbb84b28bc0c53c9199367b19641fbf87aaa00090

[/code]


16、删除容器 rm

lin@ubuntu:~$ docker rm $myjob

e34198448f878c1f1cff3d34f2707f137962fc622919c35a9059d11232629f7e

lin@ubuntu:~$ docker rm $(docker ps -a)

[/code]

删除所有的未运行的容器
lin@ubuntu:~$ docker rm $(docker ps -a -q)

[/code]

*注意:这个命令其实会试图删除所有的包括还在运行中的容器,不过就像上面提过的
docker
rm
默认并不会删除运行中的容器。


17、删除镜像 rmi

lin@ubuntu:~$ docker rmi imageId

[/code]

*注意:在删除镜像之前要先用 docker rm 删掉依赖于这个镜像的所有容器。

docker images 可以列出本地所有的镜像,其中很可能会包含有很多中间状态的未打过标签的镜像,大量占据着磁盘空间。清理所有未打过标签的本地镜像

删除所有未打过标签的本地镜像
$ sudo docker rmi $(docker images -q -f "dangling=true")

[/code]


18、给镜像打标签

$
docker tag imageId/name ouruser/sinatra:devel


[/code]

以上这些基本命令差不多在普通的操作中已经够用;

进阶命令:


1、构建镜像 build命令

$ docker build [option] path|url

[/code]

还有一些docker提供的额外选项可以使用 docker build --help命令查看


2、diff 对比命令

docker还提供了一个非常强大的命令 diff,他可以列出容器内发生变化的文件和内容目录。这些变化包括添加,删除,修改。
$ docker diff container

[/code]


3、cp命令

从容器内复制文件到指定的路径上,cp
$ docker cp container:path hostpath

[/code]

把容器里面的test拷贝到本地
lin@ubuntu:~$ docker cp
0bbea06cac56:/test /test

[/code]


4、用login命令登录到docker registry服务器

$ docker login [option] [server]

[/code]

登录自己主机的registry使用
$ docker login localhost:8080

[/code]


5、docker inpect 命令可以收集有关容器和镜像的底层信息。

这些信息包括

容器实例的IP地址

端口绑定列表

特定端口映射的搜索

收集配置的详细信息

lin@ubuntu:~$ docker inspect
0bbea06cac56
[
{
"Id": "0bbea06cac562a7a7b5d8bee30ccfa1c2eba8b7153c2106d0ed610ea3e03cf2d",
"Created": "2015-12-15T06:26:05.624302049Z",
"Path": "/bin/sh",
"Args": [
"-c",
"while true ;do echo hello docker ; sleep 2; done"
],
"State": {
"Status": "exited",
"Running": false,
"Paused": false,
"Restarting": false,
"OOMKilled": false
......
[/code]

显示容器的详细信息;


6、停止容器主进程 kill

$ docker kill [option] container

[/code]


7、阻塞对指定容器的其他调用方法,直到容器停止后退出阻塞。 wait

$ docker wait container

[/code]


8、在registry中寻找自己需要的镜像

lin@ubuntu:~$ docker search (image name)

[/code]


9、查看镜像历史版本

lin@ubuntu:~$ docker history (image name)

[/code]


10、把镜像推送到registry path 不能是根目录必须是user/image 例如 lin/myjob1

lin@ubuntu:~$ docker push (path)

[/code]

在这个之前你需要注册,然后新建你的仓库地址,才可以push;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: