Docker?
Docker는 소프트웨어를 컨테이너라는 표준화된 유닛으로 패키징 할 수 있는 도구
- 리눅스 상에서 컨테이너 방식으로 프로세스를 격리해서 실행하고 관리
- 계층화된 파일 시스템에 기반해 효율적으로 이미지(프로세스 실행 환경)을 구축
- 특정 컨테이너의 상태를 변경해 이미지 생성 가능
Docker를 사용하는 이유
애플리케이션을 환경에 구애 받지 않고 실행가능
Docker 설치
저는 우분투 환경에서 진행했습니다.
~$ sudo yum -y install docker
버전확인
~$ docker -v
Docker 이미지 받아오기
이미지는 어떤 애플리케이션을 실행하기 위한 환경입니다.
이미지를 pull 명령어를 통해 dockerhub 에 있는 이미지를 받아올 수 있습니다.
~$ docker pull [저장소 이름]:[태그명]
Docker hub > centos 에서 이미지를 받아오기
~$ docker pull centos:latest
Docker 이미지 확인
해당 명령어를 통해 현재 사용할 수 있는 이미지를 출력합니다.
~$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
centos latest 0d120b6ccaa8 3 weeks ago 215MB
이미지를 기반으로 프로세스 시작하기
docker run -it [저장소 이름]:[태그명] [커맨드]
위에서 받아온 centos 이미지에서 bash 실행
~$ docker run -it centos:latest bash
[root@d40d7eadb298 /]# cat /etc/redhat-release
CentOS Linux release 8.2.2004 (Core)
ps명령어를 통해 컨테이너가 실행 중임을 확인 할 수 있습니다.
~$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d40d7eadb298 centos:latest "bash" About a minute ago Up About a minute vibrant_blackwell
Docker 이미지 생성해보기
centos 환경 + gcc, gcc+ 설치하는 이미지를 생성해보겠습니다.
폴더 만들기
~$ mkdir centos_gcc
~$ cd centos_gcc
Dockerfile 생성
~/centos_gcc$ vi Dockerfile
FROM centos:6
RUN yum -y install gcc \
&& yum -y install gcc-c++
ENTRYPOINT ["/bin/bash"]
Dockerfile로 이미지 빌드하기
~/centos_gcc$ docker build -t centos:gcc .
빌드 후 images 명령어를 통해 생성된걸 확인 해 볼 수 있습니다.
~$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
centos gcc 32da4757a949 13 seconds ago 640MB
생성한 이미지를 통해 컨데이너를 실행해 봅시다. gcc도 잘 설치된걸 확인 할 수 있습니다.
~$ docker run -it centos:gcc
bash-4.1#
bash-4.1# gcc --version
gcc (GCC) 4.4.7 20120313 (Red Hat 4.4.7-23)
Docker Hub 에 올리기
docker계정이 있다는 하에 진행
docker접속해서 로그인 하고 reporsitory를 생성해줍니다.생성 후 해당 repository를 들어가보면 Docker Commands 영역에docker push 계정이름/저장소 명:tagname 이렇게 push하라고 친절하게 보입니다.
Docker 계정 연결하기
커맨드로 돌아와 docker 계정으로 로그인 합니다
~$ docker login
Login with your Docker ID to push and pull images from Docker Hub. If you don't have a Docker ID, head over to https://hub.docker.com to create one.
Username:
Password:
WARNING! Your password will be stored unencrypted in /home/ubuntu/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store
Login Succeeded
Dockerfile 이미지 생성
위에서 생성한 Dockerfile로 docker hub에 생성한 repository 이름과 repository에 올라갈 태그이름으로 빌드를 돌려 이미지를 생성합니다.
$ docker build -t [저장소 이름]/centos:gcc .
images 명령어를 통해 이미지가 생성됐음을 확인합니다
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
[저장소 이름]/centos gcc 32da4757a949 About an hour ago 640MB
이제 해당 이미지를 Docker hub에 올려주면 끝
docker push nethrueunbi/centos:gcc
Docker Hub에 들어가 정상적으로 올라갔는지 확인 하면
끝입니다 👏👏👏
이미지&컨테이너 한번에 지우기
테스트를 여러번 하다보면 이미지나 컨테이너가 많이 쌓이고 하나하나 지우려니 번거롭습니다.. 다음 명령어를 사용하면 한번에 지울 수 있습니다.
컨테이너 한번에 지우기
$ docker stop $(docker ps -a -q)
$ docker rm $(docker ps -a -q)
이미지 한번에 지우기
$ docker rmi $(docker images -q)
참고
https://www.44bits.io/ko/post/easy-deploy-with-docker
https://snowdeer.github.io/docker/2018/02/14/docker-push-image-to-docker-hub/