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