0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

CentOS7でdockr-in-dockerすると毎回systemctl start dockerしないといけないのでなんとかしたい

Last updated at Posted at 2021-08-23

はじめに

kubernetesの書籍を読んでおり、VagrantにDockerをインストールして起動していたのですが、
Docker Desktopを利用しているのでVagrantが利用できなかったので、docker in dockerをしました。

そこで問題が発生したのでまとめます。

問題

以下の環境を作成しました。

┣ Dockerfile
┣ docker-compose.yml
┣ data
  ┣ hello_world.txt

Dockerfile

FROM centos:centos7

RUN yum update -y && yum upgrade -y
RUN yum install -y \
			yum-utils \
			device-mapper-persistent-data \
			lvm2 \
			git \
			curl

# docker & docker-compos install
RUN yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
RUN yum install -y\
			docker-ce \
			docker-ce-cli \
			containerd.io
RUN curl -L "https://github.com/docker/compose/releases/download/1.27.4/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose 
RUN chmod +x /usr/local/bin/docker-compose 
RUN ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose

docker-compose.yml

docker-compose.yml
  
version: '3'
services:
  centos7:
    restart: always
    build: .
    container_name: 'centos7'
    tty: true
    privileged: true    
    working_dir: '/'
    command: 
      - /sbin/init
    volumes:
      - ./data:/work/

まずDockerを起動します。

$ docker-compose build
$ docker-compose up

別のターミナルからコンテナの中に入ります。

$ docker exec -it centos7 bin/bash

docker daemonを起動します。

$ systemctl start docker

これで利用できるようになるのですが、コンテナを落とすたびにsystemctlコマンドをたたく必要があります。
また、CMDを使ってDockerfileに書いたりもしたのですが、反映されていないようでした。

毎回コンテナに入って設定するのは、使いづらいので困っていました。

原因

CentOS7をdocker-in-dockerで利用する場合にはcommand: /sbin/init/priviliage=Trueが必要となります。
それがおそらく原因になっていそうです。

また、ホストコンテナとソケットを共有することで、同じDockerを利用する方法もできませんでした。

FROM docker:20.10 as docker # 追加
FROM centos:centos7

RUN yum update -y && yum upgrade -y
RUN yum install -y \
			yum-utils \
			device-mapper-persistent-data \
			lvm2 \
			git \
			curl

# 追加
COPY --from=docker /usr/local/bin/docker /usr/local/bin/
docker-compose.yml
version: '3'
services:
  centos7:
    restart: always
    build: .
    container_name: 'centos7'
    tty: true
    privileged: true    
    working_dir: '/'
    command: 
      - /sbin/init
    volumes:
      - ./data:/work/
      - /var/run/docker.sock:/var/run/docker.sock

解決方法

CentOS7がそもそも利用できなさそうなので、他にイメージに変えたら上の方法ですんなりできました。
これでsystemctlでいちいち起動しなくて済みます。

また、alpineubuntuでは問題なくdockerが使えました。

Dockerfile

FROM docker:20.10 as docker
FROM alpine:3.14

RUN apk update && \
		apk upgrade

RUN apk add \
		docker-compose

# ホストのdocker daemon共有
COPY --from=docker /usr/local/bin/docker /usr/local/bin/

docker-compose.yml

docker-compose.yml
version: '3'
services:
  alpine:
    restart: always
    build: .
    container_name: 'alpine'
    tty: true  
    working_dir: '/work'
    volumes:
      - ./data:/work/
      - /var/run/docker.sock:/var/run/docker.sock

CentOS7を使っていないので根本的解決にはなっていませんが、CentOS7でないといけない理由がないのでこれで回避しました。

おわりに

肝心のkubernetes環境はできておりません。
ことごとくエラーが発生します。果たしてできるのでしょうか。。。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?