docker container 로 서버 세팅 등 작업을 다 해놨다면
그대로 이미지로 떠서 dockerhub 레포지토리에 업로드 해놓고
나중에 다른환경에서도 바로 pull 받아서 사용할 수 있다.
git과 비슷하게 생각하면 된다.
1. dockerhub에서 해당 이미지를 관리할 레포지토리 생성
2. 컨테이너를 commit 해서 hub에 올릴 image를 생성
3. 생성한 image를 dockerhub 로 push
4. image를 pull 받아서 사용
1. dockerhub에서 해당 이미지를 관리할 레포지토리 생성
https://hub.docker.com/repositories
도커허브에 계정을 생성하고
Repositories 메뉴 -> Create Repository
눌러서 레포지토리 이름을 생성
생성된 레포지토리 -
docker push dockingmosei/laravel8:tagname
이 레포지토리를 사용하기 위해서는 이렇게 push 하라고 가이드를 해줌
2 컨테이너를 commit 해서 hub에 올릴 image를 생성
컨테이너 내에서 환경세팅 작업이 끝났다는 가정 하에.
# image 이름은 dockerhub에 생성한 레포지토리와 동일한 이름으로 맞춰야 함
# tag는 1.0, latest 등 본인의 전략대로
$ docker commit container dockingmosei/laravel8:latest
# image가 잘 만들어졌는지 확인
$ docker images
3. 생성한 image를 dockerhub 로 push
# dockerhub 계정으로 login
$ docker login
# dockerhub 로 이미지 push
# 레포지토리명과 이미지명이 동일하게 한 이유
$ docker push dockingmosei/laravel8:latest
The push refers to repository [docker.io/dockingmosei/laravel8]
5d8dc70e5d89: Layer already exists
3208a8c846fe: Layer already exists
28889a4d5e89: Layer already exists
4942a1abcbfa: Layer already exists
latest: digest: sha256:1e49bbf8ab7f144d161d262b2eca217854781e804c9ea62506ae160c6acef0a4 size: 1164
repository에서 새로고침하여 확인
4. image를 다운받아서 사용
- 기존 image를 삭제
docker rmi --force dockingmosei/laravel8:latest
- 다시 받아서 잘 되는지 테스트
# 이미지 다운로드
$ docker pull dockingmosei/laravel8:latest
# 컨테이너 생성 후 접속
$ docker run -it -d -p 80:80 --privileged --name new_container dockingmosei/laravel8:latest /sbin/init
$ docker exec -it new_container bash
이렇게만 하면 기존에 세팅해놨던 웹서버들이 자동으로 구동되면서
localhost 로 잘 붙는다.
이미지를 업데이트 하고싶다면?
다시 컨테이너를 commit 해서 동일한 tag로 push 하면 최신이미지로 덮어써진다.
$ docker commit container dockingmosei/laravel8:latest
이렇게 기존 이미지에 덮어쓰게되면 기존에 latest tag가 붙어있던 이미지는 <none> 으로 변경되고 새로 생성된 이미지에 latest tag가 붙는다.
이상태에서 동일하게 push 하면 됨
docker push dockingmosei/laravel8:latest
The push refers to repository [docker.io/dockingmosei/laravel8]
51c1a64d7308: Pushing [============> ] 9.774MB/40.5MB
5d8dc70e5d89: Layer already exists
3208a8c846fe: Layer already exists
28889a4d5e89: Layer already exists
4942a1abcbfa: Layer already exists
위 처럼 업데이트 된 부분만 추가로 올라가는것을 볼 수 있다.
'Docker' 카테고리의 다른 글
[Docker] Container의 OS vs VM의 OS (0) | 2021.09.25 |
---|---|
[Docker] 로컬 프로젝트 폴더와 컨테이너 홈디렉토리 동기화 (0) | 2021.09.24 |
[Docker] 컨테이너에서 systemctl 사용 문제 (0) | 2021.09.24 |
[Docker] 기존 컨테이너의 포트 변경하기 (0) | 2021.09.23 |
[Docker] Ubuntu 컨테이너에 PHP8 + Nginx + Laravel8 최신환경 세팅하기 (2) | 2021.09.23 |