Docker CLI 요약

docker cli 명령을 정리

docker architecture 이미지 소스

비슷한 문서:

docker cli

docker cli는 docker 명령 뒤에 docker commands 로 도커를 제어한다. 그리고 대상 컨테이너를 지정하고 컨테이너에서 실행 할 수 있는 명령형식으로 구성되어 있다.

1
docker [docker commands] [container] [container command] 

Use the Docker command line docker

search 이미지 검색

Docker hub에서 이미지를 검색한다.

1
docker search busybox

Docker hub에서 상위 몇개 정도만 검색하고 싶을때 limit 옵션을 사용한다.

1
docker search busybox --limit 5

Docker hub에서는 이미지 중 별점을 검색한다.

1
2
3
4
5
# 최소 별정 50인 이미지
docker search busybox --filter=stars=50

# 별점이 3인 이미지
docker search --filter stars=50 busybox

정규 빌드 버전만 지시하려면 is-official 옵션 사용

1
2
docker search --filter is-official=true --filter stars=50 busybox

--format 옵션을 사용해 출력되는 내용을 필터링 할 수 있다. 다음은 별점만 출력하는 예이다.

1
docker search --format "{{.Name}}: {{.StarCount}}" nginx

pull 이미지를 다운로드 한다

Docker image를 내려 받는다. 이미지 이름 뒤에 :[version] 을 붙이면 지정한 버전을 내려 받고, latest 를 붙이면 최신 버전을 대상으로 한다.

1
docker pull nginx:latest

images 다운로드 이미지

Docker에서 다운로드 받는 이미지를 확인한다. docker images는 모든 이미지를 보여준다.

1
$ docker images

특정 이미지만 지시할 수 있다.

1
$ docker images nginx

run 이미지를 컨테이너로 실행한다.

Docker image를 컨테이너로 생성하고, 실행합니다.

1
docker run -p 8080:8080 nginx

옵션:

1
2
3
4
5
`-p`: Local과 Container 와 port를 연결하는 옵션
`-i`: interactive (대화방식)
`-t`: Pseudo-tty (콘솔 및 터미널 환경)
`— name`: 실행 컨테이너 이름을 지정합니다.
`-d`: 백그라운드에서 실행되는 옵션입니다.

docker image를 실행하고 bash 쉘을 연다.

1
docker run -i -t --name nginx nginx bash

ps 컨테이너 목록을 확인

Docker 컨테이너 목록을 확인합니다.

1
2
$ docker ps
$ docker ps -a

옵션:

1
2
`-a` : 실행 중이 아닌 컨테이너까지 확인
`-q` : 컨테이너의 CONTAINER ID 만 표시

start 컨테이너를 시작한다.

중단되어 있는 컨테이너를 실행합니다.

1
2
docker start nginx
nginx

attach 컨테이너 연결

실행중인 Docker Container 의 standard input, output, error streams 에 연결한다.

1
docker attach nginx

docker attach 명령 사용 사례.

exec 컨테이너 명령 실행

Docker Container의 쉘의 명령어을 실행할 수 있다.

1
docker exec nginx ls

옵션

1
2
3
4
5
-d, --detach : 명령을 detach mode, 백그라운드로 실행
-e, --env : 환경변수 설정하고 실행
-it [SHELL]: iteractive tty 옵션. 사용할 shell을 지시한다, 보통 bash
-u, --user: User ID, UID
-w, --workdir: 작업 디렉토리 지정

다음은 nginx 컨테이너의 bash 쉘을 실행한다.

1
docker exec -it nginx bash

다음은 nginx 컨테이너를 qkboo 사용자 쉘로 연결한다.

1
docker exec -it -u qkboo nginx bash

inspect 컨테이너 상세 정보

Docker Container에 상세 정보를 확인 한다.

1
docker inspect nginx

옵션

--format : 필터링

1
docker inspect  --format='{{range .NetworkSettings.Networks}}

logs 명령

Docker 컨테이너에서 sysout 또는 syserr 로그를 보려면 logs 명령을 사용한다.

docker logs

stop 컨테이너 종료

ps 명령으로 실행중인 컨테이너 아이디와 이름을 확인하고 아이디를 준다.

1
2
3
docker ps

docker stop e417951d25fd

이름으로 종료시 --name 옵션 사용

1
docker stop --name nginx2

rm 컨테이너를 삭제한다.

Docker Container 삭제합니다. 삭제할때는 실행 상태가 아닌 컨테이너만 가능합니다.

1
docker rm nginx

강제 삭제시 -f 옵션 사용.

rmi 이미지를 삭제한다.

Docker image를 삭제 하는데 이미지가 중첩된 경우가 많기 때문에 링크 같이 untag 한 후 사용한다.

1
2
3
docker rmi fd484f19954f

docker rmi test2:latest

혹은 -f 옵션으로 중첩된 이미지를 모두 함께 삭제 할 수 있다.

1
docker rmi -f fd484f19954f

참고

MySqLI CLI 주요 명령

mysql CLI 에서 MySQL/MariaDB 관리자로서 사용할 수 있는 명령을 요약한다.

  • create user, grant, drop, delete, remove …

MySqLI CLI Client 로 접속하기

1
mysql [-h서버] -u아이디 -p 데이터베이스명

데이터베이스 스키마

1
mysql> SHOW DATABASES;

use 명령을 사용하여 사용할 데이터베이스/스키마를 선택

1
mysql> USE TESTDB;

선택된 데이터베이스 안의 테이블 확인

1
2
mysql> SHOW TABLES;
mysql> SHOW TABLES LIKE 't%'; # t로 시작하는 테이블

특정 스키마 혹은 테이블의 생성 쿼리를 출력

1
2
mysql> SHOW CREATE DATABSE SAKILA;
mysql> SHOW CREATE TABLE STUDENTS;

데이터베이스의 생성 및 삭제

1
mysql> CREATE DATABASE testdb CHARACTER SET utf8 COLLATE utf8_general_ci;
  • utf8_general_ci 는 대소문자를 구분하지 않는다.
  • 대소문자를 구분하려면 binary 타입으로 지정. 예) “utf8_bin”

캐릭터셋과 COLLATE 를 생략하면 서버 설치시 지정한 기본 값으로 설정

1
mysql> CREATE DATABASE testdb;

스키마 제거

1
mysql> DROP [SCHEMA]DATABASE testdb;

시스템 환경 확인

서버의 환경 변수

1
2
# 모든 변수
mysql> SHOW VARIABLES;

DBMS 버전

1
2
3
mysql> select @@version;       -- DBMS version

mysql> SHOW VARIABLES LIKE 'version';
1
mysql> SHOW VARIABLES LIKE 'innodb_%';

지원하는 문자세트 구성

1
2
3
mysql> SHOW CHARACTER SET;

mysql> SHOW CHARACTER SET LIKE 'utf%';

문자세트 확인

1
2
-- 환경변수에서 확인
mysql> SHOW VARIABLES LIKE 'c%';

지원하는 콜레이션

1
2
3
mysql> SHOW COLLATION;

mysql> SHOW COLLATION WHERE Charset = 'utf8mb4';

외부 파일 실행하기

첫 번째는 mysql cli 에 지정하여 실행하는 방법

1
2
3
$ mysql -u dbuser -p testdb < insert.sql

Enter password: ****

두 번째 방법을 mysql cli에서 source 명령을 사용

1
mysql> SOURCE C:\Users\USERID\insert.sql;


User & Privileges

사용자 db

mysql 스키마의 user 테이블을 사용한다.

SELECT Host,User,plugin,authentication_string FROM mysql.user;

사용자 추가

사용자를 생성시 호스트 주소에 ‘%’, ‘localhost’로 호스트 범위를 지정한다

1
2
3
mysql> CREATE USER 'USERID'@'localhost' IDENTIFIED BY 'password';
mysql> CREATE USER 'USERID'@'%' IDENTIFIED BY 'password';
mysql> FLUSH PRIVILEGES;

grant 명령: [권한 부여]

사용자가 특정 자원에 접근하기 위해서 grant 명령 사용.

1
2
3
4
5
6
GRANT ALL PRIVILEGES ON DB이름.테이블이름 TO 아이디@호스트 IDENTIFIED BY '비밀번호' with grant option;

- ALL PRIVILEGES : 모든 권한 추가
- SELECT, INSERT, UPDATE, DELETE, ... : 권한을 일부분을 추가
- with grant option : GRANT를 사용할 수 있는 권한 추가
- Grant 로 주어지는 권한은 여기 [grant: privilege-levels](https://mariadb.com/kb/en/grant/#privilege-levels) 명령에서 찾을 수 있다.

아래는 userid 사용자가 특정 sampledb 에만 모든 권한을 부여하고 있다.

1
2
mysql> GRANT ALL PRIVILEGES ON sampledb.* TO 'USERID'@'localhost';
mysql> FLUSH PRIVILEGES;

다음 GRANT 명령에서 ALL PRIVILEGES ON *.* 는 모든 권한(ALL PRIVILEGES)을 모든 스카마의 모든 테이블 *.* 에 준다는 의미.

1
2
mysql> GRANT ALL PRIVILEGES ON *.* TO 'USERID'@'localhost' WITH GRANT OPTION;
mysql> FLUSH PRIVILEGES;
  • WITH GRANT OPTION 의 의미는 다른 사용자에게 자신이 가진 권한을 주거나 회수할 수 있다는 의미.
  • ALL PRIVILEGES 부분에는 SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, INDEX, ALTER 등 권한 명칭을 콤마로 분리해서 나열하는 방식으로 특정 권한만을 줄 수도 있다.

[권한 제거]

권한을 없앨때는 REVOKE 명령을 사용한다. 두가지 형식을 사용한다.

1
2
3
REVOKE priv_type ON db.tables FROM user[,user]  ...

REVOKE ALL PRIVILEGES, GRANT OPTION FROM user [, user] ...

아래 명령으로 ‘localhost’ 에서 접속가능한 ‘testdbuser’ 에게서 모든 권한을 제외한다.

1
mysql> REVOKE ALL PRIVILEGES *.* FROM 'USERID'@'localhost';

GRANT 명령과는 달리 REVOKE 명령은 모든 권한을 제거해도 mysql.user 테이블 사용자 정보는 완전히 삭제되지 않는다.

사용자 정보의 완전한 제거를 원한다면 DROP USER 명령을 사용한다.

1
mysql> DROP USER 'USERID'@'localhost';

권한 조회

사용자별 권한 확인

1
mysql> SHOW GRANTS FOR 'USERID'@'HOST';

접속된 계정 권한 확인

1
mysql> SHOW GRANTS FOR CURRENT_USER;


실행 프로세스 확인

현재 접속자를 확인하고, lock 이 걸린 프로세스를 죽이거나 하는 작업

  • 프로세스 리스트보기
1
2
3
4
5
6
7
8
mysql> SHOW PROCESSLIST;
+------+-----------+----------------------+-----------+---------+------+---------------------------------+------------------------------------------------------------------------------------------------------+----------+
| Id | User | Host | db | Command | Time | State | Info
| Progress |
+------+-----------+----------------------+-----------+---------+------+---------------------------------+------------------------------------------------------------------------------------------------------+----------+
| 1371 | dbkmart | 205.22.168.143:29762 | yourdb | Sleep | 2673 | | NULL
| 0.000 |
|
  • 프로세스 죽이기(프로세스 아이디는 리스트에 나오는 Id.)
1
mysql> kill 프로세스아이디

ex: DB 생성해 사용자 추가

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
-- 1. mysql/mariadb 데이터베이스 생성
create database webdb;

-- 2. mysql/mariadb 계정 생성
create user 'webdb'@'192.168.1.%' identified by 'webdb';

-- 3. 권한주기
grant all privileges on webdb.* to 'webdb'@'192.168.1.%';

-- 4. flush privileges;

-- 5. 사용자 계정 삭제
drop user 'webdb'@'192.168.1.%';

-- 6. 데이터베이스 삭제
drop database webdb;

  1. grant: privilege-levels : https://mariadb.com/kb/en/grant/#privilege-levels