docker 容器操作
创建并启动容器
命令格式
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
OPTIONS
--name="容器新名字":为容器指定一个名称;
-i:以交互模式运行容器,通常与-t或者-d同时使用;
-t:为容器重新分配一个伪输入终端,通常与-i同时使用;
-d: 后台运行容器,并返回容器ID;
-P: 随机端口映射,容器内部端口随机映射到主机的端口
-p: 指定端口映射,格式为:主机(宿主)端口:容器端口
-v: 挂载宿主机的一个目录, 格式为:本机文件目录:容器中的文件目录
启动普通容器
docker run --name 别名 镜像ID
启动交互式容器
#运行一个容器,取别名,交互模式运行,以及分配一个伪终端
docker run -it --name 别名 镜像ID
启动容器并执行/bin/bash命令
直接操作容器,执行完 回到 宿主主机终端
docker run -it --name 别名 镜像ID /bin/bash命令
守护式方式创建并启动容器
也就是后台启动
docker run -di --name 别名 镜像ID
例:启动交互式容器centos7
docker run -it --name mycentos01 8652b9f0cb4c
例:守护式方式创建并启动容器centos7
docker run -di --name mycentos3 8652b9f0cb4c
例:启动容器并执行/bin/bash命令
docker run -it --name mycentos4 8652b9f0cb4c ls -al
如图,进入容器就执行命令
列出容器
命令格式
docker ps [OPTIONS]
OPTIONS
-a :显示所有的容器,包括未运行的。
-f :根据条件过滤显示的内容。
--format :指定返回值的模板文件。
-l :显示最近创建的容器。
-n :列出最近创建的n个容器。
--no-trunc :不截断输出。
-q :静默模式,只显示容器编号。
-s :显示总的文件大小。
常用查询
docker ps 查看正在运行的容器
docker ps -a 查看所有容器
docker ps -n 2 显示最近创建的2个容器
docker ps -f status=exited 查看停止的容器
退出容器
容器停止退出
#输入字符
exit
再查看没有容器正在运行
容器不停止退出
#按键盘
ctrl+P+Q
再查看还是在运行
进入容器
docker attach 容器ID or 容器名
例:
docker attach d5446fab8b23
启动容器
docker start 容器ID or 容器名
例:
docker start d5446fab8b23
重启容器
docker restart 容器ID or 容器名
例:
docker restart d5446fab8b23
重启的时间可能会久一点
删除容器
删除单个容器
docker rm 容器ID
删除多个容器
#中间空格隔开
docker rm -f 容器ID1 容器ID2
删除所有容器
docker rm -f $(docker ps -qa)
强制删除容器
如果删除正在运行的容器,会报错,我们假如需要删除的话,需要强制删除
即加上-f
参数
例:
docker rm d5446fab8b23
进入正在运行的容器执行命令
docker exec -it 容器名称 或者 容器ID 执行命令
直接操作容器,执行完 回到 宿主主机终端
我们一般用于 启动容器里的应用 比如 tomcat nginx redis
例:
docker exec -it 638d16c99863 ls -a
docker exec -it 638d16c99863 /bin/bash
注意容器一定要是已经启动了的,否则会报错
查看容器日志
命令格式
docker logs [OPTIONS] CONTAINER
OPTIONS
--details 显示更多的信息
-f, --follow 跟踪实时日志
--since string 显示自某个timestamp之后的日志,或相对时间,如42m(即42分钟)
--tail string 从日志末尾显示多少行日志, 默认是all
-t, --timestamps 显示时间戳
--until string 显示自某个timestamp之前的日志,或相对时间,如42m(即42分钟)
上面这种方式不推荐,推荐直接去相应的目录看即可
进入目录查看的方式
日志目录:/var/lib/docker/containers/
每个容器对应一堆文件,然后有个log结尾的,就是日志文件
查看容器进程
docker top 容器ID
例:
docker top 638d16c99863
宿主机和容器之间文件拷贝
宿主机拷贝到容器内
docker cp 需要拷贝的文件或者目录 容器名称:容器目录
例:
#将宿主机 /home/makalo/test.png 复制到容器d68122a6e441中的/tmp目录下
docker cp /home/makalo/test.png d68122a6e441:/tmp/
#将宿主机 /home/makalo/test.png 复制到容器d68122a6e441中的/tmp目录下并改为test_change_name.png
docker cp /home/makalo/test.png d68122a6e441:/tmp/test_change_name.png
#将宿主机的 /home/makalo/test_cp 文件夹复制到容器d68122a6e441中的/tmp目录下
docker cp /home/makalo/test_cp d68122a6e441:/tmp/
容器拷贝到宿主机
docker cp 容器名称:容器目录 宿主机目录
例:
#将容器d68122a6e441的/tmp/test.png 文件 拷贝到宿主机的/home/makalo/cp_data/目录下
docker cp d68122a6e441:/tmp/test.png /home/makalo/cp_data/
#将容器d68122a6e441的/tmp/test.png 文件 拷贝到宿主机的/home/makalo/cp_data/目录下并改名test2.png
docker cp d68122a6e441:/tmp/test.png /home/makalo/cp_data/test2.png
#将容器d68122a6e441的/tmp/test_cp文件夹 拷贝到宿主机的/home/makalo/cp_data/目录下
docker cp d68122a6e441:/tmp/test_cp /home/makalo/cp_data/
容器宿主机端口映射
当容器中运行一些网络应用,要让外部访问这些应用时,可以通过 -P 或 -p 参数两种方式来指定端口映射。关于 -P 或 -p
可以查看
命令格式
#指定端口映射
docker run -it -p 主机(宿主)端口:容器端口 镜像名称或镜像id
##随机端口映射
docker run -it -P 镜像名称或镜像id
例:启动apache容器映射
没有镜像就先pull
docker run -it -d -p 80:80 --name apache httpd
浏览器访问
提交运行时容器成为镜像
命令格式
docker commit -a='作者' -m='备注' 运行时容器ID 新镜像名称
例:将运行时的apache提交为镜像
docker commit -a='makalo/apache' -m='test' 9278fe7375c0 makalo/apache:1.0
具体步骤
先启动并进入容器的内
docker run -it -p 80:80 --name apache httpd /bin/bash
可以看到容器内有一些目录 而index.html 就在 htdocs 目录中
这时候浏览器访问
一切正常
编辑index.hmlt
echo '<html><body><h1>the change!</h1></body></html>' > htdocs/index.html
提交为镜像
docker commit -a='makalo/apache' -m='test' 9278fe7375c0 makalo/apache:1.0
使用该镜像启动容器
docker run -it -p 8888:80 --name myApache 572b7a1b7628 /bin/bash
查看index.html文件
可以看到该文件内容是被修改后的
查看容器元信息
docker inspect 容器ID
例:
docker inspect c90f247595e8