我正在尝试建立一个安装程序,其中我的Dockerfile具有克隆几个git repos的指令(以及其他东西)。第一次运行后,应将克隆的git repos提供给主机以进行编辑。应该对本地克隆的git repos进行所有进一步的编辑,以供将来的docker构建使用。
因此,如何显示在Dockerfile中克隆的git repos以便在主机上进行编辑。
您可以通过三种方式做到这一点。
这是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
Run Code Online (Sandbox Code Playgroud)
建立:
docker build -t node-test .
Run Code Online (Sandbox Code Playgroud)
更新:
该死,我为docker:D感到疯狂
在主机和容器中创建一个空目录并挂载该目录
/home/adiii/Desktop/container_Data:/to_host
Run Code Online (Sandbox Code Playgroud)
将克隆的回购协议复制到平面to_host的入口点,-u这样就只会粘贴新文件,并且主机数据将是持久性的。
和entrypoint.sh
#!/bin/ash
cp -r -u /data/app /to_host && /bin/ash
Run Code Online (Sandbox Code Playgroud)
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" ]
Run Code Online (Sandbox Code Playgroud)
1: 使用Docker卷
创建卷命名代码
docker volume create code
Run Code Online (Sandbox Code Playgroud)
现在,在安装该卷的情况下运行该容器。
docker run -p 3000:3000 -v myvol:/data/app --rm -it node-test ash
Run Code Online (Sandbox Code Playgroud)
现在终止容器或停止容器将仍然保留卷中的数据。
您可以找到操作系统是否为Linux。
/var/lib/docker/volumes/code/_data
Run Code Online (Sandbox Code Playgroud)
你会看到三个
app.js node_modules package.json
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
现在在容器中运行命令
docker exec -it git_code ash
Run Code Online (Sandbox Code Playgroud)
3:在运行时通过将主机的空目录与容器的代码目录一起装入。因此,当您下次使用安装目录运行时,它将包含您从主机OS进行任何更改的更新代码。但是,请确保在容器运行并终止数据之后该目录的权限将存在,但是此方法的行为不是恒定的。
docker run -p 3000:3000 -v /home/adiii/code/app:/data/app --rm -it node-test ash
Run Code Online (Sandbox Code Playgroud)
这/home/adiii/code/app是主机的空目录,在终止容器后,它仍具有克隆代码,但我说过,其行为有所不同。
| 归档时间: |
|
| 查看次数: |
4633 次 |
| 最近记录: |