Docker创建自定义镜像并运行
Xplorist Lv6

Docker创建自定义镜像并运行

reference-site-list

steps

  • code
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
55
56
57
58
59
60
docker image pull node:18-alpine

docker image ls

docker ps -a

docker run --name node -it node:18-alpine /bin/sh

docker exec -it node sh

# Stop the interactive container session with Ctrl + D

systemctl restart keep.service && systemctl status keep.service

systemctl stop keep.service && systemctl disable keep.service && systemctl status keep.service

cat > /home/keep/Dockerfile << EOF
# syntax=docker/dockerfile:1
FROM node:18-alpine
WORKDIR /app
COPY . .
RUN yarn install
CMD yarn hexo server
EXPOSE 4000
EOF

cat > /home/keep/.gitlab-ci.yml << EOF
build:
stage: build
before_script:
- echo "==== - gitlab-runner start build - ====="
script:
- pwd
- docker stop keep && docker rm -f keep && docker rmi -f keep
- docker build -t keep .
- docker run --name keep --restart always -dp 127.0.0.1:4000:4000 keep
- docker logs -n 50 keep
tags:
- xplorist_tech_runner
only:
- main
EOF

cd /home/keep

docker build -t keep .

docker image ls

docker run --name keep --restart always -dp 127.0.0.1:4000:4000 keep

docker logs -n 50 keep

docker ps -a

docker stop keep

docker rm -f keep

docker rmi -f keep

自动化部署方案

keep 的三种自动化部署方案

  1. gitlab + systemd
    .gitlab-ci.yml 中使用 systemd 的服务命令开启软件功能

  2. gitlab + Dockerfile
    .gitlab-ci.yml 中使用 Docker 构建镜像,然后运行容器

  3. gitlab + Dockerfile + DockerCompose.yml
    将 keep 中的核心部分构建成镜像,将_posts文件夹暴露为容器的数据卷,keep的核心程序作为固定的镜像源,_posts文件夹作为数据单独存放gitlab仓库
    程序和数据进行分离,将 keep 固化为镜像,每次修改文章就只将gitlab-runner下的文件同步到镜像中设置的数据卷目录下就行了,然后再重启一下容器
    .gitlab-ci.yml 中使用 Dockerfile 构建核心代码,compose.yml 记录根据镜像启动为容器的命令

Docker实现自动化CI/CD的基础

  1. 使用Harbor作为自定义docker镜像仓库,从自定义镜像仓库中拉取镜像,或从国内镜像源进行拉取,进行构建自定义镜像

  2. 使用Dockerfile从scratch构建基础镜像,或根据busybox或alpine构建轻量级基础镜像

  3. 自定义镜像仓库中存储创建的自定义镜像,每次CI/CD流程中都拉取自定义的基础镜像进行重新构建新镜像

自动构建的是基础镜像 + jdk和maven环境 + 微服务jar包

微服务容器之间通过网络进行通信

Dockerfile 镜像描述文件,根据此文件构建镜像
docker-compose.yml 镜像启动为容器的命令文件,根据此文件将镜像运行成容器
.gitlab-ci.yml 提交代码到gitlab仓库触发ci/cd的执行代码,使用Dockerfile构建镜像,使用docker-compose.yml运行容器

打包

  1. 压缩文件打包 zip tar
  2. 编译安装打包成.deb的dpkg安装包或flatpak安装包
  3. 将应用及依赖打包成docker镜像

自启动

  1. 将应用启动命令添加到systemd配置文件,注册为systemd服务
  2. 将应用打包为docker镜像,容器设置为自启动

虚拟化

  1. 虚拟机桌面应用:VMware, VirtualBox
  2. 虚拟化操作系统:PVE, ESXi
  3. 应用及环境虚拟:Docker

craft-draft

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
--------------------------------------------------------------------------------

todo

- [ ] 搭建GitLab
- [ ] 搭建Jenkins
- [ ] 搭建DockerEngine
- [ ] 搭建Harbor


- [ ] 将keep程序与内容文件库拆开,keep程序独立成docker应用,使用Dockerfile进行构建镜像,使用docker-compose.yml运行成容器
- [ ] 将内容文件独立成gitlab仓库,提交代码后gitlab-runner执行.gitlab-ci.yml文件中的代码,使用docker-compose.yml运行keep镜像容器

- [ ] keep源码中使用.gitlab-ci.yml来根据Dockerfile构建镜像
- [ ] 内容文件仓库中使用.gitlab-ci.yml来根据docker-compose.yml运行keep的image的container

--------------------------------------------------------------------------------

docker run -it keep /bin/sh

docker exec -it keep sh

cd /app/source/_posts

echo $(docker image ls | grep memos | awk 'NR==1{print $3}')

docker stop keep && docker rm -f keep && docker rmi -f $(docker image ls | grep keep | awk 'NR==1{print $3}')

docker rmi -f $(docker image ls | grep node | awk 'NR==1{print $3}')

--------------------------------------------------------------------------------

{"version":"3.0","services":{"keep":{"image":"keep","container_name":"keep","working_dir":"/app","volumes":["/home/keep/keep_posts/:/app/source/_posts"],"ports":["127.0.0.1:4000:4000"],"restart":"always"}}}

--------------------------------------------------------------------------------
 评论