목차

 

실행 중이거나 중지된 모든 도커 컨테이너를 강제로 삭제

docker container rm -f $(docker container ls -aq)
  • docker container ls -aq :  모든 컨테이너의 ID를 나열
    • -a는 중지된 컨테이너를 포함하여 모든 컨테이너를 나열
    • -q는 컨테이너 ID만 출력
  • docker container rm -f  :  나열된 컨테이너 ID를 이용하여 해당 컨테이너들을 강제로 삭제
    • -f 옵션은 실행 중인 컨테이너도 강제로 삭제

특정 패턴이나 조건에 맞는 도커 이미지들을 삭제

docker image rm -f $(docker image ls -f reference='diamol/*' -q)
  • docker image ls -f reference='diamol/*' -q : 특정 패턴을 가진 이미지 ID 나열
    • docker image ls는 도커 이미지 목록을 나열
    • -f reference='diamol/*'   : 옵션은 이미지 이름이 'diamol/'로 시작하는 이미지만 필터링하여 나열하도록 지정
      • reference 필터를 사용하면 특정 패턴이나 조건에 맞는 이미지를 검색 가능
    • -q 옵션은 명령어의 출력을 이미지 ID만 나타내도록 제한, 다음 명령어에서 해당 이미지 ID를 사용하기 위한 설정

 

도커 이미지 빌드

cd dockerfile 이 있는 위치
docker image build -t <이미지 이름>

 

 

도커 네트워크 확인

# 네트워크 이름 리스트 확인
docker network ls

# nat 네트워크가 필요하다면 생성
docker network create nat

Dockerfile

Docker 이미지를 만들게 해주는 파일

DockerHub 에 올려놓은 Docker 이미지와는 다르다. 

 

베이스 이미지를 생성하는 FROM

컨테이너를 특정 초기 이미지(베이스 이미지)를 생성하는 역할.

컨테이너를 생성할 시 추가적인 셋팅을 할수 있게 해주는 역할

 

예를 들어, 컴퓨터나 랩탑을 사면 기본적으로 설치되어 있는 프로그램들이 있다. 이러한 것들이 베이스 이미지와 똑같다.

 

도커의 경우에는 컨테이너를 새로 띄워서 미니 컴퓨터 환경을 구출할 때

필요에 따라 설치하고 싶은 기본 프로그램을 선택하는 옵션이라고 볼 수 있다.  

 

<사용방법>

FROM (이미지명) # 최신버전 사용
FROM (이미지명):(태그명) # 태그명 버전 사용

 

Dockerfile 을 이용하여 베이스 컨터이너 띄우기

  • Dockerfile 생성
From node

ENTRYPOINT ["/bin/bash", "-c", "sleep 500"] # 500초 동안 시스템을 일시정지 시키는 명령어

     - ENTRYPOINT : 컨테이너가 생성되고 최초로 실행할 때 수행되는 명령어를 뜻한다. 쉽게 설명하자면 미니 컴퓨터의 전원을 키고나서 실행시키고 싶은 명령어를 적으면 된다. 

  • 이미지 만들고 컨테이너 띄우기
$ docker build -t my-node-server . # 이미지 생성
$ docker run -d my-node-server # 이미지를 기반으로 컨테이너 생성
$ docker ps # 실행 중인 컨테이너 조회
$ docker exec -it [컨테이너 ID] bash # 컨테이너 접속

$ node -v # Node 설치되어 있는 지 확인

 -  docker build -t my-node-server .

      -  my-node-server : 이미지 이름

      -  .  : Dockerfile 이 존재하는 디렉터리 경로

[출처]

[인프런] 비전공자도 이해할 수 있는 Docker 입문/실전

MySQL 컨테이너 띄우기

$ cd /Users/jaeseong/Documents/Develop
$ mkdir docker-mysql # MySQL 데이터를 저장하고 싶은 폴더 만들기

$ docker run -e MYSQL_ROOT_PASSWORD=password123 -d -p 3306:3306 -v /{호스트의 절대경로}/mysql_data:/var/lib/mysql mysql
  • 호스트의 절대경로 pwd 명령어로 볼륨으로 사용하고자 하는 경로를 확인한 뒤 입력해주자.
  • mysql_data : mysql 을 저장하싶은 폴더명
  • : 이 후는 컨테이너 내부의 MySQL 위치(

(주의) 처음 이미지를 실행 시킬 때 mysql_data 디렉토리를 미리 만들어 놓으면 안 된다.

{호스트의 디렉토리 절대 경로}에 이미 디렉토리가 있으면 
호스트의 디렉터리(mysql_data)가 컨테이너의 디렉터리(/var/lib/mysql)를 덮어씌운다.

 

mysql_data 디렉토리를 미리 만들어놓을 경우,

         기존 컨테이너의 /var/lib/mysql 파일들을 전부 삭제한 뒤에 

          mysql_data로 덮어씌워 버린다. 

 

MySQL 컨테이너에 접속해서 데이터베이스 만들기

$ docker exec -it [MySQL 컨테이너 ID] bash

$ mysql -u root -p

mysql> show databases;
mysql> create database mydb;
mysql> show databases;

 

컨테이너 종료 후 다시 실행해보기

# 컨테이너 종료
$ docker stop [MySQL 컨테이너 ID]
$ docker rm [MySQL 컨테이너 ID]

# 컨테이너 생성
$ docker run -e MYSQL_ROOT_PASSWORD=password123 -p 3306:3306 -v /{호스트의 절대경로}/docker-mysql/mysql_data:/var/lib/mysql -d mysql

$ docker exec -it [MySQL 컨테이너 ID] bash
$ mysql -u root -p
mysql> show databases; # 아까 생성한 데이터베이스가 없어진 걸 확인할 수 있다.

 

 

 

# 컨테이너 종료
$ docker stop [MySQL 컨테이너 ID]
$ docker rm [MySQL 컨테이너 ID]

# 비밀번호 바꿔서 컨테이너 생성
$ docker run -e MYSQL_ROOT_PASSWORD=pwd1234 -p 3306:3306 -v /{호스트 절대 경로}/docker-mysql/mysql_data:/var/lib/mysql -d mysql

$ docker exec -it [MySQL 컨테이너 ID] bash
$ mysql -u root -p # 접속이 안 됨...

!! 분명 MYSQL_ROOT_PASSWORD 값을 바꿔서 새로 컨테이너를 띄웠는데 비밀번호는 바뀌지 않은걸까? 이 부분 때문에 많은 분들이 헤맨다. 그 이유는 Volume으로 설정해둔 폴더에 이미 비밀번호 정보가 저장되버렸기 때문이다. 

 

 

[출처]

[인프런] 비전공자도 이해할 수 있는 Docker 입문/실전

1. MySQL 이미지를 바탕으로 컨테이너 실행시키기
    
    [mysql - Official Image | Docker Hub](https://hub.docker.com/_/mysql)
    

 $ docker run -e MYSQL_ROOT_PASSWORD=password123 -p 3306:3306 -d mysql
  • (참고)
    • run 을 사용하면 로컬에 이미지가 없으면 Dockerhub으로부터 이미지를 알아서 다운받아서 실행
      • `docker pull` 과정은 생략해도 상관없다
    • - e : 옵션은 컨테이너의 환경 변수를 설정하는 옵션이다.
      • Dockerhub의 MySQL 공식 문서를 보면 환경 변수로 `MYSQL_ROOT_PASSWORD`를 정해주어야만 정상적으로 컨테이너가 실행된다고 적혀져 있다.
    • -p :  옵션은 port mapping 을 설정하는 옵션

   

아래의 명령어로 컨테이너로 들어가서 환경 변수를 직접 눈으로 확인

$ docker exec -it [MySQL 컨테이너 ID] bash

 

  • docker exec : 실행 중인 Docker 컨테이너 안에서 명령어를 실행할 때 사용하는 Docker 명령어
  • -i : 입력(interactive)을 의미하며, 사용자의 입력을 컨테이너에 전달할 수 있도록 해주는 옵션
  • -t : 터미널(tty)을 활성화하여, 컨테이너 안에서 셸 환경을 사용할 수 있도록 해주는 옵션
  • bash: 컨테이너 안에서 bash 셸을 실행하라는 의미

- bash 에서 실행할 명령어들

 

$ echo $MYSQL_ROOT_PASSWORD # MYSQL_ROOT_PASSWORD라는 환경변수 값 출력
$ export # 설정되어 있는 모든 환경변수 출력


2. 컨테이너가 잘 실행되고 있는 지 체크

$ docker ps


3. 컨테이너 실행시킬 때 에러 없이 잘 실행됐는 지 로그 체크

$ docker logs [컨테이너 ID 또는 컨테이너명]


4. DBeaver에도 연결시켜보기

URL: localhost:3306  입력

 

 

[출처]

[인프런] 비전공자도 이해할 수 있는 Docker 입문/실전

도커의 동작방식

- 이미지를 다운로드하여 컨테이너를 실행하는 방식

- 기존에 실행 중인 컨테이너에 업데이트 사항이 있으면, 필요한 이미지를 생성하여 새로운 컨테이너를 실행한다.

( 즉, 컨테이너의 파일 시스템이 초기화된다. 기존의 컨테이너를 수정하지 않음)

 

→ 업데이트를 할시 MySQL과 같은 데이터베이스에 저장된 데이터가 있으면 손실되는 문제가 발생

 

Volume 이라는 방식을 도입

도커에서 볼륨이란 :

  • 도커 컨테이너에서 데이터를 영속적으로 저장하기 위한 방법
  • 컨테이너 자체의 저장 공간을 사용하지 않고, 호스트 자체의 저장 공간을 공유해서 사용하는 형태

명령어

$ docker run -v [호스트의 디렉토리 절대경로]:[컨테이너의 디렉토리 절대경로] [이미지명]:[태그명]

 

명령어 작동 방식

  • [호스트의 디렉토리 절대 경로] 에
    • 디렉토리가 이미 존재할 경우 : 
      • 호스트의 디렉터리가 컨테이너의 디렉터리를 덮어씌운다.
    • 디렉토리가 없는 경우:
      • 호스트의 디렉터리 절대 경로에 디렉터리를 새로 만든다
      • 컨테이너의 디렉터리에 있는 파일들을 호스트의 디렉터리로 복사해온다.

[출처]

[인프런] 비전공자도 이해할 수 있는 Docker 입문/실전

+ Recent posts