Docker是一个应用打包、分发、部署的工具;
轻量的虚拟机,只虚拟软件需要的运行环境,多余的都不需要;
Docker支持的系统非常多,windows/Linux;
Docker性能好,最大化减少了没用的配置;
一个命令就可以部署好所需要的环境;不同系统的部署方式都一样;
目录
打包、分发、部署
打包:把软件运行所需要的第三方库、依赖、软件打包到一起,变成一个安装包;
分发:把打包好的“安装包”上传到镜像仓库,其他人可以很方便的获取;
部署:拿着“安装包”就可以一个命令运行起来应用,自动模拟出一模一样的运行环境;
Docker部署优势
防止在Windows上开发、测试,到Linux服务器配置运行环境部署,可能会因为环境配置不同导致运行出现问题;
在自己操作系统开发、测试 ——> 打包为Docker镜像 ——> 各种服务器只需要一个命令就可以部署好;
确保不同的机器上跑的是一致的运行环境;
镜像、容器
镜像: 可以理解为安装包,可以方便的进行传播和安装;
容器:软件安装后的状态,每个软件运行环境都是独立的、隔离的;
安装
官网下载安装:Download Docker Desktop | Docker
我是mac版本,基本不需要多余的配置;
关于配置问题可看:🎉 Docker 简介和安装 - Docker 快速入门
添加镜像:
Docker 中国官方镜像 | https://registry.docker-cn.com |
DaoCloud 镜像站 | http://f1361db2.m.daocloud.io |
Azure 中国镜像 | https://dockerhub.azk8s.cn |
添加至:
制作自己的镜像、安装包
docker参数解释网址:docker build | Docker Documentation
构建自己的镜像,之后编写Dockerfie;(代码下载链接:https://github.com/gzyunke/test-docker)
build为镜像(安装包):(在上述代码的dockerfile目录下,也就是要cd进去)
docker build -t test:v1 .
# -t 设置镜像的名字和版本号;
# 该命令要在dockerfile目录下
运行:
docker run -p 8080:8080 --name test-hello test:v1
# -p 映射容器内端口到宿主机;
# --name 容器名字;
# -d 后台运行
例子,参考:💽 制作自己的镜像 - Docker 快速入门
docker常用命令介绍
docker ps # 查看当前运行中的容器
docker image # 查看镜像列表
docker rm container-id # 删除指定id的容器
docker stop/start container-id #停止/启动指定id的容器
docker rmi image-id #删除指定id的镜像
docker volume ls # 查看volumr列表
docker network ls # 查看网络列表
目录挂载
使用docker运行后,改了项目代码不会立刻生效,需要重新build和run;
容器产生的数据,容器删除后就丢失了;
bind mount:直接把宿主机目录映射到容器内,适合挂载代码、配置文件,可挂载在多个容器上; -- 绝对路径 -v
volume: 由容器创建和管理,创建在宿主机,所以删除容器不会丢失;-- 只需要一个名字
挂载运行命令:
docker run -p 8080:8080 --name test-hello -v (绝对路径):/app -d test:v1
下图Mounts部分,显示代码目录已经被挂载在容器中:
多容器通信
很多项目不是独立运行的,需要数据库、缓存等依赖;
想要实现多容器互通,需要把这些容器放在同一个网络中;
创建一个名为test-net
的网络:
docker network create test-net
运行 Redis 在 test-net
网络中,别名redis
docker run -d --name redis --network test-net --network-alias redis redis:latest
修改代码中访问redis
的地址为网络别名
也就是上述代码app.js中关于redis部分取消注释;
运行项目,使用同一个网络:
docker run -p 8080:8080 --name test -v (绝对路径):/app --network test-net -d test:v1
运行后可以发现已经链接上redis