Docker构建镜像过于缓慢解决-----Docker构建服务之部署和备份jekyll网站

参考原文链接: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.

“卷是在一个或多个容器中特殊指定的目录,卷会绕过联合文件系统,为持久化数据和共享数据提供几个有用的特性。
卷可以在容器间共享和重用。
共享卷时不一定要运行相应的容器。
对卷的修改会直接在卷上反映出来。
更新镜像时不会包含对卷的修改。
卷会一直存在,直到没有容器使用它们。
利用卷,可以在不用提交镜像修改的情况下,向镜像里加入数据(如源代码、数据或者其他内容),并且可以在容器间共享这些数据。
卷在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

微信截图_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

指定了--rm标志,这个标志对于只用一次的容器,或者说用完即扔的容器,很有用。这个标志会在容器的进程运行完毕后,自动删除容器。对于只用一次的容器来说,这是一种很方便的清理方法。

个人感觉还是备份到git上方便。

原文地址:https://www.cnblogs.com/manmanchanglu/p/12000025.html

时间: 2024-10-10 21:57:32

Docker构建镜像过于缓慢解决-----Docker构建服务之部署和备份jekyll网站的相关文章

Linux下docker配置镜像加速后重启docker服务失败

问题: docker配置镜像加速之后重启docker服务失败 安装好docker之后, 拉取镜像速度很慢, 甚至连接超时拉取不了, 所以更换镜像地址: #docker镜像加速器 #执行命令 curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://f1361db2.m.daocloud.io 按照提示重启: 查看/etc/docker/daemon.json文件: 仔细观察多了一个逗号, 将逗号删除, 问题解决

docker删除镜像时报错解决办法

报错信息 [[email protected] ~]# docker rmi 4950a54ede5a Error response from daemon: conflict: unable to delete 4950a54ede5a (must be forced) - image is being used by stopped container 834789a17497 报错原因 image is being used by stopped container 834789a1749

docker获取镜像很慢解决办法

docker pull selenium/hub获取非常慢 可以使用docker中国的官方镜像加速 docker pull registry.docker-cn.com/selenium/hub 官方加速:https://www.docker-cn.com/registry-mirror 原文地址:https://www.cnblogs.com/gcgc/p/9845050.html

docker学习-构建镜像

对于docker用户来说,最好的情况是不需要自己创建镜像,几乎所有的常用的数据库.中间件.应用软件等都有现成的docker官方镜像或其他人和组织创建的镜像,我们只需要稍微配置就可以直接使用.但是在某些情况下,也需要自己构建镜像.比如:1.找不到现成的镜像,比如自己开发应用程序2.需要在镜像中加入特定的功能.docker提供了两种构建镜像的方法:docker commit命令和Dockerfile构建文件. docker commit docker commit命令式创建镜像最直观的方法,其过程包

docker构建镜像

Docker 提供了两种构建镜像的方法: docker commit 命令Dockerfile 构建文件 示例: FROM golang:1.7.5 #基础镜像 RUN apt-get update #运行apt-get update命令创建一个新的层RUN apt-get install -y autoconf ENV GOPATH /gopath #定义环境变量ENV CODIS ${GOPATH}/src/github.com/CodisLabs/codis #/gopath/src/gi

使用Dockerfile构建镜像并push到私有仓库

环境:OS X 10.10.5 maven 3.3.9 Docker version 1.12.2 docker-machine version 0.8.2 程序示例为http://www.cnblogs.com/modprobe/p/6001333.html 中提到的服务发现程序 相关代码:https://github.com/li-hong/spring-cloud-demo 一.准备工作,安装docker-toolbox 方法:http://www.docker.com/products/

构建镜像 - 每天5分钟玩转容器技术(12)

对于 Docker 用户来说,最好的情况是不需要自己创建镜像.几乎所有常用的数据库.中间件.应用软件等都有现成的 Docker 官方镜像或其他人和组织创建的镜像,我们只需要稍作配置就可以直接使用. 使用现成镜像的好处除了省去自己做镜像的工作量外,更重要的是可以利用前人的经验.特别是使用那些官方镜像,因为 Docker 的工程师知道如何更好的在容器中运行软件. 当然,某些情况下我们也不得不自己构建镜像,比如: 找不到现成的镜像,比如自己开发的应用程序. 需要在镜像中加入特定的功能,比如官方镜像几乎

Docker的镜像

镜像是容器的运行基础,容器是镜像运行后台的形态 镜像的概念 镜像是一个包含程序运行必要依赖环境和代码的只读文件,它采用分层的文件系统,将每一次改变以读写层的形式增加到原来的只读文件上 镜像的系统结构 镜像的本质是磁盘上一系列文件的集合,创建新的镜像其实也就是对已有镜像文件的增删查改.但镜像之间并不是孤立,而是存在单向的文件依赖关系,如下图中,镜像1的FileA是镜像2FileA的修改版本,NewFile是新创建的文件,其他文件则全部引自镜像2 镜像的写时复制机制 通过docker run命令创建

DOCKER学习_011:使用Dockerfile制作docker镜像

前面使用commit的方式,制作一个docker镜像,本次介绍使用Dockerfile制作一个dockers镜像 [[email protected] ~]# mkdir /openssh [[email protected] ~]# cd /openssh [[email protected] openssh]# cp /etc/ssh/ssh_host_ecdsa_key /etc/ssh/ssh_host_ed25519_key /etc/ssh/ssh_host_rsa_key . [[