Docker構建服務之部署和備份Jekyll網站
來自《第一本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="vector4wang@qq.com"
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="vector4wang@qq.com"
## 更換映象
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 .
注意:一定不要忘記更換容器的映象源…
啟動服務
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.
“卷是在一個或多個容器中特殊指定的目錄,卷會繞過聯合檔案系統,為持久化資料和共享資料提供幾個有用的特性。
卷可以在容器間共享和重用。
共享卷時不一定要執行相應的容器。
對卷的修改會直接在捲上反映出來。
更新映象時不會包含對卷的修改。
卷會一直存在,直到沒有容器使用它們。
利用卷,可以在不用提交映象修改的情況下,向映象里加入資料(如原始碼、資料或者其他內容),並且可以在容器間共享這些資料。
卷在Docker宿主機的/var/lib/docker/volumes目錄中。可以通過docker inspect命令檢視某個卷的具體位置,如docker inspect -f “{{ range .Mounts }}{{.}}{{end}}”。”
摘錄來自: [澳] 詹姆斯·特恩布林(James Turnbull). “第一本Docker書(修訂版)。” iBooks.
啟動apache
docker run -d -P --volumes-from vector_blog vector/apache
“–volumes-from把指定容器裡的所有卷都加入新建立的容器裡。這意味著,Apache容器可以訪問之前建立的james_blog容器裡/var/www/html卷中存放的編譯後的Jekyll網站。即便james_blog容器沒有執行,Apache容器也可以訪問這個卷”
**摘錄來自: [澳] 詹姆斯·特恩布林(James Turnbull). “第一本Docker書(修訂版)。” iBooks. **
此時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
編輯內容
進入宿主機的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
指定了–rm標誌,這個標誌對於只用一次的容器,或者說用完即扔的容器,很有用。這個標誌會在容器的程式執行完畢後,自動刪除容器。對於只用一次的容器來說,這是一種很方便的清理方法。
個人感覺還是備份到git上方便。
相關文章
- 開源Jekyll助您構建你的網站網站
- Nginx網站服務與LNMP構建Nginx網站LNMP
- 用Apache服務部署網站Apache網站
- spring cloud-之使用docker部署服務SpringCloudDocker
- 【Azure 應用服務】備份網站時由於檔案太大了,導致應用服務備份失敗。如何解決?網站
- docker&flask快速構建服務介面(二)DockerFlask
- docker 構建java 部署包DockerJava
- Laravel 中構建 grpc 服務--準備工作LaravelRPC
- 備份Kubernetes和Docker方法Docker
- docker初體驗:docker部署nginx服務DockerNginx
- linux之frp服務部署(內網穿透)LinuxFRP內網穿透
- 網站重構-後臺服務篇網站
- linux故障集合:架構階段備份服務-儲存服務錯誤Linux架構
- Docker:Docker部署Jenkins並共用宿主機Docker部署微服務多模組(二)構建微服務後端多模組DockerJenkins微服務後端
- 基於Docker和Kubernetes構建的部署管理和叢集管理Docker
- Linux網路服務之部署YUM倉庫Linux
- 備份dockerDocker
- 微服務之springCloud 生產者和docker部署(二)微服務SpringGCCloudDocker
- Docker 映象構建之 DockerfileDocker
- spring cloud構建網際網路分散式微服務雲平臺-docker部署spring cloud專案SpringCloud分散式微服務Docker
- 架構之:微服務和單體服務之爭架構微服務
- 使用 TensorFlow Serving 和 Docker 快速部署機器學習服務Docker機器學習
- ubuntu系統docker部署java後端服務和redis時,內網不能訪問UbuntuDockerJava後端Redis內網
- 用Docker執行Nginx和多個版本PHP部署網站DockerNginxPHP網站
- 部署docker-consul群集,Harbor構建Docker私有倉庫Docker
- 基於url-to-pdf-api構建docker映象,製作一個網頁另存服務APIDocker網頁
- 基於Docker部署Dubbo+Nacos服務Docker
- docker-Laravel-msyql-主從服務部署DockerLaravel
- 備份集和備份片之間的關係
- docker(二十三):docker通過docker-compose部署redmine服務Docker
- Web網站服務(二)Web網站
- Docker 關鍵字說明及一鍵構建相關服務Docker
- Docker部署flink備忘Docker
- Docker入門(三):nodejs後端服務部署DockerNodeJS後端
- 用 Golang 構建 gRPC 服務GolangRPC
- spring boot構建restful服務Spring BootREST
- [譯] 使用 Go 和 AWS Lambda 構建無服務 APIGoAPI
- 架構設計:服務自動化部署和管理流程架構