腾讯云迁移,服务Docker化

阿里云便宜用了两年,无奈是马云养肥杀猪时刻,价格来个翻倍,比起我当时买的价格已经翻两番,刚好遇上腾讯云搞活动,马上入手准备转移。刚好不破不立,顺便将以前的服务Docker化,整理整理代码。至于下次迁移会到哪个平台?who care,今朝有酒今朝醉,这次能撑3年。

环境

Ubuntu 16.04

切勿在没有配置 Docker APT 源的情况下直接使用 apt 命令安装 Docker.

一、使用APT安装

由于 apt 源使用 HTTPS 以确保软件下载过程中不被篡改。因此,我们首先需要添加使用 HTTPS 传输的软件包以及 CA 证书。

$ sudo apt-get update

$ sudo apt-get install \
    apt-transport-https \
    ca-certificates \
    curl \
    software-properties-common

鉴于国内网络问题,强烈建议使用国内源。

为了确认所下载软件包的合法性,需要添加软件源的 GPG 密钥。

curl -fsSL https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu/gpg | sudo apt-key add -

然后,我们需要向 source.list 中添加 Docker 软件源

$ sudo add-apt-repository \
    "deb [arch=amd64] https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu \
    $(lsb_release -cs) \
    stable"

以上命令会添加稳定版本的 Docker CE APT 镜像源,如果需要最新或者测试版本的 Docker CE 请将 stable 改为 edge 或者 test。从 Docker 17.06 开始,edge test 版本的 APT 镜像源也会包含稳定版本的 Docker。

二、安装Docker CE

更新 apt 软件包缓存,并安装 docker-ce

$ sudo apt-get update

$ sudo apt-get install docker-ce

另一种方式

可以采用脚本自动安装,效果一样,不用上面一系列步骤

在测试或开发环境中 Docker 官方为了简化安装流程,提供了一套便捷的安装脚本,Ubuntu 系统上可以使用这套脚本安装:

$ curl -fsSL get.docker.com -o get-docker.sh
$ sudo sh get-docker.sh --mirror Aliyun

执行这个命令后,脚本就会自动的将一切准备工作做好,并且把 Docker CE 的 Edge 版本安装在系统中。

启动 Docker CE

$ sudo systemctl enable docker
$ sudo systemctl start docker

至于建立docker 用户组,这个看自己的情况吧,个人开发者就不必计较这种东西了,可用可不用。最后测试Docker 是否安装正确

$ docker run hello-world

Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
9bb5a5d4561a: Pull complete
Digest: sha256:f5233545e43561214ca4891fd1157e1c3c563316ed8e237750d59bde73361e77
Status: Downloaded newer image for hello-world:latest

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/

若能正常输出以上信息,则说明安装成功。国情特殊,别忘了镜像加速,使用Docker官方提供的中国registry mirror

对于使用 systemd 的系统,请在 /etc/docker/daemon.json 中写入如下内容(如果文件不存在请新建该文件

{
  "registry-mirrors": [
    "https://registry.docker-cn.com"
  ]
}

注意,一定要保证该文件符合 json 规范,否则 Docker 将不能启动。

之后重新启动服务。

$ sudo systemctl daemon-reload
$ sudo systemctl restart docker

有时即使配置了SSH key可能也无法访问Git,需要在.ssh中创建config文件,指定配置即可,例如

# github.com
Host github.com
HostName github.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/github_rsa //生成的rsa key

之后的没什么难度了,一路docker-compose搞定

最好自己弄一个git仓库,方便下载部署,以后是我的docker-compose file大家可以参考下,数据已经脱敏

version: '2'

services:
  nginx:
    image: nginx:latest
    ports: 
      - "80:80"
    volumes:
      - ./nginx/nginx.conf:/etc/nginx/nginx.conf:ro
      - ./nginx/conf.d:/etc/nginx/conf.d:ro
  ghost:
    image: ghost:1-alpine
    restart: always
    ports:
      - 2368:2368
    volumes: 
      - ./blog:/var/lib/ghost/content
    environment:
      # see https://docs.ghost.org/docs/config#section-running-ghost-with-config-env-variables
      database__client: mysql
      database__connection__host: db
      database__connection__user: user
      database__connection__password: password
      database__connection__database: password
  db:
      image: mysql:5.7
      ports: 
          - "3306:3306"
      volumes: 
          - ./data:/var/lib/mysql
          - ./conf:/etc/mysql/conf.d
          - ./logs:/logs
      environment: 
           - MYSQL_ROOT_PASSWORD=password

因为是沿用之前的MySQL服务,所以配置都是以前的配置

nginx 配置使用以下注意proxy_pass即可

   server {
       listen 80;
       server_name hostname;
  
       access_log /var/log/nginx/ghost-access.log;
       error_log /var/log/nginx/ghost-error.log;
  
       location / {
1.           proxy_pass         http://ghost:2368;
          proxy_set_header     Host $host;
          proxy_set_header     X-Real-IP $remote_addr;
          proxy_set_header    X-Forwarded-Proto https;
          proxy_set_header     X-Forwarded-For $proxy_add_x_forwarded_for;
          proxy_connect_timeout     150;
          proxy_send_timeout     100;
          proxy_read_timeout    100;
          proxy_buffers        4 32k;
          client_max_body_size    10m;
          client_body_buffer_size    128;
      }
  }
~

一切准备就绪后

docker-compose up

再访问域名,大功告成!最后的数据迁移因为ghost有数据导入导出功能,所以还是很方便的,只在后台即可完成,而且因为是从0.x版本跨到最新版本,数据库字段已经变化很多,自己去适配非常费精力,感谢ghost!感谢Docker

Show Comments