보람찬 코기의 개발자 블로그
article thumbnail
반응형

홍익대학교 소프트웨어융합학과 docker_n_k8s 스터디를 통해 작성한 게시글 입니다.

Docker's Command - 도커 명령어를 알아보자

이번 포스팅에서는 필자는 도커 엔진을 구동시키는 것에 필수,옵션 들에 대하여 작성하고자한다.

 

이 포스트를 읽기전 도커 설치가 안되었다면 링크를 참조하여 설치를 하는 것이 바람직하다.

https://boramchan-corgi.tistory.com/7

 

[Docker/도커] 도커 설치 및 간단한 실습

curl -fsSL https://get.docker.com/ | sudo sh sudo apt-get install docker.io https://boramchan-corgi.tistory.com/6 [Docker/도커] 도커란 무엇인가? 2023 대학교 스터디 4주차 학습 도커(Docker)란? 서비스 형태의 플랫폼(Platform-as-a

boramchan-corgi.tistory.com

지난 실습을 통해 Docker 를 설치 했을 것이다.  

 

설치가 완료하였다면, 우리가 설치한 도커에 대해 설치 버전을 알아보자

 

Docker 버전 확인하기

docker -v

 

Docker 이미지 가져오기

도커는  기본적으로 pull를 하게 되면 docker hub 에서 이미지를 가져온다.

필요에 따라 docker private registry 에서도 가져올 수 있다.

  • 이미지를 가져올 때에는 docker pull (이미지 이름) : (태그 명.. 버전을 의미) 을 명시해줘야한다.
  • 동일한 이미지 이름일지어도 서로 다른 태그를 가진다면 이미지 또한 서로 다르기에 분류가 된다.
  • docker pull (이미지) 로 명령한다면 자동적으로 latest (가장 최근 업데이트 된 버전)으로 pull 된다

실습하기 이전에 도커 이미지 세개 (mysql, ubuntu, httpd)를 pull 해보자

docker pull mysql 

docker pull ubuntu

docker pull httpd

Docker 이미지 목록 확인하기

앞서 다운받은 3개의 이미지가 잘 다운이 되었는지 확인해보자

docker images

하단에 잘 다운로드 되었는 것을 확인 할수 있다.

Docker 컨테이너의 작동 명령어

 

컨테이너의 작동 멈추기

docker stop [컨테이너 이름 or 컨테이너 아이디]

예시 / docker stop my-ubuntu-env

멈춘 컨테이너를 시작하기

docker start [컨테이너 아이디 or 컨테이너 이름]

컨테이너 작동 재시작하기

docker restart [컨테이너 이름 or 컨테이너 아이디]

작동이 멈춘 컨테이너 삭제하기

컨테이너 삭제를 하기 위해서는 컨테이너는 stop 상태여야한다.

docker rm [컨테이너 이름 or 컨테이너 아이디]

 

도커의 이미지 삭제하기

docker rmi [이미지 이름 or 이미지 아이디]

예시 / docker rmi ubuntu

 

Docker 컨테이너 목록을 출력하기

지난 실습 포스팅에 우리는 docker run 명령어를 통하여 컨테이너를 생성해보았다

docker run -it --name my-ubuntu-env ubuntu:14.04 /bin/bash

컨테이너 목록 출력하기

docker ps

docker ps -a
  • ps 명령어 같은 경우 컨테이너 목록을 출력한다. ps 이후 옵션이 공백 란일 경우 실행중인 컨테이너만 출력한다
  • ps 이후 -a 의 옵션을 입력한다면 작동이 멈춘 컨테이너 목록까지 출력한다. 

Docker run 컨테이너 실행하기

앞서 컨테이너 작동, 멈춤, 재시작을 배워보았다.

가장 중요한 도커 실행하는 방법 즉, 컨테이너를 생성하는 방법을 알아보자

 

docker run의 형태는 아래와 같다

docker run <옵션> <이미지 이름> <실행할 파일 혹은 실행 명령어. 이 부분이 주어지지 않으면 이미지에 정의된 기본 명령어 혹은 파일이 실행된다.>

Docker run <옵션>의 종류 1 - 실행모드 지정

실행 모드 옵션은 쉽게 설명 하자면 Docker 컨테이너가 어떤 방식으로 작동할 것인지 지정해 주는 것이다.

Attach Mode, Detch Mode로 크게 두 분류로 나눌 수 있다.

 

Attach Mode - 컨테이너 콘솔 출력값을 확인하고 싶을 경우 사용한다.

  •  -i   : interactive를 의미하고 상호 작용이 가능하다는 의미이다.
  •  -t. : Pseudo TTY를 의미한다.
  •  -it : 컨테이너 실행시, 실행 명령어에 대한 상호작용 가능한 쉘(또는 tty)로 실행 (-i, -t는 따로쓰지 않고 함께 쓴다)

Detach Mode - 컨테이너 콘솔창을 확인할 필요 없이, 백그라운드에서 작동만 하면 되는 경우 사용한다 (예를 들어, 데이터베이스 저장소)

  •  -d : 'detach 모드'라 불리고, 백그라운드에서 실행하는 모드이다.
  •  -itd : detach 모드에서 상호작용 가능한 쉘이 수행된다. 상호작용이 가능한 쉘이 실행 되지만, 백그라운드에서 실행되어 보이지 않는다. 주로 컨테이너 실험(Docker Network, Volume, Dockerfile 작동 디버깅)을 하거나 테스트 시에 사용된다.

Docker run <옵션>의 종류 2 - 이름 지정

' --name ' 을 통해  컨테이너에 이름을 지정해줄 수 있다. 어떤 작동을 해주는지 적을 수도 있다.

$ docker run -itd ubuntu bash
//결과
0809cc2d1b7c62e05f62026f000d225af859bd0b45eb61c6ca05320125a9c0c1
$ docker ps
//결과
CONTAINER ID   IMAGE     COMMAND   CREATED         STATUS         PORTS     NAMES
0809cc2d1b7c   ubuntu    "bash"    2 seconds ago   Up 2 seconds

Docker run <옵션>의 종류 3 - 외부와 연결을 위한 포트 지정

' -p ' 를 통해 컨테이너의 특정 포트를 호스트 머신의 포트와 연결시켜줄 수 있다. 또한 ' -p ' 옵션은 여러개 지정할 수 있다.

단, 바인딩할 호스트 머신의 포트는 점유되지 않은 포트여야한다.

 

사용법은 아래와 같다.

-p (호스트 머신 포트):(컨테이너 포트)

 

로컬 호스트를 열어보는 간단한 실습을 해보자

docker run -d --name my-apache -p 9000:80 -p 9100:443 httpd

이후 인터넷 웹 브라우저를 실행하여 주소창에 ' localholst:9000 '을 입력해보자.

'It works'가 표시 된다면 도커를 통해 옵션을 설정하여 우리가 로컬 호스트를 띄운 것이다.

 

Docker run <옵션>의 종류 4 - 환경변수 지정

' -e '를 사용하여 컨테이너 환경변수를 지정해 줄 수 있다. 

-e (환경변수이름)=(값)

아래는 MySQL의 환경변수 목록이다. MySQL 이미지에서는 필수 환경 변수, 선택적 환경 변수를 지정 할 수 있다.

Docker hub에서 MySQL 의 환경변수 목록

다음 실습은 MySQL 컨테이너를 생성 하고 활용해보는 것이다. 아래의 시나리오와 조건에 맞게 명령어를 작성해보자

  • Detach 모드로 실행
  • 컨테이너 이름은 my-rdb로 지정
  • MySQL의 기본 포트는 3306이다, 로컬 포트의 9200번 포트와 연결한다
  • MySQL_ROOT_PASSWORD의 환경변수는 'password1234!'로 설정한다
  • MySQL_DATABASE 환경변수는 'example'로 값을 설정한다.
  • 실행 명령어는 이미지 기본 실행 명령어를 사용한다.

아래는 시나리오에 대한 Solution이다.

docker run -d --name my-rdb -p 9200:3306 -e MYSQL_ROOT_PASSWORD='password1234!' -e MYSQL_DATABASE='example' mysql

이후 mysql 컨테이너가 잘 작동 되는지 확인하기위해 python 파일을 실행 시켜보자

그전에 아래 패키지를 사전 설치 한다.

pip3 install pymysql cryptography

아래 python 코드를 mysql-connect-test.py로 저장한다.

import pymysql as sql

conn = sql.connect(
    host="127.0.0.1",
    user="root",
    port=9200,
    password="password1234!",
    db="example",
    charset="utf8"
)
cursor = conn.cursor(sql.cursors.DictCursor)
cursor.execute("SELECT 1+1")
print(cursor.fetchall())

이후 코드를 실행 시켜보자.

python3 mysql-connect-test.py

// 결과
[{'1+1': 2}]

이로서 잘 출력되는 것을 볼 수 있다. 

반응형
profile

보람찬 코기의 개발자 블로그

@BoChan

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!