일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- 엑셀파일명변경
- swapon
- journalctl
- pvcreate
- permission
- ansible
- MSBing
- ssh
- 같은폴더
- vgcreate
- Kubernetes
- 프로세스
- yum
- HTTPD
- 날짜변경
- newbingai
- docker network
- tar
- mount
- 랜카드인식불량
- vagrant kubernetes
- chatGPT
- nmcli
- docker image
- docker
- firewalld
- 리다이렉션
- M365필터
- lvcreate
- chmod
- Today
- Total
becool
20210811 (수) docker network, volume 본문
09:33
Docker Container Life Cycle
docker build | This is used to build the docker image and then put it to the image registry. |
docker pull | This is used to pull the image build in the above portion from the registry. |
docker run | This will run the image as a docker container. |
docker pause | It is used to pause the docker container. |
docker unpause | It is used to unpause the docker container. |
docker stop | Stops the docker container. |
docker start | Starts back the docker container. |
docker kill | Kills the docker container. |
docker container create
docker container start
docker container attach : PID 1번에 대해서 attach 하는 원리이므로 PID 1번에 관해서만 영향을 끼침
CTRL + p, CTRL + q
→ ps종료하지 않고 쉘에서 빠져나오는 방법
→ exit 명령어 사용시 ps 종료와 함께 빠져나오게 됨
Docker Network (docker network create --driver _____)
Bridge network
컨테이너가 사용하는 네트워크. 외부와 통신이 가능한 네트워크. 외부 네트워크와 NAT로 연결됨
Host network
Docker Host 의 네트워크 정보 (IP주소, Port, Hostname)을 공유하여 사용함
Null network
컨테이너에 대한 네트워크를 사용하지 않음
Overlay network
서로다른 Docker Host의 Container 간의 연결, 통신하는 네트워크
Macvlan network
Mac Address를 컨테이너에 할당. Docker Daemon의 트래픽을 Mac 주소를 사용하여 라우팅하는 네트워크
Container link : 컨테이너 간 이름으로 통신할 수 있도록 지원하는 기능
→ 매번 시작,정지 시 아이피가 변경되더라도 이름으로 통신을 할 수 있게 됨.
($ docker container run -it --network NETWORK --link CONTAINER --name NAME IMAGE )
/etc/hosts 확인
Container port forwarding : 호스트에 들어오는 요청을 포트포워딩을 통해 컨테이너로 전달
($ docker container run -it -p HOSTPORT:CONTAINERPORT --name CONTAINER_NAME IMAGE)
[user@docker-host0 ~]$ docker container inspect -f "{{ .NetworkSettings.Networks.network2.IPAddress }}" centos7-net2-1 192.168.200.3 [user@docker-host0 ~]$ docker container inspect -f "{{ .NetworkSettings.Networks.network2.IPAddress }}" centos7-net2-2 [user@docker-host0 ~]$ docker container inspect -f "{{ .NetworkSettings.Networks.network2.IPAddress }}" centos7-net2-3 192.168.200.2 [user@docker-host0 ~]$ docker container inspect -f "{{ .NetworkSettings.Networks.network2.IPAddress }}" centos7-net2-1 192.168.200.2 [user@docker-host0 ~]$ docker container inspect -f "{{ .NetworkSettings.Networks.network2.IPAddress }}" centos7-net2-2 192.168.200.3 [user@docker-host0 ~]$ docker container inspect -f "{{ .NetworkSettings.Networks.network2.IPAddress }}" centos7-net2-3 192.168.200.5 → stop, start 하게 되면 매번 아이피가 변경됨. → container link 사용 |
※ PROMISC 모드 [user@docker-host0 ~]$ sudo ifconfig enp0s3 promisc [sudo] password for user: [user@docker-host0 ~]$ ifconfig enp0s3 enp0s3: flags=4419<UP,BROADCAST,RUNNING,PROMISC,MULTICAST> mtu 1500 1. 무차별 모드/혼잡 모드 (Promiscuous Mode) ㅇ LAN 카드 - 수신된 프레임이 자신과 상관 없는 목적지 주소를 갖는데도 이를 모두 수신하는 모드 * 대부분의 운영체제에서는 일반 사용자 모드에서 LAN카드가 무차별 모드로 동작함을 허용하지 않음 * 따라서, 무차별 모드 지원을 위해서는 관리자 구동 허가가 필요 버츄얼 박스 " 머신 > 설정 > NAT network > 고급설정 > 무작위 모드 > 모두 허용 " 변경해주어야 사용가능 |
볼륨
데이터를 저장하기 위한 저장 공간
→ 컨테이너는 앱 구동을 위한 최소한의 사이즈를 활용하고, 사용 후 삭제 될 수 있으므로 (k8s)
데이터 저장을 컨테이너에 하지 않는다.
1) Bind mount 방식
호스트의 특정 디렉터리와 컨테이너의 디렉터리를 연결하는 방식
호스트의 파일 시스템에 의존
2) Volume 방식
도커에 의해 관리되는 스토리지로 docker 명령어를 사용하여 생성할 수 있음
bind mout
$ docker container create -i -t -v HOST_DIRECTORY:CONTAINER_DIRECTORY --name NAME IMAGE
( $ docker container create -i -t -v /home/app_data:/test --name centos7-bind centos:7 )
volume
$ docker run -i -t -v VOLUMENAME:CONTAINER_PATH --name NAME IMAGE
( [user@docker-host0 ~]$ docker run -i -t -v vol1: --name centos7-vol1 centos:7 )
##### bind mount 예제 ##### bind mount를 통한 index.html 공유 → 컨테이너는 웹 서비스만 제공하고, 웹 페이지 데이터는 host에서 제공하게 됨. [user@docker-host0 webapp]$ echo Hello Docker > index.html [user@docker-host0 webapp]$ echo Bind Mount >> index.html [user@docker-host0 webapp]$ cat index.html → host의 특정 디렉터리에 index.html 파일 생성 Hello Docker Bind Mount [user@docker-host0 webapp]$ cd ~ [user@docker-host0 ~]$ docker container create -i -t -v /work/webapp/:/var/www/html/ --name centos7-bindweb centos:7 → 해당 디렉터리를 bindmount로 공유하는 컨테이너 생성 (container mountpoint : /var/www/html ) 7ff53299ec99561b42f4191174cacd7a24af65f3c835f1fff32c020d90838a20 [user@docker-host0 ~]$ docker container start centos7-bindweb centos7-bindweb [user@docker-host0 ~]$ docker container attach centos7-bindweb [root@7ff53299ec99 /]# yum install -y httpd [root@7ff53299ec99 /]# cd /var/www/html/ [root@7ff53299ec99 html]# cat index.html → 파일 공유 확인 Hello Docker Bind Mount [root@7ff53299ec99 html]# ifconfig eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 172.17.0.7 netmask 255.255.0.0 broadcast 172.17.255.255 ether 02:42:ac:11:00:07 txqueuelen 0 (Ethernet) RX packets 25278 bytes 44086538 (42.0 MiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 14578 bytes 792517 (773.9 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 [root@7ff53299ec99 html]# /usr/sbin/httpd -DFOREGROUND & → web service 시작 [1] 110 [root@7ff53299ec99 html]# AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 172.17.0.7. Set the 'ServerName' directive globally to suppress this message 테스트 [user@docker-host0 webapp]$ curl 172.17.0.7 → 컨테이너 ip로 접속시도. 정상적으로 index.html 확인 Hello Docker Bind Mount [user@docker-host0 webapp]$ curl http://172.17.0.7 Hello Docker Bind Mount |
##### volume 예제 ##### [user@docker-host0 ~]$ docker volume create vol1 → 볼륨 생성 vol1 [user@docker-host0 ~]$ docker volume inspect vol1 [ { "CreatedAt": "2021-08-11T16:07:59+09:00", "Driver": "local", "Labels": {}, "Mountpoint": "/var/lib/docker/volumes/vol1/_data", "Name": "vol1", "Options": {}, "Scope": "local" } ] [user@docker-host0 ~]$ [user@docker-host0 ~]$ docker run -i -t -v vol1:/work --name centos7-vol1 centos:7 [root@a9edd163be13 /]# cd /work/ → 자동으로 /work 디렉터리가 생성되어있음 ##### 테스트 ##### 해당 디렉터리의 내용들은 호스트에 저장되며, 다른 컨테이너에 마운트하여도 데이터가 여전히 살아있는지 확인 [root@a9edd163be13 work]# mkdir vol_dir1 → 파일/디렉터리 만들고 확인 [root@a9edd163be13 work]# touch vol_file [root@a9edd163be13 work]# ls vol_dir1 vol_file [root@a9edd163be13 work]# exit exit [user@docker-host0 ~]$ docker container rm centos7-vol1 → 컨테이너 삭제 centos7-vol1 [user@docker-host0 ~]$ docker container run -it -v vol1:/home/docker_vol --name centos-voltest centos:7 → 새로운 컨테이너 생성 [root@3f4a49a3393a /]# cd ~ [root@3f4a49a3393a ~]# cd /home/docker_vol/ → volume mount point에서 다른 컨테이너가 만든 데이터들이 살아있음을 확인 [root@3f4a49a3393a docker_vol]# ls vol_dir1 vol_file |
설치 및 설정
[user@docker-host0 ~]$ docker container create -t -i -p 2100:21 --name centos7_ftp_exam1 centos:7
aea9b871172724ecbf4c85427cf70294992d155f62c741491797b4b168f3215b
[user@docker-host0 ~]$ docker container start centos7_ftp_exam1
centos7_ftp_exam1
[user@docker-host0 ~]$ docker attach centos7_ftp_exam1
[root@aea9b8711727 /]#
[root@aea9b8711727 /]# yum install -y vsftpd net-tools
[root@aea9b8711727 pub]# /usr/sbin/vsftpd &
[1] 65
[root@aea9b8711727 pub]# read escape sequence
[user@docker-host0 ~]$ docker container ls |grep 2100
aea9b8711727 centos:7 "/bin/bash" About a minute ago Up About a minute 0.0.0.0:2100->21/tcp, :::2100->21/tcp centos7_ftp_exam1
[user@docker-host0 ~]$ sudo firewall-cmd --add-service=ftp
[sudo] password for user:
success
[user@docker-host0 ~]$ sudo firewall-cmd --add-port=2100/tcp
success
접속테스트
[user@docker-host0 ~]$ sudo yum install ftp -y
[user@docker-host0 ~]$ ftp 172.17.0.5
Connected to 172.17.0.5 (172.17.0.5).
220 (vsFTPd 3.0.2)
Name (172.17.0.5:user): anonymous
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> exit
221 Goodbye.
[user@docker-host0 ~]$ ftp -p 192.168.56.100 2100
Connected to 192.168.56.100 (192.168.56.100).
220 (vsFTPd 3.0.2)
Name (192.168.56.100:user): anonymous
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> exit
221 Goodbye.
[user@docker-host0 ~]$ docker volume create user_data
user_data
[user@docker-host0 ~]$ docker container run -i -t -v user_data:/data/ --name centos7_volume_exam centos:7
[root@40ac0779037f /]# cd /data
[root@40ac0779037f data]# ls
[root@40ac0779037f data]# echo hello > file
[root@40ac0779037f data]# cat file
hello
[root@40ac0779037f data]# exit
exit
[user@docker-host0 ~]$ docker container rm centos7_volume_exam
centos7_volume_exam
[user@docker-host0 ~]$ docker container run -i -t -v user_data:/data/ --name centos7_volume_exam2 centos:7
[root@e5f384bded60 /]# ls /data/
file
[root@e5f384bded60 /]# cat /data/file
hello
'docker' 카테고리의 다른 글
20210813 (목) dockerfile, 멀티 스테이지 빌드, 사설레지스트리 (0) | 2021.08.13 |
---|---|
20210812 (목) image build, Dockerfile (0) | 2021.08.12 |
20210810 (화) docker 명령어 (0) | 2021.08.10 |
20210809 (월) container개념, docker 설치 (0) | 2021.08.09 |