docker【4】docker基本命令
2015-12-15 11:31
218 查看
这篇博客主要罗列了一些docker的基本命令和一些进阶命令,以及一些命令的详解:
不添加用户的话,每次执行docker 都需要使用sudo,所以进行添加一下,方便操作;
[/code]
[/code]
ubuntu15.10为例,镜像可以从docker hub 寻找,根据自己的需要进行镜像系统和版本的安装
[/code]
[/code]
所有的容器运行命令主要为 docker run。
下面的命令输出一个 hello docker ,然后终止容器。
[/code]
这跟在本地执行 /bin/echo hello docker 几乎感觉不出来任何区别
下面的命令则启动一个bash终端,允许用户进行交互
[/code]
-t 分配一个伪终端(pseudo-tty)并绑定到容器的标准输入上,-i 则让容器的标准输入保持打开,--name 给容器命名为myubuntu。
退出的话使用exit 或者 ctrl+d,一旦退出,容器便停止;
后台运行的,可以重新进入容器
[/code]
也可以使用
[/code]
bin/bash 是用命令模式进入
使用-p提供容器接口 例如
[/code]
-d 命令不多解释(下面会有-d的说明),是告诉docker我们需要后台运行,-p是告诉docker我们会影射一个内部的端口到外部 不加代表默认
也可以自己定义
[/code]
5000是docker内部接口,80是影射到外部的接口,为什么要这么写,是因为,若是两个容器的python被启动,都是5000端口,那么外部就不知道该怎么访问,所以这里影射需要影射一下外网访问的端口。这样你就可以在本地使用 localhost:80来访问应用程序
查看端口影射情况
[/code]
更多的时候,需要让docker在后台运行而不是直接把执行命令的结果输出在当前宿主机下。此时可以通过添加-d 来实现;
如果不是用-d参数
[/code]
容器就会把输入的结果(STDOUT)打印到宿主机上
若是是用-d
[/code]
此时容器会在后台运行并不会把输出的结果(STDOUT)打印到宿主机上面(输出结果可以用docker logs 查看)。
这里给这个job起了一个名字叫myjob,hello docker 将会两秒运行一次,因为若是不自己命名,就会默认自动生成一个名字,往后的日志将会很难查找。
注: 容器是否会长久运行,是和docker run指定的命令有关,和 -d 参数无关。
更多的参数 可以使用docker run --help 查看
[/code]
在使用 -d 参数时,容器启动后会进入后台。
某些时候需要进入容器进行操作,有很多种方法,包括使用docker attach 命令或 nsenter 工具等。
[/code]
[/code]
[/code]
[/code]
使用如下命令查看程序最近一次的运行情况
[/code]
[/code]
[/code]
使用restart命令,会先停止该容器再重新启动
export 这个命令用于将容器的系统文件打成jar包导出到本地,在本地就能看到从容器中打的while.tar;
[/code]
import 可以导入远程文件、本地文件和目录成为镜像
使用远程的文件命令式
基本命令
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]保存后用docker images 查看会多出这个镜像
15、将容器的状态提交为镜像 comintlin@ubuntu:~$ docker commit $myjob myjob1764c656f5fc53db19194226cbb84b28bc0c53c9199367b19641fbf87aaa00090
[/code]
16、删除容器 rmlin@ubuntu:~$ docker rm $myjobe34198448f878c1f1cff3d34f2707f137962fc622919c35a9059d11232629f7elin@ubuntu:~$ docker rm $(docker ps -a)
[/code]
删除所有的未运行的容器lin@ubuntu:~$ docker rm $(docker ps -a -q)
[/code]
*注意:这个命令其实会试图删除所有的包括还在运行中的容器,不过就像上面提过的docker rm默认并不会删除运行中的容器。
17、删除镜像 rmilin@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命令查看docker还提供了一个非常强大的命令 diff,他可以列出容器内发生变化的文件和内容目录。这些变化包括添加,删除,修改。
2、diff 对比命令$ docker diff container
[/code]从容器内复制文件到指定的路径上,cp
3、cp命令$ docker cp container:path hostpath
[/code]
把容器里面的test拷贝到本地lin@ubuntu:~$ docker cp0bbea06cac56:/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 inspect0bbea06cac56[ { "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/myjob1lin@ubuntu:~$ docker push (path)
[/code]
在这个之前你需要注册,然后新建你的仓库地址,才可以push;
相关文章推荐
- centos6 安装 docker
- 介绍docker
- docker【3】docker镜像容器安装
- 使用 docker+tmux 加强容器调度
- Docker 修改默认存储位置
- docker 镜像与容器存储目录结构精讲
- Asp.net docker
- nginx反向代理docker registry报”blob upload unknown"解决办法
- docker 报错整理
- docker命令-run
- 自定义docker网桥
- docker 常用命令解析
- [Docker] How to setup private registry
- docker basic guide
- 介绍Docker
- 登陆到docker容器中的方法之一(需要root权限)
- 基于centos 7 docker+openvswitch 容器多节点互联配置
- docker安装
- Qperf测试Docker网络性能
- docker 中国站 www.dockerpool.com 报价图片下载