看完这篇文章你能了解到什么?
- 了解常见的 Docker 知识
- 利用 Docker 快速跨平台部署后端( Node.js + MongoDB + Redis + Nginx ) 项目
- 一些常见的 Linux 系统操作
- 编写 Dockerfile 文件
- 编写 docker-compose 文件
- 编写 一些常见的 nginx 配置文件
PS
这里主要讲的是利用容器化的方式去部署项目,容器化部署的好处有很多哈,比如容器可以很方便从一台电脑迁移到另一台电脑。
Docker 是什么?
简单一句话就是一个应用打包、分发、部署的工具,可以把它理解为一个轻量的虚拟机,但是是以容器的方式运行的。
支持各种系统 Linux,MacOS,Windows等。可以使用容器化部署以降低项目在不同的平台之间进行部署的成本。
再也不会出现 “怎么在我的电脑能运行,到了服务器就运行不了” 这种情况。
Docker 基本概念
使用 Docker 前需要先了解这几个基本概念
- 镜像(image)
- 容器(container)
- 仓库(repository)
获取镜像的方式可以通过 Dockerfile 文件创建,也可以通过 dockerHub 仓库下载
- Docker 中镜像和容器的关系就像 类 与 实例 的关系
- 镜像可以通过 Dockerfile 文件来生成,容器通过镜像来创建
Docker 使用国内镜像加速
Linux 系统
vim /etc/docker/daemon.json
Windows 系统,找到 daemon.json 文件并打开修改
C:\Users<你的用户名>.docker\daemon.json 文件
然后修改里面的 registry-mirrors 字段,可以添加多个源地址。可以在下载镜像的时候加速
{
"builder": {
"gc": {
"defaultKeepStorage": "20GB",
"enabled": true
}
},
"experimental": false,
"features": {
"buildkit": true
},
"registry-mirrors": [
"https://registry.docker-cn.com"
]
}
Hello world
Docker 允许你在容器内运行应用程序, 使用 docker run 命令来在容器内运行一个应用程序
docker run ubuntu:15.10 /bin/echo "Hello world"
安装一个 ubuntu 15.10版本的容器,并在容器中输出hello world,如果本地不存在该容器就会从远程仓库下载,相当于你在 Docker 容器内安装了一个 ubuntu 系统的虚拟环境,可以在里面执行各种Linux的指令。
交互式容器
相当于可以在容器虚拟环境中打开控制台。
放在镜像名后的是命令,这里我们希望有个交互式 Shell,因此用的是 /bin/bash
docker run -i -t ubuntu:15.10 /bin/bash
# 或者
docker run -it ubuntu:15.10 /bin/bash
- -t: 在新容器内指定一个伪终端或终端。
- -i: 允许你对容器内的标准输入 (STDIN) 进行交互。
- -d: 让容器在后台运行,输入后不进入交互模式
- -p:表示暴露端口
- 在控制台中输入exit退出
如果输入了-d 参数,会让容器后台运行,那么怎么进入到容器中呢?
一个是docker attach 容器ID命令,如果从这个命令进入到容器中后,再输入exit会把整个容器也退出,不再维持后台运行的状态。
另一个是docker exec -it 容器ID /bin/bash命令回到容器中,执行这个命令在容器中输入exit不会把整个容器也退出,容器仍将维持后台运行状态。
Docker状态
输入指令docker ps -a可以查看所有的容器。
如果要恢复一个已经停止的容器可以输入docker start 容器ID,同样的,想要停止一个容器可以输入docker stop 容器ID。
另外还有docker restart 容器ID 命令用于重启容器
容器的状态有7种:
- created(已创建)
- restarting(重启中)
- running 或 Up(运行中)
- removing(迁移中)
- paused(暂停)
- exited(停止)
- dead(死亡)
删除一个容器
docker rm -f 容器ID
清理列表中所有终止状态的容器
docker container prune
查看镜像
删除镜像
docker rmi 镜像仓库源
# 比如说要删除上面的test v0.0.1版本
docker rmi test:v0.0.1