使用docker创建项目镜像


使用docker创建项目镜像

本文创建的镜像为hexo静态博客的镜像,防止自己的服务器到期之后进行迁移的麻烦。

确定创建镜像所需的环境

  • node.js
  • git
  • nginx

编写自己的镜像的Dockerfile文件

docker指令详解

指令名称 用法 作用
FROM FROM image FROM指定构建镜像的基础源镜像,如果本地没有指定的镜像,则会自动从 Docker 的公共库 pull 镜像下来;FROM必须是 Dockerfile 中非注释行的第一个指令,即一个 Dockerfile 从FROM语句开始;FROM可以在一个 Dockerfile 中出现多次,如果有需求在一个 Dockerfile 中创建多个镜像;如果FROM语句没有指定镜像标签,则默认使用latest标签。
MAINTAINER MAINTAINER name 指定创建镜像的用户
RUN RUN “executable”, “param1”, “param2” 每条RUN指令将在当前镜像基础上执行指定命令,并提交为新的镜像,后续的RUN都在之前RUN提交后的镜像为基础,镜像是分层的,可以通过一个镜像的任何一个历史提交点来创建,类似源码的版本控制;
RUN [ “echo”, “$HOME” ]
RUN [ “sh”, “-c”, “echo”, “$HOME” ] RUN产生的缓存在下一次构建的时候是不会失效的,会被重用,可以使用–no-cache选项,即docker build –no-cache,如此便不会缓存。
CMD CMD “executable”,“param1”,“param2” CMD指定在 Dockerfile 中只能使用一次,如果有多个,则只有最后一个会生效。
CMD “param1”,“param2” CMD的目的是为了在启动容器时提供一个默认的命令执行选项。如果用户启动容器时指定了运行的命令,则会覆盖掉CMD指定的命令。
CMD command param1 param2 (shell form) CMD会在启动容器的时候执行,build 时不执行,而RUN只是在构建镜像的时候执行,后续镜像构建完成之后,启动容器就与RUN无关了
EXPOSE EXPOSE port [port…] 告诉 Docker 服务端容器对外映射的本地端口,需要在 docker run 的时候使用-p或者-P选项生效。
ENV ENV key value # 只能设置一个变量
ENV key=value … # 允许一次设置多个变量 指定一个环境变量,会被后续RUN指令使用,并在容器运行时保留。
ADD ADD src… dest ADD复制本地主机文件、目录或者远程文件 URLS 从 并且添加到容器指定路径中 。
COPY COPY src… dest COPY复制新文件或者目录从 并且添加到容器指定路径中 。用法同ADD,唯一的不同是不能指定远程文件 URLS。
ENTRYPOINT ENTRYPOINT “executable”, “param1”, “param2” 每个 Dockerfile 中只能有一个ENTRYPOINT,当指定多个时,只有最后一个生效。
ENTRYPOINT command param1 param2 (shell form) 配置容器启动后执行的命令,并且不可被 docker run 提供的参数覆盖,而CMD是可以被覆盖的。如果需要覆盖,则可以使用docker run --entrypoint选项。
VOLUME VOLUME ["/data"] 将本地主机目录挂载到目标容器中,或者将其他容器挂载的挂载点 挂载到目标容器中
USER USER daemon 指定运行容器时的用户名或 UID,后续的RUN、CMD、ENTRYPOINT也会使用指定用户。
WORKDIR WORKDIR /path/to/workdir 为后续的RUN、CMD、ENTRYPOINT指令配置工作目录。可以使用多个WORKDIR指令,后续命令如果参数是相对路径,则会基于之前命令指定的路径。
ONBUILD ONBUILD [INSTRUCTION] 使用该dockerfile生成的镜像A,并不执行ONBUILD中命令,如再来个dockerfile 基础镜像为镜像A时,生成的镜像B时就会执行ONBUILD中的命令

拉取ubuntu环境镜像

docker pull ubuntu:18.04

如果拉取镜像慢的话,可以配置一下镜像加速。

使用docker version查看自己的docker版本,大于1.10可以进行加速配置,小于的更新一下即可。

mkdir -p /etc/docker
tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://xxxxx.mirror.aliyuncs.com"]  #这里也可以用网易的镜像加速器:"http://hub-mirror.c.163.com"
}
EOF
systemctl daemon-reload
systemctl restart docker

配置nginx环境

安装步骤在后面的Dockerfile中,安装完nginx后,这里以ubuntu18.04为例,nginx的目录为/ect/nginx。我们修改配置文件只需要修改sites-available下的default即可。我这里在之前学习的时候都是不一样的路径,所以我这里以ubuntu为例。准备好一份default配置文件COPY即可。

server {
        listen 80 default_server;
        listen [::]:80 default_server;
        listen 443 ssl;
        ssl off;
        ssl_certificate cert/4287626_www.dingdm.club.pem;
        ssl_certificate_key cert/4287626_www.dingdm.club.key;
        ssl_session_timeout 5m;
        #ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aN$
        ssl_ciphers ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS;
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        ssl_prefer_server_ciphers on;

        root /home/www/hexo;

        server_name dingdm.club;
}

server_name为你的域名,root为你的静态网站所在的路径,可以自己创建,注意这里的路径不是你的hexo博客的路径,如果你在服务器上创建博客的话

ssl的配置为开启https的配置,这里先不赘述,不需要的话可以将ssl相关的配置注释掉即可

在你使用docker镜像服务器上配一下自己的git环境和仓库。(非docker容器)

更新频繁因此不将git整合到容器内。

apt-get update 
apt-get install git
git config --global user.name "你的用户名"
git config --global user.email "你的注册邮箱"

添加git用户,使用root账户也可以。

adduser git

修改文件内容赋予权限

chmod 740 /etc/sudoers
nano /etc/sudoers

找到root用户那,在下方添加一条

git ALL=(ALL) ALL

将文件权限恢复

chmod 400 /etc/sudoers

切换到git用户,并创建ssh文件夹

su git
cd ~
mkdir .ssh
cd .ssh

生成密钥公钥并配置

ssh-keygen
cp id_rsa.pub authorized_keys
chmod 600 ~/.ssh/authorized_keys
chmod 700 ~/.ssh

配置完成之后可以使用ssh -v git@ip连接测试

新建仓库并设置钩子脚本

cd ~
git init --bare blog.git
nano ~/blog.git/hooks/post-receive

输入以下内容

git --work-tree=/home/www/hexo --git-dir=/home/git/blog.git checkout -f

/home/www/hexo为你刚刚在nginx的配置文件里的root路径,/home/git/blog.git为你的仓库地址

制作Dockerfile文件

使用自己刚刚拉取的ubuntu镜像并安装nginx和配置环境

FROM c090eaba6b94
RUN apt-get update && apt-get install -y nginx
COPY default /etc/nginx/sites-available/
COPY www/ /home/www
CMD ["/usr/sbin/nginx","-g","daemon off;"]

制作镜像

docker build -t dingdm:1.0.0 .

镜像为nginx加静态博客页面。服务器到期后在考虑本地部署,使用ADD加载git仓库里新部署的文件信息并发布新版镜像。


文章作者: dinggc
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 dinggc !
评论
  目录