docker信息
docker info
显示 Docker 系统信息,包括镜像和容器数。。
docker info [OPTIONS]
docker version
显示 Docker 版本信息。
镜像仓库
命令 | 作用 |
---|---|
docker login/docker logout | 登陆到一个Docker镜像仓库 |
docker pull | 从镜像仓库中拉取或者更新指定镜像 |
docker push | 将本地的镜像上传到镜像仓库,要先登陆到镜像仓库 |
docker search | 从Docker Hub查找镜像 |
docker login
登陆到一个Docker镜像仓库,如果未指定镜像仓库地址,默认为官方仓库 Docker Hub
docker logout
登出一个Docker镜像仓库,如果未指定镜像仓库地址,默认为官方仓库 Docker Hub
docker login [OPTIONS] [SERVER]
docker logout [OPTIONS] [SERVER]
sudo docker login -u xxx -p xxx
sudo docker logout
OPTIONS说明:
- -u : 登陆的用户名
- -p : 登陆的密码
docker pull
从镜像仓库中拉取或者更新指定镜像
docker pull [OPTIONS] NAME[:TAG|@DIGEST]
sudo docker pull python
OPTIONS说明:
- -a : 拉取所有 tagged 镜像
- –disable-content-trust : 忽略镜像的校验,默认开启
指定版本
docker pull mongo:3.2.4
dockre pull redis:3.2
docker push
将本地的镜像上传到镜像仓库,要先登陆到镜像仓库
docker push [OPTIONS] NAME[:TAG]
sudo docker push mine/ubuntu:v1
sudo docker push 475378094/li:v1
OPTIONS说明:
- –disable-content-trust : 忽略镜像的校验,默认开启
docker search
从Docker Hub查找镜像
docker search [OPTIONS] TERM
sudo docker search -s 10 python
OPTIONS说明:
- –automated : 只列出 automated build类型的镜像;
- –no-trunc : 显示完整的镜像描述;
- -s : 列出收藏数不小于指定值的镜像。
本地镜像管理
命令 | 作用 |
---|---|
images | 列出本地镜像。 |
rmi | 删除本地一个或多少镜像。 |
tag | 标记本地镜像,将其归入某一仓库。 |
build | 使用 Dockerfile 创建镜像。 |
history | 查看指定镜像的创建历史。 |
save | 将指定镜像保存成 tar 归档文件。 |
load | 从归档文件tar中创建镜像。 |
docker images
列出本地镜像。
docker images [OPTIONS] [REPOSITORY[:TAG]]
sudo docker iamges -a
OPTIONS说明:
-a : 列出本地所有的镜像(含中间映像层,默认情况下,过滤掉中间映像层);
–digests : 显示镜像的摘要信息
-f : 显示满足条件的镜像
–format : 指定返回值的模板文件
–no-trunc : 显示完整的镜像信息
-q : 只显示镜像ID。
docker rmi
删除本地一个或多少镜像。
docker rmi [OPTIONS] IMAGE [IMAGE...]
sudo docker rmi -f runoob/ubuntu:v4
OPTIONS说明:
- -f : 强制删除;
- –no-prune : 不移除该镜像的过程镜像,默认移除;
docker tag
标记本地镜像,将其归入某一仓库。
docker tag [OPTIONS] IMAGE[:TAG] [REGISTRYHOST/][USERNAME/]NAME[:TAG]
sudo docker tag learn/ping mine/ubuntu:v1
docker tag <existing-image> <hub-user>/<repo-name>[:<tag>]
其中existing-image代表本地待上传的镜像名加tag,后面<hub-user>/<repo-name>[:<tag>]则是为上传更改的标签名,tag不指定则为latest。
sudo docker tag mynginx:v1 475378094/li:v1 #将本地的镜像打上标签,打上仓库同名的镜像名,才能push(上传)成功
docker build
命令用于使用 Dockerfile 创建镜像。
docker build [OPTIONS] PATH | URL | -
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 .
使用URL github.com/creack/docker-firefox 的 Dockerfile 创建镜像。
docker build github.com/creack/docker-firefox
也可以通过 -f Dockerfile 文件的位置:
$ docker build -f /path/to/a/Dockerfile .
在 Docker 守护进程执行 Dockerfile 中的指令前,首先会对 Dockerfile 进行语法检查,有语法错误时会返回:
$ docker build -t test/myapp .
Sending build context to Docker daemon 2.048 kB
Error response from daemon: Unknown instruction: RUNCMD
docker history
查看指定镜像的创建历史。
docker history [OPTIONS] IMAGE
sudo docker history mine/ubuntu:v1
OPTIONS说明:
- -H : 以可读的格式打印镜像大小和日期,默认为true;
- –no-trunc : 显示完整的提交记录;
- -q : 仅列出提交记录ID。
docker save
将指定镜像保存成 tar 归档文件。
docker save [OPTIONS] IMAGE [IMAGE...]
sudo docker save -o mydocker.tar ubuntu:v1
OPTIONS说明:
- -o : 输出到的文件。
docker load
从归档文件tar中创建镜像。
docker load [OPTIONS]
sudo docker load -i mydocker.tar
OPTIONS说明:
- -i : 从文件 输入
容器rootfs命令
命令 | 作用 |
---|---|
commit | 从容器创建一个新的镜像。(更新镜像) |
cp | 用于容器与主机之间的数据拷贝 |
diff | 检查容器里文件结构的更改。 |
docker commit
从容器创建一个新的镜像。
docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
sudo docker commit -a "secondbrother" -m "my apache" a404c6c174a2 mymysql:v1 #将容器a404c6c174a2 保存为新的镜像,并添加提交人信息和说明信息
OPTIONS说明:
- -a : 提交的镜像作者;
- -c : 使用Dockerfile指令来创建镜像;
- -m : 提交时的说明文字;
- -p : 在commit时,将容器暂停。
docker cp
用于容器与主机之间的数据拷贝。
docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH|-
docker cp [OPTIONS] SRC_PATH|- CONTAINER:DEST_PATH
sudo docker cp /www/web 96f7f14e99ab:/www/
#将主机/www/web目录拷贝到容器96f7f14e99ab的/www目录下。
sudo docker cp 96f7f14e99ab:/www/tmp/
#将容器96f7f14e99ab的/www目录拷贝到主机的/tmp目录中。
OPTIONS说明:
- -L : 保持源目标中的链接
docker diff
检查容器里文件结构的更改。
docker diff [OPTIONS] CONTAINER
sudo docker diff mymysql #查看容器mymysql的文件结构更改。
docker network
docker network ls
这个命令用于列出所有当前主机上或Swarm集群上的网络:
lj@instance-5r0pfuh1:~$ docker network ls
NETWORK ID NAME DRIVER SCOPE
a6b8826943bf bridge bridge local
e454c7bc9f7e host host local
71f625c08e3c none null local
在默认情况下会看到三个网络,它们是Docker Deamon进程创建的。它们实际上分别对应了Docker过去的三种『网络模式』:
bridge:容器使用独立网络Namespace,并连接到docker0虚拟网卡(默认模式) none:容器没有任何网卡,适合不需要与外部通过网络通信的容器 host:容器与主机共享网络Namespace,拥有与主机相同的网络设备
docker network create / rm
这两个命令用于新建或删除一个容器网络,创建时可以用『–driver』参数使用的网络插件,例如:
lj@instance-5r0pfuh1:~$ docker network create br0
6420f7391a9e689173e22a4824f61b8aaa40be637043c863ec726a712c10364d
lj@instance-5r0pfuh1:~$ docker network ls
NETWORK ID NAME DRIVER SCOPE
6420f7391a9e br0 bridge local
a6b8826943bf bridge bridge local
e454c7bc9f7e host host local
71f625c08e3c none null local
lj@instance-5r0pfuh1:~$ docker network rm br0
br0
lj@instance-5r0pfuh1:~$ docker network ls
NETWORK ID NAME DRIVER SCOPE
a6b8826943bf bridge bridge local
e454c7bc9f7e host host local
71f625c08e3c none null local
docker network connect / disconnect
这两个命令用于动态的将容器添加进一个已有网络,或将容器从网络中移除。为了比较清楚的说明这一点,我们来看一个例子。
参照前面的libnetwork容器网络模型示意图中的情形创建两个网络:
$ docker network create –driver=bridge frontend
$ docker network create –driver=bridge backend
然后运行三个容器,让第一个容器接入frontend网络,第二个容器同时接入两个网络,三个容器只接入backend网络。首先用『–net』参数可以很容易创建出第一和第三个容器:
$ docker run -td –name ins01 –net frontendindex.alauda.cn/library/busybox
$ docker run -td –name ins03 –net backendindex.alauda.cn/library/busybox
如何创建一个同时加入两个网络的容器呢?由于创建容器时的『–net』参数只能指定一个网络名称,因此需要在创建过后再用docker network connect命令添加另一个网络:
$ docker run -td –name ins02 –net frontendindex.alauda.cn/library/busybox
$ docker network connect backend ins0212
现在通过ping命令测试一下这几个容器之间的连通性:
容器操作
命令 | 作用 |
---|---|
ps | 列出容器 |
inspect | 获取容器/镜像的元数据。 |
top | 查看容器中运行的进程信息,支持 ps 命令参数。 |
attach | 连接到正在运行中的容器。 |
events | 从服务器获取实时事件 |
logs | 获取容器的日志 |
wait | 阻塞运行直到容器停止,然后打印出它的退出代码。 |
port | 列出指定的容器的端口映射,或者查找将PRIVATE_PORT NAT到面向公众的端口。 |
export | 将容器作为一个tar归档文件导出。 |
import | 从压缩包中导入内容以创建文件系统映像。 |
docker ps
列出容器
docker ps [OPTIONS]
sudo docker ps -a
OPTIONS说明:
- -a : 显示所有的容器,包括未运行的。
- -f : 根据条件过滤显示的内容。
- –format : 指定返回值的模板文件。
- -l : 显示最近创建的容器。
- -n : 列出最近创建的n个容器。
- –no-trunc : 不截断输出。
- -q : 静默模式,只显示容器编号。
- -s : 显示总的文件大小。
docker inspect
获取容器/镜像的元数据。
docker inspect [OPTIONS] NAME|ID [NAME|ID...]
sudo docker inspect learn/ping 获取镜像learn/ping的元信息。
OPTIONS说明:
- -f : 指定返回值的模板文件。
- -s : 显示总的文件大小。
- –type : 为指定类型返回JSON。
docker top
查看容器中运行的进程信息,支持 ps 命令参数。
docker top [OPTIONS] CONTAINER [ps OPTIONS]
sudo docker top mymysql
容器运行时不一定有/bin/bash终端来交互执行top命令,而且容器还不一定有top命令,可以使用docker top来实现查看container中正在运行的进程。
docker attach
连接到正在运行中的容器。
docker attach [OPTIONS] CONTAINER
sudo docker attach --sig-proxy=false mymysql
要attach上去的容器必须正在运行,可以同时连接上同一个container来共享屏幕(与screen命令的attach类似)。
官方文档中说attach后可以通过CTRL-C来detach,但实际上经过我的测试,如果container当前在运行bash,CTRL-C自然是当前行的输入,没有退出;如果container当前正在前台运行进程,如输出nginx的access.log日志,CTRL-C不仅会导致退出容器,而且还stop了。这不是我们想要的,detach的意思按理应该是脱离容器终端,但容器依然运行。好在attach是可以带上–sig-proxy=false来确保CTRL-D或CTRL-C不会关闭容器。
待验证
(以守护形式运行容器
我们执行完需要的操作退出容器时,不要使用exit退出,可以利用Ctrl+P Ctrl+Q代替,以守护式形式推出容器。)
docker events
从服务器获取实时事件
docker events [OPTIONS]
sudo docker events --since="1467302400" #显示docker 2016年7月1日后的所有事件。
OPTIONS说明:
- -f : 根据条件过滤事件;
- –since : 从指定的时间戳后显示所有事件;
- –until : 流水时间显示到指定的时间为止;
docker logs
获取容器的日志
docker logs [OPTIONS] CONTAINER
sudo docker logs --tail=10 gracious_kepler #查看容器gracious_kepler最新10条日志
OPTIONS说明:
- -f : 跟踪日志输出
- –since : 显示某个开始时间的所有日志
- -t : 显示时间戳
- –tail : 仅列出最新N条容器日志
docker wait
阻塞运行直到容器停止,然后打印出它的退出代码。
docker wait [OPTIONS] CONTAINER [CONTAINER...]
docker wait CONTAINER
docker port
列出指定的容器的端口映射,或者查找将PRIVATE_PORT NAT到面向公众的端口。
docker port [OPTIONS] CONTAINER [PRIVATE_PORT[/PROTO]]
sudo docker port gracious_kepler #查看容器gracious_kepler的端口映射情况。
docker export
将容器作为一个tar归档文件导出。
docker export [OPTIONS] CONTAINER
sudo docker export -o mydocker.tar 8b4f
OPTIONS说明:
- -o : 将输入内容写到文件。
docker import
docker import将container导入后会成为一个image,而不是恢复为一个container。
docker import [OPTIONS] file|URL|- [REPOSITORY[:TAG]]
sudo docker import mydocker.tar mydocker:latest
容器生命周期管理
命令 | 作用 |
---|---|
run | 创建一个新的容器并运行一个命令 |
start/stop/restart | 启动一个或多个已经被停止的容器/关闭/重启 |
kill | 杀掉一个运行中的容器。 |
rm | 删除一个或多少容器 |
pause/unpause | 暂停/恢复 容器中所有的进程 |
create | 创建一个新的容器但不启动它 |
exec | 在运行的容器中执行命令 |
docker run
创建一个新的容器并运行一个命令
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
OPTIONS说明:
- -a stdin: 指定标准输入输出内容类型,可选 STDIN/STDOUT/STDERR 三项;
- -d: 后台运行容器,并返回容器ID;
- -i: 以交互模式运行容器,通常与 -t 同时使用;
- -p: 端口映射,格式为:主机(宿主)端口:容器端口
- -t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用;
- –name=”nginx-lb”: 为容器指定一个名称;
- –dns 8.8.8.8: 指定容器使用的DNS服务器,默认和宿主一致;
- –dns-search example.com: 指定容器DNS搜索域名,默认和宿主一致;
- -h “mars”: 指定容器的hostname;
- -e username=”ritchie”: 设置环境变量;
- –env-file=[]: 从指定文件读入环境变量;
- –cpuset=”0-2″ or –cpuset=”0,1,2″: 绑定容器到指定CPU运行;
- -m : 设置容器使用内存最大值;
- –net=”bridge”: 指定容器的网络连接类型,支持 bridge/host/none/container: 四种类型;
- –link=[]: 添加链接到另一个容器;
- –expose=[]: 开放一个端口或一组端口;
-P,–publish-all=true | false,大写的P表示为容器暴露的所有端口进行映射;
-p,–publish=[],小写的p表示为容器指定的端口进行映射,有四种形式:
containerPort:只指定容器的端口,宿主机端口随机映射; hostPort:containerPort:同时指定容器与宿主机端口一一映射; ip::containerPort:指定ip和容器的端口; ip:hostPort:containerPort:指定ip、宿主机端口以及容器端口。
docker run -p 80 -i -t ubuntu /bin/bash
docker run -p 8080:80 -i -t ubuntu /bin/bash
docker run -p 0.0.0.0::80 -i -t ubuntu /bin/bash
docker run -p 0.0.0.0:8080:80 -i -t ubuntu /bin/bash
实例
使用docker镜像nginx:latest以后台模式启动一个容器,并将容器命名为mynginx。
docker run --name mynginx -d nginx:latest
使用镜像nginx:latest以后台模式启动一个容器,并将容器的80端口映射到主机随机端口。
docker run -P -d nginx:latest
使用镜像 nginx:latest,以后台模式启动一个容器,将容器的 80 端口映射到主机的 80 端口,主机的目录 /data 映射到容器的 /data。
docker run -p 80:80 -v /data:/data -d nginx:latest
绑定容器的 8080 端口,并将其映射到本地主机 127.0.0.1 的 80 端口上。
$ docker run -p 127.0.0.1:80:8080/tcp ubuntu bash
使用镜像nginx:latest以交互模式启动一个容器,在容器内执行/bin/bash命令。
runoob@runoob:~$ docker run -it nginx:latest /bin/bash
root@b8573233d675:/#
docker start
启动一个或多个已经被停止的容器
docker stop
停止一个运行中的容器
docker restart
重启容器
docker start [OPTIONS] CONTAINER [CONTAINER...]
docker stop [OPTIONS] CONTAINER [CONTAINER...]
docker restart [OPTIONS] CONTAINER [CONTAINER...]
sudo docker start mymysql
sudo docker stop mymysql
sudo docker restart mymysql
docker kill
杀掉一个运行中的容器。
docker kill [OPTIONS] CONTAINER [CONTAINER...]
sudo docker kill gracious_kepler #杀掉运行中的容器gracious_kepler
OPTIONS说明:
- -s : 向容器发送一个信号
docker rm
删除一个或多少容器
docker rm [OPTIONS] CONTAINER [CONTAINER...]
OPTIONS说明:
- -f : 通过SIGKILL信号强制删除一个运行中的容器
- -l : 移除容器间的网络连接,而非容器本身
- -v :-v 删除与容器关联的卷
docker pause
暂停容器中所有的进程。
docker unpause
恢复容器中所有的进程。
docker pause [OPTIONS] CONTAINER [CONTAINER...]
docker unpause [OPTIONS] CONTAINER [CONTAINER...]
sudo docker pause gracious_kepler #暂停容器gracious_kepler提供服务
sudo docker unpause gracious_kepler #恢复容器gracious_kepler提供服务
docker create
创建一个新的容器但不启动它
用法同 docker run
docker create [OPTIONS] IMAGE [COMMAND] [ARG...]
sudo docker --name mylinux learn/ping
语法同 docker run
docker exec
在运行的容器中执行命令
docker exec [OPTIONS] CONTAINER COMMAND [ARG...]
sudo docker exec -it gracious_kepler /bin/bash
#在容器mynginx中开启一个交互模式的终端
docker exec -it mynginx /bin/sh /root/runoob.sh
#在容器mynginx中以交互模式执行容器内/root/runoob.sh脚本
OPTIONS说明:
- -d : 分离模式: 在后台运行
- -i : 即使没有附加也保持STDIN 打开
- -t : 分配一个伪终端
docker api
本文记录docker怎么打开api remote接口设置,docker的版本更新太快了,不同的版本之间,设置可能不同,本文是针对docker13.1
查看配置文件位于哪里
systemctl show --property=FragmentPath docker
编辑配置文件内容,接收所有ip请求
vim /lib/systemd/system/docker.service
ExecStart=/usr/bin/dockerd -H unix:///var/run/docker.sock -H tcp://0.0.0.0:5678
重新加载配置文件,重启docker daemon
sudo systemctl daemon-reload
sudo systemctl restart docker
测试
[root@node1 docker]# docker -H localhost:5678 version
Client:
Version: 1.13.1
API version: 1.26
Go version: go1.7.5
Git commit: 092cba3
Built: Wed Feb 8 06:38:28 2017
OS/Arch: linux/amd64
Server:
Version: 1.13.1
API version: 1.26 (minimum version 1.12)
Go version: go1.7.5
Git commit: 092cba3
Built: Wed Feb 8 06:38:28 2017
OS/Arch: linux/amd64
[root@node1 docker]# curl http://182.61.34.87:4567/images/json
StatusCode : 200
StatusDescription : OK
Content : [{"Containers":-1,"Created":1557967722,"Id":"sha256:d3e3588af5178bae2c8ffdbfa227c7d0305518d3821a71615c14ffb8643d7eb3","Labels":null,"ParentId":"","RepoDigests":["redis@sha256:e549a30b3c31e6305b973e0d9...
RawContent : HTTP/1.1 200 OK
Api-Version: 1.39
Docker-Experimental: false
Ostype: linux
Transfer-Encoding: chunked
Content-Type: application/json
Date: Fri, 05 Jul 2019 17:45:35 GMT
Server: Docker/18.09.6 (...
Forms : {}
Headers : {[Api-Version, 1.39], [Docker-Experimental, false], [Ostype, linux], [Transfer-Encoding, chunked]...}
Images : {}
InputFields : {}
Links : {}
ParsedHtml : System.__ComObject
RawContentLength : 2303
接下来我们格式化一下
curl http://182.61.34.87:4567/info | python -m json.tool
是不是出现了版本信息? 说明成功了,python -m json.tool这个干嘛的自行百度吧,格式化工具
docker api 常用接口
列举docker容器
curl http://localhost:2375/containers/json
列举docker镜像
curl http://localhost:2375/images/json
查询镜像详细信息
curl http://localhost:2375/images/pid/json
启动容器
curl -X POST -H "Content-Type: application/json" http://localhost:2375/containers/pid/start
停止容器
curl -X POST -H "Content-Type: application/json" http://localhost:2375/containers/pid/stop
POST http://host:port/images/create # 创建镜像
POST http://host:port/containers/create?name=${containerName} # 创建容器
POST http://host:port/containers/{containerId}/start # 启动容器
POST http://host:port/containers/{containerId}/stop # 停止容器
DELETE http://host:port/containers/{containerId} # 删除容器
查看原文:从入门到精通:Docker常用命令全解析
关注公众号 "字节航海家" 及时获取最新内容