Docker创建自定义镜像并运行
reference-site-list
steps
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
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 的三种自动化部署方案
gitlab + systemd
.gitlab-ci.yml 中使用 systemd 的服务命令开启软件功能
gitlab + Dockerfile
.gitlab-ci.yml 中使用 Docker 构建镜像,然后运行容器
gitlab + Dockerfile + DockerCompose.yml
将 keep 中的核心部分构建成镜像,将_posts文件夹暴露为容器的数据卷,keep的核心程序作为固定的镜像源,_posts文件夹作为数据单独存放gitlab仓库
程序和数据进行分离,将 keep 固化为镜像,每次修改文章就只将gitlab-runner下的文件同步到镜像中设置的数据卷目录下就行了,然后再重启一下容器
.gitlab-ci.yml 中使用 Dockerfile 构建核心代码,compose.yml 记录根据镜像启动为容器的命令
Docker实现自动化CI/CD的基础
使用Harbor作为自定义docker镜像仓库,从自定义镜像仓库中拉取镜像,或从国内镜像源进行拉取,进行构建自定义镜像
使用Dockerfile从scratch构建基础镜像,或根据busybox或alpine构建轻量级基础镜像
自定义镜像仓库中存储创建的自定义镜像,每次CI/CD流程中都拉取自定义的基础镜像进行重新构建新镜像
自动构建的是基础镜像 + jdk和maven环境 + 微服务jar包
微服务容器之间通过网络进行通信
Dockerfile 镜像描述文件,根据此文件构建镜像
docker-compose.yml 镜像启动为容器的命令文件,根据此文件将镜像运行成容器
.gitlab-ci.yml 提交代码到gitlab仓库触发ci/cd的执行代码,使用Dockerfile构建镜像,使用docker-compose.yml运行容器
打包
- 压缩文件打包 zip tar
- 编译安装打包成.deb的dpkg安装包或flatpak安装包
- 将应用及依赖打包成docker镜像
自启动
- 将应用启动命令添加到systemd配置文件,注册为systemd服务
- 将应用打包为docker镜像,容器设置为自启动
虚拟化
- 虚拟机桌面应用:VMware, VirtualBox
- 虚拟化操作系统:PVE, ESXi
- 应用及环境虚拟: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"}}}
--------------------------------------------------------------------------------
|