Docker总结
2022-09-07 16:58:25 0 举报
AI智能生成
Docker学习,Docker总结,Docker学习
作者其他创作
大纲/内容
基础信息
核心组件
Docker 客户端和服务器
Docker 镜像
Registry
Docker 容器
目录相关
默认安装位置 /var/lib/docker
graph 镜像的元数据
containers 记录容器相关信息
登录容器
docker exec -it 容器名称|容器ID /bin/bash
docker exec -it 容器名称|容器ID /bin/sh
数据目录挂载
在创建容器的时候,将宿主机的目录与容器内的目录进行映射,就可以通过修改宿主机某个目录的文件从而影响容器。使用-v
docker run -v /宿主机绝对路径目录:/容器内目录 --name=容器名 镜像名
docker run -id -v /opt:/opt --name centos centos:7
只读(Read-only)权限
docker run -id -v /宿主机绝对路径目录:/容器内目录:ro --name=容器名 镜像名
docker run -id -v /opt:/opt:ro --name centos centos:7
查看容器内部细节
docker inspect centos:7
容器IP地址
docker inspect --format='{{.NetworkSettings.IPAddress}}' centos
删除容器
删除指定的容器
只能删除停止的容器
docker rm 容器名称|容器ID
删除所有容器
运行中的容器无法删除,需先停再删
docker rm `docker ps -a -q`
NetWork网络
docker network ls 列出网络
docker network inspect 网络名 显示网络信息
docker network create -d 网络类型 网络名 创建网络
docker network connect 网络名 容器名 将容器添加到网络
docker network disconnect 网络名 容器名 将容器移出网络
docker network rm 删除网络
部署应用
Mysql部署
拉取Mysql镜像
docker pull mysql:5.7
创建Mysql容器
docker run -id --name mysql -p 3307:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7
Redis部署
拉取Redis镜像
docker pull redis
创建Redis容器
docker run -id --name=redis -p 6379:6379 redis
Tomcat部署
拉取tomcat镜像
docker pull tomcat:8
创建tomcat容器
创建tomcat容器用于Web应用,并且进行目录映射
docker run -id --name=tomcat -p 8080:8080 -v /usr/project:/usr/local/tomcat/webapps --privileged=true tomcat:8
-p 表示端口映射,宿主机端口:容器运行端口号
-v 表示目录挂载,宿主机目录:容器内目录
--privileged=true 如果映射的是多级目录,防止可能会出现没有权限的问题,所以加此参数
在宿主机的/usr/project目录创建cz,往里面增加一个hello.html
浏览器访问:http://服务器IP:8080/cz/hello.html
RabbitMQ部署
拉取RabbitMQ镜像
docker pull rabbitmq:management
如果pull的镜像后面不带management,启动rabbitmq是无法打开管理界面的,所以我们要下载management插件的rabbitmq
创建RabbitMq容器
方式一
创建镜像(默认用户名密码),远程连接端口5672,管理员访问端口15672,默认用户名:guest,默认密码:guest
docker run -id --name rabbitmq -p 5672:5672 -p 15672:15672 rahhitmq:management
方式二
启动镜像(设置用户名密码)
docker run -id --name rabbitmq -e RABBITMQ_DEFAULT_USER=username -e RABBITMQ_DEFAULT_PASS=password -p 5672:5672 -p 15672:15672 rahhitmq:management
访问Rabbit管理界面
访问地址
http://[宿主机IP]:15672
默认用户名密码
guest
ZK部署
docker run -d -p 2181:2181 --name=zookeeper --privileged zookeeper
Nacos部署
拉取镜像
docker pull nacos/nacos-server
创建nacos容器
docker run --env MODE=standalone --name nacos -d -p 8848:8848 nacos/nacos-server
ES\Kibana部署
拉取ES镜像
docker pull elasticsearch:7.2.0
启动ES容器
docker run --name elasticsearch -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" -d elasticsearch:7.2.0
访问ES
curl http://localhost:9200
拉取Kibana镜像
docker pull kibana:7.2.0
docker run --name kibana --link=elasticsearch:test -p 5601:5601 -d kibane:7.2.0
Docker Compose
YML 配置
https://blog.csdn.net/liguangxianbin/article/details/79556008
image 指定镜像名
build 指定Dockerfile目录
container_name 指定容器名
ports 端口
volumes 挂载
args 指定变量值
command 指定容器启动后的默认执行命令
entrypoint 容器启动后执行的命令
env_file *.env 指定环境变量文件
environment 环境变量配置
expose 指定暴露的端口
external_links 连接外部容器
links 连接内部容器
extra_hosts 添加host
networks 指定网络
depends_on 指定依赖的容器
Docker Swarm
简介
Docker 官方推出的容器集群管理工具,基于 Go 语言实现
Docker Compose 是一个在单个服务器或主机上创建多个容器的工具
Docker Swarm 则可以在多个服务器或主机上创建容器集群服务
核心概念
Swarm 集群由 Manager 节点(管理者角色,管理成员和委托任务)和 Worker 节点(工作者角色,运行 Swarm 服务)组成。
Swarm 创建服务时,需要指定要使用的镜像、在运行的容器中执行的命令、定义其副本的数量、可用的网络和数据卷、将服务公开给外部的端口等等。
Nodes
Node就是计算机节点,也可以认为是一个Docker节点。
两类Node都可以运行Service,但只有Manager上才能执行运行命令。
Stack
Stack是一组Service,和docker-compose类似。
Service
Service是一类容器。
Service有两种运行模式,一是`replicated`,指定一个Service运行容器的数量;
二是`global`,在所有符合运行条件的Node上,都运行一个这类容器。
服务(Service)是一个抽象的概念,是对要在管理节点或工作节点上执行的任务的定义。
它是集群系统的中心结构,是用户与集群交互的主要根源。
Node分为两类:Manager和Worker。 一个Swarm至少要有一个
Manager,部分管理命令只有在Manager上才能使用。
Swarm 创建服务时,可以为服务定义以下信息:
- 服务名称;
- 使用哪个镜像来创建容器;
- 要运行多少个副本;
- 服务的容器要连接到哪个网络上;
- 要映射哪些端口。
Docker Swarm常用命令
创建服务
docker service create \
--image nginx \
--replicas 2 \
nginx
更新服务
docker service update \
--image nginx:alpine \
nginx
删除服务
docker service rm nginx
减少服务实例(这比直接删除服务要好)
docker service scale nginx=0
增加服务实例
docker service scale nginx=5
查看所有服务
docker service ls
查看服务的容器状态
docker service ps nginx
查看服务的详细信息
docker service inspect nginx
核心命令说明
集群管理: docker swarm 子命令有 init, join, leave, update (docker swarm --help查看帮助)
节点管理: docker node子 命令有 accept, promote, demote, inspect, update, tasks, ls, rm (docker node --help查看帮助)
配置管理: docker config 子命令有 create, inspect, ls, rm (docker config--help查看帮助)
服务管理: docker service 子命令有 create, inspect, update, remove, tasks, ls, rm, ps (docker service--help查看帮助)
堆栈管理: docker stack 子命令有 deploy, services, ps, rm (docker stack--help查看帮助)
Dockerfile语法
用于构建一个新的Docker镜像的脚本文件,是由一系列命令和参数构成的脚本
构建新的镜像步骤
1:编写Dockerfile文件
2:通过docker build 命令生成新的镜像
3:通过docker run命令运行
语法规则
1:每条指令的保留字都必须为大写字母且后面至少要有一个参数
2:执行顺序按从上往下顺序
3:# 用于注释
4:每条指令都会创建一个新的镜像层,并对镜像进行提交
执行流程
1:Docker从基础镜像运行一个容器
2:执行每一条指令并对容器作出修改
3:执行类似docker commit 的操作提交一个新的镜像
4:docker再基于刚提交的镜像运行一个容器
5:执行Dockerfile中的下一条指令知道所有指令都执行完成
指令
# 注释
FROM 指定基于哪个镜像
MAINTAINER 指定作者信息
RUN 执行命令构建镜像层
EXPOSE 指定容器将对外公开的端口
CMD 指定容器启动时要运行的命令 (只能指定一条CMD指令)
ENTRYPOINT 接收容器创建是传递过来的参数
可以与CMD命令合起来用,来设置默认参数
WORKDIR 指定工作目录
镜像创建过程中RUN的工作目录
设置容器创建时的工作目录, CMD和ENTRYPOINT也会在这个目录下执行
ENV 设置镜像构建过程中的环境变量
USER 指定容器以什么用户运行
VOLUME 挂载目录
ADD 将文件复制到镜像中
如果添加的为本地的压缩文件,则docker会自动进行解压缩
COPY 类似与ADD,不同之处在于不会做解压工作
ONBUILD 镜像触发器
在镜像被其他镜像当作基础镜像时触发
只在直接子镜像中触发
ARG 指定一个变量,在构建期间可以使用
docker build 参数 -build-arg 可以指定变量值
备份与迁移
容器保存为镜像
docker commit [-m="提交的描述信息"][-a="创建者"] 容器名称|容器ID 生成的镜像名:[:标签名]
查看是否有挂载目录
docker inspect --format='{{.Mounts}}' 容器名
无目录挂载-容器保存为镜像
docker commit centos centos_new:1.0
centos是容器名称
centos_new 是新的镜像名称
有目录挂载情况
问题:如果Docker对容器挂载了数据目录,在将容器保存为镜像时,数据不会被保存到镜像中
原因:因为宿主机与容器做了路径映射,在commit一个新的镜像时,该路径下所有的数据都会被抛弃,不会被保存到新镜像中。可通过docker inspec --format='{{Mounts}}'镜像名 查看是否有目录挂载。
解决:目录挂载方法,先把在宿主机的数据备份在某个目录下,在docker run的时候使用-v 参数将宿主机上的目录映射到容器里的目标路径中。
拷贝方法:将宿主机的数据备份在某个目录下,通过拷贝的方法docker cp 将备份的数据复制进容器里的目标路径。
备份镜像
docker save -o centos.tar centos:7
-o 指定输出到的文件
镜像恢复与迁移
docker load -i centos.tar
停止容器
停止正在运行的容器(正常停止)
docker stop 容器名称|容器ID
强制停止正在运行的容器
docker kill 容器名称|容器ID
停止所有运行的容器
docker stop `docker ps -a -q`
启动容器
docker start 容器名称|容器ID
启动所有运行过的容器
docker start `docker ps -a -q`
退出容器
退出并停止当前容器,注意在容器内部的命令行执行
exit
退出不停止当前容器
Ctrl+p+q
创建容器
docker run [OPTIONS] 镜像名:标签名
OPTIONS
-i 表示交互式运行容器(就是创建容器后,马上会启动容器,并进入容器),通常与-t同时使用。
-t 启动后会进入其容器命令行,通常与-i同时使用,加入-it两个参数后,容器创建就能登录进去,即分配一个伪终端
--name 为创建的容器指定一个名称
-d 创建一个守护式容器在后台运行,并返回容器ID
-v 表示目录映射,格式为:-p 宿主机目录:容器目录
-p 表示端口映射,格式为:-p 宿主机端口:容器端口
-e 设置环境变量,只在运行时有效
-u 指定容器以什么用户运行
--network 设置网络
--restart 设置容器是否自动重启
-w 覆盖指定的工作目录
查看容器
查看正在运行的容器
docker ps
查看所有的容器(启动与未启动的容器)
docker ps -a
查看最后一次运行的容器
docker ps -l
查看停止的容器
docker ps -f status=exited
查看容器的CPU占用率
docker status
查看容器日志
docker logs -f --tail 100 容器ID
删除镜像
docker rmi 镜像ID
拉取镜像
docker pull 镜像名:标签名
若未输入标签名,默认拉取latest
列出已安装的所有镜像
docker images
只显示镜像ID
docker images -q
0 条评论
下一页