Docker命令

0x01 容器生命周期管理

docker run

创建一个新的容器并运行一个命令

docker run [OPTIONS] IMAGE [COMMAND] [ARG...]

常用参数:

-d 在后台运行容器

-i 以交互模式运行容器

-t 为容器分配一个伪终端

一般上述三个参数都是共同使用的

-P (大写)为容器随机分配一个端口,一般不用

-p (小写)为容器分配端口映射格式为 主机端口:容器端口 如需要多个端口映射可以多次使用如:

$ docker run -ti ubuntu:latest -p 8001:80 -p 23:22

--name 为容器设置一个名字

例如:

使用docker镜像nginx:latest以后台模式启动一个容器,并将容器命名为mynginx。

$ docker run--name mynginx -d nginx:latest

docker start/stop/restart

启动、停止和重启

$ docker start/stop/restart 容器名

docker kill

杀死一个容器

$ docker kill 容器名

kill和stop都可以停止容器的运行但是区别在于kill将直接停止程序的运行而stop支持优雅退出,即先发送一个信号让程序做一些退出前的准备工作然后在大约10s后发送结束信号。

docker rm

删除一个或多个容器

$ docker rm -参数 容器名

参数:

-f 强制删除

-l 不删除容器而是删除容器间的网络连接

-v 删除与容器关联的卷

例:

强制删除容器db01 db02
$ docker rm -f db01 db02
docker pause/unpause
pause 暂停容器中的所有的进程

unpause 恢复容器中所有的进程

例:

$ docker pause httpd
$ docker unpause httpd
docker create

创建一个容器但不启用它

语法同 run

使用docker镜像nginx:latest创建一个容器,并将容器命名为myrunoob

runoob@runoob:~$ docker create --name myrunoob nginx:latest
09b93464c2f75b7b69f83d56a9cfc23ceb50a48a9db7652ee4c27e3e2cb1961f
docker exec

在运行的容器中执行命令

参数:

-d: 分离模式,在后台运行

-i:即使没有附加也保持STDIN打开

-t:分配一个伪终端

这么用就行:

$ docker exec -it 容器名 /bin/bash

0x02 容器操作

docker ps

列出容器

参数:-a :显示所有的容器,包括未运行的。

-f :根据条件过滤显示的内容。

--format :指定返回值的模板文件。

-l :显示最近创建的容器。

-n :列出最近创建的n个容器。

--no-trunc :不截断输出。

-q :静默模式,只显示容器编号。

-s :显示总的文件大小。

docker inspect

获取容器或镜像的元数据

$ docker inspect -参数 -name|id

参数:

-f 指定返回的模板文件

-s 显示总的文件大小

--type 为指定类型返回json

例:

获取镜像mysql:5.6的元信息

runoob@runoob:~$ docker inspect mysql:5.6
[
{
"Id": "sha256:2c0964ec182ae9a045f866bbc2553087f6e42bfc16074a74fb820af235f070ec",
"RepoTags": [
"mysql:5.6"
],
"RepoDigests": [],
"Parent": "",
"Comment": "",
"Created": "2016-05-24T04:01:41.168371815Z",
"Container": "e0924bc460ff97787f34610115e9363e6363b30b8efa406e28eb495ab199ca54",
"ContainerConfig": {
"Hostname": "b0cf605c7757",
"Domainname": "",
"User": "",
"AttachStdin": false,
"AttachStdout": false,
"AttachStderr": false,
"ExposedPorts": {
"3306/tcp": {}
},

docker top
查看容器中运行的进程信息
$ docker top 容器名
docker attach
常用 ,连接到正在运行中的容器和exec功能一样
docker events
从服务器获取实时事件
docker logs
获取容器的日志
docker wait
阻塞容器运行至停止,然后打印出它的退出代码。
docker export
将文件系统作为一个tar归档文件导出到STDOUT
和import搭配使用
docker port
查看指定容器的端口映射情况
0x03 容器rootfs命令
docker commit

从容器中创建镜像

$ docker -参数 用来创建镜像的容器名 要创建的镜像名:版本号

参数:

-a :提交的镜像作者;

-c :使用Dockerfile指令来创建镜像;

-m :提交时的说明文字;

-p :在commit时,将容器暂停。

例:

将容器a404c6c174a2 保存为新的镜像,并添加提交人信息和说明信息。

runoob@runoob:~$ docker commit -a "runoob.com" -m "my apache" a404c6c174a2 mymysql:v1
sha256:37af1236adef1544e8886be23010b66577647a40bc02c0885a6600b33ee28057
runoob@runoob:~$ docker images mymysql:v1
REPOSITORY TAG IMAGE ID CREATED SIZE
mymysql v1 37af1236adef 15 seconds ago 329 MB
docker cp

用于容器与主机之间数据的拷贝

$ docker cp /主机地址 容器id:/容器地址

$ docker cp 容器id:/容器地址 /主机地址

例:

将主机/www/runoob目录拷贝到容器96f7f14e99ab的/www目录下。

docker cp /www/runoob 96f7f14e99ab:/www/
将主机/www/runoob目录拷贝到容器96f7f14e99ab中,目录重命名为www。
docker cp /www/runoob 96f7f14e99ab:/www
将容器96f7f14e99ab的/www目录拷贝到主机的/tmp目录中。
docker cp 96f7f14e99ab:/www /tmp/
docker diff
检查容器里文件结构的更改
0x04 镜像仓库
docker login/logout
登陆或登出到一个Docker镜像仓库,如果未指定镜像仓库地址,默认为官方仓库 Docker Hub
docker pull
从镜像仓库中拉去或者更新指定镜像
$ docker pull -参数 镜像名:版本
参数:
-a 拉取所有tagged镜像
--disable-content-trust :忽略镜像的校验,默认开启
例:
从Docker HUb下载java最新版镜像
$ docker pull java
docker push
将本地的镜像上传到镜像仓库,但要先登陆到镜像仓库
$ docker push 镜像名:版本
唯一参数:
--disable-content-trust :**忽略镜像的校验,默认开启
docker search
从Docker Hub 上查找镜像
0x05 本地镜像管理
docker images
列出本地镜像
docker rmi
删除本地一个或多个镜像
$ docker rmi -参数 镜像名
参数:
-f 强制删除
--no-prune :不移除该镜像的过程镜像,默认移除;
docker tag
标记本地镜像
例:
$ docker tag ubuntu:15.10 runoob/ubuntu:v3
docker build
用于使用Dockerfile创建镜像
$ docekr build -options dockfile路径

参数很多:

OPTIONS说明:--build-arg=[] :设置镜像创建时的变量;

--cpu-shares :设置 cpu 使用权重;

--cpu-period :限制 CPU CFS周期;

--cpu-quota :限制 CPU CFS配额;

--cpuset-cpus :指定使用的CPU id;

--cpuset-mems :指定使用的内存 id;

--disable-content-trust :忽略校验,默认开启;

-f :指定要使用的Dockerfile路径;

--force-rm :设置镜像过程中删除中间容器;

--isolation :使用容器隔离技术;

--label=[] :设置镜像使用的元数据;

-m :设置内存最大值;

--memory-swap :设置Swap的最大值为内存+swap,"-1"表示不限swap;

--no-cache :创建镜像的过程不使用缓存;

--pull :尝试去更新镜像的新版本;

--quiet, -q :安静模式,成功后只输出镜像 ID;

--rm :设置镜像成功后删除中间容器;

--shm-size :设置/dev/shm的大小,默认值是64M;

--ulimit :Ulimit配置。

--tag, -t: 镜像的名字及标签,通常 name:tag 或者 name 格式;可以在一次构建中为一个镜像设置多个标签。

--network: 默认 default。在构建期间设置RUN指令的网络模式

例:

使用当前目录的 Dockerfile 创建镜像,标签为 runoob/ubuntu:v1。

$ docker build -t runoob/ubuntu:v1
$ docker build /creack/docker-firefox
也可以通过 -f Dockerfile 文件的位置:
$ docker build -f /path/to/a/Dockerfile
docker history
查看指定镜像的创建历史
docker save
将指定镜像保存成 tar 归档文件。
$ docker save -option 镜像名称
只有一个参数:
-o 输出到的文件
和load搭配使用
docker load
导入使用 docker save 命令导出的镜像
参数:
-i :指定导入的文件。
-q :精简输出信息。
docker load -i ubuntu.tar
docker load < ubuntu.tar
都可以
docekr import

从归档文件中创建镜像 (export命令所导出的归档文件)

实例:

从镜像归档文件my_ubuntu_v3.tar创建镜像,命名为runoob/ubuntu:v4

runoob@runoob:~$ docker import my_ubuntu_v3.tar runoob/ubuntu:v4
sha256:63ce4a6d6bc3fabb95dbd6c561404a309b7bdfc4e21c1d59fe9fe4299cbfea39
runoob@runoob:~$ docker images runoob/ubuntu:v4
REPOSITORY TAG IMAGE ID CREATED SIZE
runoob/ubuntu v4 63ce4a6d6bc3 20 seconds ago 142.1 MB
0x06 INFO|VERSION
docker info
显示 Docker 系统信息,包括镜像和容器数
docker version

显示 Docker 版本信息。

将docker镜像上传至阿里云仓库登录阿里云Docker Registry

$ sudo docker login --username=13105125789

用于登录的用户名为阿里云账号全名,密码为开通服务时设置的密码。

您可以在访问凭证页面修改凭证密码。从Registry中拉取镜像

$ sudo docker pull /oriole/oriole:[镜像版本号]将镜像推送到Registry
$ sudo docker login --username=13105125789 $ sudo docker tag [ImageId] /oriole/oriole:[镜像版本号]$ sudo docker push /oriole/oriole:[镜像版本号]

请根据实际镜像信息替换示例中的[ImageId]和[镜像版本号]参数。选择合适的镜像仓库地址

从ECS推送镜像时,可以选择使用镜像仓库内网地址。推送速度将得到提升并且将不会损耗您的公网流量。示例

使用"docker tag"命令重命名镜像,并将它通过专有网络地址推送至Registry。

$ sudo docker imagesREPOSITORY TAG IMAGE ID CREATED VIRTUAL /acs/agent 0.7-dfb6816 37bb9c63c8b2 7 days ago 37.89 MB$ sudo docker tag 37bb9c63c8b2 /acs/agent:0.7-dfb6816
使用 "docker push" 命令将该镜像推送至远程。
$ sudo docker push /acs/agent:0.7-dfb6816