Docker 是什么
- 一个应用打包、分发、部署的工具
- 一个轻量的虚拟机,只虚拟软件需要的运行环境
为什么要使用 Docker?
- 跨平台,你可以在各种系统里安装docker运行你的服务
- 性能好,只虚拟软件所需运行环境,最大化减少没用的配置
- 自动化,一个命令就可以部署运行你的项目
- 无差异部署
流程简介
- 在 Windows or Mac 上开发、测试
- 打包为 Docker 镜像
- 在docker环境里,一个命令跑起来你的项目
重要名词简介
- 镜像:就像一个软件包,复制粘贴到其他电脑,一样可以安装使用
- 容器:一个镜像可以安装N次,每次都可以生成不一样的容器,我们可以用name进行区分,它就像是软件安装以后,软件运行的环境,彼此隔离,我们称它为容器
安装
- 官方文档
- 手把手教你进行MAC安装Docker
- 手把手教你进行Linux安装Docker
- 手把手教你进行Windows安装Docker
注意重点(如果你不设置这些的话,服务器重启或者docker 服务重启以后,你的项目会无法自动启动哦~)
设置docker开机启动
查看已启动的服务
systemctl list-units -lype=service
查看是否设置开机启动
systemctl list-unit-files | grep enable
设置开机启动
systemctl enable docker.service
关闭开机启动
systemctl disable docker.service
设置docker容器自动启动
启动时加restart-always
docker run -tid -name 容器id -p 端口号 -restart-always -v 挂载
已经启动的项目.使用update更新:
docker update --restart = always 容器id
restart可选项
- no 不自动重启容器(这个是默认value)
- on-failure 容器发生error而退出(容器退出状态不为0)重启容器
- unless-stopped 在容器已经stop掉或Docker stoped/restarted的时候才重启容器
- always 在容器已经stop掉或Docker stoped/restarted的时候才重启容器
镜像加速
方案一:阿里云:搜索容器服务-镜像加速器
方案二:DaoCloud 道客加速器
配置 Docker 镜像站,该脚本可以将 --registry-mirror 加入到你的 Docker 配置文件 /etc/docker/daemon.json 中。适用于 Ubuntu14.04、Debian、CentOS6 、CentOS7、Fedora、Arch Linux、openSUSE Leap 42.1,其他版本可能有细微不同。更多详情请访问文档。
方案三:腾讯加速器
https://mirror.ccs.tencentyun.com
如果遇到无法下载的镜像,可以参考我的文章:
- Coolify系列01- 从0到1超详细手把手教你上手Heroku 和 Netlify 的开源替代方案
- Docker使用阿里云拉取配置源也无法拉取的镜像-github镜像镜像gcr.io
关于使用:举个栗子
我们执行下面的这个命令,就可以跑起来redis了
docker run -d -p 6379:6379 --name redis redis:latest
- run docker 运行软件
- -d 后台运行,如果不用这个,关掉命令行就会停止运行
- -p 6379:6379把容器内部的端口暴露到宿主机 宿主机:容器内
- –name redis 命名
- redis:latest下载最新版本的redis镜像
有任何不懂的命令,可以在这里搜索,点击这里
制作自己的镜像
编写 Dockerfile
- 参考我的这篇文章:手把手教你写Dockerfile以及测试
Build镜像:命令参考文档
docker build -t test:v1 .
- build 根据Dockerfile构建镜像
- -t test:v1 -t指定镜像名字,版本号,
- . 点代表在当前目录
运行镜像:命令参考文档
docker run -p 8080:8080 --name test-hello test:v1
-p 映射容器内端口到宿主机
–name 容器名字
-d 后台运行
常用命令
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 查看网络列表
目录挂载
为什么使用目录挂载?
- 修改代码想要立即生效,不想再build run
- 容器里的数据不可以丢失
如何挂载:文档参考
- bind mount 把宿主机目录映射到容器内,适合挂代码目录和配置文件,可挂到多个容器上
- volume 由容器创建和管理,创建在宿主机,所以删除容器不会丢失,官方推荐,更高效,Linux 文件系统,适合存储数据库数据。可挂到多个容器上
- tmpfs mount 适合存储临时文件,存宿主机内存中,不可多容器共享。
关于挂载,举个栗子:
- 挂载后,容器里的代码就会替换为你挂载的代码
- bind mount 方式用绝对路径 -v D:/code:/app
- volume 方式,只需要一个名字 -v db-data:/app
示例:
docker run -p 8080:8080 --name test-hello -v D:/code:/app -d test:v1
容器通信:文档参考
创建一个名为xiaojin的网络:
docker network create xiaojin
运行 Redis 在 xiaojin 网络中,别名redis
docker run -d --name redis --network xiaojin --network-alias redis redis:latest
容器中的代码想要访问redis,就可以这么写
- 步骤一:使用网络别名
- 步骤二:运行项目,使用同一个网络
docker run -p 8080:8080 --name test -v D:/test:/app --network xiaojin -d test:v1
Docker-Compose
为什么使用Docker-Compose?
- 想要一个容器运行多个项目,比如前后端项目,或者其他依赖项目
- 懒得设置网络什么的,太麻烦,直接全运行到同一个容器
怎么使用
- 安装文档
- 运行docker-compose检查是否安装成功
- 编写脚本docker-compose.yml,将项目多个服务集合在一起-参考文档
关于yml文件,举个栗子
version: "1.0"
services:
app:
build: ./
ports:
- 8080:8080
volumes:
- ./:/app
environment:
- TZ=Asia/Shanghai
redis:
image: redis:5.0.13
volumes:
- redis:/data
environment:
- TZ=Asia/Shanghai
volumes:
redis:
运行服务
在docker-compose.yml 文件所在目录,执行:
docker-compose up -d
docker-compose常用命令
- 查看运行状态:docker-compose ps
- 停止运行:docker-compose stop
- 重启:docker-compose restart
- 重启单个服务:docker-compose restart service-name
- 进入容器命令行:docker-compose exec service-name sh
- 查看容器运行log:docker-compose logs [service-name]
连接到远程Docker引擎
为什么要远程访问Docker?
- 可以使用http协议,获取json格式数据,很方便
- 使用代码控制镜像,so easy
怎么配置才可以远程访问呢?
- 参考我的这篇文章:保姆级手把手教你如何使用HTTP远程连接Docker
今天就写到这里啦~
- 小伙伴们,( ̄ω ̄( ̄ω ̄〃 ( ̄ω ̄〃)ゝ我们明天再见啦~~
- 大家要天天开心哦
欢迎大家指出文章需要改正之处~
学无止境,合作共赢
欢迎路过的小哥哥小姐姐们提出更好的意见哇~~