赞
踩
目录
Docker如何解决大型项目依赖关系复杂,不同组件依赖的兼容性问题?
Docker允许开发中将应用、依赖、函数库、配置一起打包,形成可移植镜像
Docker应用运行在容器中,使用沙箱机制,相互隔离
Docker如何解决开发、测试、生产环境有差异的问题?
Docker镜像中包含完整运行环境,包括系统函数库,仅依赖系统的Linux内核,因此可以在任意Linux操作系统上运行
Docker是一个快速交付应用、运行应用的技术,具备下列优势:
可以将程序及其依赖、运行环境一起打包为一个镜像,可以迁移到任意Linux操作系统
运行时利用沙箱机制形成隔离容器,各个应用互不干扰
启动、移除都可以通过一行命令完成,方便快捷
docker和虚拟机的差异:
docker是一个系统进程 体积小、启动速度快、性能好
虚拟机是操作系统中的操作系统 体积大、速度慢 性能一般
镜像:理解为软件的安装包
容器:通过镜像进行创建,运行起来就是容器,一个容器可以看作是一个进程 。一个镜像可以创建多个容器
docker架构(C/S):
client ---> 发送命令或者请求到Docker服务端 负责与主机中存在的守护进程通讯
server ---> 主机中存在一个守护进程 负责管理docker中的对象
常见的对象:镜像、容器、数据卷、网络
获取镜像:1.自己构建
2.获取镜像仓库(Docker Registry)中的镜像
安装相关命令:
systemctl start docker # 启动docker服务
systemctl stop docker # 停止docker服务
systemctl restart docker # 重启docker服务
systemctl status docker #查看docker状态
docker info #查看配置
docker -v #查看版本
docker -help #查看命令
镜像名称:[repository]:[tag] 没有指定tag时,默认是latest,代表最新版本的镜像
镜像命令:通过docker -help 命令查看 各种命令的使用
docker images 查看镜像列表
docker save 生成tar包
docker pull 拉取镜像
docker rmi 删除指定镜像
docker load 将tar包还原成镜像
docker push 将本地镜像推送到远程仓库
容器相关命令: docker run 创建容器并运行
容器时隔离环境 需要指定端口映射 --- 宿主机和容器内进程端口的对应关系
docker run --name 容器的名称 -p 宿主机的端口:容器内进程的端口 -d(后台运行)镜像名称
docker exec -it mn bash 进入到docker容器中
mn: 容器名称
-it: 给当前进入的容器创建一个标准输入、输出终端,允许我们与容器交互
bash:进入容器后执行的命令,bash是一个linux终端交互命令
docker logs 查看容器的运行日志 -f 持续查看日志
docker rm 删除指定容器 -f 可以删除运行中的容器
docker ps 查看运行状态容器信息 -a 查看所有状态的容器
将容器与数据分离,解耦合,方便操作容器内数据,保证数据安全
相关命令:docker volume create
docker volume ls #列出所有的数据卷
docker volume inspect #查看数据卷详情信息
docker volume prune #删除没有使用到的数据卷
挂载数据卷:
-v 数据卷名称(自定义):容器目录
如果容器运行时数据卷不存在 会自动被创建出来
数据卷挂载与目录直接挂载:
数据卷挂载耦合度低 由docker来管理目录 但是目录不好找
目录挂载耦合度高 需要我们自己管理 目录容易查找
dokerfile的本质是一个文件,通过指令描述镜像的构建过程,文件第一行必须是FROM,从一个基础镜像来构建,基础镜像可以是基本操作系统或是其他制作好的镜像。
镜像结构 ---是一个分层结构 ,每一层称为一个Layer
BaseImage层基础镜像:包含基本的系统函数库、环境变量、文件系统
Entrypoint:入口,镜像中应用启动的命令
分层是为了基本数据的复用:
docker build -t 镜像名称:镜像版本 -f /root/Dockerfile .
一份标准配置文件应该包含 version、services、networks 三大部分,其中最关键的就是 services 和 networks 两个部分。
1.version:docker-compose 文件版本,可在https://docs.docker.com/compose/compose-file/compose-versioning/ 查看docker-compose文件版本支持特定的 Docker 版本。
2.services:服务名称,自定义。
3.networks:定义网络。实现了网络隔离
微服务部署为docker容器 容器之间不是通过ip地址互联 而是通过容器名
#启动
docker-compose -f /data/docker-compose/docker-compose.yml up -d
#ps:列出所有运行容器
docker-compose ps
#logs:查看服务日志输出
docker-compose logs
#build:构建或者重新构建服务
docker-compose build
#start:启动指定服务已存在的容器
docker-compose start docker-compose-demo
#stop:停止已运行的服务的容器
docker-compose stop docker-compose-demo
#rm:删除指定服务的容器
docker-compose rm docker-compose-demo
#up:构建、启动容器
docker-compose up
#-d:后台运行 docker-compose up -d
#stop:停止容器
docker-compose stop
- version : '2' #compose文件版本支持特定的Docker版本
- services:
- inabacus: #服务名,自定义
- container_name: inabacus #容器名
- build: #基于Dockerfile文件构建镜像时使用的属性
- context: . #代表当前目录,也可以指定绝对路径[/path/test/Dockerfile]或相对路径[../test/Dockerfile],尽量放在当前目录,便于管理
- dockerfile: Dockerfile #指定Dockerfile文件名
- ports:
- - 8848:8848
- - 1884:1884 #指定宿主机端口映射到本容器的端口
- volumes:
- - ./data/inabacus/static/upload:/application/static/upload # 持久化上传的文件
- - ./data/inabacus/data/protocols:/application/data/protocols"
- restart: always #是否随docker服务启动重启
- networks: #加入指定网络
- - my-network #自定义的网络名
- environment: #设置容器的环境变量
- - TZ=Asia/Shanghai
- redis:
- image: redis
- container_name: redis
- ports:
- - "6379:6379"
- volumes:
- - ./data/redis:/data
- restart: always
- networks:
- - my-network
- elasticsearch:
- image: elasticsearch:6.8.11
- container_name: elasticsearch
- environment:
- ES_JAVA_OPTS: -Djava.net.preferIPv4Stack=true -Xms512m -Xmx512m
- transport.host: 0.0.0.0
- discovery.type: single-node
- bootstrap.memory_lock: "true"
- discovery.zen.minimum_master_nodes: 1
- discovery.zen.ping.unicast.hosts: elasticsearch
- volumes:
- - ./data/elasticsearch:/usr/share/elasticsearch/data
- ports:
- - "9200:9200"
- - "9300:9300"
- restart: always
- networks:
- - my-network
- kibana:
- image: kibana:6.8.11
- container_name: kibana
- environment:
- ELASTICSEARCH_URL: http://elasticsearch:9200
- links:
- - elasticsearch:elasticsearch
- ports:
- - "5601:5601"
- depends_on:
- - elasticsearch
- restart: always
- networks:
- - my-network
- networks:
- my-network:
搭建镜像仓库可以基于Docker官方提供的DockerRegistry来实现。
使用DockerCompose部署带有图象界面的DockerRegistry。
我们的私服采用的是http协议,默认不被Docker信任,所以需要做一个配置
推送、拉取镜像:
推送镜像到私有镜像服务必须先tag
docker push
docker pull
一个可视化的容器镜像的图形管理工具,利用Portainer可以轻松构建、管理和维护Docker环境。
docker run --name 容器的名称 -p 宿主机的端口:容器内进程的端口 -d(后台运行)镜像名称
docker exec -it 容器名 /bin/bash 进入到docker容器中
docker logs -f --tail 100 容器名 查看容器的运行日志 -f 持续查看日志
docker rm 删除指定容器 -f 可以删除运行中的容器
docker ps 查看运行状态容器信息 -a 查看所有状态的容器
docker stats --no-stream 容器状态及占用内存大小
docker info 查看docker所有信息
docker build -t 镜像名称:版本号 .
docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' 容器名称 查看容器内部ip
docker cp elasticsearch:/usr/share/elasticsearch/data/nodes /root/data 拷贝容器目录到宿主机目录
docker commit -a "zhang" -m "create new img" 容器ID inabacus-web:1.0 将当前容器制作成镜像
-a
指定新镜像作者
-c
使用 Dockerfile 指令来创建镜像
-m
提交生成镜像的说明信息
-p
在 commit 时,将容器暂停
docker save 镜像名称:版本号 -o 文件名称.tar
docker load -i /root/image.tar
docker-compose -h # 查看帮助
docker-compose up # 启动所有docker-compose服务
docker-compose down # 停止并删除容器、网络、卷、镜像
docker-compose logs yml里面的服务id # 查看容器输出日志
docker-compose config # 检查配置
docker-compose config -q # 检查配置,有问题才有输出
docker-compose restart # 重启服务
docker-compose start # 启动服务
docker-compose stop # 停止服务
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。