[2024.10.20]
06. Docker 컨테이너 관리
1. 컨테이너 생성
1) 명령어 형식
# docker container create [옵션] 이미지_이름 [명령어] [인자값...]
2) 명령어 사용 예시
# docker container create --name webserver nginx
3) 컨테이너 생성
# docker image ls -a
# docker container create --name webserver nginx
# docker container ls -a
컨테이너 생성을 위해 이미지를 생성시킨다
이미지를 생성시키고 나서 해당 docker 이미지에 새로운 태그를 지정한다
username/webserver:1.0이라는 새로운 이름과 태그를 nginx 이미지에 부여하고,
이 명령을 실행한 후에는 nginx 이미지를 username/webserver:1.0이라는
새로운 이름으로 참조할 수 있게 된다
현재 -a 옵션을 이용하여 확인했을 때 업인 상태의 이미지가 출력되게 된다
현재 나온 컨테이너는 생성만 한 상태가 확인되고, 작동은 되지 않는다
*-a: all의 뜻으로 모두 다 출력됨
docker container만 하게 되면 사용할 수 있는 명령어를 확인할 수도 있다
2. 컨테이너 생성 및 바로 시작
1) 명령어 형식
# docker container run [옵션] 이미지_이름 [명령어] [인자값...]
2) 옵션
3) 명령어와 옵션 사용 예시
① 컨테이너 명령 수행
# docker container run --name test1 centos /bin/cal
ls로 확인 시 test1으로 사용하고 종료한 상태를 확인할 수 있다
계속해서 사용하고 싶은 경우 백그라운드로 돌리면 계속 작동할 수 있다
원래 centos의 경우 bin/bash로 실행되지만,
현재 컨테이너를 통해 해당 셸을 변경할 수도 있다
② 컨테이너 bash 쉘을 실행하여 키보드 입력을 연결하고 대화형 모드 시작
# docker container run -it --name test2 centos /bin/bash
bash로 접속하고 종료하게 될 시에는 컨테이너가 종료되는 것이 아니라
컨테이너에서 작동 중인 bash 셸이 종료되는 것이다
그렇기 때문에 컨테이너를 확인했을 때
test2의 동작 여부에서 종료된 것을 확인할 수 있다
다시 test22를 이용하여 뒤의 조건을 없이 작동하게 되어도
centos가 bash 셸이 기본 옵션이기 때문에 bash 셸이 실행된다
반면에 -i 옵션만 주고 실행하게 되면 셸의 모습이 갖춰지지는 않지만
명령어를 입력했을 때에는 명령어가 정상적으로 실행된다
하지만 -t 옵션만 줬을 때는 한 번의 셸은 나오지만,
그 후로는 셸도 없어지는 형태를 갖추게 되면서 명령어 실행도 되지 않는다
그렇기 때문에 i와 t 옵션은 각각의 역할도 있지만 같이 써야 된다
③ 컨테이너 프로세스를 백드라운드로 동작 실시
# docker container run -d --name test3 centos
④ 컨테이너 종료 시 컨테이너 자동 삭제
# docker container run --rm --name test4 /bin/cal
4) 컨테이너 생성 및 바로 시작
# docker image ls -a
# docker container run --name test1 centos /bin/cal
# docker container ls -a
# docker container run -it --name test2 centos /bin/bash
# docker container ls -a
# docker image inspect --format="{{ .Config.Cmd }}" centos
# docker container run -it --name test3 centos /bin/bash
# docker container ls -a
3. 컨테이너 삭제
1) 컨테이너 삭제
# docker container ls -a
# docker container rm 947249bdb742 36554120d575 6bcb2f4e24f3 2181d3a8f933
# docker container ls -a
2) '--rm' 옵션을 이용한 컨테이너 삭제
# docker container run --rm --name "test4" centos /bin/cal
# docker container ls -a
# vi ~/.bashrc
# source ~/.bashrc
--rm 옵션을 주고 실행시키게 되면 실행은 되지만,
컨테이너 작동 여부를 확인했을 때 바로 삭제되는 것을 확인할 수 있다
rm 옵션을 없애고 실행하게 되면 컨테이너 다시 동작 여부가 나타나고,
-aq 옵션을 사용하여 확인하게 되면 처음에 나오는 컨테이너의 ID만 출력된다
shift+G로 해서 맨 아래로 이동하여 o를 누르고 끼워넣기를 진행한다
26, 27, 28번 줄의 내용을 삽입하고 저장한다
docker1, 2 모두 alias를 적용시킨 후 확인한다
source .bashrc를 실행하고 alias를 하게 되면 내가 설정한 alias를 확인할 수 있다
마지막으로 내가 설정한 단축 명령어를 입력했을 때
화면과 같이 나온다면 맞게 설정한 것이다
해당되는 이미지가 없기 때문에 화면과 같이 나오게 된다
3) 컨테이너 백그라운드 실행
# docker container run --rm -d centos /bin/ping localhost
# docker container ls -a
# docker container logs -t 2f648e99ac3f
# docker container stop 2f648e99ac3f
# docker container ls -a
백그라운드로 실행 중인 ping을 확인할 수 있다
4. 컨테이너 시작/중지/재시작/강제 종료
1) 컨테이너 시작(docker container start)
> 생성(Created) 및 정지(Stop) 중인 컨테이너를 시작(Start)할 때 사용한다
컨테이너에 할당된 컨테이너 식별자를 지정하여 컨테이너를 시작한다
① 명령 형식
# docker container start [옵션] 컨테이너_이름/아이디
② 명령 사용 예시
# docker container start myweb
2) 컨테이너 중지(docker container stop)
> 실행 중인 컨테이너를 중지시킬 때 사용
① 명령 형식
# docker container stop [옵션] 컨테이너_이름/아이디
# docker container restart [옵션] 컨테이너_이름/아이디
② 명령 사용 예시
# docker container stop myweb
# docker container restart myweb
3) 컨테이너 삭제(docker container rm)
> 컨테이너를 삭제할 때 사용
① 명령 형식
# docker container rm [옵션] 컨테이너_이름
② 명령 사용 예시
> 구동 중인 컨테이너를 삭제할 경우, '-f' 옵션을 사용
# docker container rm myweb
# docker container rm -f myweb
4) 컨테이너 시작/재시작/중지/강제종료 상태 확인
# docker container create --name testweb nginx
# docker container ls -a
# docker container start testweb
# docker container ls -a
# docker container restart testweb
# docker container ls -a
*'docker container stop' 명령은 정상적으로 컨테이너를 중지하기 때문에 상태가 "Exited(0)"으로 출력된다.
# docker container stop testweb
# docker container ls -a
# docker container start testweb
# docker container ls -a
# docker container kill testweb
# docker container ls -a
# docker container start testweb
# docker container ls -a
# docker container kill -s 9 testweb
# docker container ls -a
# docker container start testweb
# docker container ls -a
# docker container rm -f $(docker container ls -aq)
# docker image rm -f $(docker image ls -aq)
sleep 명령어의 경우 백그라운드에서 대기하는 명령어다
구체적으로는 1000초 동안 아무 작업도 하지 않고 대기하는 상태다
현재 4057번이 sleep 상태이며, 그런 4057번을 kill로 종료시키게 되면
sleep 목록을 확인했을 때 사라져 있는 것을 확인할 수 있다
kill -L을 하게 되면 kill에 대한 시그널 목록을 보여 준다
시스템에서 사용할 수 있는 모든 신호 이름과 번호를 출력하며,
kill -번호 <- 이 예시와 같게 사용한다면 특정 신호를 프로세스에 보낸다
kill을 사용하여 종료시켜 보기도 하고,
9번으로 강제 종료를 시켜도 실행 여부에 같은 137의 번호가 나타난다
5. Docker 컨테이너 관리 예제
1) test1 컨테이너 - centos 이미지 사용
- 컨테이너 구동시 'cat /etc/os-release' 명령이 실행되고 컨테이너는 바로 삭제되도록 한다.
2) test2 컨테이너 - centos 이미지 사용
- test2 컨테이너의 bash 쉘을 사용하여 'cat /etc/os-release' 명령을 실시한다.
- 그리고 컨테이너의 bash 쉘을 종료하면 컨테이너가 바로 삭제되도록 한다.
바로 삭제되도록 명령어를 실행했기 때문에 cls를 하게 되면
centos가 존재하지 않는다
3) test3 컨테이너 - nginx 이미지 사용
- test3 컨테이너의 bash 쉘을 사용하여 'cat /etc/os-release' 명령을 실시한다.
- 그리고 컨테이너의 bash 쉘을 종료하면 컨테이너가 바로 삭제되도록 한다.
nginx의 기본 커맨트 라인은 빨간 박스에 나온 내용이기 때문에
nginx에서 /bin/bash를 사용하려면 반드시 뒤에 /bin/bash를 붙여 줘야 된다
하지만 현재 백그라운드로 실행을 하지 않았기 때문에 리눅스 셸을 사용할 수 없다
그렇기 때문에 nginx를 구동시키면서 리눅스 셸을 사용하고 싶을 때
사용하는 옵션이 -d 옵션이다
그렇게 되면 리눅스 셸을 사용함과 동시에 웹 페이지 접속에도 문제가 없다
07. Docker 볼륨 관리
1. Docker 볼륨 관리
1) volume 방식
# docker container run -d --name myweb -v testvol:/usr/share/nginx/html -p 8080:80 nginx
# docker container run -d --name myweb -v /usr/share/nginx/html -p 8080:80 nginx
2) bind mounts 방식
# docker container run -d --name myweb -v /www:/usr/share/nginx/html -p 8080:80 nginx
*볼륨 방식은 docker root 디렉터리에 저장, 바인드 마운트 방식은 정해진 곳이 없다
2. Volume 방식 구성
1) 컨테이너를 위한 볼륨 생성
# docker volume create testvol
# docker volume ls
# docker volume inspect testvol
# ls -l /var/lib/docker/volumes
# tree -L 4 /var/lib/docker
2) 컨테이너 구동 시 볼륨 연결
# docker container run -d --name mynginx -p 8080:80 -v testvol:/usr/share/nginx/html nginx
# docker container ls -a
# docker container inspect mynginx
# tree /var/lib/docker/volumes
# curl http://192.168.2.10:8080
# ls /var/lib/docker/volumes/testvol/_data
# echo 'volume test' > /var/lib/docker/volumes/testvol/_data/index.html # cat /var/lib/docker/volumes/testvol/_data/index.html
rw: 읽기 + 쓰기
Source와 Destination을 보면 잘 연결되어 있다는 뜻이다
tree 구조로 확인 시에도 index.html이 존재하고 볼륨 영역을 확인할 수 있다
crul을 통해 접속이 원활하게 되는지 확인한다
잘 접속되는 게 확인되어 'volume test'로 문구를 변경했다
curl을 통해서 잘 작동되는 것을 확인했다면 웹 페이지에서도 동일하게 나와야 된다
현재 192.168.2.10:8080으로 접속 시 변경했던 volume test라는 문구가 나오는 걸 확인했다
3) 컨테이너 중지 및 삭제
# docker container stop mynginx
# docker container rm mynginx
# docker container ls -a
삭제를 진행해도 index.html에는 volume test가 존재한다
nginx가 실행 중이기 때문에 다시 curl로 확인해도 volume test를 확인할 수 있다
웹 페이지도 마찬가지다
차례대로 삭제를 진행하고 tree로 볼륨 영역을 확인했을 때
파일이 존재하지 않는 것을 확인할 수 있었다
4) 볼륨 확인
# docker volume ls
# ls -l
# tree /var/lib/docker/volumes
# cat /var/lib/docker/volumes/testvol/_data/index.html
5) 컨테이너 재구동 및 볼륨 연결
# docker container run -d --name mynginx -p 8080:80 -v testvol:/usr/share/nginx/html nginx
# docker container ls -a
# docker container inspect mynginx
# curl http://192.168.2.10:8080
7) 볼륨 삭제
3. Volume 방식을 이용한 MySQL 컨테이너 볼륨 구성
1) 컨테이너를 위한 볼륨 생성
① docker2에서 docker1의 컨테이너로 MySQL 원격 접속을 하기 위해서 MySQL를 설치한다.
# yum -y install mysql
# docker volume create mysqlvol
# docker volume ls
# docker volume inspect mysqlvol
# tree /var/lib/docker/volumes
먼저 mysql을 설치한다
mysqlvol이라는 볼륨 영역도 생성한다다
2) 컨테이너 구동 시 볼륨 연결
# docker container run -d --name mydb -p 3306:3306 -v mysqlvol:/var/lib/mysql \ -e MYSQL_ROOT_PASSWORD=password mysql:5.7
# docker container ls -a
# docker container inspect mydb
# ls -l /var/lib/docker/volumes/
# ls -l /var/lib/docker/volumes/mysqlvol/
> docker2에서 docker1의 mydb 컨테이너로 MySQL 원격 접속을 실시
# mysql -h 192.168.2.10 -u root -p
# tree /var/lib/docker/volumes/mysqlvol
mysql 접속 후 testdb라는 데이터베이스를 생성하고,
testdb로 접속 후 docker라는테이블을 생성한다
docker라는 테이블 안에는 해당되는 사용자의 정보를 적고 mysql을 종료한다
tree 구조로 mysqlvol의 볼륨 영역 살펴봤을 때
testdb의 docker가 생성되어 있는 것을 확인할 수 있다
컨테이너를 삭제하고 볼륨만 남겨둔 채
다시 tree 구조를 확인해도 mysql에 있는 testdb에 대한
데이터베이스, 테이블은 남아 있다
다시 mysql 접속 후 확인해도 그대로 정보가 남아 있는 것을 볼 수 있다
4. Volume 방식을 이용한 apache 컨테이너 볼륨 구성
1) 컨테이너 구동 시 볼륨 연결
# docker image pull httpd
# docker container run -d --name myweb -p 80:80 -v wwwvol:/usr/local/apache2/htdocs httpd
# docker container ls -a
# tree /var/lib/docker/volumes
# curl http://192.168.2.10
# echo "<H1><CENTER> www1 (server1:/www1) </CENTER></H1>" \
> /var/lib/docker/volumes/wwwvol/_data/index.html
# curl http://192.168.2.10
# docker container exec -it myweb /bin/bash
# docker container rm -f $(docker container ls -aq)
# ls -l /var/lib/docker/volumes/wwwvol/_data
# cat /var/lib/docker/volumes/wwwvol/_data/index.html
컨테이너를 구동시키고 볼륨 영역을 생성한다
curl을 통해 정상 작동이 되는지 확인 후
It works!로 나오는 문장을 volume test로 변경하고
/bin/bash를 실행하여 ls 명령어로 htdocs 디렉터리의 index.html을 확인한다
확인 시 변경한 volume test가 나오는 것을 볼 수 있다
웹 페이지 확인 시에도 volume test가 나오는 것을 확인할 수 있다
삭제 후에도 tree로 확인 시 데이터는 남아 있게 된다
2) 컨테이너 재구동 시 볼륨 연결
# docker container run -dit --name myweb -p 80:80 -v wwwvol:/usr/local/apache2/htdocs httpd
# curl http://192.168.2.10
# cp /root/docker/index.html /var/lib/docker/volumes/wwwvol/_data/
# docker container rm -f $(docker container ls -aq)
# docker image rm -f $(docker image ls -aq)
# docker volume prune -a
재구동 시에도 작동에는 문제가 없는 것으로 보여진다
index.html 파일에 다른 위치의 내용을 복사하고
다시 웹 페이지로 접속 시에는 넷플릭스 홈페이지가 나오게 되어 있다
위의 넷플릭스까지 확인 후에 나머지는 삭제시킨다
볼륨을 삭제할 때 purune -a 명령어를 사용해도 되지만,
해당 명령어는 존재하는 볼륨 모두를 삭제하는 것으로 실제 환경에서는 주의해야 된다
5. Bind Mounts 방식
1) 컨테이너 구동 시 호스트 디렉토리 마운트
# docker container run -d --name mynginx -p 8080:80 -v /www:/usr/share/nginx/html nginx
# docker container ls -a
# docker container inspect mynginx
# ls -l /www
# echo 'bind mounts test' > /www/index.html
# ls -l /www
# curl http://192.168.2.10:8080
# docker container exec -it mynginx /bin/bash
구동 후 inspect로 확인했을 때 타입이 바인드로 나오는 것을 확인할 수 있다
하지만 내용이 다 사라지게 되므로 바인드 방식은 권장을 하지 않는 추세다
나머지는 앞의 볼륨 방식과 동일하다
3) 컨테이너 중지 및 삭제
# docker container stop mynginx
# docker container rm mynginx
4) '/www' 디렉토리 내용 확인
# ls -l /www
5) 컨테이너 재구동 후 'index.html' 내용 확인
# docker container run --name mynginx -d -p 8080:80 -v /www:/usr/share/nginx/html nginx
# docker container ls -a
# docker container inspect mynginx
# curl http://192.168.2.10:8080
# docker container exec -it mynginx /bin/bash
# cp /root/docker/index.html /www
6) 컨테이너 중지 및 삭제
# docker container stop mynginx
# docker container rm mynginx
7) '/www' 디렉토리 삭제
# rm -rf /www
6. NFS를 이용한 Web 서버 볼륨 구성
NFS는 네트워크 파일 시스템의 약자
A라는 리눅스와 B라는 리눅스가 있으면 네트워크를 통해 연결하는 것이다
NFS를 통해 하드 디스크를 공유하여 연결해 사용하기도 하며,
클라우드에서도 네트워크 기반 스토리지로 사용이 일반적이다
1) docker2에서 NFS 서버 구성
# yum -y install nfs-utils
# mkdir -p /nfsweb
# echo "NFS web directory" > /nfsweb/index.html
# vi /etc/exports
# systemctl enable --now nfs-server
# exportfs -v
docker2에서 nfs-utils 설치
nfsweb 디렉터리에 파일도 생성하고, index.html의 내용을 NFS web directory로 변경한다
vi로 exports 파일을 열어 위의 내용과 같이 입력해 준다
명령어는 NFS(Network File System) 서버를 시스템 부팅 시 자동으로 시작하고,
즉시 서비스를 시작하는 명령어다
exportfs -v 명령어로 NFS 서버에서 공유된 디렉토리 목록을 확인까지 마친다
2) docker1에서 docker2의 ‘/nfsweb’ 디렉토리 마운트 실시
# yum -y install nfs-utils
# showmount -e 192.168.2.20
# mkdir -p /web
# mount 192.168.2.20:/nfsweb /web
# df -h
이번에는 docker1에서 nfs-utils를 설치한다
192.168.2.20 docker2에 대한 마운트를 진행한다
마운트가 되어 docker2에 존재하는 디렉터리를 docker1에서도 확인할 수 있다
3) docker1에서 컨테이너 구동 및 bind mounts 볼륨 구성
# docker container run -d --name myweb -p 80:80 -v /web:/usr/share/nginx/html nginx
# docker container ls -a
4) docker1 에서 웹 요청 실시
# curl http://192.168.2.10
7. 'docker volume prune' 명령어
# docker volume create testvol1
# docker volume create testvol2
# docker volume ls
# tree /var/lib/docker/volumes
# ls -l /var/lib/docker/volumes
# docker volume prune -a
# docker volume ls
# tree /var/lib/docker/volumes
# ls -l /var/lib/docker/volumes
# umount /web
# docker container rm -f $(docker container ls -aq)
# docker image rm -f $(docker image ls -aq)
# docker volume prune -a
실습을 마무리했다면 umount로 마운트를 해제시키고,
나머지 컨테이너까지 삭제시킨다
08. Docker 컨테이너 네트워크 관리
1. Docker 컨테이너 네트워크 설정 명령어
-p: 포트
3) 명령어 사용 예시
- 컨테이너 포트 매핑
# docker container run -d -p 8080:80 nginx
- 컨테이너 DNS 서버 지정
# docker container run -d --dns 8.8.8.8 nginx
- 컨테이너 MAC 주소 지정
# docker container run -it --mac-address="00:00:00:11:11:11" centos
- 컨테이너 '/etc/hosts' 파일 설정
# docker container run -it --add-host docker1:192.168.2.10 centos
- 컨테이너 호스트명 파일 설정
# docker container run -it --hostname webserver centos
2. Docker 컨테이너 네트워크 설정
1) 컨테이너 포트 매핑
# docker container run -d --rm --name myweb -p 8080:80 nginx
# docker container ls -a
# curl http://192.168.2.10:8080
# docker container stop myweb
# docker container ls -a
호스트의 포트 8080을 컨테이너의 포트 80에 매핑한다
즉, 호스트의 http://localhost:8080을 통해 컨테이너의 웹 서버(Nginx)를 접근할 수 있게 한다
curl을 통해 8080의 포트로 접속이 가능한지 확인을 위해 실행하고,
정상적으로 작동되는 것을 확인한다
해당 컨테이너는 삭제하고 또 다른 연습을 위해 다시 생성하려고 한다
이번에는 세 개의 포트를 매핑하고
컨테이너 구동을 확인한다
각각 echo로 페이지의 문구를 수정하고,
crul을 통해 페이지 문구가 변경되었는지 확인한다
웹 페이지에서도 각각의 포트 번호로 수정된 문구가 잘 나오는지 확인했다
포트 번호를 입력해 들어갔을 때 각각의 문구가 정상적으로 출력되는 걸 확인했다
마지막으로 사용한 컨테이너의 경우 모두 삭제시켰다
2) 컨테이너 호스트 네임 & 'hosts' 파일 & DNS 서버 설정
# ip address show docker0
# docker container run -it --rm --name myweb \
--hostname webserver \
--add-host docker1:172.17.0.1 \
--dns 8.8.8.8 centos
현재 ip address를 확인하면 docker0의 ip는 172.17.0.1이다
myweb의 호스트 네임을 webserver, 호스트 파일에 docker1:172.17.0.1,
dns는 8.8.8.8로 centos의 이미지로 컨테이너를 생성한다
그런 다음 bash 셸로 호스트 파일을 확인하면 설정한 172.17.0.1의 docker1을 확인할 수 있다
IP의 경우 본인의 것에서 자동으로 다음 IP로 설정된다
컨테이너를 하나 더 구동시킨다고 해도 3번대로 자동으로 부여된다
dns를 8.8.8.8로 설정했기 때문에
/etc/resolv.conf 파일을 확인하면 nameserver가 8.8.8.8로 변경되어 있다
3) 컨테이너 MAC 주소 변경 설정
# docker container run -it --rm --name myweb --mac-address="00:00:00:11:11:11" centos
mac 주소를 변경하게 되면 link/ether의 mac 주소를 표기하는 란에
내가 설정한 00:00:00:11:11:11의 주소로 변경된 값이 나타나게 된다
4) 호스트 docker0 네트워크 장치와 컨테이너 네트워크 장치 확인
# ip address show docker0
# docker container run -itd --name myweb1 -p 8001:80 centos
# docker container run -itd --name myweb2 -p 8002:80 centos
# docker container ls -a
# docker container exec -it myweb1 /bin/bash
# docker container exec -it myweb2 /bin/bash
Docker 기본 네트워크 브릿지(docker0)의 IP 주소 및 네트워크 정보를 확인한다
다음으로 CentOS 기반의 두 컨테이너를 실행하고 각각 포트 8001, 8002에 매핑한다
전체 컨테이너 목록을 확인하고
실행 중인 myweb1 및 myweb2 컨테이너 내부로 들어가서
명령어를 실행할 수 있는 Bash 셸을 연다
기본 게이트웨이가 172.17.0.0/16이기 때문에
범위 내에 있는 1, 2, 3번대의 IP 모두 통신이 가능하며,
외부와의 통신까지 모두 가능하게 된다
5) 사용자 정의 네트워크 연결
# docker network ls
# docker network create -d bridge testnet
# docker network ls
# ip address
# docker container run -it --rm --name myweb3 --network=testnet centos
네트워크 연결 시작 전 네트워크 목록을 확인한다
기본 값의 네트워크들이 존재하는 것을 볼 수 있다
화면의 명령어는 브릿지로 testnet이라는 네트워크를 생성한다는 뜻이다
이름으로 나오면 좋겠지만, 브릿지의 경우 ip address를 확인 시
br이라는 이름으로 존재하게 된다
이번에는 myweb3이라는 컨테이너를 testnet 네트워크게 연결시켜 실행한다
myweb3번은 myweb1, 2와는 다른 네트워크로 분류가 된다
현재 설정된 걸 확인해 보면 myweb3의 ip address는 172.18.0.2으로
17번대가 아닌 18번대이기 때문에 다르게 분류된다
서로 간의 통신을 하려면 라우팅 관련 설정이나 다른 설정들이 필요하다
서로 같은 게이트웨이를 사용하지만, 다른 네트워크로 분리가 되어 있기 때문에
MyWeb1, 2와 3은 서로 통신이 불가능하다
> 삭제
# docker network rm testnet
# docker network ls
# docker container rm -f $(docker container ls -qa)
3. Docker 컨테이너 네트워크 설정 예제
- 'systemctl restart docker' 명령을 실행하여 도커를 재시작한다.
- testnet1, testnet2 네트워크를 브리지 유형으로 생성한다.
- CentOS 이미지를 이용하여 myweb1(포트 8001:80), myweb2(포트 8002:80) 컨테이너를 구성한다.
- myweb1 컨테이너는 testnet1 네트워크를 이용하여 백그라운드로 구동한다.
- myweb2 컨테이너는 testnet2 네트워크를 이용하여 백드라운드로 구동한다.
1) web1 컨테이너의 Bash 쉘을 실행하여
ip 관련 정보(ip address, ip route)을 확인하고 'exit' 한다.
# docker container exec -it myweb1 /bin/bash
myweb1과 myweb2를 확인해 보면 서로 다른 네트워크로 분류된 것을 볼 수 있다
2) myweb2 컨테이너의 Bash 쉘을 실행하여
ip 관련 정보(ip address, ip route)을 확인하고,
myweb1 컨테이너로 ping 테스트를 실시한다.
# docker container exec -it myweb2 /bin/bash
- ping 테스트가 완료되었다면, 'exit' 한다.
> ping 테스트의 경우 마찬가지로 본인은 가능하지만 서로 간의 통신을 불가하다
3) myweb1, myweb2 컨테이너 및 testnet1, testnet2 네트워크를 삭제한다.
삭제 후 기존의 네트워크만 남은 상태를 확인한다
4) 'systemctl restart docker' 명령을 실행하여 도커를 재시작한다.
강의 소감
이번 강의에서는 컨테이너 생성, 시작, 삭제 등을 먼저 배우고
컨테이너 백그라운드 실행 및 강제 종료에 대해서 알게 되었다
관리 예제를 통한 충분한 연습을 진행했고,
컨테이너에 이미지 사용하는 연습도 하게 되었다
그 다음으로는 볼륨 관리에 대해서도 배우게 되었는데
볼륨 관리에는 크게 볼륨 방식과 바운드 마운트 방식이 존재했다
볼륨 방식은 docker root 디렉터리에 저장되고,
바운드 마운트 방식은 정해진 곳이 없는 형식이었다
볼륨 방식을 이용한 mysql 컨테이너 볼륨 구성과 네트워크 설정까지
다양한 방법으로 실습과 연습을 반복했다
출처 - 코리아it아카데미 김정우 강사님 제공
*중간에 나오는 교재의 단편적인 면이 아닌
MobaXterm으로 실행하여 캡처한 것은 모두 본인이 직접 실행해 보고
캡처하여 블로그에 작성하는 것입니다
'멀티 클라우드 인프라(DKR & K8S)' 카테고리의 다른 글
도커 & 쿠버네티스 6 (2) | 2024.11.11 |
---|---|
도커 & 쿠버네티스 5 (0) | 2024.11.02 |
도커 & 쿠버네티스 4 (0) | 2024.10.28 |
도커 & 쿠버네티스 3 (0) | 2024.10.28 |
도커 & 쿠버네티스 1 (1) | 2024.10.20 |