什么是Docker
Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的 容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。Docker 技术的三大核心概念,分别是:镜像 Image、容器 Container、仓库Repository。
核心概念
- Build , Ship and Run (搭建、运输、运行);
- Build once , Run anywhere (一次搭建,处处运行);
- Docker 本身并不是容器,它是创建容器的工具,是应用容器引擎;
- Docker 三大核心概念,分别是:镜像 Image,容器 Container、仓库 Repository;
- Docker 技术使用 Linux 内核和内核功能(例如 Cgroups 和 namespaces)来分隔进程,以便 各进程相互独立运行。
- 由于 Namespace 和 Cgroups 功能仅在 Linux 上可用,因此容器无法在其他操作系统上运 行。那么 Docker 如何在 macOS 或 Windows 上运行?Docker 实际上使用了一个技巧,并 在非 Linux 操作系统上安装 Linux 虚拟机,然后在虚拟机内运行容器。
- 镜像是一个可执行包,其包含运行应用程序所需的代码、运行时、库、环境变量和配置文 件,容器是镜像的运行时实例。
快速开始
- 为了快捷,我们直接使用Vue 脚手架构建项目:
vue create docker-demo
- 启动项目:
npm run serve
- 打包项目:
npm run build
- 项目目录下的 Dist 就是我们要部署的静态资源了,我们继续下一步。需要注意:前端 项目一般分两类,一类直接 Nginx 静态部署,一类需要启动 Node 服务。
- 新建 Dockerfile:
cd docker-demo && touch Dockerfile
, 然后可以看到项目目录中成功创建了 Dockerfile 文件。 - 准备 Nginx 镜像,运行你的 Docker 桌面端,就会默认启动实例,我们在控制台拉取 Nginx 镜像:
docker pull nginx
- 镜像准备 OK,我们在根目录创建 Nginx 配置文件:
touch default.conf
server {
listen 80;
server_name localhost;
#charset koi8-r;
access_log /var/log/nginx/host.access.log main;
error_log /var/log/nginx/error.log error;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}
- 配置镜像,打开 Dockerfile ,写入如下内容:
FROM nginx
COPY dist/ /usr/share/nginx/html/
COPY default.conf /etc/nginx/conf.d/default.conf
我们逐行解释一下代码:
-
FROM nginx 指定该镜像是基于 nginx:latest 镜像而构建的;
-
COPY dist/ /usr/share/nginx/html/ 命令的意思是将项目根目录下 dist 文件夹中的所有文 件复制到镜像中 /usr/share/nginx/html/ 目录下;
-
COPY default.conf /etc/nginx/conf.d/default.conf 将 default.conf 复制到 etc/nginx/conf.d/default.conf,用本地的 default.conf 配置来替换 Nginx 镜像里的默认配 置。
- 构建镜像,Docker 通过 build 命令来构建镜像:
docker build -t jartto-docker-demo .
- -t 参数给镜像命名 jartto-docker-demo
- . 是基于当前目录的 Dockerfile 来构建镜像
- 镜像制作成功!我们来查看一下容器:
docker image ls | grep jartto-docker-demo
- 运行容器:
docker run -d -p 3000:80 --name docker-vue jartto-docker-demo
- -d 设置容器在后台运行
- -p 表示端口映射,把本机的 3000 端口映射到 container 的 80 端口(这样外网就能通过本机的 3000 端口访问了 )
- –name 设置容器名 docker-vue
- jartto-docker-demo 是我们上面构建的镜像名字
- 打包镜像到本地(默认在项目所在目录):
docker save -o 打包后镜像的名称.tar 镜像id
- 导入本地的镜像文件到docker:
docker load --input 本地镜像.tar文件的位置