TCP 헤더 (20~60 Byte)
- 송신지 포트 번호
- 수신지 포트 번호
- 일련 번호
- 데이터 오프셋
- 예약
- 제어 비트 (URG ACK PSH RST SYN FIN)
- 윈도우 크기
- 체크썸
- 긴급 포인터
- 옵션
+ CWR 비트
혼잡 제어, 전송속도 감소
+ ECN 비트
네트워크 혼잡 상태 알림
UDP 헤더
- 송신지 포트 번호
- 수신지 포트 번호
- 전체 데이터그램 길이
- 체크썸
참고
https://www.lainyzine.com/ko/article/summary-of-how-to-use-docker/#google_vignette
초심자를 위한 Docker 입문
https://cafe.naver.com/linuxmasternet/1188
하이퍼바이저
Type1 : Native, Bare Metal Hypervisor
- 운영체제와 완전히 독립적
- vm웨어 ESXi나 마이크로소프트 Hyper-V 등
Type2 : Hosted Hypervisor
- 운영체제가 설치된 후 그 위에 다른 운영 체제 지원
- vm웨어 워크스테이션이나 오라클 버츄얼 box가 대표적
도커의 핵심 : 격리
경량화. 논리적인 공간으로 사용
도커 컨테이너는 쉽게 다른 서버에 복사 가능
윈도우에서는 WSL2 도커 데스크탑 설치하면 사용 가능
* 요즘에는 쿠버네티스를 많이 사용
로키 리눅스8에서 도커 설치
dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
dnf -y install docker-ce docker-ce-cli containerd.io docker-compose-plugin
systemctl --now enable docker
도커 상태는 systemctl status docker.service 로 확인
# ip a 1: lo: 생략 2: ens160: 생략 3: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default link/ether 02:42:47:91:b4:3f brd ff:ff:ff:ff:ff:ff inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0 valid_lft forever preferred_lft forever |
ip a에 도커용 인터페이스가 생성되었다
docker를 치면 사용 설명을 볼 수 있다
# docker pull ubuntu Using default tag: latest latest: Pulling from library/ubuntu 31e907dcc94a: Pull complete Digest: sha256:8a37d68f4f73ebf3d4efafbcf66379bf3728902a8038616808f04e34a9ab63ee Status: Downloaded newer image for ubuntu:latest docker.io/library/ubuntu:latest # docker images REPOSITORY TAG IMAGE ID CREATED SIZE ubuntu latest edbfe74c41f8 2 weeks ago 78.1MB |
docker pull로 우분투 이미지를 땡겨와 복제설치한다
docker images로 용량확인
이러한 방식으로 도커 안에 db, php, apache 등이 속할 수 있다
docker run -it --name ubuntu ubuntu /bin/bash
| || | | └ 컨테이너 시작시 실행할 명령어
| || | └ 실행할 이미지 이름
| || └ 컨테이너 이름을 ubuntu로 설정
| |└ -t 터미널 할당
| └ -i 컨테이너 표준 입력
└ run을 이용하면 자동으로 pull하여 다운로드 후 실행한다
exit : 경우에 따라 컨테이너가 중지될 수있음
Ctrl+Shift+p Ctrl+Shift+q
: 컨테이너를 중지하지 않고 빠져나가기
# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES e9829b3f0fc0 ubuntu "/bin/bash" 7 minutes ago Up 7 minutes ubuntu |
현재 실행여부 확인
docker exec로 재접속 가능
리눅스# uname -a Linux rocky8.linuxmaster.net 4.18.0-553.el8_10.x86_64 #1 SMP Fri May 24 13:05:10 UTC 2024 x86_64 x86_64 x86_64 GNU/Linux 도커# uname -a Linux e9829b3f0fc0 4.18.0-553.el8_10.x86_64 #1 SMP Fri May 24 13:05:10 UTC 2024 x86_64 x86_64 x86_64 GNU/Linux |
uname -a로 커널버전을 확인
도커는 리눅스의 커널을 공유받아 사용한다
# docker stop ubuntu ubuntu # docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES # docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES e9829b3f0fc0 ubuntu "/bin/bash" 16 minutes ago Exited (137) 45 seconds ago ubuntu |
stop 명령어로 중지시키면 docker ps리스트에 뜨지 않는다
-a 명령어는 중지된 도커까지 볼 수 있다
# docker rm ubuntu # docker images REPOSITORY TAG IMAGE ID CREATED SIZE ubuntu latest edbfe74c41f8 2 weeks ago 78.1MB # docker rmi ubuntu Untagged: ubuntu:latest Untagged: ubuntu@sha256:8a37d68f4f73ebf3d4efafbcf66379bf3728902a8038616808f04e34a9ab63ee Deleted: sha256:edbfe74c41f8a3501ce542e137cf28ea04dd03e6df8c9d66519b6ad761c2598a Deleted: sha256:f36fd4bb7334b7ae3321e3229d103c4a3e7c10a263379cc6a058b977edfb46de |
docker rm ubuntu
컨테이너 완전 삭제. ps -a 명령으로도 볼 수 없게된다.
삭제후에도 다운로드된 images는 남아있기 때문에 rmi를 이용해 완전삭제
# docker run --name apache_web_server -d httpd
└ -d 백그라운드로 실행
dnf --enablerepo=powertools -y install lynx
lynx 설치하고
# lynx --dump 172.17.0.2
It works!
내부에서 접속 가능. 이 때는 docker0 인터페이스로 직접 접속한다.
# iptables -t nat -nvL Chain PREROUTING (policy ACCEPT 37 packets, 2710 bytes) pkts bytes target prot opt in out source destination 30 1560 DOCKER all -- * * 0.0.0.0/0 0.0.0.0/0 ADDRTYPE match dst-type LOCAL ... 생략 Chain DOCKER (2 references) pkts bytes target prot opt in out source destination 0 0 RETURN all -- docker0 * 0.0.0.0/0 0.0.0.0/0 |
도커를 통해 컨테이너를 설정하면 자동으로 iptables DNAT에 룰로 등록된다
# docker run -d --name apache_web_server -p 80:80 httpd
# iptables -t nat -nvL Chain PREROUTING (policy ACCEPT 37 packets, 2710 bytes) pkts bytes target prot opt in out source destination 30 1560 DOCKER all -- * * 0.0.0.0/0 0.0.0.0/0 ADDRTYPE match dst-type LOCAL 생략 Chain OUTPUT (policy ACCEPT 104 packets, 7329 bytes) pkts bytes target prot opt in out source destination 1 60 DOCKER all -- * * 0.0.0.0/0 !127.0.0.0/8 ADDRTYPE match dst-type LOCAL Chain DOCKER (2 references) pkts bytes target prot opt in out source destination 0 0 RETURN all -- docker0 * 0.0.0.0/0 0.0.0.0/0 0 0 DNAT tcp -- !docker0 * 0.0.0.0/0 0.0.0.0/0 tcp dpt:80 to:172.17.0.2:80 |
-p 80:80은 호스트port:컨테이너port로 리눅스의 80번 포트와 연결한다.
iptables의 룰에도 연결해주는 변화가 생겼다 (기존 리눅스가 갖고있던 ens160 인터페이스를 통해 접속)
# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 1f933f7a6f68 httpd "httpd-foreground" 19 minutes ago Up 19 minutes 0.0.0.0:80->80/tcp, :::80->80/tcp apache_web_server |
# docker run -d --name mysql5.6 -p 3306:3306 -e MYSQL_ROOT_PASSWORD=111111 mysql:5.6
| |
mysql 내부 환경 변수 설정 실행할 이미지 이름과 태그 지정
# iptables -t nat -nvL Chain PREROUTING (policy ACCEPT 40 packets, 3397 bytes) pkts bytes target prot opt in out source destination 32 1664 DOCKER all -- * * 0.0.0.0/0 0.0.0.0/0 ADDRTYPE match dst-type LOCAL 생략 Chain POSTROUTING (policy ACCEPT 182 packets, 12991 bytes) pkts bytes target prot opt in out source destination 1 60 MASQUERADE all -- * !docker0 172.17.0.0/16 0.0.0.0/0 0 0 MASQUERADE tcp -- * * 172.17.0.2 172.17.0.2 tcp dpt:3306 Chain OUTPUT (policy ACCEPT 181 packets, 12947 bytes) pkts bytes target prot opt in out source destination 1 60 DOCKER all -- * * 0.0.0.0/0 !127.0.0.0/8 ADDRTYPE match dst-type LOCAL Chain DOCKER (2 references) pkts bytes target prot opt in out source destination 0 0 RETURN all -- docker0 * 0.0.0.0/0 0.0.0.0/0 0 0 DNAT tcp -- !docker0 * 0.0.0.0/0 0.0.0.0/0 tcp dpt:3306 to:172.17.0.2:3306 |
리눅스에 mysql 패키지 없으면 설치하고
# mysql -h 127.0.0.1 -P 3306 -u root -p111111
mysql>
접속완료
-h 127.0.0.1 이 없으면 소켓으로 통신하기 때문에 에러 발생 (tcp 통신해야함)
vi .my.cnf 파일 만들어서
[client]
host=
user=
password=
정보넣고 사용하는 것이 비교적 안전
# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
mysql 5.6 dd3b2a5dcb48 2 years ago 303MB
# docker rmi mysql
Error response from daemon: No such image: mysql:latest
#docker rmi mysql:5.6
=> TAG가 5.6 이므로, :5.6을 붙여서 삭제하거나 IMAGE ID로 삭제해야한다
# docker network
Usage: docker network COMMAND
Manage networks
Commands:
connect Connect a container to a network
create Create a network
disconnect Disconnect a container from a network
inspect Display detailed information on one or more networks
ls List networks
prune Remove all unused networks
rm Remove one or more networks
Run 'docker network COMMAND --help' for more information on a command.
커맨드 확인
# docker network ls
NETWORK ID NAME DRIVER SCOPE
708f99e2b3e6 bridge bridge local
54385ad65dc6 host host local
d151aaa9e1fc none null local
ls 명령어를 통해 현재 도커에서 사용 가능한 네트워크 목록을 확인할 수 있다
DRIVER는 네트워크 구현에 사용되는 드라이버이며
기본적으로 bridge를 사용한다. host는 성능이 중요한 네트워크 작업에 사용되고, null은 네트워크 연결이 없다는 뜻
SCOPE는 범위를 의미한다
# docker network create mynetwork
324a32024101fe3cec46733f442997cba801f19274492fcfbda1d5c33780425c
# docker network ls
NETWORK ID NAME DRIVER SCOPE
708f99e2b3e6 bridge bridge local
54385ad65dc6 host host local
324a32024101 mynetwork bridge local
d151aaa9e1fc none null local
네트워크를 create로 생성하면 추가된다.
# docker network inspect mynetwork
좀 더 자세한 정보들을 출력할 수 있다 (json 형태로 제공)
# ip a 1: lo: 생략 2: ens160: 생략 3: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default link/ether 02:42:47:91:b4:3f brd ff:ff:ff:ff:ff:ff inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0 valid_lft forever preferred_lft forever inet6 fe80::42:47ff:fe91:b43f/64 scope link valid_lft forever preferred_lft forever 12: br-324a32024101: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default link/ether 02:42:b9:0d:8d:38 brd ff:ff:ff:ff:ff:ff inet 172.18.0.1/16 brd 172.18.255.255 scope global br-324a32024101 valid_lft forever preferred_lft forever |
ip a에 docker0 뒤로 새로 생성한 네트워크가 추가되었음
# docker network rm mynetwork
네트워크는 rm 으로 삭제한다
워드프레스Wordpress
오픈소스 콘텐츠 관리 시스템. 웹사이트를 쉽게 생성하고 관리할 수 있는 도구
PHP로 개발되었고, 취약점이 많지만 편리함. Maria DB와 연동한다
도커에서 사용할 네트워크 생성
# docker network create wordpress_network
# docker network ls
NETWORK ID NAME DRIVER SCOPE
708f99e2b3e6 bridge bridge local
54385ad65dc6 host host local
d151aaa9e1fc none null local
07f1d0646f47 wordpress_network bridge local
확인
docker_mysql_install.sh 쉘 스크립트 생성
# chmod 755 docker_mysql_install.sh
권한 변경해주고 파일 생성하거나 그냥 스크립트 복사붙여넣기 해서 실행하면 된다
옵션은 별거없고 -dit는 -d -i -t 합쳐서 쓴것임.
# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
83164bbab30c mysql:8.0 "docker-entrypoint.s…" About a minute ago Up About a minute 3306/tcp, 33060/tcp mysqlwordpress
Up 실행중 확인
# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
93c4ff0c02a6 wordpress "docker-entrypoint.s…" 4 seconds ago Up 3 seconds 0.0.0.0:80->80/tcp, :::80->80/tcp wordpress
83164bbab30c mysql:8.0 "docker-entrypoint.s…" 3 minutes ago Up 3 minutes 3306/tcp, 33060/tcp mysqlwordpress
둘 다 실행중 확인
http://192.168.100.30/wp-admin/install.php
해당하는 ip에 /wp-admin/install.php 붙여서 들어가면
워드프레스 설치 화면이 나온다
진행하면 쉽게 설치완료된다
비밀번호를 잊어버렸을 때
# docker exec -it mysqlwordpress /bin/bash
# mysql -u root -p111111
mysql> use wordpress;
mysql> show tables;
+-----------------------+
| Tables_in_wordpress |
+-----------------------+
| wp_commentmeta |
| wp_comments |
| wp_links |
| wp_options |
| wp_postmeta |
| wp_posts |
| wp_term_relationships |
| wp_term_taxonomy |
| wp_termmeta |
| wp_terms |
| wp_usermeta |
| wp_users |
+-----------------------+
mysql> select * from wp_users\G
mysql> UPDATE wp_users SET user_pass= '21232f297a57a5a743894a0e4a801fc3' WHERE user_login = 'admin'
21232f297a57a5a743894a0e4a801fc3
가 admin에 해당하는 비밀번호 암호문값이라고 한다
도커로 톰캣 설치
# mkdir -p /project/tomcat
# docker run -d -it -p 8080:8080 -e LC_ALL=C.UTF-8 -v /project/tomcat:/usr/local/tomcat/webapps/ROOT/limanet --name tomcat8_1 bitnami/tomcat
=> 그런데 실행하니 docker ps -a 에서 죽은것으로 확인되어
# docker pull tamcat:latest
# docker run -d -it -p 8080:8080 -e LC_ALL=C.UTF-8 -v /project/tomcat:/usr/local/tomcat/webapps/ROOT/limanet --name tomcat8_2 tomcat
=> 최신버전 tomcat을 pull로 다운받아 재실행
# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
0fd2654b8b36 tomcat "catalina.sh run" 5 seconds ago Up 4 seconds 0.0.0.0:8080->8080/tcp, :::8080->8080/tcp tomcat8_2
Up 실행 확인
그냥 들어가면 에러가 난다
설정했던 /project/tomcat 폴더에 index.jsp 파일을 생성하고
/usr/local/tomcat/webapps/ROOT/limanet 였으니까
http://192.168.100.30:8080/limanet/ 로 접속
( 참고 : 도커에서 애플리케이션 서버 실행하기 https://yooloo.tistory.com/42 )
이 때 파일을 수정하고 웹 브라우저를 새로고침하면 바로 동기화 되는 것이 확인된다.
이것은 도커의 실행시 -v 볼륨 옵션을 주었기 때문이다.