002-docker的網絡設置和數據管理

Docker 網絡設置

docker會建立一個橋接網卡[docker 0],docker有兩種映射方式,一種是隨機映射,一種是指定映射 生產場景通常不用隨機映射 隨機映射的好處是端口由docker分配,不會衝突java

安裝nginx指定端口

docker pull nginx docker run --name nginx-test -p 8080:80 -d nginx --name nginx-test 容器名稱 -p 8080:80 指定的端口映射(本機防火牆須要開啓) -d nginx 設置容器存在後臺一直運行 訪問nginx端口 http://localhost:8080node

安裝nginx不指定端口

docker run -d -P nginx docker run --name -d -P nginx 查看運行端口nginx

root@jenkins:/data/docker# netstat -lntp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      9185/sshd           
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      9383/master         
tcp6       0      0 127.0.0.1:8040          :::*                    LISTEN      73876/java          
tcp6       0      0 :::8080                 :::*                    LISTEN      123262/docker-proxy 
tcp6       0      0 :::8050                 :::*                    LISTEN      73876/java          
tcp6       0      0 :::22                   :::*                    LISTEN      9185/sshd           
tcp6       0      0 ::1:25                  :::*                    LISTEN      9383/master         
tcp6       0      0 :::1024                 :::*                    LISTEN      123397/docker-proxy 
tcp6       0      0 :::1025                 :::*                    LISTEN      123487/docker-proxy 
tcp6       0      0 :::1026                 :::*                    LISTEN      123576/docker-proxy 
tcp6       0      0 :::1028                 :::*                    LISTEN      123830/docker-proxy

查看運行防火牆規則docker

root@jenkins:/data/docker# iptables -t nat -nvL
Chain PREROUTING (policy ACCEPT 4 packets, 272 bytes)
 pkts bytes target     prot opt in     out     source               destination         
   17   884 DOCKER     all  --  *      *       0.0.0.0/0            0.0.0.0/0            ADDRTYPE match dst-type LOCAL

Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         
    1    52 DOCKER     all  --  *      *       0.0.0.0/0           !127.0.0.0/8          ADDRTYPE match dst-type LOCAL

Chain POSTROUTING (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         
    0     0 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:80
    0     0 MASQUERADE  tcp  --  *      *       172.17.0.3           172.17.0.3           tcp dpt:80
    0     0 MASQUERADE  tcp  --  *      *       172.17.0.4           172.17.0.4           tcp dpt:80
    0     0 MASQUERADE  tcp  --  *      *       172.17.0.5           172.17.0.5           tcp dpt:80
    0     0 MASQUERADE  tcp  --  *      *       172.17.0.6           172.17.0.6           tcp dpt:80

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           
    2   104 DNAT       tcp  --  !docker0 *       0.0.0.0/0            0.0.0.0/0            tcp dpt:8080 to:172.17.0.2:80
    0     0 DNAT       tcp  --  !docker0 *       0.0.0.0/0            0.0.0.0/0            tcp dpt:1024 to:172.17.0.3:80
    0     0 DNAT       tcp  --  !docker0 *       0.0.0.0/0            0.0.0.0/0            tcp dpt:1025 to:172.17.0.4:80
    0     0 DNAT       tcp  --  !docker0 *       0.0.0.0/0            0.0.0.0/0            tcp dpt:1026 to:172.17.0.5:80
    0     0 DNAT       tcp  --  !docker0 *       0.0.0.0/0            0.0.0.0/0            tcp dpt:1028 to:172.17.0.6:80

查看日誌 docker logs [ID/Name]來查看nginx輸出日誌centos

docker 啓動映射多端口

docker run -d -p 443:443 -p 82:80 --name nginxv2 nginxbash

docker 數據管理

docker數據分爲兩種:服務器

數據卷:  -v /data
         -v src:dst
數據卷容器: --volumes-from

能夠將數據卷理解爲掛載,能夠將數據mount到docker鏡像中,讓我在docker鏡像裏寫數據時,實際寫入的是物理主機裏面。若是容器多了,不方便管理網絡

數據卷設置

example:咱們建立一個容器,起名叫nginx-volume-test 掛載到容器中的/data/docker/nginx-volume-test目錄下 docker run -d --name nginx-volume-time -v /data/docker/nginx-volume-test nginx 進入容器查看掛載狀況app

root@jenkins:/data/docker/nginx-volume-test# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                  NAMES
c532b25656e1        nginx               "nginx -g 'daemon ..."   15 minutes ago      Up 15 minutes       80/tcp                 nginx-volume-time01
444c4206bd4f        nginx               "nginx -g 'daemon ..."   16 minutes ago      Up 16 minutes       80/tcp                 nginx-volume-time
a1d17b854c3c        nginx               "nginx -g 'daemon ..."   33 minutes ago      Up 33 minutes       0.0.0.0:1028->80/tcp   nginx_test_01
42cb50b2c0be        nginx               "nginx -g 'daemon ..."   34 minutes ago      Up 34 minutes       0.0.0.0:1026->80/tcp   affectionate_lewin
517785002f20        nginx               "nginx -g 'daemon ..."   34 minutes ago      Up 34 minutes       0.0.0.0:1025->80/tcp   admiring_lamport
dc50ad70f047        nginx               "nginx -g 'daemon ..."   35 minutes ago      Up 35 minutes       0.0.0.0:1024->80/tcp   infallible_shannon
0b256496d251        nginx               "nginx -g 'daemon ..."   43 minutes ago      Up 43 minutes       0.0.0.0:8080->80/tcp   nginx1
root@jenkins:/data/docker/nginx-volume-test# sh /data/docker/docker_in.sh nginx-volume-time
mesg: ttyname failed: No such device
root@444c4206bd4f:/# mount |grep /da
/dev/mapper/centos-root on /data/docker/nginx-volume-test type xfs (rw,relatime,attr2,inode64,noquota)

上面只能看到/data/docker/nginx-volume-test,可是不知道服務器與docker之間的目錄ssh

找出存儲目錄和docker容器之間的鏈接

root@jenkins:/data/docker/nginx-volume-test# docker inspect -f {{.Mounts}} nginx-volume-time
[{volume 7facc10a0e5a697fd6e03cfbb99c2a0e1ab14c4a7629341f21fdeb0be0ce5b68 /var/lib/docker/volumes/7facc10a0e5a697fd6e03cfbb99c2a0e1ab14c4a7629341f21fdeb0be0ce5b68/_data /data/docker/nginx-volume-test local  true }]
root@jenkins:/data/docker/nginx-volume-test# cd /var/lib/docker/volumes/7facc10a0e5a697fd6e03cfbb99c2a0e1ab14c4a7629341f21fdeb0be0ce5b68/_data 
root@jenkins:/var/lib/docker/volumes/7facc10a0e5a697fd6e03cfbb99c2a0e1ab14c4a7629341f21fdeb0be0ce5b68/_data# ls
1  2  test

指定特定的目錄

docker run -d --name nginx_prod -v /data/docker/nginx_prod/:/data nginx
提示:-v /data/docker/nginx_prod/ 存儲文件的目錄
   data   容器中的目錄

可是這種方式dockerfile裏不支持.由於這種方法不可移植 咱們還能夠添加參數,使用只讀的方式掛載 docker run -d --name nginx_prod -v /data/docker/nginx_prod/:/data:ro nginx

容器掛載一個.bash_history 掛載完並刪除

docker run --rm -it -v /root/.bash_history:/.bash_history nginx /bin/bash 退出後就會刪除

容器數據之間同步案例

docker run -d --name nfs -v /root/nfs-data:/data nginx 而後進去容器以後建立,則會有文件同步 docker run --rm -it --volumes-from nfs centos /bin/bash

數據卷容器

docker run -it --rm --name volume-test --volumes-from nfs centos /bin/bash --volumes-from 另外一個容器的名稱 提示:咱們若是停掉nfs同樣能夠訪問,數據卷容器還有一個好處是無論這個容器是否運行都會起做用,只要有容器在使用數據卷容器就沒法刪除

相關文章
相關標籤/搜索