添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
相关文章推荐
g4bwgqwov  ·  从 docker-compose 快速入门 ...·  3 年前    · 
g4bwgqwov  ·  Docker Compose 零基础入门·  3 年前    · 
g4bwgqwov  ·  Docker-Compose ...·  3 年前    · 
g4bwgqwov  ·  docker-compose安装与使用 - ...·  3 年前    · 
有情有义的开水瓶  ·  使用Docker ...·  12 月前    · 
深情的双杠  ·  SqlServer ...·  1 年前    · 
首发于 力扣(LeetCode)
从 docker-compose 快速入门 Docker

从 docker-compose 快速入门 Docker

不得不提容器化技术是未来的一个发展方向,它彻底释放了计算虚拟化的威力,极大提高了应用的运行效率,降低了云计算资源供应的成本!使用 Docker,可以让应用的部署、测试和分发都变得前所未有的高效和轻松!

无论是应用开发者、运维人员、还是其他信息技术从业人员,都有必要认识和掌握 Docker,节约有限的时间。

最近通过一小段时间的自学感受到了 Docker 给建站带来的乐趣,遂本文拟从一个初学者的角度,通过一个实际的例子——Ghost 博客部署来快速 感受 Docker 容器化技术带来的乐趣。


Ghost 是什么


简要来说,Ghost 是一个基于 NodeJS 的博客框架,由前 Wordpress 员工开发,十分轻巧并且适合作为博客系统,然而对于传统部署来说,我们需要在计算机上安装 Node,配置各种变量,十分麻烦,有兴趣的读者可以自行搜索 “Ghost 安装教程” 感受一下~


Docker Kicks in

正因为传统部署的麻烦,我们希望减少整个安装过程,将其简单化,以下介绍两个思路:

  • 思路一:安装 Docker 后安装 Ghost,并且直接暴露 80 端口,此时所有请求由 Docker 内的 Express 服务器处理,如果需要 SSL 的话只能使用 Cloudflare 类 CDN 产品,不易配置,但上手简单(大约 2 分钟);
  • 思路二:安装 Docker 后安装 Ghost,并且暴露一个其他端口(比如默认的 2368),前置宿主机中的 Nginx 进行反向代理,此时 SSL 请求和相关规则可以由 Nginx 处理,可配置性高,上手稍微复杂一些(大约 7 分钟);
  • 思路三:使用 Docker 化的 Ghost + nginx-proxy + nginx ,可配置性最高,上手较为复杂(大约 30 分钟),本文不打算介绍这类方法,感兴趣的读者建议参照: Ghost Blog With Automagic Let’s Encrypt SSL/TLS Certificate Renewal 一文;

无论方法一或是方法二,首先使用官方的 “一键安装脚本” 安装 Docker:

$ url -fsSL get.docker.com -o get-docker.sh
$ sh get-docker.sh
$ sudo systemctl start docker

根据惯例,安装完成后我们随意测试一下看看是否真的安装好了:

$ sudo docker run hello-world

如果不出意外能看到如下内容:

Hello from Docker!
This message shows that your installation appears to be working correctly.
To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
    (amd64)
 3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.
To try something more ambitious, you can run an Ubuntu container with:
 $ docker run -it ubuntu bash
Share images, automate workflows, and more with a free Docker ID:
 https://hub.docker.com/
For more examples and ideas, visit:
 https://docs.docker.com/engine/userguide/

好,Docker 安装到此,我们开始专注于我们要搭建的应用——Ghost 博客。


方法一:

这类方法非常简单,命令如下:

$ docker run -d --name some-ghost -p 80:2368 -v /path/to/ghost/blog:/var/lib/ghost/content ghost:latest
这个命令解读如下: -d 表示后台运行, --name 表示这个 Docker 容器的名称(容器和镜像类似 C++ 中的对象和类,根据一个镜像我们创建并启动了一个带有配置参数的容器), -p 80:2368 表示将容器内的 2368 端口映射到外部的 80 端口上, -v /path/to/ghost/blog:/var/lib/ghost/content 表示将外部路径中的 /path/to/ghost/blog 文件夹 “挂载” 到内部的 /var/lib/ghost/content ,这么做的好处就是数据和应用分离,如果需要跑路迁移的话直接将这个 blog 文件夹带走即可。

此时,我们应该可以通过直接访问对应 IP 看到一个已经开起来的 Ghost 博客了。

但是这样的方法用起来很不爽,因为一旦涉及到我们需要重启或者重新配置容器的话,就需要记这么长一条指令,而且前文也提到了这种方法可配置空间小,所以以下介绍另一个更加优雅的方法。


方法二:

这里我们需要用到 docker-compose ,通过以下指令即可安装:

$ pip3 install docker-compose

安装好后创建一个文件夹(比如 lc-docker)并且在文件夹内创建一个叫 docker-compose.yml 的文件(以下 docker-compose.yml 文件内容来自 Nova 的 GitHub 仓库 ),内容和部分解释如下:

version: '3'
services:
   leetcode: # 容器名字
     image: ghost:latest #表示使用 Ghost 镜像
     ports:
        - 9030:2368 # 将内部的 2368 映射到外部的 9030
     volumes:
        - ./data:/var/lib/ghost/content # 将同文件夹下的 data 目录 “挂载” 到内部 Ghost 数据目录
     environment:
        - url=http://articles.leetcode-cn.com # 设置一个对外时使用的 URL,如果不设置的话博客后台链接地址会错误
     restart: always # 如果容器内应用退出了,尝试重启

由于 compose 文件中定义了 ./data ,我们在文件夹内需要创建一个 data 文件夹,用于被挂载并存放 Ghost 数据。

启动,关闭,和删除容器(组),需要在包含 docker-compose.yml 目录中:

$ docker-compose up -d # 构建并启动
$ docker-compose stop # 停止(不删除容器)
$ docker-compose rm # 删除容器

此时根据文件定义我们已经在 127.0.0.1:9030 上开了一个 Ghost 实例了,现在需要用 Nginx 来反向代理它,Nginx 配置文件类似如下:

server {
    listen 80;
    server_name articles.leetcode-cn.com;
	location / {