Docker的理解
Docker就是一个轻量化的容器,可以把系统尽可能,按容器拆分到最小,通过指定的命令进行构建、分发、部署。该笔记只针对Docker的进阶使用,不去详解Docker的安装,简单容器的Docker安装。
Docker部署自定义的项目
我们都实操过通过Docker安装Redis、Mysql并且通过文件挂载、映射端口,将容器与服务器打通。那么如何使用Docker来安装自定义的项目呢?
启动自定义镜像
示例项目代码地址:https://github.com/gzyunke/test-docker
- 拉取示例代码
使用命令Docker命令启动
- 先进行编译【设置镜像名、版本号】
docker build -t docker-test:version-1 .
服务器会根据dockerfile文件导入对应的包和环境。
运行构建的docker镜像
docker run -p 8090:8080 --name testDocker docker-test:version-1
- -p 与服务器的端口挂载
- -d 后台运行
- --name 指定docker容器的名称
常用的一些命令
`docker ps` 查看当前运行中的容器
`docker images` 查看镜像列表
`docker rm container-id` 删除指定 id 的容器
`docker stop/start container-id` 停止/启动指定 id 的容器
`docker rmi image-id` 删除指定 id 的镜像
`docker volume ls` 查看 volume 列表
`docker network ls` 查看网络列表
目录挂载
日常开发中我们常常在docker启动容器后可能后续开发中代码还会修改,需要重新启动,如果我们生成的一些文件,比如日志这些如果没有和服务器挂载就会在容器关闭或者重启后消失。因此我们需要将Docker文件和服务器文件进行挂载,这样不管我们容器启动多少次,都能把文件持久化到服务器上。
Docker提供了三种挂载方式
bind mount
直接把宿主机目录映射到容器内,适合挂代码目录和配置文件。可挂到多个容器上volume
由容器创建和管理,创建在宿主机,所以删除容器不会丢失,官方推荐,更高效,Linux 文件系统,适合存储数据库数据。可挂到多个容器上tmpfs mount
适合存储临时文件,存宿主机内存中。不可多容器共享。【一般不用】
将代码文件和docker容器文件挂载
docker run -p 8090:8080 -v /docker_test/test-docker:/app --name testDocker1 docker-test:version-1
注意:挂载后Docker会映射到服务器的本地代码,所以服务器也需要安装项目的运行镜像哦[这里是npm镜像,可以用yum安装一下];
我们启动下新的镜像并访问
可见我们并没有重新打包,docker就可以读到我们最新的修改。
目录挂载也常用用在我们启动微服务的时候,将用Docker部署的微服务的日志映射到我们的服务器,不但持久化而且不需要进入容器就能给访问。
多容器通信
场景:比如我们在同一台服务器安装了mysql、redis且部署了项目,而且项目中需要去使用redis,mysql时,这就设计到我们容器间的通信。
- 使用docker建立网络
docker network create test-net
- 将redis绑定到此网络
docker run -d --name redis --network test-net --network-alias redis redis
- 修改项目中访问redis的代码
取消注释
重新启动我们的项目
docker run -p 8090:8080 -v /docker_test/test-docker:/app --network test-net -d --name testDocker2 docker-test:version-1
发布与部署
我们可以将我们的docker文件上传到镜像库,例如阿里云镜像库这些。
- 构建镜像
docker build -t ${SERVICE_NAME}:${VERSION} .
docker tag xxxx 镜像地址路径
- 上传镜像
docker push ${SERVICE_NAME}:${VERSION}
然后发布时使用docker pull直接拉取对应的镜像即可
以上是学习Docker的部分内容,后续会继续更新....
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。