docker container run
옵션
-i | 대화식 모드 열기 |
---|---|
-t | 단말디바이스 제공(마치 ssh로 연결하는 것 |
-d | 생성된 컨테이너를 백그라운드에서 동작 시킴 |
—name | 생성된 컨테이너는 기본적으로 id를 부여받고, 이 중 12자리를 이용해 관리할 수 있다. |
비슷한 옵션으로 —mount도 사용가능. mount는 과거에는 compose에서만 사용 가능했으나, 17번 이후부터는 container run에서도 사용이 가능하게 되었다. |
| -p | 호스트의 특정포트와 컨테이너의 특정포트를 매핑할 때 사용 (자주 사용) |
| -P | 컨테이너에서 노출한 특정 포트를 호스트의 임의의 포트와 자동 매핑 |
| —link | 두개 이상의 컨테이너를 연결하는 방법으로 ip가아닌 이름을 이용한 링킹이 가능
주로 외부에 노출되지 않은 데이터베이스와 같은 경우 웹 컨테이너와 연결할 때 사용
link옵션은 compose에서는 더이상 사용하지 않는다. |
| —restart | —restart=always
데몬 실행과 함께 자동으로 컨테이너가 실행된다.
on-failure을 사용하면 처음 컨테이너 시작 시 또는 생성시 정상실행이 되지 않거나 정상 생성이 되지 않는 경우 계속해서 실행을 시도할 수 있다. |
docker container run -it --name centos01 --hostname centos1 centos:7 /bin/bash
—link 사용 예시
rapa@rapa:~$ docker pull mysql:5.7
5.7: Pulling from library/mysql
66fb34780033: Pull complete
ef4ccd63cdb4: Pull complete
d6f28a94c51f: Pull complete
7feea2a503b5: Pull complete
71dd5852ecd9: Pull complete
2ff5c3b24fd5: Pull complete
88a546386a61: Pull complete
65b18297cf83: Pull complete
d64f23335fb8: Pull complete
6ba4171261fa: Pull complete
96dcc6c8de93: Pull complete
Digest: sha256:b3a86578a582617214477d91e47e850f9e18df0b5d1644fb2d96d91a340b8972
Status: Downloaded newer image for mysql:5.7
docker.io/library/mysql:5.7
root 패스워드 = test123
기본 데이터베이스 = testdb
외부에 공개할 포트 = 기본적으로 컨테이너는 3306/tcp를 이용하여 외부에 노출된다. 우리는 호스트의 33061번 포트를 통해 해당 DB로 접근할 수 있어야 한다.
rapa@rapa:~$ docker image inspect mysql:5.7
...
"ExposedPorts": {
"3306/tcp": {},
"33060/tcp": {}
},
...
컨테이너의 이름 = mydb로 한다.
백그라운드로 동작해야함.
[확인]
rapa@rapa:~$ mysql testdb -u root -P 33061 -h 127.0.0.1 -p
로 들어갈 수 있어야함
우분투에서는 sudo apt -y install mysql-client-core-8.0으로 설치한 뒤 접속
docker container run -d --name mydb -e MYSQL_ROOT_PASSWORD=test123 -e MYSQL_DATABASE=testdb -p 33061:3306 mysql:5.7
기능 추가(-v, —restart)
—restart=always를 사용하면 도커 데몬이 재시작될 때 자동으로 해당 컨테이너를 실행시킨다. 만약 옵션이 없다면 컨테이너는 종료된 상태가 된다.
docker container run -it -d --name mydb -e MYSQL_ROOT_PASSWORD=test123 -e MYSQL_DATABASE=testdb -p 33061:3306 -v /home/rapa/mydb:/var/lib/mysql --restart=always mysql:5.7
rapa@rapa:~$ sudo ls mydb/testdb/
[sudo] password for rapa:
db.opt
rapa@rapa:
rapa@rapa:~$ mysql testdb -u root -P 33061 -h 127.0.0.1 -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.7.39 MySQL Community Server (GPL)
Copyright (c) 2000, 2022, Oracle and/or its affiliates.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
| testdb |
+--------------------+
5 rows in set (0.00 sec)
mysql> exit
Bye
rapa@rapa:~$ docker container run -d --name wpdb -e MYSQL_ROOT_PASSWORD=password -e MYSQL_DATABASE=wordpress --restart=always mysql:5.7
7f80364862e584a8e0aeca09f434d3f502b4cc0ab70d84ab1e378b2b6f6604c6
rapa@rapa:~$ docker container run -d -e WORDPRESS_DB_PASSWORD=password -e WORDPRESS_DB_NAME=wordpress -e WORDPRESS_DB_USER=root --name wordpress --link wpdb:mysql -p 80:80 wordpress
wpdb:mysql , mysql은 별칭
이후
해당 포트로 접속하면 wordpress 홈페이지로 접속하게 됨
rapa@rapa:~/0818/board$ docker container run -d --name wpdb1 -e MYSQL_ROOT_PASSWORD=test123 -e MYSQL_DATABASE=wordpress -v wpdb1:/var/lib/mysql mysql:5.7
5c266c5de5eedbf23f51f7fd21274f758590ef131cc140179e9772a69468b225
rapa@rapa:~/0818/board$ docker container run -d --name wp1 -e WORDPRESS_DB_PASSWORD=test123 -e WORDPRESS_DB_USER=root -e WORDPRESS_DB_NAME=wordpress -p 8001:80 --link wpdb1:db1 wordpress
20be8788ddef860cb71c5a0afff93b7a6cf0a0a2c3ebe120a91d9bf956a48f34
rapa@rapa:~/0818/board$ docker container exec wp1 cat /etc/hosts
127.0.0.1 localhost
::1 localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
172.17.0.4 db1 5c266c5de5ee wpdb1 # 링크걸린 컨테이너(wpdb1)의 ID, 이름,alias과 IP 등록
172.17.0.5 20be8788ddef # 본인의ID