포시코딩

[Docker] image 다른 pc로 옮겨서 컨테이너화 본문

카테고리 없음

[Docker] image 다른 pc로 옮겨서 컨테이너화

포시 2023. 8. 18. 11:51
728x90

MySQL, MariaDB

이미지 저장

docker ps -a

docker images

먼저 옮길 대상이 되는 컨테이너와 일치하는 이미지 확인

 

sudo docker save -o my_image.tar my_image:tag

-o: 'output'의 약자, 이미지를 아카이브 파일로 출력할 위치나 경로를 지정하는데 사용

추출하면 권한 때문에 빨갛게 나오는데 옮기려면 권한이 필요하니 chmod를 통해 755로 바꿔준다. 

 

sudo chmod 755 mariadb_10.5.tar

 

파일 복사

파일은 Filezila로 옮겼다. (해당 부분은 생략)

 

이미지 불러오기

docker load -i mariadb_10.5.tar

-i: input

이미지를 불러온 모습

 

컨테이너 생성 및 실행

Docker 네트워크 생성

docker network ls
docker network create nginx-net
docker network ls

'nginx-net'이라는 Docker 네트워크 생성

 

MariaDB 컨테이너 실행 및 환경설정 세팅

docker run \
--name shared-mariadb \
-p 3306:3306 \
--network nginx-net \
--network-alias shared-mariadb \
-v /Users/seonghun/dev/docker-data/mariadb-data:/var/lib/mysql \
-e MARIADB_ROOT_PASSWORD=3999 \
-d mariadb:10.5

\ 를 다 지우면서 한줄로 이어붙여 입력하면 된다. 

 

  • `docker run`: Docker 컨테이너 실행 명령어
  • `--name shared-mariadb`: 컨테이너에 'shared-mariadb'라는 이름 할당
  • `-p 3306:3306`: 호스트의 포트 3306과 컨테이너의 포트 3306 연결
  • `--network nginx-net`: 'nginx-net'이라는 Docker 네트워크에 연결
  • `--network-alias shared-mariadb`: 'nginx-net' 네트워크 내에서 사용할 별칭을 지정하는 옵션
  • `-v /Users/seonghun/dev/docker-data/mariadb-data:/var/lib/mysql`:
    호스트의 `/Users/seonghun/dev/docker-data/mariadb-data` 디렉토리와 (생성되어있어야함)
    컨테이너의 `/var/lib/mysql` 디렉토리를 볼륨 마운트하여 MariaDB 데이터를 호스트에 저장하고 유지
  • `--env MARIADB_ROOT_PASSWORD=3999`:
    컨테이너 내에서 사용할 환경 변수를 설정하는 옵션으로, MariaDB의 루트 비밀번호 지정
  • `-d mariadb:10.5`: 컨테이너를 백그라운드에서 실행하는 옵션. `mariadb:10.5` 이미지를 사용하여 컨테이너 생성

 

컨테이너 실행 확인

docker ps

컨테이너가 Up 상태로 잘 실행된 것을 확인할 수 있다. 

 

다른 방법

컨테이너를 export, import 명령어를 통해 바로 파일어 옮기는 방법도 존재한다. 

 

MongoDB

이미지 파일 복사 후 불러오는 과정은 같으므로 생략

 

컨테이너 생성 및 실행

docker run \
--name shared-mongodb \
-p 27017:27017 \
--network nginx-net \
--network-alias shared-mongodb \
-v /Users/seonghun/dev/docker-data/mongodb/conf:/etc/mongo \
-v /Users/seonghun/dev/docker-data/mongodb/data:/data/db \
-e MONGO_INITDB_ROOT_USERNAME=root \
-e MONGO_INITDB_ROOT_PASSWORD=3999 \
-d mongo:4.4.18

명령어 구조는 MySQL 때와 같다. 마찬가지로 \ 빼고 다 붙여서 실행

마찬가지로 host의 conf, data 폴더를 만든 상태여야함

mkdir -p /Users/seonghun/dev/docker-data/mongodb/conf
mkdir -p /Users/seonghun/dev/docker-data/mongodb/data

https://4sii.tistory.com/643

 

mkdir -p

# 부모 디렉토리 자동 생성 # 하위 폴더 자동 생성 # 모두 생성 mkdir -p /aaa/bbb/ccc/ddd -p: parents 를 의미하며 중간에 존재하지 않는 부모 디렉토리들도 자동으로 생성한다.

4sii.tistory.com

 

자주 사용하는 Docker run 옵션들

  • -p, --publish와 같은 뜻. 호스트와 컨테이너 간의 포트 매핑 설정
  • -v, --volume과 같은 뜻. 호스트와 컨테이너 간의 볼륨 마운트 설정
  • -e, --env: 환경 변수를 컨테이너 내부에 전달
  • -d, --detach: 컨테이너를 백그라운드에서 실행
  • --user: 컨테이너 내부에서 실행될 사용자 지정
  • --network: 컨테이너를 특정 네트워크에 연결
  • --rm: 컨테이너가 종료되면 자동 삭제
728x90