
Docker 명령어 사용하기
Docker는 개발자가 애플리케이션, 종속성 및 구성을 다양한 환경에서 원활하게 실행할 수 있는 컨테이너로 패키징할 수 있는 인기 있는 플랫폼입니다.
Docker를 처음 사용해서 Docker 컨테이너를 효과적으로 관리하는 방법이 궁금하시면 이 문서를 살펴보기를 권장합니다.
Docker 명령을 사용하면 Docker 컨테이너를 쉽게 만들고, 실행하고, 중지하고, 제거하고, 관리할 수 있습니다. 이러한 명령은 컨테이너화된 환경에서 애플리케이션을 배포하고 관리하는 프로세스를 자동화하고 간소화하는 데 도움이 될 수 있습니다.
자주사용하는 몇가지 Docker명령어
Docker 컨테이너를 효과적으로 관리하는 데 도움이 되는 가장 일반적으로 사용되는 몇 가지 Docker 명령어를 살펴보겠습니다.
- docker run : 이미지에서 새 Docker 컨테이너를 시작
docker ps
: 실행 중인 모든 Docker 컨테이너를 조회docker stop
: 실행 중인 컨테이너를 중지- docker rm : Docker 컨테이너를 삭제
docker images
: 현재 시스템에서 사용 가능한 모든 Docker 이미지를 조회- docker pull : 도커허브 레지스트리에서 Docker 이미지를 다운로드
docker exec
: 실행 중인 컨테이너에서 명령을 실행- docker-compose : 여러개의 컨테이너 Docker 애플리케이션을 관리하는 데 사용
이러한 명령을 사용하여 Docker 컨테이너, 이미지 및 애플리케이션을 쉽게 관리할 수 있습니다. 초보자든 숙련된 Docker 사용자든 이러한 명령을 숙지하면 Docker 기술을 한 단계 업그레이드하는 데 도움이 됩니다.
Docker란 무었인가?
Docker는 소프트웨어 개발의 다양한 측면에서 작업하는 개발자에게 몰입감 있는 경험을 제공하는 무료 개방형 플랫폼입니다. 개발자가 코드를 컨테이너라는 다양한 배포 가능한 단위로 패키징할 수 있는 컨테이너화 플랫폼입니다. 도커 엔진은 컨테이너 호스팅을 감독하는 소프트웨어입니다. 개발자가 서버와 클라우드에서 컨테이너를 빌드, 실행 및 배포하는 데 도움이 되는 Moby Project의 하위 집합인 Docker는 컨테이너를 빌드, 실행 및 배포하는 데 도움이 됩니다. 컨테이너에는 빌더, 엔진, 오케스트레이터가 포함되어 있어 어떤 환경에서도 원활하게 실행되는 애플리케이션을 제공합니다.
Docker는 테스트를 위한 가벼운 환경을 제공하기 때문에 개별 프로젝트를 진행하는 개발자가 선호합니다. 무료 및 프리미엄 티어가 모두 제공됩니다. Docker는 2013년에 처음 출시되었으며 Go로 작성되었습니다.
Top 20 Docker Commands
도커 엔진을 원활하게 탐색하고 대부분의 작업을 완료하는 데 도움이 되는 20가지 도커 명령어 리스트입니다.
- Docker version
- Docker search
- Docker pull
- Docker run
- Docker ps
- Docker stop
- Docker restart
- Docker kill
- Docker exec
- Docker login
- Docker commit
- Docker push
- Docker network
- Docker history
- Docker rmi
- Docker ps -a
- Docker copy
- Docker logs
- Docker volume
- Docker logout
하나씩 살펴보겠습니다.
Docker version
일반적으로 작업 중인 도커의 설치된 버전을 찾는 것부터 시작합니다. 찾는 방법은 다음과 같습니다.
(base) kevin_kidong_lim@streamlit-mpi:~/hello_wp$ docker --version
Docker version 26.1.3, build b72abbb
Docker search
“docker search” 명령은 Docker 허브를 통해 특정 이미지를 검색합니다. 이 명령은 이미지 이름, 설명, 자동, 공식 별 등을 포함한 특정 정보를 반환합니다. 사용 방법은 다음과 같습니다.
(base) kevin_kidong_lim@streamlit-mpi:~/hello_wp$ docker search MySQL
NAME DESCRIPTION STARS OFFICIAL
mysql MySQL is a widely used, open-source relation… 15137 [OK]
mariadb MariaDB Server is a high performing open sou… 5773 [OK]
percona Percona Server is a fork of the MySQL relati… 629 [OK]
phpmyadmin phpMyAdmin - A web interface for MySQL and M… 991 [OK]
circleci/mysql MySQL is a widely used, open-source relation… 30
bitnami/mysql Bitnami container image for MySQL 111
Docker Hub 웹사이트에서 GUI 기반 옵션을 통해 검색할 수 있습니다.
Docker pull
이 명령은 Docker Hub에서 특정 이미지를 가져옵니다. 이미지 이름과 함께 ‘docker pull’ 명령을 사용하기만 하면 됩니다. 다음은 태그를 사용하지 않고 이미지를 가져오는 예제입니다.
base) kevin_kidong_lim@streamlit-mpi:~/hello_wp$ docker pull --platform Linux/x86_64 mysql
Using default tag: latest
latest: Pulling from library/mysql
07bc88e18c4a: Pull complete
1a9c1668bf49: Pull complete
1021dda8eecf: Pull complete
fb61b56acac1: Pull complete
0bca83908a5b: Pull complete
165e8b3d37ca: Pull complete
3e1b086f1295: Pull complete
dba651668484: Pull complete
ed90f5355e12: Pull complete
0412f59ab2b5: Pull complete
Digest: sha256:aa021e164da6aacbefc59ed0b933427e4835636be380f3b6523f4a6c9564e1f0
Status: Downloaded newer image for mysql:latest
docker.io/library/mysql:latest
태그는 Docker 허브 내부의 이미지를 식별하는 데 사용됩니다. 태그를 지정하지 않으면 기본적으로 ‘: 최신’ 태그가 사용됩니다.
여러 이미지에 대해 리포지토리에서 모든 이미지를 가져오려면 ‘-all-tags’ 명령을 사용할 수 있습니다.
Docker run
이 명령은 이미지에서 컨테이너를 만드는 데 사용됩니다. 방법은 다음과 같습니다.
(base) kevin_kidong_lim@streamlit-mpi:~/hello_wp$ docker run --env MYSQL_ROOT_PASSWORD=my-secret-pw --detach mysql
0da5c90661ea9dfb571d5fe0a4fac173717e70557e835a91c53d61cc7a39d404
‘-detach’ 옵션은 컨테이너를 실행하고, ‘-env’ 옵션은 필수 변수를 설정하는 데 사용됩니다. ‘-name’ 옵션을 사용하지 않으면 도커가 컨테이너에 이름을 임의로 할당합니다.
방금생성한 컨테이너를 조회 할수 있습니다.
(base) kevin_kidong_lim@streamlit-mpi:~/hello_wp$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
0da5c90661ea mysql "docker-entrypoint.s…" About a minute ago Up About a minute 3306/tcp, 33060
Docker ps
이 명령은 백그라운드에서 실행 중인 모든 컨테이너를 나열하는 데 사용됩니다. 방법은 다음과 같습니다.
-a 옵션으로 사용중, 중지된 모든 컨테이너를 볼수 있습니다. 옵션이 없으면 사용중인 컨테이너만 조회됨.
(base) kevin_kidong_lim@streamlit-mpi:~/hello_wp$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
0da5c90661ea mysql "docker-entrypoint.s…" 4 minutes ago Up 4 minutes 3306/tcp, 33060/tcp competent_dijkstra
29ad4d11cb20 alpine "watch 'date >> /var…" 25 hours ago Up 25 hours alpine_new
e42efae14e98 ubuntu "/bin/bash" 26 hours ago Exited (137) 26 hours ago quizzical_mayer
aeffe81bceb0 mariadb "docker-entrypoint.s…" 30 hours ago Up 30 hours 3306/tcp mariadb_2
5e622502ddd2 certbot/certbot:latest "certbot certonly --…" 30 hours ago Exited (1) 30 hours ago certbot_2
bcd2fed4f6d1 wordpress:php8.1-apache "docker-entrypoint.s…" 30 hours ago Up 30 hours 80/tcp wordpress_2
a7e7cf595d35 nginx:latest "/docker-entrypoint.…" 30 hours ago Restarting (1) 48 seconds ago nginx_2
377127a93dde wordpress:latest "docker-entrypoint.s…" 9 days ago Up 9 days 0.0.0.0:8080->80/tcp, :::8080->80/tcp wordpress-wordpress-1
ced0e9cec88d mysql:8.0.27 "docker-entrypoint.s…" 9 days ago Up 9 days 3306/tcp, 33060/tcp wordpress-db-1
b501f3d4f415 nginx:latest "/docker-entrypoint.…" 2 weeks ago Up 2 weeks 0.0.0.0:80->80/tcp, :::80->80/tcp, 0.0.0.0:443->443/tcp, :::443->443/tcp nginx
Docker stop
‘docker stop’ 명령은 컨테이너 이름 또는 해당 ID를 사용하여 컨테이너를 중지합니다. 방법은 다음과 같습니다. 중지된 컨테이너의 상태는 ‘Exited’ 로 나타납니다. 사용중인 컨테이너는 ‘Up’ 으로 표시됩니다.
(base) kevin_kidong_lim@streamlit-mpi:~/hello_wp$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
0da5c90661ea mysql "docker-entrypoint.s…" 5 minutes ago Exited (0) 15 seconds ago
Docker restart
이 명령은 중지된 컨테이너를 다시 시작하는 데 사용됩니다. 시스템을 재부팅한 후에 사용하는 것이 좋습니다. 방법은 다음과 같습니다. ‘Exited’ 에서 ‘Up’ 으로 상태가 변경되었습니다.
(base) kevin_kidong_lim@streamlit-mpi:~/hello_wp$ docker restart 0da5c90661ea
0da5c90661ea
(base) kevin_kidong_lim@streamlit-mpi:~/hello_wp$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
0da5c90661ea mysql "docker-entrypoint.s…" 8 minutes ago Up 6 seconds 3306/tcp, 33060/tcp
Docker kill
이 명령은 컨테이너의 실행을 종료하여 컨테이너를 즉시 중지하는 데 사용됩니다. ‘docker stop’ 명령은 컨테이너를 자체적으로 종료하는 데 도움이 되지만, ‘docker kill’ 명령은 컨테이너를 한 번에 종료합니다. 사용 방법은 다음과 같습니다.
(base) kevin_kidong_lim@streamlit-mpi:~/hello_wp$ docker kill 0da5c90661ea
0da5c90661ea
(base) kevin_kidong_lim@streamlit-mpi:~/hello_wp$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
0da5c90661ea mysql "docker-entrypoint.s…" 11 minutes ago Exited (137) 5 seconds ago
참고: Docker stop 은 컨테이너 애플리케이션에게 정상적인 종료 절차를 수행할 수 있는 시간을 제공합니다. 예를 들어, 데이터 저장, 연결 종료 등 마무리 작업을 수행할 수 있습니다. Docker kill 은 테이너 프로세스에 전송하여 강제 종료합니다. 이 신호는 즉각적인 종료를 강요하며, 컨테이너 애플리케이션은 마무리 작업을 수행할 수 없게 됩니다. 데이터 손실이나 시스템 불안정성이 발생할 가능성이 높아집니다. 가능한 경우 stop
명령어를 사용하는 것이 좋습니다. 컨테이너 애플리케이션에 충분한 시간을 제공하여 정상적으로 종료되도록 하여 데이터 손실이나 시스템 불안정성을 방지할 수 있습니다.
Docker exec
이 명령은 실행 중인 컨테이너에 액세스하는 데 사용됩니다. 사용 방법은 다음과 같습니다.
도커 컨테이너 생성.
docker run -d --name test_db -e MYSQL_ROOT_PASSWORD=my-secret-pw -p 3306:3306 mysql
(base) kevin_kidong_lim@streamlit-mpi:~/hello_wp$ docker exec -it test_db bash
bash-5.1# mysql -uroot -pmy-secret-pw
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 10
Server version: 8.4.0 MySQL Community Server - GPL
mysql> SHOW DATABASES;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
4 rows in set (0.00 sec)
컨테이너의 이름 또는 아이디(이 경우 ‘test_db’)를 제공해야 합니다. ‘-i’ 및 ‘-t’ 옵션은 대화형 모드에 액세스하는 데 사용됩니다.
Docker login
이 명령은 도커 허브에 로그인하는 데 도움이 됩니다. 로그인을 시도할 때 도커 허브 자격 증명을 입력하라는 메시지가 표시됩니다.
(base) kevin_kidong_lim@streamlit-mpi: docker login
docker login Login with your Docker ID to push and pull images from Docker Hub. Suppose you don’t have a Docker ID, head over to https://hub.docker.com to create one. Username: greatlearning Password: Configure a credential helper to remove this warning. See: https://docs.docker.com/engine/reference/commandline/login/#credentials-store Login Succeeded
Docker commit
이 명령은 로컬 시스템에서 편집한 컨테이너의 이미지를 만들거나 저장하는 데 사용됩니다.
base) kevin_kidong_lim@streamlit-mpi:~$ docker commit ca0c0af3661a kevin00/mysql_image
sha256:ff5ef378737ca9fc6e3bb916ffbe5738cf2a72b3d749d891aea985fe7b106153
Docker push
이 명령은 리포지토리 또는 도커 허브에 도커 이미지를 푸시하거나 업로드하는 데 도움이 됩니다. 사용 방법은 다음과 같습니다. 방금 위에서 생성한 로컬 commit 한 이미지를 push 합니다.
(base) kevin_kidong_lim@streamlit-mpi:~$ docker push kevin00/mysql_image
Using default tag: latest
The push refers to repository [docker.io/ultrax00/mysql_image]
69572c023d7a: Pushed
5e4336bf306a: Mounted from library/mysql
9a7bf98ce4cb: Mounted from library/mysql
7db15ae0c4bc: Mounted from library/mysql
193c79081b3f: Mounted from library/mysql
04da47d8a5bf: Mounted from library/mysql
b456f025514c: Mounted from library/mysql
f64b5f1dbac0: Mounted from library/mysql
ea99f328bc72: Mounted from library/mysql
662cdc2f8e31: Mounted from library/mysql
0e2e8dd6d8eb: Mounted from library/mysql
latest: digest: sha256:6bd70e9c9329e5ff0ea9df42552d1b82c0067702170a5535d60a32a7b7e82838 size: 2618
Docker network
‘docker network’ 명령은 클러스터의 네트워크 목록에 대한 세부 정보를 파악하는 데 사용됩니다. 사용 방법은 다음과 같습니다.
(base) kevin_kidong_lim@streamlit-mpi:~$ docker network ls
NETWORK ID NAME DRIVER SCOPE
c0e4a680b64b bridge bridge local
aac2690b5d53 host host local
ddab878546bb kevin_kidong_lim_webnet bridge local
594afd082820 none null local
721a7bb4cab7 wordpress_default bridge local
f3c812107637 wp-project_default bridge local
이 외에도 다음 도커 네트워크 명령을 사용하여 네트워크를 관리할 수도 있습니다.
Connect – 컨테이너를 네트워크에 연결합니다.
Disconnect – 네트워크에서 컨테이너 연결을 끊습니다.
ls – 네트워크 리스트 조회
Inspect – 하나 이상의 네트워크에 대한 자세한 정보를 표시합니다.
prune – 네트워크를 모두 제거합니다.
rm – 하나 이상의 네트워크를 제거
history – 이 명령은 도커 이미지의 기록을 확인하는 데 사용됩니다. 명령을 사용하는 동안 이미지 이름을 언급해야 합니다. ex) docker history mysql
Create – 네트워크를 생성합니다.
Docker rmi
이미지를 삭제하여 디스크 공간을 확보하는 데 사용됩니다. 이미지 ID는 이 명령을 사용하는 동안 이미지를 제거하는 데 사용됩니다. docker images 로 이미지를 조회한후 아이디를 적용합니다.
(base) kevin_kidong_lim@streamlit-mpi:~$ docker rmi 0158aec21520
Deleted: sha256:0158aec215206dc7dd43336ab3197ba71163dc69c5d05d0d5d8b92a60e9e4ce9
Docker ps -a
실행 중이거나 중지되었거나 종료된 모든 컨테이너의 세부 정보를 파악하는 데 사용됩니다. 사용 방법은 다음과 같습니다.
(base) kevin_kidong_lim@streamlit-mpi:~$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ca0c0af3661a mysql "docker-entrypoint.s…" 2 hours ago Up 2 hours 0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp test_db
0da5c90661ea mysql "docker-entrypoint.s…" 2 hours ago Up 2 hours 3306/tcp, 33060/tcp competent_dijkstra
29ad4d11cb20 alpine "watch 'date >> /var…" 27 hours ago Up 27 hours alpine_new
e42efae14e98 ubuntu "/bin/bash" 28 hours ago Exited (137) 28 hours ago
Docker copy
이 명령은 도커에서 로컬 시스템으로 파일을 복사합니다. 사용 방법은 다음과 같습니다.
(base) kevin_kidong_lim@streamlit-mpi:~$ docker cp 9ca4feb7tfc:/usr/local/apache2/logs/httpd.pid /home/greate
Docker logs
이 명령은 명령에 언급된 해당 포함된 ID를 가진 모든 도커 컨테이너의 로그를 확인하는 데 사용됩니다. 사용 방법은 다음과 같습니다.
(base) kevin_kidong_lim@streamlit-mpi:~$ docker logs test_db
2024-06-13 23:52:28+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 8.4.0-1.el9 started.
2024-06-13 23:52:28+00:00 [Note] [Entrypoint]: Switching to dedicated user 'mysql'
2024-06-13 23:52:28+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 8.4.0-1.el9 started.
2024-06-13 23:52:29+00:00 [Note] [Entrypoint]: Initializing database files
2024-06-13T23:52:29.076375Z 0 [System] [MY-015017] [Server] MySQL Server Initialization - start.
2024-06-13T23:52:29.078314Z 0 [System] [MY-013169] [Server] /usr/sbin/mysqld (mysqld 8.4.0) initializing of server in progress as process 79
2024-06-13T23:52:29.086580Z 1 [System] [MY-013576] [InnoDB] InnoDB initialization has started.
2024-06-13T23:52:30.240706Z 1 [System] [MY-013577] [InnoDB] InnoDB initialization has ended.
2024-06-13T23:52:32.767712Z 6 [Warning] [MY-010453] [Server] root@localhost is created with an empty password ! Please consider switching off the --initialize-insecure option.
Docker volume
도커 컨테이너가 데이터를 저장하는 데 사용할 수 있도록 볼륨을 생성합니다. 사용 방법은 다음과 같습니다.
base) kevin_kidong_lim@streamlit-mpi:~$ docker volume create
36c9dc9b575657e4c0ca3b1eb9b2a288168f45b1418074a6fe5269c916724ab6
volume 관련 명령어.
Usage: docker volume COMMAND
Manage volumes
Commands:
create – Create a volume
inspect – Display detailed information on one or more volumes
ls – List volumes
prune – Remove unused local volumes
rm – Remove one or more volumes
update – Update a volume (cluster volumes only)
Docker logout
이 명령은 도커 허브에서 로그아웃합니다. 사용 방법은 다음과 같습니다.
(base) kevin_kidong_lim@streamlit-mpi:~$ docker logout
Conclusion
20가지 도커 명령어가 도커를 시작하고 기본 기능을 무리 없이 수행하는 방법을 배우는 데 도움이 되기를 바랍니다. Windows용 무료 Docker를 다운로드하여 Docker 기술을 익혀 보세요. 더 자세한 내용은 도커 웹사이트 에서 확인 바랍니다.
✔도커 컴포즈, Nginx, 아파치, SSL로 워드프레스를 설치하는 방법
소스 : https://www.mygreatlearning.com/blog/top-essential-docker-commands/