docker會建立一個橋接網卡[docker 0],docker有兩種映射方式,一種是隨機映射,一種是指定映射 生產場景通常不用隨機映射 隨機映射的好處是端口由docker分配,不會衝突java
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
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 run -d -p 443:443 -p 82:80 --name nginxv2 nginxbash
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
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
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同樣能夠訪問,數據卷容器還有一個好處是無論這個容器是否運行都會起做用,只要有容器在使用數據卷容器就沒法刪除