在docker容器中正常启动docker服务

在docker容器中正常启动docker服务

背景

在容器中,运行docker,是devops中无法避免的场景,通常被应用于,容器被作为执行机使用,且要运行容器类任务时,网上的方案通常为三类。参考:
How To Run Docker in Docker Container 3 Easy Methods,但如果我不想使用dind镜像去构建,不想用宿主机的docker.sock,不想使用sysbox,就想用我的自己提供的基础镜像去构建出来自带docker的镜像,这些方法就不行了,当然你也可以使用DOCKERHOST去连接到正常使用docker服务机器,去执行docker命令,但这种方式显然比较麻烦。所以最好的方法就是在容器中去安装docker服务,我以alpine为基础镜像,构建出可以运行docker服务的镜像。

dockerfile代码

FROM alpine:latest
RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories \
&& apk add --no-cache curl \
&& apk add --no-cache iptables \
&& curl -O https://download.docker.com/linux/static/stable/x86_64/docker-20.10.21.tgz \
&& tar zxvf docker-20.10.21.tgz \
&& cp docker/* /usr/bin/ \
&& docker -v\
&& rm -rf /var/cache/apk/*

上面的docker安装步骤,是参考docker官网提供docker安装流程

构建及运行容器

构建

docker build -t dind-test:v1 -f dind.Dockerfile .

运行容器

docker run -it --privileged --name dind-1 dind-test:v1

运行dockerd

dockerd &

可以看到docker daemon已经启动起来了

测试

docker pull hello-world
在docker容器中正常启动docker服务_第1张图片

可以看到docker可以在容器中正常运行了。

你可能感兴趣的:(devops,docker,容器,运维)