参考原文链接:https://www.jianshu.com/p/e6b7e68f2ba7
来自《第一本Docker书》,我觉得很有趣,就记录一下
准备国内ubuntu镜像
每次构建Ubuntu容器然后安装软件的时候,都异常的卡,那是因为没有使用国内镜像,所以我事先准备了sources.list文件,一定要确定对应的ubuntu的版本号,我用的是18.04,内容如下
vi sources.list
输入以下内容
deb http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse
创建对应的Dockerfile
jekyll
mkdir jekyll
cd jekyll
vi Dockerfile
输入如下内容
FROM ubuntu:18.04
LABEL maintainer="[email protected]"
ENV REFRESHED_AT 2019-01-14
## 更换镜像
RUN rm -rf /etc/apt/sources.list
ADD sources.list /etc/apt/
RUN apt-get -qq update
RUN apt-get -qq install ruby ruby-dev libffi-dev build-essential nodejs
RUN gem install --no-rdoc --no-ri jekyll -v 2.5.3
VOLUME /data
VOLUME /var/www/html
WORKDIR /data
ENTRYPOINT [ "jekyll", "build", "--destination=/var/www/html" ]
最后一句命令的意思就是每次启动的时候就将/data下的源文件编译成可发布的网站内容,并放在/var/www/html中供下面的apache使用
apache
mkdir apache
cd apache
vi Dockerfile
输入以下内容
FROM ubuntu:18.04
LABEL maintainer="[email protected]"
## 更换镜像
RUN rm -rf /etc/apt/sources.list
ADD sources.list /etc/apt/
RUN apt-get -qq update
RUN apt-get -qq install apache2
VOLUME [ "/var/www/html" ]
WORKDIR /var/www/html
ENV APACHE_RUN_USER www-data
ENV APACHE_RUN_GROUP www-data
ENV APACHE_LOG_DIR /var/log/apache2
ENV APACHE_PID_FILE /var/run/apache2.pid
ENV APACHE_RUN_DIR /var/run/apache2
ENV APACHE_LOCK_DIR /var/lock/apache2
RUN mkdir -p $APACHE_RUN_DIR $APACHE_LOCK_DIR $APACHE_LOG_DIR
EXPOSE 80
ENTRYPOINT [ "/usr/sbin/apachectl" ]
CMD ["-D", "FOREGROUND"]
最终的目录结构为:
.
├── apache
│ ├── Dockerfile
│ └── sources.list
├── jekyll
├── Dockerfile
└── sources.list
构建
分别构建 jekyll 和 apache
cd jekyll
docker build -t vector/jekyll .
cd apache
docker build -t vector/apache .
注意:一定不要忘记更换容器的镜像源...
执行docker images
2019-01-14 21-28-56.png
启动服务
jekyll源文件
创建一个目录
mkdir jekyll-src
cd jekyll-src
从github上下载一个jekyll模板代码
git clone https://github.com/turnbullpress/james_blog.git
cd james_blog
启动jekyll
docker run -v /Users/wangxc/Develop/docker/jekyll-src/james_blog:/data/ --name vector_blog vector/jekyll
结果为
Configuration file: none
Source: /data
Destination: /var/www/html
Generating...
done.
启动apache
docker run -d -P --volumes-from vector_blog vector/apache
此时apache这个容器可以访问jekyll容器里的所有卷,我们进入apache内容看一下
docker exec -ti bdd9df87c189 /bin/bash
进入对应的目录可看到jekyll中的卷
/var/www/html
/data
查看宿主机与容器的端口映射情况
docker ps
或
docker port e539ff7ed7e8 80
得到0.0.0.0:32768,然后宿主机访问localhost:32768
微信截图_20190115092234.png
编辑内容
进入宿主机的jekyll模板源代码中,对_config.yml进行相关的修改,比如修改title为自己的名字或者其他的内容,保存后退出,然后执行
docker start vector_blog
通过查看日志docker logs vector_blog
可以看到
Configuration file: /data/_config.yml
Source: /data
Destination: /var/www/html
Generating...
done.
Auto-regeneration: disabled. Use --watch to enable.
已经跟新,这个时候,我们刷新下页面localhost:32768
就可以看到最新的内容了,是不是很有趣
备份
这里提供两种思路吧,
第一种:我自己用的是hexo,一般都是直接备份在github上,jekyll也一样,保存在github上是很容易很方便的;
第二种就是书上说的直接对卷进行备份
run --rm --volumes-from vector_blog -v $(pwd):/backup ubuntu:18.04 \
tar cvf /backup/vector_blog_backup.tar /var/www/html
个人感觉还是备份到git上方便。