一、Docker镜像管理
1.搜索镜像
格式:
docker search [选项] <仓库名|仓库名:标签>
选项:
-f, --filter filter:
--format string:
--limit int:
--no-trunc:显示完整的镜像描述;
例如:
docker search --no-trunc java
2.获取镜像
格式:
docker pull [选项] [Docker Registry 地址[:端口号]/]仓库名[:标签]
选项:
-a:拉取所有tag镜像;
--disable-content-trust :忽略镜像的校验,默认开启;
例如:
docker pull java:8
3.镜像信息
3.1.查看镜像列表
docker images
docker image ls
docker image ls --digests #查看镜像摘要;
docker image ls java
docker image ls java:8
docker image ls -f since= java:8 #列出java:8镜像之前的所有镜像;
docker image ls -f before=java:8 #列出java:8镜像之后的所有镜像;
docker image ls -f label=Label=0.1 #根据标签内容过滤出镜像;
3.2.查看镜像体积
docker system df
3.3.查看虚悬镜像
docker image ls -f dangling=true
解释:什么属于虚悬镜像?仓库名、标签均为<none>的镜像;
3.4.查看中间层镜像
docker image ls -a
3.5.特定格式显示
docker image ls -q
docker image ls --format "{{.ID}}: {{.Repository}}"
docker image ls --format "table {{.ID}}\t{{.Repository}}\t{{.Tag}}"
4.删除镜像
格式:
docker image rm [选项] <镜像1> [<镜像2> ...]
选项:
-f :表示强行删除镜像;
docker image rm [-f] < 镜像名|镜像ID|仓库名:标签|镜像摘要 >
docker image rm [-f] < 镜像名|镜像ID|仓库名:标签|镜像摘要 >
注意:Untagged 和 Deleted;
因为一个镜像可能对应不同的标签,根据仓库名:标签删除镜像,显示“Untagged”实际是上删除标签;
5.镜像导出/导入
5.1.压缩包导入镜像(与export一对)
格式:
docker import [选项] <文件>|<URL>|- [<仓库名>[:<标签>]]
例如:
docker import \ download.openvz.org/template/precreated/ubuntu-14.04-x86_64-minimal.tar.gz \ openvz/ubuntu:14.04
5.2.保存镜像(迁移备份)
docker save <repository>:<tag> -o <repository>.tar 导入时才有repository:tag
docker save -o xxx.tar 镜像ID #生成在当前目录下
docker save -i xx.tar
docker save > xxx.tar
5.3.导入镜像
docker load --input xxx.tar
docker load < xx.tar
docker load -i xx.tar
6.构建镜像
6.1.commit(将容器构建成镜像)
格式:
docker commit [选项] <容器ID或容器名> [<仓库名>[:<标签>]]
选项:
-a, --author string:指定修改作者;
-c, --change list:使用Dockerfile指令来创建镜像;
-m, --message string:定义修改内容;
-p, --pause:提交时将容器暂停;
例如:
docker commit \ --author "Zhang San <zangs@163..com>" \ --message "修改Nginx配置" \ NginxServer \ nginx:v3 解释:
NginxServer:指定使用哪个容器,也可以指定容器ID;
nginx:v3:指定构建镜像的仓库名:标签;
6.2.Dockerfile
格式:
docker build [选项] <上下文路径/URL/->
--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 :尝试去更新镜像的新版本;
-q :安静模式,成功后只输出镜像ID;
--rm :设置镜像成功后删除中间容器;
--shm-size :设置/dev/shm的大小,默认值是64M;
--ulimit :Ulimit配置。
例如:
docker build Dokcerfile .
docker build - < Dockerfile #从标准输入读取Dockerfile构建;
cat Dockerfile | docker build -
docker build context.tar.gz #tar压缩包构建
docker build - < context.tar.gz #从标准输入中读取tar压缩包构建
docker build twang2218/gitlab-ce-zh.git#:8.14 #基于Git Repo构建
注意:
如果标准输入传入的是文件,将被视为Dockerfile,并开始构建,但是由于这种方式是直接从标准输入中读取Dockerfile文件内容,它没有上下文,因此不可以像其他方法那样将本地方文件COPY进镜像之类的事情;
如果标准输入传入的是压缩文件,文件格式是gzip、bzip2、xz,将会自动解压,视里面内容为上下文,并且开始构建;
查看镜像创建历史
docker history [选项]
选项:
-H, --human:可读的格式打印镜像大小和日期;
--no-trunc:显示完整的提交记录;
-q, --quiet:仅列出提交ID;
登录/退出docker镜像仓库
格式:
docker login [仓库地址:端口] [选项]
选项:
-u:指定用户;
-p:指定密码;
例如:
docker login docker.kry.cn -u admin
注意:如果不指定仓库地址,默认登陆Hub仓库;
标记镜像
格式:
docker tag <仓库名:标签|镜像ID> <新仓库名:标签>
例如:
docker tag f32a97de94e1 docker.kry.cn/registry:v1.2
docker tag registry:latest docker.kry.cn/registry:v1.3
上传镜像到镜像仓库
格式:
docker push [选项] <仓库名:标签>
--disable-content-trust :忽略镜像的校验,默认开启;
例如:
docker push registry:v1.3
二、Docker容器管理
1.容器操作命令
docker container [选项] [参数]
选项:
attach:将标准输入输出及错误附加入容器,当退出时容器也跟随退出;
commit:从容器构建一个新镜像;
cp:容器与本地之间相互复制文件或文件夹;
create:创建一个新容器;
diff:检查容器文件系统的改变;
exec:进入正在运行的容器中;
export:导出容器的文件系统作为tar文件;
inspect:将tar文件导入成镜像;
kill:杀死一个或多个正在运行的容器;
logs:获取容器日志;
ls:列出容器;
pause:暂停一个或多个运行的容器的所有进程;
port:列出容器映射端口;
prune:删除所有已停止的容器;
rename:修改容器名称;
restart:重启一个或多个容器;
rm:删除一个或多个容器;
run:运行容器;
start:启动一个或多个容器;
stats:查看容器状态;
stop:停止一个或多个容器;
top:查看容器内部运行进程;
unpause:恢复一个或多个容器中暂停的所有进程;
update:更新一个或多个容器配置;
wait:等待阻塞,直到一个或多个容器停止,输出退出代码;
2.创建容器
格式:
docker create [选项] <镜像名:标签|镜像ID>
格式:
--name:指定容器名称;
--network:指定容器连接网络;
-h,--hostname:指定主机名称,例如:-h web 或 --hostname=web;
--dns:指定容器DNS,例如:--dns=61.139.2.69
--dns-search:设置容器搜索域;
--restart string:指定重启策略,默认为no,on-failure表示容器状态非0重启,always表示只要退出就重启;
3.启动容器
docker container start 容器ID #启动一个没有运行的容器;
docker run -itd centos /bin/bash #创建容器并运行,并进入容器中;
-a stdin: 指定标准输入输出内容类型,可选 STDIN/STDOUT/STDERR 三项;
-d: 后台运行容器;
-i: 以交互模式运行容器;
-t: 分配一个伪输入终端;
-v:将本地目录加载到容器,实例 -v /data:/data/www
--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=[]: 开放一个端口或一组端口;
--restart string:指定重启策略,默认为no,on-failure表示容器状态非0重启,always表示只要退出就重启;
4.查看容器
格式:
docker ps [选项]
docker container ls [选项]
选项:
-a, --all:查看所用容器(停止与运行);
-f, --filter filter:
--format string:使用Go模板打印容器信息;
-n, --last int:显示最后创建的容器,默认-1;
-l, --latest:显示最新创建容器;
--no-trunc:
-q, --quiet:只显示容器ID;
-s, --size:显示容器总文件大小
例如:
docker ps -a
docker container ls -a
5.停止容器
docker container stop 容器ID
例如:
docker container stop $(docker ps -aq)
a:列出所有容器;
q:返回容器ID;
6.进入容器
格式:
docker exec [选项] <容器ID|容器名> /bin/bash
-d, --detach:在后台运行;
--detach-keys string:覆盖容器的运行参数;
-e, --env list:设置环境变量;
-i, --interactive:即使没有附加也保持STDIN 打开;
--privileged:赋予命令扩展权限;
-t, --tty:分配一个伪终端;
-u, --user string:设置用户名,格式: <name|uid>[:<group|gid>];
-w, --workdir string:指定容器内的目录;
例如:
docker exec -it 31e61e /bin/bash
7.复制
格式:
从容器复制到本地:
docker cp [选项] 容器ID|容器名:源文件路径 目标路径
从本地复制到容器:
docker cp [选项] 本地源文件路径 容器ID|容器名:目标路径
选项:
-a, --archive:复制所有属性(uid/gid);
-L, --follow-link:保持源目标中的链接;
例如:
docker cp /data/user.txt ad586a31e61e:/userlist.txt
docker cp ss_java.plmpacv2n775:/web.jar /data/jar/web.jar
8.导出导入(export/import )
export
格式:
docker export [选项] 容器ID > tar文件名
选项:
-o, --output string:指定写入文件;
例如:
docker export ad586a31e61e > registry:v0.1.tar
docker export -o /data/bak/registry:v0.1.date +%Y%m%d
.tar ad586a31e61e
import
格式:
cat tar文件名 | docker import - 仓库名:标签
例如:
cat registry:v0.1.tar | docker import - egistry:v0.1
docker import exampleimage.tgz example/imagerepo
9.删除容器
格式:
docker container rm [选项] <容器ID|容器名>
选项:
-f :通过SIGKILL信号强制删除一个运行中的容器;
-l :移除容器间的网络连接,而非容器本身;
-v :-删除与容器关联的卷;
例如:
docker container rm -f ad586a31
docker container rm suspicious_curie
docker container prune #清理所有终止状态的容器;
10.杀掉容器
格式:
docker kill [选项] <容器ID|容器名>
选项:
-s, --signal string:向容器发送一个信号;
例如:
docker kill vsp7hp632exeh3d2e
11.暂停恢复容器
docker pause <容器ID|容器名>
docker unpause <容器ID|容器名>
12.修改容器名称
格式:
docker rename 容器名 新容器名
例如:
docker rename ss_registry.1.pjm registry
13.查看容器日志
格式:
docker container logs [选项] <容器ID|容器名>
选项:
--details:
-f, --follow:跟踪日志输出;
--since string:显示某个开始时间的所有日志;
--tail string:仅列出最新N条容器日志;
-t, --timestamps:显示时间戳;
--until string:显示某个日期之前的日志内容;
例如:
docker container logs -f 1b819fb9e71c #追踪日志内容;
docker container logs -t --tail 2 1b819fb9e71c #显示最新2条日志内容;
docker container logs -t --until 2019-08-02 1b819fb9e71c #显示8月2日之前所有日志内容;
14.查看容器详细信息
格式:
docker inspect [选项] <容器ID|容器名>
选项:
-s, --size:显示总的文件大小;
--type string:为指定类型返回JSON;
例如:
docker inspect 1b819fb9e71c
15.查看容器内部进程
例如:
docker top 1b819fb9e71c
16.阻塞运行直到容器停止
例如:docker wait 1b819fb9e71c
17.查看容器端口映射
格式:
docker port <容器ID|容器名> <PRIVATE_PORT[/PROTO]>
例如:
docker port 1b819fb9e71c
18.检查容器文件结构更改
格式:
docker diff <容器ID>
例如:
docker diff 1b819fb9e71c
三、Docker数据管理
容器中数据管理分为两种方式:
数据卷(Volumes)
挂载主机目录 (Bind mounts)
1.创建数据卷
格式:
docker volume create [选项] <数据卷名称>
选项:
-d, --driver string:
--label list:
-o, --opt map:
例如:
docker volume create web-vol
2.查看数据卷
格式:
docker volume ls [选项]
选项:
-f, --filter filter:
--format string:
-q, --quiet:只显示数据卷名称(volume names);
例如:
docker volume ls
docker inspect web-vol #查看数据卷详细信息;
3.挂载数据卷
格式:
-v <source:target>
--help <source:target>
--mount [type],<source|src>,<destination|dst|target>,[readonly],[volume-opt]
参数:
readonly:挂载为只读;
例如:
docker run -d --name web --mount source=web-vol,target=/web nginx:v1.2
docker run -d --name web --mount source=/data/web,target=/web nginx:v1.2
docker run -d --name web - v web-vol:/web nginx:v1.2
4.删除数据卷
格式:
docker volume rm <volumes names>
例如:
docker volume rm web-vol
docker volume prune #清理无主的数据卷;
四、Docker网络
提示:更多网络配置查看网络文档;
1.网络相关设置
-b BRIDGE或--bridge=BRIDGE:指定容器挂载的网桥;
--bip=CIDR:定制 docker0 的掩码
-H SOCKET...或--host=SOCKET...:Docker服务端接收命令的通道;
--icc=true|false:是否支持容器之间进行通信
--ip-forward=true|false:请看下文容器之间的通信
--iptables=true|false:是否允许 Docker 添加 iptables 规则
--mtu=BYTES:容器网络中的 MTU
运行时配置:
--dns=IP_ADDRESS:使用指定的DNS服务器;
--dns-search=DOMAIN:指定DNS搜索域;
-h HOSTNAME或--hostname=HOSTNAME:配置容器主机名;
--link=CONTAINER_NAME:ALIAS:添加到另一个容器的连接;
--net=bridge|none|container:NAME_or_ID|host:配置容器的桥接模式;
-p SPEC或--publish=SPEC:映射容器端口到宿主主机;
-P or --publish-all=true|false:映射容器所有端口到宿主主机;
2.端口映射
-p:指定映射端口,格式:-p [IP:]hostPort:containerPort;
-P:随机映射一个端口;
例如:
docker run -d -P registry:latest
docker run -d -p 5000:5000 registry:latest
docker run -d -p 192.168.88.100::5000 registry:latest
3.查看端口映射
docker port bdf12f
4.容器互联
创建网络
格式:
docker network create [选项] <NetworkName>
选项:
-d, --driver:指定网络类型;
例如:
docker network create -d bridge app
创建容器指定app网络
docker run -d --name nginx --network app nginx:v1.2
docker run -d --name tomcat --network app tomcat:v0.2
5.DNS配置
vim /etc/docker/daemon.json
{
"dns" : [
"61.139.2.69",
"8.8.8.8"
]