출처 : https://docs.docker.com/engine/admin/host_integration

Docker 컨테이너를 시스템 시작시 실행하는 방법은 다음과 같이 3가지가 있다.
  • upstart
  • systemd
  • supervisor

그중에서 systemd를 이용한 방법을 설명한다.
(CentOS에서는 systemd가 기본으로 설치되어 있으며, Ubuntu에서는 15.04 이후 버전에서 지원한다.)

Docker 컨테이너를 CentOS 부팅시 실행하려면 다음과 같이 설정해야 한다.

  • systemd를 이용하여
    • 서비스 파일 생성
    • 서비스를 시작
    • 서비스를 부팅시 실행될 수 있도록 활성화

다음 경로에 service 파일을 생성한다.
  /etc/systemd/system/docker_container.service

[Unit]
Wants=docker.service
After=docker.service

[Service]
RemainAfterExit=yes
ExecStart=/usr/bin/docker start docker_container_name
ExecStop=/usr/bin/docker stop docker_container_name

[Install]
WantedBy=multi-user.target

서비스를 시작한다.
systemctl start docker_container

부팅할 때 실행할 수 있도록 서비스를 활성화 한다.
systemctl enable docker_container

위와 같이 설정하면 CentOS 부팅시 서비스가 살행되면서 Docker Container는 자동 시작된다.
Docker start 명령은 단순히 Docker container를 실행만 하기 때문에
Container 내부의 서비스를 실행해주지 않는다.

다음과 같이 추가 설정이 필요하다.

Docker에 파일 추가(/entrypoint.sh)
#!/bin/sh
service nginx start
while true; do sleep 1d; done
Docker run으로 /entrypoint.sh 실행하기
docker run -itd --name docker_container_name -p 80:80 -v /root/data:/data docker_image_name /bin/bash -c '/entrypoint.sh'

entrypoint.sh가 종료되면서 container 실행이 종료되는 것을 막기 위해
sleep을 추가하였으므로, Docker에 접근할 때 Attach를 사용할 수 없다.

그 대신 docker exec 명령으로 bash를 실행합니다.
docker exec -it docker_container_name /bin/bash

Root 권한으로 실행하기 위해 -u root를 추가합니다.(Docker Version 1.7 이상)
docker exec -it -u root docker_container_name /bin/bash
2016/04/03 14:10 2016/04/03 14:10

글 걸기 주소 : 이 글에는 트랙백을 보낼 수 없습니다

덧글을 달아 주세요