Docker知识点翻阅手册--Docker常用命令DockererfileCompose网络等整理合集
Posted 是我,Zack
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Docker知识点翻阅手册--Docker常用命令DockererfileCompose网络等整理合集相关的知识,希望对你有一定的参考价值。
一、Docker常用命令
From:Docker常用命令,非常完整,我用过的打个√记录,另外我补充些个人常用的。
1、Docker容器信息
##查看docker容器版本
docker version
##查看docker容器信息
docker info
##查看docker 容器帮助
docker --help
2、镜像操作
提示:对于镜像的操作可使用镜像名、镜像长ID和短ID。
2.1、镜像查看
##列出本地images
docker images
##含中间映像层
docker images -a
##列出本地images
docker images
##含中间映像层
docker images -a
##显示镜像摘要信息(DIGEST列)
docker images --digests
##显示镜像完整信息
docker images --no-trunc
##显示指定镜像的历史创建;参数:-H 镜像大小和日期,默认为true;--no-trunc 显示完整的提交记录;-q 仅列出提交记录ID
docker history -H redis √
2.2、镜像搜索
##搜索仓库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
2.3、镜像下载
##下载Redis官方最新镜像,相当于:docker pull redis:latest
docker pull redis
##下载仓库所有Redis镜像
docker pull -a redis
##下载私人仓库镜像
docker pull bitnami/redis
2.4、镜像删除
##单个镜像删除,相当于:docker rmi redis:latest
docker rmi redis
##强制删除(针对基于镜像有运行的容器进程)
docker rmi -f redis
##多个镜像删除,不同镜像间以空格间隔
docker rmi -f redis tomcat nginx
##删除本地全部镜像
docker rmi -f $(docker images -q)
2.5、镜像构建
##(1)编写dockerfile
cd /docker/dockerfile
vim mycentos
##(2)构建docker镜像
docker build -f /docker/dockerfile/mycentos -t mycentos:1.1 . √注意这里的小数点!
3、容器操作
提示:对于容器的操作可使用CONTAINER ID 或 NAMES。
3.1、容器启动
##新建并启动容器,参数:-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
3.2、容器进程
##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
3.3、容器日志
##查看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
3.4、容器的进入与退出
##使用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
3.5、查看容器
##查看正在运行的容器
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.IPAddressend' redis
3.6、容器的停止与删除
##停止一个运行中的容器
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
3.7、生成镜像
##基于当前redis容器创建一个新的镜像;参数:-a 提交的镜像作者;-c 使用Dockerfile指令来创建镜像;-m :提交时的说明文字;-p :在commit时,将容器暂停
docker commit -a="DeepInThought" -m="my redis" [redis容器ID] myredis:v1.1
3.8、容器与主机间的数据拷贝
##将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]
4. 网络操作
4.1 查看网卡网络
## 先看看网卡
ip addr
## 进入容器看看网卡
docker exec -it tomcat01 ip addr
## 看看网络
docker network ls
## 看看网络细节
docker network inspect NETWORK ID
4.2 容器连接(网络)
## 直接ping
docker exec -it tomcat02 ping tomcat01
## --link命令连接网络
docker run -d -P --name tomcat03 --link tomcat02 tomcat
## connect命令
docker network connect mynet tomcat01
4.3 自定义网络
## --参数说明:-d -driver:参数指定 Docker 网络类型,有 bridge、overlay(用于 Swarm mode)
## --subnet 分配网段 --gateway 分配网关
docker network create --driver bridge --subnet 192.168.0.0/16 --gateway 192.168.0.1 mynet
# 直接启动的命令默认有一个 --net bridge,而这个就是我们的docker0
docker run -d -P --name tomcat01 tomcat
docker run -d -P --name tomcat01 --net bridge tomcat
5.Docker Compose
5.1 关闭、构建
docker-compose down # 关闭容器
docker-compose up --build # 重新构建
6.其他常用
这部分大多是linux的命令,熟悉的小伙伴可以不用看,我留给自己翻。
6.1 端口冲突
## 查看端口占用情况:
netstat -apn | grep 80
netstat -tln | grep 80 √ 得空对比一下
## 查看占用端口的进程:
ps -ef | grep 3345
## 查看端口属于哪个程序?端口被哪个进程占用
lsof -i :80 √
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HVvl0H3f-1637658977021)(https://cdn.nlark.com/yuque/0/2021/png/2196885/1637655942023-0235e30e-164f-4060-9a3a-d6a6ec631110.png)]
## 强行杀掉进程
kill -9 3345
6.2 解压缩文件
二、Dockerfile
多看官网或者专业手册,很多你未知的默认规则在里面。
我通常看菜鸟教程:https://www.runoob.com/docker/docker-dockerfile.html
Dockerfile指令介绍的官方文档:https://docs.docker.com/engine/reference/builder/
1.指令说明
指令 | 说明 |
---|---|
FROM | 指定基础镜像 |
MAINTAINER | 镜像是谁写的,姓名+邮箱 |
RUN | 镜像构建的时候需要运行的命令 |
ADD | 将本地文件添加到容器中,tar类型文件会自动解压(网络压缩资源不会被解压),可以访问网络资源,类似wget |
WORKDIR | 镜像的工作目录 |
VOLUME | 挂载的目录 |
EXPOSE | 保留端口配置 |
CMD | 指定这个容器启动的时候要运行的命令(只有最后一个会生效),可悲替代 |
EMTRYPOINT | 指定这个容器启动的时候要运行的命令,可以追加命令 |
ONBUILD | 当构建一个被继承DockerFile,这个时候就会运行ONBUILD的指令,触发指令 |
COPY | 功能类似ADD,但是是不会自动解压文件,也不能访问网络资源 |
ENV | 构建的时候设置环境变量 |
一个形象的解释各个指令作用的图:
2.案例参考
# 定制的镜像都是基于 FROM 的镜像,这里的 centos 就是定制需要的基础镜像。
FROM centos
MAINTAINER zecan<861328011@qq.com>
# 复制指令,从上下文目录中复制文件或者目录到容器里指定路径。
COPY readme.txt /usr/local/readme.txt
# 类似COPY,在执行 <源文件> 为 tar 压缩文件的话,压缩格式为 gzip, bzip2 以及 xz 的情况下,会自动复制并解压到 <目标路径>。
ADD jdk-8u211-linux-x64.tar.gz /usr/local/
ADD iamsso.tar.gz
ADD fuseiamdb.sql.tar /usr/local/??mysql
# 用于执行后面跟着的命令行命令,通常用下面这种shell 格式,等同于在终端操作shell命令
RUN yum -y install vim
RUN yum -y install net-tools
# 适用于普通用户可以运行的程序
ENV MYPATH /user/local
WORKDIE $MYPATH
# 设置环境变量,定义了环境变量,那么在后续的指令中,就可以使用这个环境变量。
# ARG 设置的环境变量仅对 Dockerfile 内有效,比较少用
ENV JAVA_HOME /usr/local/jdk1.8.0_211
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV PATH $PATH:$JAVA_HOME/bin
EXPOSE 8080
# 用于运行程序, 相对于RUN,CMD 在docker run 时运行
# 如果 Dockerfile 中如果存在多个 CMD 指令,仅最后一个生效
# 但你要是看到写了好几行的,是为 ENTRYPOINT 指令指定的程序提供默认参数(具体看手册)
CMD /bin/bash
三、Docker Compose
学会找官方的,抓住本质!
官方文档:https://docs.docker.com/compose/compose-file/compose-file-v3/
菜鸟教程:https://www.runoob.com/docker/docker-compose.html
1.yml 配置指令参考
这里仅罗列常用的,其他没遇到的上我前面两个网站找!
指令 | 说明 | 示例 |
---|---|---|
version | 指定本 yml 依从的 compose 哪个版本制定的,目前最新3.8 | version: “3.8” |
build | 指定为构建镜像上下文路径: | |
depends_on | 设置依赖关系。 | depends_on: - db - redis |
deploy | 指定与服务的部署和运行有关的配置。只在 swarm 模式下才会有用。 | 略 |
expose/pose | 暴露端口,但不映射到宿主机,只被连接的服务访问。 仅可以指定内部端口为参数: | expose: - “3000” - “8000” |
environment | 添加环境变量。您可以使用数组或字典、任何布尔值,布尔值需要用引号引起来,以确保 YML 解析器不会将其转换为 True 或 False。 | |
image | 指定容器运行的镜像。 | image: redis image: ubuntu:14.04 image: tutum/influxdb image: example- |
volumes | 将主机的数据卷或着文件挂载到容器里。 | |
restart | always:容器总是重新启动。其他含义见手册 | |
networks | 配置容器连接的网络,引用顶级 networks 下的条目 。 | 例见下 |
2.案例参考 docker-compose.yaml
version: "3.8" # 版本对比查找官网:https://docs.docker.com/compose/compose-file/
services:
iamsso:
container_name: iamsso-cont
build: .
image: iamsso-centos7-jdk8:1.0
depends_on:
- mysql
networks:
- my-bridge
ports:
- "8089:8089"
mysql:
container_name: mysql-cont
image: mysql:5.7.24
restart: always
networks:
- my-bridge
ports:
- "3306:3306"
volumes:
- /root/mysql/conf:/etc/mysql/conf.d
- /root/mysql/logs:/var/log/mysql
- /root/mysql/data:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD: root
nginx:
container_name: nginx-cont
image: nginx
restart: always
networks:
- my-bridge
ports:
- 80:80
- 443:443
- 5050:5050
- 4040:4040
volumes:
- /home/Docker/mynginx/nginx/log:/var/log/nginx
- /home/Docker/mynginx/nginx/conf.d:/etc/nginx/conf.d
- /home/Docker/mynginx/nginx/conf/nginx.conf:/etc/nginx/nginx.conf
- /home/Docker/mynginx/nginx/html:/usr/share/nginx/html
networks:
my-bridge:
driver: bridge
四、配置常用数据卷
1.Mysql
docker run -p 3306:3306 --name mysql
-v /root/mysql/conf:/etc/mysql/conf.d
-v /root/mysql/logs:/var/log/mysql
-v /root/mysql/data:/var/lib/mysql
-e MYSQL_ROOT_PASSWORD=root -d mysql:5.7.24
-d: 后台运行容器,也可以使用镜像id
-p 将容器的端口映射到本机的端口
-v 将主机目录挂载到容器的目录
-e 设置参数 MYSQL_ROOT_PASSWORD 指定登录密码
2.Nginx
docker run --name nginx03 -d -p 8089:8089 \\
-v /home/Docker/mynginx/nginx/log:/var/log/nginx \\
-v /home/Docker/mynginx/nginx/conf.d:/etc/nginx/conf.d \\
-v /home/Docker/mynginx/nginx/conf/nginx.conf:/etc/nginx/nginx.conf \\
-v /home/Docker/mynginx/nginx/html:/usr/share/nginx/html nginx
日志目录 : /var/log/nginx
配置目录 : /etc/nginx/conf.d (这个目前遇到的比较少用)
主配置文件:/etc/nginx/nginx.conf
项目目录 : /usr/share/nginx/html nginx
/usr/local/bin 适用于普通用户可以运行的程序。
-
该/usr/local层次结构供系统管理员在本地安装软件时使用。
-
更新系统软件时,必须确保它不会被覆盖。
-
它可用于可在一组主机之间共享但在中找不到的程序和数据/usr。
-
/usr/local除非要安装本地安装的软件以替换或升级,否则必须将本地安装的软件放置在/ usr之下/usr。
持续更新,欢迎收藏~
Docker学习笔记合集(持续更新)
linux入门–服务器购买—宝塔部署环境说明
Nginx简单入门–学习笔记狂神说
Docker基础01–入门总结–(狂神说docker学习笔记)
Docker基础02–Docker容器数据卷详解–(狂神说docker学习笔记)
Docker基础03–Dockerfile详解与镜像发布–(狂神说docker学习笔记)
Docker基础04–Docker网络–(狂神说docker学习笔记)
Docker进阶01–Docker Compose–(狂神说docker学习笔记)
Docker知识点翻阅手册–Docker常用命令、Dockererfile、Compose、网络等整理合集
Docker实战:Mysql、Nginx、web的Docker化部署(安装、自定义镜像、compose管理容器、自定义网络、部署问题及解决)
以上是关于Docker知识点翻阅手册--Docker常用命令DockererfileCompose网络等整理合集的主要内容,如果未能解决你的问题,请参考以下文章