Docker的一些小实践

最近经常在本地写一些小应用玩玩,但是每当想部署到阿里云上就觉得好麻烦。突然想到了Docker,有了它,真的超级方便。接下去就介绍下学习的过程,和写的几个实例遇到的坑。

Docker学习书籍

网上都推荐一本浙大出的Docker容器与容器云,我特地买了一本。不过看起来很吃力,讲了很多细节,对初学者并不友好。还是建议先把Docker-Practice看完并实践下,等对Docker有了基本的了解,在找感兴趣的点去看浙大那本书,这样会更好点。

Docker实践

  • ghost博客
    我自己的博客就是用的开源的ghost,当时是按照搭建Ghost博客来搭建的,花了不少时间。有了Docker,只需要一份docker-compose.yml就OK了。
version: "3"
services:
  ghost:
    image: ghost:latest
    container_name: ghost
    ports:
      - "2368:2368"
    volumes:
      - ./config.production.json:/var/lib/ghost/config.production.json:z
      - ./content:/var/lib/ghost/content:z
    depends_on:
      - mysql
    links:
      - mysql
    environment:
      - NODE_ENV:production
    restart: always
  mysql:
     image: mysql:5.7
     volumes:
       - ./db_data:/var/lib/mysql
     restart: always
     environment:
       MYSQL_ROOT_PASSWORD: yourrootpassword
       MYSQL_DATABASE: yourdatabase
       MYSQL_USER: youruser
       MYSQL_PASSWORD: yourpassword  

还少一个nginx,因为我装的应用比较多,都需要nginx来转发。所以我的nginx没有装在容器里。因为ghost暴露了2368端口,只要在nginx里proxy_pass http://127.0.0.1:2368;就行了。

还有一个问题要注意,就是因为ghost-links-mysql,所以在ghost的配置文件里,或者代码,所有关于mysql的引用(host)都需要改成mysql的名字,而不能用类似127.0.0.1的地址,因为这个对ghost是不可见的。听起来比较拗口,看下配置文件就明白了:

//config.production.json
...
  "database": {
    "client": "mysql",   
    "connection": {
       "host":"mysql",    //把127.0.0.1改成mysql
       "user":"ghost",
       "charset"  : "utf8"
       "password" : yourpassword, //这些要和docker-compose.yml里mysql下env里配置的一样
       "database" : yourdatabase,
       ...
     }
  },
...

接下去只要docker-compose up就行了。

  • Drone
    Drone这个实例,Docker-Practice上有。它是一个CI/CD工具,我们公司是用Gitlab来搭建的,两者都可以自动化的进行编译、测试、发布。

    书上的实例讲的太简单,直接看这个Drone安装概述,按这个教程来安装应该不会有什么障碍。

    不过我当时做这个实例,卡了很久,踩到一个大坑。因为我用nginx转发到/drone/的path下,没用/。所以界面一直显示有问题。
    后来我在issue里终于找到原因,Relative url path #475,原因就是Drone不支持Relative url。
    smile_fuck

结尾

当然学这些还远远不够,最好的学习方式当然是看源码。

作者:levi
comments powered by Disqus