docker
2020-04-22 10:14:08 3 举报
AI智能生成
docker日常复习&知识总结
作者其他创作
大纲/内容
列出已安装所有镜像
docker images
只显示镜像ID docker images -q
拉取镜像
docker pull 镜像名:标签名
删除镜像
docker rmi 镜像ID
查看容器
查看正在运行容器
docker ps
查看所有的容器(启动与未启动的容器)
docker ps -a
查看最后一次运行的容器
docker ps –l
查看停止的容器
docker ps -f status=exited
创建容器
docker run [OPTIONS] 镜像名:标签名
OPTIONS
-i 表示交互式运行容器(就是创建容器后,马上会启动容器,并进入容器 ),通常与 -t 同时使用
-t 启动后会进入其容器命令行, 通常与 -i 同时使用; 加入 -it 两个参数后,容器创建就能登录进去。即分配一个伪终端
--name 为创建的容器指定一个名称
-d 创建一个守护式容器在后台运行,并返回容器ID
-v 表示目录映射, 格式为: -p 宿主机目录:容器目录
-p 表示端口映射,格式为: -p 宿主机端口:容器端口
交互式容器
创建容器后,马上会启动容器,并进入容器
docker run -it --name=mycentos centos:7 /bin/bash
守护式容器
果对于一个需要长期运行的容器来说,我们可以创建一个守护式容器(后台运行的容器)
docker run -id --name=mycentos2 centos:7
退出容器
退出并停止当前容器, 注意在容器内部的命令行执行
exit
退出不停止当前容器
Ctrl + p + q
启动容器
docker start 容器名称|容器id
docker start `docker ps -a -q`
启动所有运行过的容器
docker start `docker ps -a -q`
停止容器
停止正在运行的容器(正常停止)
docker stop 容器名称|容器id
强制停止正在运行的容器
docker kill 容器名称|容器id
停止所有在运行的容器
docker stop `docker ps -a -q`
登录容器
docker exec -it 容器名称|容器id /bin/bash
数据目录挂载
在创建容器的时候,将宿主机的目录与容器内的目录进行映射,这样我们就可以通过修改宿主机某个目录的文件从而去影响容器。使用 -v 选项
docker run -id -v /宿主机绝对路径目录:/容器内目录 --name=容器名 镜像名
docker run -id -v /opt:/opt --name=mycentos3 centos:7
只读(Read-only)权限
docker run -id -v /宿主机绝对路径目录:/容器内目录:ro --name=容器名 镜像名
docker run -id -v /dataHost:/dataContainer:ro --name=mycentos4 centos:7
查看容器内部细节
docker inspect mycentos2
容器IP地址
docker inspect --format='{{.NetworkSettings.IPAddress}}' mycentos2
删除容器
删除指定的容器
只能删除停止的容器
docker rm 容器名称 | 容器ID
删除所有容器
中运行中的容器无法删除,所以先停再删
docker rm `docker ps -a -q`
部署应用
MySQL 部署
拉取MySQL镜像
docker pull mysql:5.7
创建 MySQL 容器
docker run -id --name=cz_mysql -p 33306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7
进入MySQL容器, 登陆MySQL
docker exec -it mxg_mysql /bin/bash
mysql -u root -p
Redis 部署
拉取Redis镜像
docker pull redis
创建Redis容器
docker run -id --name=cz_redis -p 6379:6379 redis
Tomcat 部署
拉取tomcat镜像
docker pull tomcat:8
创建tomcat容器
创建tomcat容器用于 Web应用,并且进行目录映射
docker run -id --name=cz_tomcat -p 8888:8080 -v /usr/local/project:/usr/local/tomcat/webapps --privileged=true tomcat:8
-p 表示地址映射, 宿主机端口号:容器运行端口号
-v 表示地址映射, 宿主机目录:容器映射目录
--privileged=true 如果映射的是多级目录,防止有可能会出现没有权限的问题,所以加上此参数
在宿主机的 /usr/local/project 目录创建cz目录,往里增加一个 hello.html 文件
http://192.168.10.11:8888/cz/hello.html
RabbitMQ 部署
拉取 RabbitMQ 镜像
docker pull rabbitmq:management
注意:如果docker pull rabbitmq 后面不带management,启动rabbitmq后是无法打开管理界面的,所以我们要下载带management插件的rabbitmq.
创建 RabbitMQ 容器
方式一
创建镜像(默认用户名密码),远程连接端口5672,管理系统访问端口15672,默认用户名: guest ,密码: guest
docker run -id --name=mxg_rabbitmq -p 5672:5672 -p 15672:15672 rabbitmq:management
方式二
启动镜像(设置用户名密码)
docker run -id --name=mxg_rabbitmq2 -e RABBITMQ_DEFAULT_USER=username -e RABBITMQ_DEFAULT_PASS=password -p 5672:5672 -p 15672:15672 rabbitmq:management
访问Rabbit管理界面
访问管理界面的地址是 http://[宿主机IP]:15672 , 如:http://192.168.10.11:15672,默认 guest 用户,密码 guest
备份与迁移
容器保存为镜像
docker commit [-m="提交的描述信息"] [-a="创建者"] 容器名称|容器ID 生成的镜像名[:标签名]
查看是否有挂载目录
docker inspect --format='{{.Mounts}}' 容器名
无目录挂载-容器保存为镜像
docker commit mycentos2 mycentos_new:1.1
mycentos2 是容器名称
mycentos_new 是新的镜像名称
创建并登录容器
docker run -it --name=mxg_mycentos_new mycentos_new:1.1 /bin/bash
有目录挂载情况(难点)
问题: 如果Docker对容器挂载了数据目录, 在将容器保存为镜像时,数据不会被保存到镜像中。
原因:因为宿主机与容器做了路径映射,再commit一个新的镜像时,该路径下的所有数据都会被抛弃,不会
被保存到新镜像中。可通过 docker inspect --format='{{.Mounts}}' 镜像名 查看是否有目录挂载.
解决:目录挂载方法。先把在宿主机的数据备份在某个目录下,在 docker run 的时候使用-v参数将宿主机上的
目录映射到容器里的目标路径中(tomcat是 /usr/local/tomcat/webapps ,mysql是 var/lib/mysql )
拷贝方法。先把在宿主机的数据备份在某个目录下,通过拷贝的方法 docker cp 将备份的数据复制进容
器里的目标路径中(tomcat是 /usr/local/tomcat/webapps ,mysql是 var/lib/mysql )
备份镜像
docker save -o mycentos.tar mycentos_new:1.1
-o 指定输出到的文件
执行后,运行 ls 命令即可看到打成的tar包, 因为有463M所以打包要一会
镜像恢复与迁移
删除掉 mycentos_new:1.1 镜像(注意先停止并删除所有引用了的容器)
docker rmi mycentos_new:1.1
行恢复 mycentos_new:1.1 镜像
docker load -i mycentos.tar
Dockerfile语法
用于构建一个新的Docker镜像的脚本文件,是由一系列命令和参数构成的脚本
构建新的镜像步骤
1. 编写 Dockerfile 文件
2. 通过 docker build 命令生成新的镜像
3. 通过 docker run 命令运行
语法规则
1. 每条指令的保留字都必须为大写字母且后面至少要有一个参数
2. 执行顺序按从上往下执行。
3. # 用于注释
4. 每条指令都会创建一个新的镜像层,并对镜像进行提交
执行流程
1. Docker 从基础镜像运行一个容器
2. 执行每一条指定并对容器作出修改
3. 执行类似 docker commit 的操作提交一个新的镜像层
4. docker 再基于刚提交的镜像运行一个新容器
5. 执行 Dockerfile 中的下一条指令直到所有指令都执行完成
常用指令
Docker容器信息
查看docker容器版本
docker version
查看docker容器信息
docker info
查看docker容器帮助
docker --help
镜像操作(提示:对于镜像的操作可使用镜像长ID和短ID。)
镜像查看
列出本地images
docker images
含中间映像层
docker images -a
只显示镜像ID
docker images -q
含中间映像层
docker images -qa
显示镜像摘要信息(DIGEST列)
docker images --digests
显示镜像完整信息
docker images --no-trunc
显示指定镜像的历史创建;参数:-H 镜像大小和日期,默认为true;--no-trunc 显示完整的提交记录;-q 仅列出提交记录ID
docker history -H redis
镜像搜索
搜索仓库MySQL镜像
docker search mysql
--filter=stars=600:只显示 starts>=600 的镜像
docker search --filter=stars=600 mysql
--no-trunc 显示镜像完整 DESCRIPTION 描述
docker search --no-trunc mysql
--automated :只列出 AUTOMATED=OK 的镜像
docker search --automated mysql
镜像下载
下载Redis官方最新镜像,相当于:docker pull redis:latest
docker pull redis
下载仓库所有Redis镜像
docker pull -a redis
下载私人仓库镜像
docker pull bitnami/redis
镜像删除
单个镜像删除,相当于:docker rmi redis:latest
docker rmi redis
强制删除(针对基于镜像有运行的容器进程)
docker rmi -f redis
多个镜像删除,不同镜像间以空格间隔
docker rmi -f redis tomcat nginx
删除本地全部镜像
docker rmi -f $(docker images -q)
镜像构建
(1)编写dockerfile
cd /docker/dockerfile
vim mycentos
(2)构建docker镜像
docker build -f /docker/dockerfile/mycentos -t mycentos:1.1
容器操作(提示:对于容器的操作可使用CONTAINER ID 或 NAMES)
容器启动
新建并启动容器,参数:-i 以交互模式运行容器;-t 为容器重新分配一个伪输入终端;--name 为容器指定一个名称
docker run -i -t --name mycentos
后台启动容器,参数:-d 已守护方式启动容器
docker run -d mycentos
注意:此时使用"docker ps -a"会发现容器已经退出。这是docker的机制:要使Docker容器后台运行,就必须有一个前台进程。解决方案:将你要运行的程序以前台进程的形式运行。
启动一个或多个已经被停止的容器
docker start redis
重启容器
docker restart redis
容器进程
top支持 ps 命令参数,格式:docker top [OPTIONS] CONTAINER [ps OPTIONS]
列出redis容器中运行进程
docker top redis
查看所有运行容器的进程信息
for i in `docker ps |grep Up|awk '{print $1}'`;do echo \ &&docker top $i; done
容器日志
查看redis容器日志,默认参数
docker logs rabbitmq
查看redis容器日志,参数:-f 跟踪日志输出;-t 显示时间戳;--tail 仅列出最新N条容器日志;
docker logs -f -t --tail=20 redis
查看容器redis从2019年05月21日后的最新10条日志。
docker logs --since="2019-05-21" --tail=10 redis
容器的进入与退出
使用run方式在创建时进入
docker run -it centos /bin/bash
关闭容器并退出
exit
仅退出容器,不关闭
快捷键:Ctrl + P + Q
直接进入centos 容器启动命令的终端,不会启动新进程,多个attach连接共享容器屏幕,参数:--sig-proxy=false 确保CTRL-D或CTRL-C不会关闭容器
docker attach --sig-proxy=false centos
在 centos 容器中打开新的交互模式终端,可以启动新进程,参数:-i 即使没有附加也保持STDIN 打开;-t 分配一个伪终端
docker exec -i -t centos /bin/bash
以交互模式在容器中执行命令,结果返回到当前终端屏幕
docker exec -i -t centos ls -l /tmp
以分离模式在容器中执行命令,程序后台运行,结果不会反馈到当前终端
docker exec -d centos touch cache.txt
查看容器
查看正在运行的容器
docker ps
查看正在运行的容器的ID
docker ps -q
查看正在运行+历史运行过的容器
docker ps -a
显示运行容器总文件大小
docker ps -s
显示最近创建容器
docker ps -l
显示最近创建的3个容器
docker ps -n 3
不截断输出
docker ps --no-trunc
获取镜像redis的元信息
docker inspect redis
获取正在运行的容器redis的 IP
docker inspect --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' redis
容器的停止与删除
停止一个运行中的容器
docker stop redis
杀掉一个运行中的容器
docker kill redis
删除一个已停止的容器
docker rm redis
删除一个运行中的容器
docker rm -f redis
删除多个容器
docker rm -f $(docker ps -a -q)
docker ps -a -q | xargs docker rm
-l 移除容器间的网络连接,连接名为 db
docker rm -l db
-v 删除容器,并删除容器挂载的数据卷
docker rm -v redis
生成镜像
基于当前redis容器创建一个新的镜像;参数:-a 提交的镜像作者;-c 使用Dockerfile指令来创建镜像;-m :提交时的说明文字;-p :在commit时,将容器暂停
docker commit -a="DeepInThought" -m="my redis" [redis容器ID] myredis:v1.1
容器与主机间的数据拷贝
将rabbitmq容器中的文件copy至本地路径
docker cp rabbitmq:/[container_path] [local_path]
将主机文件copy至rabbitmq容器
docker cp [local_path] rabbitmq:/[container_path]/
将主机文件copy至rabbitmq容器,目录重命名为[container_path](注意与非重命名copy的区别)
docker cp [local_path] rabbitmq:/[container_path]
0 条评论
下一页
为你推荐
查看更多