容器相关操作
docker
create
# 创建一个容器但是不启动它
示例:
1.使用docker镜像nginx:latest创建一个容器,并将容器命名为myrunoob
docker create --name myrunoob nginx:latest 09b93464c2f75b7b69f83d56a9cfc23ceb50a48a9db7652ee4c27e3e2cb1961f
docker
stop
# 停止容器运行,发送信号SIGTERM
docker
start
# 启动一个停止状态的容器
docker
restart
# 重启一个容器
示例:
1.启动|停止|重启容器myrunoob
docker start|stop|restart myrunoob
docker
rm
# 删除一个容器
-f :通过SIGKILL信号强制删除一个运行中的容器
-l :移除容器间的网络连接,而非容器本身
-v :-v 删除与容器关联的卷
示例:
1.强制删除容器db01、db02
docker rm -f db01、db02
2.移除容器nginx01对容器db01的连接,连接名db
docker rm -l db
3.删除容器nginx01,并删除容器挂载的数据卷
docker rm -v nginx01
4.删除老的(一周前创建)容器
docker ps -a | grep 'weeks ago' | awk '{print $1}' | xargs docker rm
5.删除已经停止的容器
docker rm `docker ps -a -q`
6.删除所有镜像,小心
docker rmi $(docker images -q)
docker
kill
# 发送信号给容器,默认SIGKILL
示例:
1.杀掉运行中的容器mynginx
docker kill -s KILL mynginx
2.杀掉所有正在运行的容器
docker kill $(docker ps -q)
docker
pause
#暂停容器中所有的进程。
docker
unpause
#恢复容器中所有的进程。
示例:
暂停数据库容器db01提供服务。
docker pause db01
恢复数据库容器db01提供服务。
docker unpause db01
获取容器相关信息
docker
ps
# 显示状态为运行(Up)的容器
docker
ps -a
# 显示所有容器,包括运行中(Up)的和退出的(Exited)
docker
inspect
#检查镜像或者容器的参数,默认返回 JSON 格式。
示例:
1.docker inspect --format '{{.DockerVersion}}' ubuntu:14.04
上面命令的意思是返回 ubuntu:14.04 镜像的 docker 版本
-f, --format= 指定返回值的模板文件
2.获取Container IP地址(Container状态必须是Up)
docker inspect id | grep IPAddress | cut -d '"' -f 4
3.获取端口映射
docker inspect -f '{{range $p, $conf := .NetworkSettings.Ports}} {{$p}} -> {{(index $conf 0).HostPort}} {{end}}' id
docker
logs
# 查看容器的日志(stdout/stderr),-f实时查看
示例:
查看容器mynginx从2016年7月1日后的最新10条日志。
1.docker logs --since="2016-07-01" --tail=10 mynginx
docker
events
# 得到docker服务器的实时的事件
示例:
1.从服务器拉取个人动态,可选择时间区间。
docker events --since="20150720" --until="20150808"
上面命令的意思是拉取个人从 2015/07/20 到 2015/08/08 的个人动态。
参数:
--since= 开始时间
--until= 结束时间
docker
port
# 显示容器的端口映射
docker
top
# 显示容器的进程信息
docker
diff
# 显示容器文件系统的前后变化
查看容器mynginx的端口映射情况。
docker
port
mymysql
3306/tcp -> 0.0.0.0:3306
导出容器
docker
cp
# 从容器里向外拷贝文件或目录
示例:
1.复制容器里的文件到宿主机上
docker cp 90af375815d4:/var/jenkins_home/workspace /target/HelloWorld.war ~
docker
export
# 将容器整个文件系统导出为一个tar包,不带layers、tag等信息。docker import 的逆操作。导出后导入(exported-imported))的容器会丢失所有的提交历史,无法回滚。
示例:
1.docker export -o ubuntu14.04.tar 94c6b3c3f04a
上面命令的意思是将 ID 为 94c6b3c3f04a 容器保存为 ubuntu14.04.tar 文件。
参数:
-o, --output= Write to a file, instead of STDOUT
docker
exec
# 在容器里执行一个命令,可以执行bash进入交互式
示例:
1.docker exec -it 90af375815d4 /bin/bash
2.执行容器内的脚本runoob.sh
docker exec -it mynginx /bin/sh /root/runoob.sh
3.获取环境变量
docker
exec
container_id env
进入容器
attach命令
docker attach [--detach-keys[=[ ] ] ] [--sig-[proxy[=true]] CONTAINER
参数:
--detach-keys[=[]]:指定3退出attach模式的快捷序列,默认是CTRL-p CTRL-q
--no-stdin=true | false:是否关闭标准输入,默认是保持打开的
--sig-proxy=true | false:是否代理收到的系统信号给应用进程,默认为true
exec命令
docker exec [-d | --detach] [--detach-keys[=[] ] [-i | --interactive] [--privileged] [-t | --tty] [-u | --user[=USER]] CONTAINER COMMAND [ARG...]
参数:
-i , --interactive=true | false :打开标准输入接受用户输入命令,默认为false
--privileged=true | false 是否给执行命令以最高权限,默认为false
-t, --tty=true | false : 分配伪终端,默认为false
-u, --user="": 执行命令的用户名或ID
镜像操作
docker
images
# 显示本地所有的镜像列表
docker
import
# 从一个tar包创建一个镜像,往往和export结合使用
示例:
1.cat ./ubuntu14.04.tar | sudo docker import - ubuntu:14.04
上面命令的意思是使用 ./ubuntu14.04.tar 文件创建 ubuntu:14.04 的镜像,默认会从远端拉取文件。
docker
build
# 使用Dockerfile创建镜像(推荐)
docker
commit
# 从容器创建镜像
docker
rmi
# 删除一个镜像
docker
load
# 从一个tar包创建一个镜像,和save配合使用
示例:
1.docker load -i ubuntu14.04.tar
上面命令的意思是将 ubuntu14.04.tar 文件载入镜像中。
参数:
-i, --input= Read from a tar archive file, instead of STDIN 加载的tar文件
docker
save
# 将一个镜像保存为一个tar包,带layers和tag信息,docker load 的逆操作。保存后再加载(saved-loaded)的镜像不会丢失提交历史和层,可以回滚。
示例:
1.docker save -o ubuntu14.04.tar ubuntu:14.04
上面命令的意思是将镜像 ubuntu:14.04 保存为 ubuntu14.04.tar 文件。
参数:
-o, --output= Write to an file, instead of STDOUT 输出到的文件
docker
history
# 显示生成一个镜像的历史命令
示例:
1.docker history -H harrysun/lnmp:0.1
上面命令的意思是查看 harrysun/lnmp:0.1 镜像的历史。
-H, --human=true Print sizes and dates in human readable format 以可读的格式打印镜像大小和日期
--no-trunc=false Don't truncate output 显示完整的提交记录
-q, --quiet=false Only show numeric IDs 仅列出提交记录ID
docker
tag
# 为镜像起一个别名
示例:
1.将镜像ubuntu:15.10标记为 runoob/ubuntu:v3 镜像。
docker tag ubuntu:15.10 runoob/ubuntu:v3
镜像仓库(registry)操作
docker
login
# 登录到一个registry
docker
logout
#运行后从指定服务器登出,默认为官方服务器。
docker
search
# 从registry仓库搜索镜像
docker
pull
# 从仓库下载镜像到本地
docker
push
# 将一个镜像push到registry仓库中
docker其他命令使用示例
docker run
docker run :
创建一个新的容器并运行一个命令
-a stdin
指定标准输入输出内容类型,可选 STDIN/STDOUT/STDERR 三项
;
-C
共享CPU
--cidfile=“”
将容器的ID标识写入文件
-d
后台运行容器,并返回容器ID
;
--dns 8.8.8.8
指定容器使用的DNS服务器,默认和宿主一致;
-e, --env=[]
指定环境变量,容器中可以使用该环境变量
--env-file=[]
指定环境变量文件,文件格式为每行一个环境变量
--expose=[]
指定容器暴露的端口,即修改镜像的暴露端口
-h, --hostname=""
指定容器的主机名
-I
以交互模式运行容器,通常与 -t 同时使用;
-t
为容器重新分配一个伪输入终端,通常与 -i 同时使用;
--link=[]
添加链接到另一个容器;
--name=""
指定容器名字,后续可以通过名字进行容器管理,links特性需要使用名字;
-n
允许镜像使用网络
--net="bridge"
容器的网络连接类型,支持 bridge/host/none/container: 四种类型;
--cpuset="0-2" or --cpuset="0,1,2"
绑定容器到指定CPU运行;
-m
设置容器使用内存最大值;
-P
Docker 会随机映射一个端口到内部容器开放的网络端口。
-p
可以指定要映射的端口,在一个指定端口上只可以绑定一个容器。支持的格式有 ip:hostPort:containerPort | ip::containerPort | hostPort:containerPort。
--rm=false
容器停止后自动删除容器(不支持以docker run -d启动的容器)
--restart=""
指定容器停止后的重启策略,待详述
-u, --user=""
指定容器的用户
-v, --volume=[]
给容器挂载存储卷,挂载到容器的某个目录
--volumes-from=[]
给容器挂载其他容器上的卷,挂载到容器的某个目录
-w, --workdir=""
指定容器的工作目录
使用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
使用镜像nginx:latest以交互模式启动一个容器,在容器内执行/bin/bash命令。
docker run
-
it nginx
:
latest
/
bin
/
bash
root@b8573233d675
:/#
可以通过-link name:alias命令连接指定容器,Docker 在两个互联的容器之间创建了一个安全隧道,而且不用映射它们的端口到宿主主机上,从而避免了暴露数据库端口到外部网络上。
使用 –name 选项可以为容器自定义命名,容器的名字必须是唯一的。然后创建一个web容器,连接到数据库容器。
docker run -d -P --name web --link db:db training/webapp python app.py
-p和-P用法
docker run -d -P training/webapp python app.py
docker run -d -p 5000:5000 training/webapp python app.py
docker build
OPTIONS说明:
--add-host
添加自定义的主机到IP映射(主机:ip)
--build-arg=[]
设置镜像创建时的变量;
--cpu-shares
设置 cpu 使用权重;
--cpu-period
限制 CPU CFS周期;
--cpu-quota
限制 CPU CFS配额;
--cpuset-cpus
指定使用的CPU id;
--cpuset-mems
指定使用的内存 id;
--disable-content-trust
忽略校验,默认开启;
-f ,--file
指定要使用的Dockerfile路径;
--force-rm
设置镜像过程中删除中间容器;
--isolation
使用容器隔离技术;
--label=[]
设置镜像使用的元数据;
-m,--memory
设置内存最大值;
--memory-swap
设置Swap最大值为内存+swap,"-1"表示不限swap;
--no-cache
创建镜像的过程不使用缓存;
--pull
尝试去更新镜像的新版本;
-q
安静模式,成功后只输出镜像ID;
--rm
设置镜像成功后删除中间容器;
--shm-size
设置/dev/shm的大小,默认值是64M;
--ulimit
Ulimit配置。
--tag, -t,
镜像的名字及tag,通常name:tag或者name格式;可以在一次构建中为一个镜像设置多个tag
实例:
1.使用当前目录的Dockerfile创建镜像。
docker build -t runoob/ubuntu:v1 .
2.使用URL github.com/creack/docker-firefox 的 Dockerfile 创建镜像。
docker build github.com/creack/docker-firefox
3. 搬运工人将标准输入输入的指定文件打包进去
docker build -<Dockerfile
4. 支持压缩格式bzip2,gzip和xz。
docker build -< context.tar.gz