gpt4 book ai didi

docker - 在 Dockerfile 中克隆 git 存储库并对其进行处理

转载 作者:行者123 更新时间:2023-12-02 07:33:37 26 4
gpt4 key购买 nike

我正在尝试构建一个设置,其中我的 Dockerfile 包含克隆几个 git 存储库(以及其他内容)的说明。首次运行后,克隆的 git 存储库应可用于主机进行编辑。对本地克隆的 git 存储库的所有进一步编辑都应可用于 future 的 docker 构建。

那么,如何公开在 Dockerfile 中克隆的 git 存储库以便在主机上进行编辑。

最佳答案

您可以通过三种方式做到这一点。

这是Dockerfile

FROM node:alpine
RUN apk add --no-cache git
RUN apk add --no-cache openssh
WORKDIR /data
RUN git clone https://github.com/jahio/hello-world-node-express.git /data/app
WORKDIR /data/app
EXPOSE 3000

构建:

docker build -t node-test .

更新:

该死,我对 docker 很着迷:D另一个最简单且好的解决方案

在主机和容器中创建一个空目录并挂载该目录

/home/adiii/Desktop/container_Data:/to_host

使用-u flat将克隆的存储库复制到入口点的to_host,这样只有新文件才会被粘贴,并且主机数据将被持久化。

和entrypoint.sh

#!/bin/ash
cp -r -u /data/app /to_host && /bin/ash

dockerfile 更新部分。

ADD entrypoint.sh /usr/bin/entrypoint.sh
RUN chmod +x /usr/bin/entrypoint.sh
RUN WORKDIR /
RUN mkdir -p to_host

# so we will put the code in to_host after container bootup boom im crazy about docker so no need to make it complex..simple easy :D

ENTRYPOINT [ "/usr/bin/entrypoint.sh" ]

1: 使用 Docker 卷

创建名为代码的卷

docker volume create code

现在运行该容器并安装该卷。

docker run -p 3000:3000 -v myvol:/data/app --rm -it node-test ash

现在终止容器或停止容器,数据仍保留在卷中。

您可以查看操作系统是否为Linux。

/var/lib/docker/volumes/code/_data

你会看到三个

app.js  node_modules  package.json

2: 使用 bash 查看脚本中的注释

  #!/bin/bash
image_name=node-test
container_name=git_code


# for first time use first_time
if [ $1 == "first_time" ] ; then
# remove if exist
docker rm -f $container_name
#run contianer for first time to copy code
docker run --name $container_name -dit $image_name ash
fi
# check if running
if docker inspect -f '{{.State.Running}}' $container_name ; then
# copy code from container to /home/adiii/desktop
docker cp $container_name:/data/app /home/adil/Desktop/app
fi

# for normal runing using run
if [ $1 == "run" ]; then
# remove old container if running
docker rm -f $container_name
docker run --name $container_name -v /home/adil/Desktop/app:/data/app -dit $image_name
fi

现在在容器中运行命令

docker exec -it git_code ash

enter image description here

3:通过在运行时挂载宿主机的空目录和容器的代码目录。因此,当您下次使用挂载目录运行时,它将包含您从主机操作系统进行的任何更改的更新代码。但请确保容器运行后该目录的权限和终止的数据将存在,但此方法的行为不是恒定的。

docker run -p 3000:3000 -v /home/adiii/code/app:/data/app --rm -it node-test ash

这里/home/adiii/code/app是主机的一个空目录,容器终止后它仍然有克隆的代码,但我说它的行为有所不同。

关于docker - 在 Dockerfile 中克隆 git 存储库并对其进行处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49582202/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com