홍익대학교 소프트웨어융합학과 docker_n_k8s 스터디를 통해 작성한 게시글 입니다.
Docker's Command - 도커 명령어를 알아보자
이번 포스팅에서는 필자는 도커 엔진을 구동시키는 것에 필수,옵션 들에 대하여 작성하고자한다.
이 포스트를 읽기전 도커 설치가 안되었다면 링크를 참조하여 설치를 하는 것이 바람직하다.
https://boramchan-corgi.tistory.com/7
지난 실습을 통해 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 이미지에서는 필수 환경 변수, 선택적 환경 변수를 지정 할 수 있다.
다음 실습은 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}]
이로서 잘 출력되는 것을 볼 수 있다.
'Docker_도커' 카테고리의 다른 글
[Docker] 도커에서 Ollama를 통해 llama3.1 8B 구동하기 (3) | 2024.11.07 |
---|---|
[Docker] Ubuntu에서 도커 완전 삭제 (0) | 2023.07.11 |
[Docker] docker compose 와 docker-compose의 차이점 정리 (0) | 2023.07.03 |
[Docker/도커] 도커 설치 및 간단한 실습 (0) | 2023.01.27 |
[Docker/도커] 도커란 무엇인가? (0) | 2023.01.25 |