본문 바로가기
네트워크 수업/Docker

CLI(Command-line Interface) 23.05.11

by 6^6 2023. 5. 11.
728x90

2023.05.11 - [네트워크 수업/Docker] - 컨테이너 애플리케이션 구축.pdf

 

커맨드라인 인터페이스(Command-line Interface, CLI)란 사용자가 텍스트로 명령어를 입력하고 다시 텍스트로 결과를 화면에 출력해주는 인터페이스를 가진 컴퓨팅 인터페이스를 의미합니다.

 

▪ 컨테이너 애플리케이션 구축

이번에는 데이터베이스와 워드프레스 웹 서버 컨테이너를 연동해 워드프레스 기반 블로그 서 비스를 만들어 보자. 다음과 같이 각 컨테이너를 생성한다.

 

웹서버 연결

MYSQL~~ => 환경변수

-e => 환경변수

mysql:5.7 => os 이미지

 

 

 

[root@samba sunny]# systemctl start docker
[root@samba sunny]# systemctl enable docker
Created symlink from /etc/systemd/system/multi-user.target.wants/docker.service to /usr/lib/systemd/system/docker.service.
[root@samba sunny]# docker run -d --name wordpressdb -e MYSQL_ROOT_PASSWORD=password -e MYSQL_DATABASE=wordpress mysql:5.7

// mysql을 사용하여 database 컨테이너를 생성

 

[root@samba sunny]# docker run -d --name wordpress --link wordpressdb:mysql -p 80 wordpress  ==>방금 만든 wordpress를 이용해라.

//미리 준비된 워드프레스 이미지를 이용해 워드프레스 웹 서버 컨테이너를 생성한다.

-p 옵션 에서 80을 입력했으므로 호스트의 포트 중 하나와 컨테이너의 80번 포트가 연결된다.

docker ps 명령어로 호스트의 어느 포트와 연결되었는지 확인한다.

 

<방금만든 docker 확인하기>

[root@samba sunny]# docker ps
CONTAINER ID   IMAGE       COMMAND                  CREATED              STATUS              PORTS                                     NAMES
ba0a2a3765de   wordpress   "docker-entrypoint.s…"   About a minute ago   Up About a minute   0.0.0.0:32768->80/tcp, :::32768->80/tcp   wordpress
afbe8d05f714   mysql:5.7   "docker-entrypoint.s…"   2 minutes ago        Up 2 minutes        3306/tcp, 33060/tcp                       wordpressdb

 

-d => Detached 모드로 컨테이너를 실행한다. 다시 말해 컨테이너를 백그라운드에서 실행 하도록 설정한다.

-e는 환경변수

--link는 컨테이너의 내부 아이피를 알필요없이 별칭으로 접근하도록 한다.(alias정도로 생각하면 됨)//컨테이너 내부의 환경변수를 설정한다

-컨테이너의 내부 IP를 알 필요 없이 항상 별명(alias)으로 접근하도록 한다. docker run 명령에서 연결 옵션은 --link <컨테이너 이름>:<별칭> 형식이다. 컨테이너 안에서 다른 컨테이너에 접속할 때는 <별칭>:<포트 번호> 형식으로 사용한다.

 

[root@samba sunny]# docker port wordpress   ==>docker포트가 어디에 
80/tcp -> 0.0.0.0:32768  ==>컨테이너 80번포트 -> 0.0.0.0 모든 호스트:32768포트 에 매핑되었다.
80/tcp -> [::]:32768

 

 

10.10.51.9:32768

wordpress = 웹페이지를 쉽게 꾸밀수있게 해주는 도구(사용법만 책한권임. 걍 이런용도로 쓴다는 것을 알아두기)

 

 [root@samba sunny]# docker run -d --name detach_test ubuntu:14.04
3db06440500c9bd46a92f688c6933ba286d476168d0ba9b159306b95e4716927

 

 

 

=====너무 많으니까 지워주기=====

[root@samba sunny]# docker ps -a
CONTAINER ID   IMAGE          COMMAND                  CREATED          STATUS                     PORTS                                     NAMES
8c2cbbf2b435   ubuntu:14.04   "/bin/bash"              5 seconds ago    Exited (0) 4 seconds ago                                             detach_test
ba0a2a3765de   wordpress      "docker-entrypoint.s…"   9 minutes ago    Up 9 minutes               0.0.0.0:32768->80/tcp, :::32768->80/tcp   wordpress
afbe8d05f714   mysql:5.7      "docker-entrypoint.s…"   11 minutes ago   Up 10 minutes              3306/tcp, 33060/tcp                       wordpressdb
[root@samba sunny]# docker stop ba0a2a3765de
[root@samba sunny]# docker stop ba0a2a3765de
[root@samba sunny]# docker container prune

 

[root@samba sunny]# docker ps -a
CONTAINER ID   IMAGE          COMMAND                  CREATED          STATUS                     PORTS                 NAMES
8e7132b6c89d   ubuntu:14.04   "/bin/bash"              2 minutes ago    Exited (0) 2 minutes ago                         detach_test
afbe8d05f714   mysql:5.7      "docker-entrypoint.s…"   14 minutes ago   Up 14 minutes              3306/tcp, 33060/tcp   wordpressdb

 

[root@samba sunny]# docker run -i -t --name mysql_attach_test -e MYSQL_ROOT_PASSWORD=password -e MYSQL_DATABASE=wordpress mysql:5.7

 

[root@samba sunny]# docker ps -a
CONTAINER ID   IMAGE          COMMAND                  CREATED          STATUS                     PORTS                 NAMES
cfbce23b0fc2   mysql:5.7      "docker-ntrypoint.s…"  3 minutes ago  Up 3 minutes 3306/tcp,33060/tcp mysql_attach_test
8e7132b6c89d   ubuntu:14.04   "/bin/bash"              8 minutes ago    Exited (0) 8 minutes ago                         detach_test
afbe8d05f714   mysql:5.7      "docker-ntrypoint.s…"   20 minutes ago   Up 20 minutes    3306/tcp,33060/tcp   wordpressdb

<<mysql_attach_test>>

 

 

 

[root@samba sunny]# docker create -i -t --name mycentos centos:7
0ad563e266a41bdf4436a0ba453d02a783ce3f6d6f247d787da985c5bbfdfb96
[root@samba sunny]# docker start mycentos
domycentos
[root@samba sunny]# docker attach mycentos   == 두 개의 터미널에서 실행해 보자.( attach는 만들어진거에 대해 접근만 하는것) 

[root@0ad563e266a4 /]# ls         ==>이렇게 바뀐다
anaconda-post.log  dev  home  lib64  mnt  proc  run   srv  tmp  var
bin                etc  lib   media  opt  root  sbin  sys  usr

 

 

 

오른쪽에서 타자치면 왼쪽도 같이 움직인다.  == 컨테이너는 기본적으로 하나의 모니터만 가지고 있다.!

 

 

컨테이너를 만들고나서 컨테이너를 삭제하고 나면 DB도 같이 삭제된다.

만약에 우리가 owncloud를 만들었는데 owncloud서버를 삭제하면 owncloud에 저장되어잇는 데이터들도 같이 날아간다. owncloud따로 만들고 data공간 따로 만들어야 맞는거다. 이 방식으로 db컨테이너 따로 web컨테이너 따로 만들어서 관리해야한다. 

==> 호스트 volume 공유하는 방법 3가지

1) 호스트 볼륨 공유

2) 볼륨 컨테이너

3) 도커 볼륨

 

 

 

 

<<일단 다 지우고>>

[root@samba sunny]# docker ps -a
CONTAINER ID   IMAGE       COMMAND                  CREATED          STATUS          PORTS                 NAMES
cfbce23b0fc2   mysql:5.7   "docker-entrypoint.s…"   28 minutes ago   Up 28 minutes   3306/tcp, 33060/tcp   mysql_attach_test
afbe8d05f714   mysql:5.7   "docker-entrypoint.s…"   45 minutes ago   Up 45 minutes   3306/tcp, 33060/tcp   wordpressdb
[root@samba sunny]# docker rm -f mysql_attach_test  ==>강제로 지우기
mysql_attach_test
[root@samba sunny]# docker rm -f wordpressdb
wordpressdb

 

1) 호스트 볼륨 공유

==>mysql 데이터베이스 컨테이너와 워드프레스 웹 서버 컨테이너를 생성한다.

 

[root@samba sunny]# docker run -d --name wordpressdb_hostvolume -e MYSQL_ROOT_PASSWORD=password -e MYSQL_DATABASE=wordpress -v /home/wordpress_db:/var/lib/mysql mysql:5.7

host volume을 /home/wordpress_db에 넣어서 삭제되더라도 보존되는 미연에 방지한다.

 

[root@samba sunny]#  docker run -d -e WORDPRESS_DB_PASSWORD=password --name wordpress_hostvolume --link wordpressdb_hostvolume:mysql -p 80 wordpress
호스트 port로 wordpress 컨테이너에 접속할 수 있는지 확인한다. 여기서 –v 옵션 뒤의 내용은 호스트의 /home/wordpress_db 디렉터리와 컨테이너의 /var/lib/mysql 디렉터리를 공유한다는 뜻이다. 실제로 호스트에서 DB 파일이 있는지 확인한다.

 

 

[root@samba sunny]# docker ps -a
CONTAINER ID   IMAGE       COMMAND                  CREATED              STATUS              PORTS                     NAMES
6bdd53504b04   wordpress   "docker-entrypoint.s…"   About a minute ago   Up About a minute   0.0.0.0:32769-80/tcp,:::32769->80/tcp   wordpress_hostvolume
ea7a2c64c116   mysql:5.7   "docker-entrypoint.s…"   4 minutes ago        Up 4 minutes   3306/tcp, 33060/tcp          wordpressdb_hostvolume

 

이러고 인터넷에 10.10.51.9:32769 하면 wordpress떠야하는데 안됨...

 

쨌든..

# ls /home/wordpress_db /home/wordpress_db

디렉토리를 확인하면 mysql 컨테이너가 사용한 데이터가 그대로 남 아 있는 것을 확인할 수 있다.

결과적으로 컨테이너의 파일이 호스트로 복사된 것이다.

 

 

3) 도커 볼륨


도커 자체에서 제공하는 볼륨 기능을 사용하는 것이다.

 # docker volume create --name myvolume
 // 도커 볼륨 제거 : docker volume ls -> docker volume rm ID
이 볼륨은 로컬 호스트에 저장되며 도커엔진에 의해 생성 및 삭제된다. 

다음 명령어를 입력하여 myvolume 이라는 볼륨을 사용하는 컨테이너를 다음과 같은 형식으로 생성한다.

 [볼륨의 이름]:[컨테이너의 공유 디렉토리]

 

[root@samba wordpress_db]# docker volume ls   ==>16진수 난수로 되어있다.
DRIVER    VOLUME NAME
local     156be0bef20f2fd816b73c811fee8dceacc550944adc27e2995714f487a5c232
local     685f398cb6ec31919662e7475a6fff3b86c54ee71717e71d330e1d92e6b09d23
local     72987dbd29df14b00358effb41b9eb847bb95eac41ed63e4db1a324f04fc0c97
local     ae48539991777b9a3afd55074f0ecd384aa059a609927847801c0bce15cdc655
local     myvolume

 

[root@samba wordpress_db]# docker volume rm myvolume
myvolume

 

도커볼륨에 마운트한다.

[root@samba wordpress_db]# docker run -i -t --name myvolume_1 -v myvolume:/root/ ubuntu:14.04

root@776d1f06eb2b:/# echo hello, volume! >> /root/volume    ==> 이렇게 추가를 하자

 

 

ctrl+shift+q 

하고 

아래의 예시에서 생성되는 컨테이너는 볼륨을 컨테이너의 /root/ 디렉토리에 마운트하므로 /root 디렉토리에 파일을 쓰면 해당 파일이 볼륨에 저장된다.

# docker run -i -t --name myvolume_1 -v myvolume:/root/ ubuntu:14.04

root@60f31cc49256:~# echo hello, volume! >> /root/volume

같은 볼륨을 사용하여 또 다른 컨테이너를 생성한 후, /root/를 확인해 본다.

# docker run -i -t --name myvolume_2 -v myvolume:/root/ ubuntu:14.04

root@c297a1d1f562:/# cat /root/volume hello, volume!

다음 명령어로 myvolume 볼륨이 어디에 저장되어 있는지 알 수 있다.

# docker inspect --type volume myvolume   ==>inspect 검사하다.(자세히 보여주세요)

보면 mountpoint가 var/lib/docker/volumes/myvolume/_data 이다.

cd /var/lib/docker/voulmes/myvolue/_data

ls

volume나오는거 확인 가능

cat volume 

 하면 아까 내가 쓴 hello, volume!이 보인다.

 

 

 

 

[과제] 컨테이너를 이미지로 만들자

owncloud를 이미지로 만들어보자 (ami를 이미지로 만든것처럼) 

그걸 volume으로 공유할거다.

 

[root@samba _data]# docker commit -a "moon682" -m "my first commit"  myvolume_1 commit_test:first   ==>컨테이너를 이미지로 만드는것. -a는 제작자, -m 은 코멘트
sha256:eaabccb65173357fc5a1f6a05ad25e869802d6c4e728297ba16c134090f4602f

 

 

 

 

 

 

 

 

 

 

 

 

728x90

'네트워크 수업 > Docker' 카테고리의 다른 글

Docker - NSF 서버구축 23.05.12  (0) 2023.05.12
클라우드서버 구축 nextcoud 23.05.11  (0) 2023.05.11
[실습] IOS_FW GNS3 23.05.10  (0) 2023.05.10
방화벽 23.05.10  (0) 2023.05.10
Docker(AWS) 23.05.09  (0) 2023.05.09

댓글