上篇文章回顾

利用github+docker+hexo搭建个人博客(一)

Docker使用

生成docker镜像
Dockerfile

1
docker build hexo:latest .

docker build构建镜像指令hexo:latest镜像名和tag.是在当前路径下作为根路径查找Dockerfile文件,生成docker镜像

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
Sending build context to Docker daemon  117.8kB
Step 1/17 : FROM alpine:latest
---> 961769676411
Step 2/17 : LABEL maintainer="chobon <[email protected]>"
---> Using cache
---> 2033655adf1e
Step 3/17 : ARG UID=1000
---> Using cache
---> fb0ed31a6f82
Step 4/17 : ARG GID=1000
---> Using cache
---> 6c34b75672d7
Step 5/17 : ARG PORT=4000
---> Using cache
---> effb42900db2
Step 6/17 : EXPOSE ${PORT}
---> Using cache
---> 8b6d4a5aec57
Step 7/17 : RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories
---> Using cache
---> 389a3d191c40
Step 8/17 : RUN apk add --no-cache shadow sudo && if [ -z "`getent group $GID`" ]; then addgroup -S -g $GID hexo; else groupmod -n hexo `getent group $GID | cut -d: -f1`; fi && if [ -z "`getent passwd $UID`"
]; then adduser -S -u $UID -G hexo -s /bin/sh hexo; else usermod -l hexo -g $GID -d /home/hexo -m `getent passwd $UID | cut -d: -f1`; fi && echo "hexo ALL=(root) NOPASSWD:ALL" > /etc/sudoers.d/hexo && chmod 0440 /etc/sudoers.d/hexo
---> Using cache
---> faeb2f247493
Step 9/17 : RUN apk --update --no-progress add git nodejs npm openssh && rm -rf /var/cache/apk/* && npm install -g hexo-cli
---> Using cache
---> cd14f3c867ef
Step 10/17 : WORKDIR /home/hexo
---> Using cache
---> e63b9f65e6f1
Step 11/17 : RUN hexo init . && npm install --save hexo-deployer-git
---> Using cache
---> 148818695354
Step 12/17 : VOLUME ["/home/hexo/source","/home/hexo/themes","/home/hexo/.ssh"] ---> Using cache
---> 95132d8d84ee
Step 13/17 : RUN chown -R hexo .
---> Using cache
---> 8e4e876d3013
Step 14/17 : USER hexo
---> Using cache
---> bd85dad4c30a
Step 15/17 : COPY entrypoint.sh /entrypoint.sh
---> d859e32e3a1a
Step 16/17 : ENTRYPOINT [ "/entrypoint.sh" ]
---> Running in 91217964b7e3
Removing intermediate container 91217964b7e3
---> bc499c026da6
Step 17/17 : CMD ["/bin/sh"]
---> Running in ee43d3deae3b
Removing intermediate container ee43d3deae3b
---> 038588b225ed
Successfully built 038588b225ed
Successfully tagged hexo:latest

查看docker镜像
镜像构建好了可以用docker images查看下

1
2
3
λ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
hexo latest 038588b225ed 5 minutes ago 144MB

启动docker容器
docker run 启动容器指令 -d 后台运行 -p 80:4000 把容器端口4000映射到宿主端口80上 -v参数是把宿主的数据卷挂载载容器里 --name hexo 为容器创建个名字hexo hexo:latest 选择镜像名字和tag

1
2
λ docker run -d -p 80:4000 -v /d/docker/hexo/source:/home/hexo/source -v /d/docker/hexo/themes:/home/hexo/themes -v /d/docker/hexo/_config.yml:/home/hexo/_config.yml -v /d/docker/hexo/ssh:/home/hexo/.ssh --name hexo hexo:latest s
b6f814686c5066ac71b427d0a6768658a0609641113b4dcdcc9e40e01aedc13d

查看docker容器
docker ps 查看当前运行的容器,加上-a后可以查看所有容器
docker stop $CONTAINER ID 或者 docker stop $CONTAINER NAME 停止容器
docker rm $CONTAINER ID 或者 docker stop $CONTAINER NAME 删除容器

1
2
3
λ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
956474737f35 b3028476e4d5 "/entrypoint.sh serv…" 5 minutes ago Up 5 minutes 0.0.0.0:80->4000/tcp hexo

Docker进阶

采用docker-compose编排
docker-compose优势

  • 每次操作都要输入指令和一堆参数,经常容易输错
  • 启动容器只能一个一个启动,不能快速简单的启动

Docker-Compose项目是Docker官方的开源项目,负责实现对Docker容器集群的快速编排。将所管理的容器分为三层,分别是工程(project),服务(service)以及容器(container)

这里简单介绍下docker-compose的语法,想了解更多的可以戳这里

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
docker-compose 命令:
介绍:
1、docker-compose 命令的执行都必须指定或者在当前目录下存在 compose 文件, 且输出的内容都是这个 compose.yml 文件定义的集群内的信息
2、每个集群中可以拥有多个 services, services 由 compose.yml 的 services 定义

选项:
-f 指定 compose 文件路径(可以指定多个)

子命令:
create 创建 compose 集群, 但不启动(已废弃, 使用 up --no-start 代替)
down 停止或删除容器, 网络, 镜像和数据卷
exec 运行容器中的命令或者连接容器
help 查看帮助信息
images 列出 compose 集群所用的镜像
kill kill 掉 compose 集群
logs 获取 compose 集群日志
pause 暂停 compose 集群
ps 列出正在运行的容器
pull 拉取 compose.yml 文件中定义的所有 docker 镜像
push 上传 compose.yml 文件中定义的所有 docker 镜像
restart 重启 compose 集群
rm 删除一个停止的容器或者 compose 集群
run 和 exec 相同
scale 更改 compose 集群内指定的 services 的副本数量
start 启动 compose 集群
stop 停止 compose 集群
top 显示 compose 集群中运行的进程及其状态
unpause 恢复被暂停的 compose 集群
up 创建并启动一个 compose 集群
version 输出 compose 版本

用于server的docker-compose

1
2
3
4
5
6
7
8
9
10
11
12
13
14
version: "3.7"
services:
hexo-server:
build: ../.
image: hexo:latest
container_name: hexo-server
ports:
- "80:4000"
volumes:
- "/d/docker/hexo/source:/home/hexo/source"
- "/d/docker/hexo/themes:/home/hexo/themes"
- "/d/docker/hexo/_config.yml:/home/hexo/_config.yml"
- "/d/docker/hexo/ssh:/home/hexo/.ssh"
command: server

用于deploy的docker-compose

1
2
3
4
5
6
7
8
9
10
11
12
version: "3.7"
services:
hexo-server:
build: ../.
image: hexo:latest
container_name: hexo-deploy
volumes:
- "/d/docker/hexo/source:/home/hexo/source"
- "/d/docker/hexo/themes:/home/hexo/themes"
- "/d/docker/hexo/_config.yml:/home/hexo/_config.yml"
- "/d/docker/hexo/ssh:/home/hexo/.ssh"
command: deploy
1
2
docker-compose up -d #启动
docker-compose down #停止

结语

整个基于github和docker的个人博客大致讲完了,以上都是亲测可操作。