본문 바로가기
Container & Orchestration

인터넷 없는 환경에서 docker image 불러오는 방법

by abstract.jiin 2024. 5. 30.

현재 사용 중인 images 를 확인합니다.

docker images

# docker images
REPOSITORY                                         TAG             IMAGE ID       CREATED         SIZE
rabbitmq                                           management      87f244107294   12 months ago   246MB
redis                                              6.2.6-alpine    34e1dc356a22   2 years ago     702MB

 

docker save를 입력하면 현재 경로에 image가 tar 파일로 생성 됩니다.

docker save

# docker save redis> redis-6.2.6-alpine.tar
# docker save rabbitmq > rabbitmq-management.tar

 

tar 파일을 다른 서버로 이동해서 docker load 명령어로 해당 이미지를 docker image로 등록합니다.

docker load

# docker load < redis-6.2.6-alpine.tar
# docker load < rabbitmq-management.tar

 

docker compose.yaml 을 만들어 에서 image 이름을 명시하면 사용 가능합니다.

이미지는 tar 파일 이름이 아니라 등록된 docker images를 확인해야 합니다.

image : {REPOSITORY} : {TAG} 형식으로 작성합니다.

# cat docker-compose.yml 
version: "3.8"

services:
  redis:
    image: redis:6.2.6-alpine
    ports: 
      - 6379:6379
    command: redis-server --port 6379 #/usr/local/etc/redis/redis.conf
    container_name: redis
    volumes:
      - ${DATA}/redis:/data
      - ${HOME}/compose/redis/redis.conf:/usr/local/etc/redis/redis.conf
    restart: always

 

yaml 을 만들고 docker compose up  해주면 끝.

 

 

참고

해당 단계를 여러번 반복해야하기 때문에, sh를 작성했습니다. 

 

# cat import_img.sh 
#!/bin/bash

images=(
    "redis:redis-6.2.6-alpine.tar"
    "docker.elastic.co/beats/filebeat:filebeat-8.9.0-amd64.tar"
    "clickhouse/clickhouse-server:clickhouse-server-24.1.2-alpine.tar"
    "bitnami/zookeeper:zookeeper-3.7.1.tar"
    "signoz/signoz-schema-migrator:signoz-schema-migrator-0.88.14.tar"
    "signoz/alertmanager:signoz-alertmanager-0.23.4.tar"
    "signoz/frontend:signoz-frontend-0.40.0.tar"
    "signoz/query-service:signoz-query-service-0.40.0.tar"
    "signoz/signoz-otel-collector:signoz-otel-collector-0.88.14.tar"
    "rabbitmq:rabbitmq-management.tar"
    "docker.elastic.co/logstash/logstash:logstash-8.12.2.tar"
)

# Base path for the tar files
base_path="$BASE/docker"

# Save docker images
save() {
for image in "${images[@]}"; do
    img_name="${image%%:*}"
    tar_name="${image##*:}"
    docker save "$img_name" > "$tar_name"
done
}

# Load docker images
load() {
for image in "${images[@]}"; do
    tar_name="${image##*:}"
    docker load < "$base_path/$tar_name"
done
}

# Remove docker images
remove() {
for image in "${images[@]}"; do
    img_name="${image%%:*}"
    docker rmi "$img_name"
done
}

case "$1" in
        save)
                echo "Extracting tar files from docker..."
                save
                ;;

        load)

                echo "Getting tar file into docker image..."
                load
                ;;

        rmi)
                echo "Erasing docker image"
                remove
                ;;

        *)
        echo "Usage: $0 {save|load|rmi}"
        exit 1
        ;;


esac