最近业余时间一直在研究使用Docker,这里把经常使用的一些命令总结下:
一、第一部分
查看本地所有的镜像
docker images
查看运行的容器实例
docker ps [OPTIONS]
OPTIONS说明:
-a :显示所有的容器,包括未运行的。
-f :根据条件过滤显示的内容。
--format :指定返回值的模板文件。
-l :显示最近创建的容器。
-n :列出最近创建的n个容器。
--no-trunc :不截断输出。
-q :静默模式,只显示容器编号。
-s :显示总的文件大小。
查看容器内进程
docker top 容器ID或容器名
显示 Docker 系统信息,包括镜像和容器数
docker info
显示Docker版本信息
docker version
二、第二部分
启动容器
docker run -i -t -v /mnt/software/:/mnt/software/ 25c5298b1a36 /bin/bash
docker run <相关参数> <镜像ID> <初始命令>
其中,相关参数包括:
-i:表示以“交互模式”运行容器
-t:表示容器启动后会进入其命令行
-v:表示需要将本地哪个目录挂载到容器中,格式:-v <宿主机目录>:<容器目录>
假设我们的所有安装程序都放在了宿主机的/root/software/目录下,现在需要将其挂载到容器的/mnt/software/目录下。
需要说明的是,不一定要使用“镜像 ID”,也可以使用“仓库名:标签名”,例如:docker.cn/docker/centos:centos6。
初始命令表示一旦容器启动,需要运行的命令,此时使用“/bin/bash”,表示什么也不做,只需进入命令行即可。
启动Java Web容器
docker run -d -p 58080:8080 --name javaweb 25c5298b1a36 /root/run.sh
-d:表示以“守护模式”执行/root/run.sh脚本,此时 Tomcat 控制台不会出现在输出终端上。
-p:表示宿主机与容器的端口映射,此时将容器内部的 8080 端口映射为宿主机的 58080 端口,这样就向外界暴露了 58080 端口,可通过 Docker 网桥来访问容器内部的 8080 端口了。
--name:表示容器名称,用一个有意义的名称命名即可。
查看容器日志
docker logs -f -t --since="2018-02-08" --tail=100 1e26896f7d14
docker logs [OPTIONS] CONTAINER
Options:
--details 显示更多的信息
-f, --follow 跟踪实时日志
--since string 显示自某个timestamp之后的日志,或相对时间,如42m(即42分钟)
--tail string 从日志末尾显示多少行日志, 默认是all
-t, --timestamps 显示时间戳
--until string 显示自某个timestamp之前的日志,或相对时间,如42m(即42分钟)
启动一个已经停止的容器实例
docker start 容器ID或容器名
停止一个正在运行的容器
docker stop 容器ID或容器名
参数 -t:关闭容器的限时,如果超时未能关闭则用kill强制关闭,默认值10s,这个时间用于容器的自己保存状态
docker stop -t=60 容器ID或容器名
docker kill 容器ID或容器名 :直接关闭容器
退出容器
CTRL+P CTRL+Q退出容器交互式bash,保持容器运行
exit退出容器,容器停止运行
重启一个容器
docker restart 容器ID或容器名 :不管容器是否启动,直接重启容器
进入一个已经在运行的容器 / 在运行中容器内启动新进程
docker exec [-d] [-i] [-t] 容器ID或容器名 [command][arg...]
docker exec -it 775c7c9ee1e1 /bin/bash
附加到运行中的容器
docker attach 容器ID或容器名
删除容器container
docker rm 容器id
删除镜像images
docker rmi <image id>
想要删除untagged images,也就是那些id为<None>的image的话可以用
docker rmi $(docker images | grep "^<none>" | awk "{print $3}")
要删除全部image的话
docker rmi $(docker images -q)
获取容器/镜像的元数据
docker inspect [OPTIONS] NAME|ID [NAME|ID...]
OPTIONS说明:
-f :指定返回值的模板文件。
-s :显示总的文件大小。
--type :为指定类型返回JSON。
从Docker Hub查找镜像
docker search [OPTIONS] TERM
OPTIONS说明:
--automated :只列出 automated build类型的镜像;
--no-trunc :显示完整的镜像描述;
-s :列出收藏数不小于指定值的镜像。
从镜像仓库中拉取或者更新指定镜像
docker pull [OPTIONS] NAME[:TAG|@DIGEST]
OPTIONS说明:
-a :拉取所有 tagged 镜像
--disable-content-trust :忽略镜像的校验,默认开启
docker pull tomcat:8
docker pull centos
将本地的镜像上传到镜像仓库,要先登陆到镜像仓库
docker push [OPTIONS] NAME[:TAG]
OPTIONS说明:
--disable-content-trust :忽略镜像的校验,默认开启
从容器创建一个新的镜像
docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
OPTIONS说明:
-a :提交的镜像作者;
-c :使用Dockerfile指令来创建镜像;
-m :提交时的说明文字;
-p :在commit时,将容器暂停。
docker commit ef27c9a23b26 wangpf/javaweb:0.1
该容器的ID是ef27c9a23b26,所创建的镜像名是wangpf/javaweb:0.1
使用 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指令的网络模式
三、第三部分
DOCKER 给运行中的容器添加映射端口
获得容器IP
docker inspect 'container_name' | grep IPAddress
iptable转发端口
将容器的8000端口映射到docker主机的8001端口
iptables -t nat -A DOCKER -p tcp --dport 8081 -j DNAT --to-destination 172.17.0.2:8080
查看端口映射
docker port 容器Id
提交一个运行中的容器为镜像
docker commit containerid foo/live
运行镜像并添加端口
docker run -d -p 8000:80 foo/live /bin/bash
删除端口映射规则
获取规则编号
iptables -t nat -nL --line-number
根据编号删除规则
iptables -t nat -D DOCKER $num