Centos 7 安裝 docker
**環境 Centos 7 ** docker 安裝
1停止禁用防火牆 systemctl stop firewalld systemctl mask firewalld
禁用 selinux
setenforce 0
配置 yum 源,安裝 docker
yum install docker-engine
啟動測試
systemctl start docker
ifconfig 啟動後可以看見 docker0
docker version
搜尋 docker search 下載 docker pull busybox 檢視幫助 docker help pull 檢視映象 docker images
匯入映象
[[email protected] ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE [[email protected] ~]# docker load <busybox.tar c5183829c43c: Loading layer 1.36 MB/1.36 MB Loaded image: busybox:latest32.77 kB/1.36 MB [[email protected] ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE busybox latest f6e427c148a7 3 weeks ago 1.146 MB
匯出映象
docker save busybox >busybox.tar
匯入所有檔案
unzip docker_img.zip
cd docker_images
for i in *;do docker load <${i};done
利用映象啟動容器
docker run -it busybox /bin/sh
docker run -it centos /bin/bash
檢視容器列表
docker ps
檢視詳細資訊
docker inspect 21d2aeb977cc docker inspect -f '{.NetworkSettings.IPAddress}' 21d2aeb977cc
docker 問題列表,及解答 問題:docker run -it busybox /bin/bash 報錯問題 原因: 最後的命令是容器內部命令,容器內,存在才可以執行 可以不指定,不指定啟動預設命令
問題:docker run -it centos 退出後,配置全部丟失 原因: run 啟動的是新的容器,老的容器退出後就停止了 啟動管理一個老的容器可以使用 docker start|stop|restart
問題:老容器啟動以後,怎麼在進入? docker exec -it 容器id /bin/bash docker attach 容器id
exec 與 attach 的區別 exec 單獨啟動命令執行,與容器啟動的終端無關 attach 不啟動新的命令,直接連線 console 終端 exec 退出不會影響容器的執行 attach 退出後,容器結束
問題:如果我使用attach 連線容器後,怎麼才能不結束容器? 解決方法:把容器放後臺,使用快捷鍵 ctrl + pq
問題:attach 為什麼退出後,容器會結束? 因為 attach 連線進容器的 pid 1 的程序,當 attach 結束時候,pid 為 1 的程序被結束 所有整個容器被銷燬
問題:docker run -it nginx 沒響應? 因為 nginx 啟動的預設 cmd 時 nginx daemon,該程序不是一個互動式的程序
docker run 使用 -i 互動式的 -t 分配終端 -d 把容器放在後臺執行
docker run -it centos cmd 啟動一個互動式的容器,在前臺執行
docker run -d centos cmd 啟動一個非互動式的容器,在後臺執行
docker run -itd centos cmd 啟動一個互動式的容器,在後臺執行
測試 docker run -it centos /bin/bash 成功 docker run -d centos /bin/bash 失敗 docker run -itd centos /bin/bash 成功
docker run -it nginx nginx 失敗 docker run -d nginx nginx 失敗 docker run -itd nginx nginx 失敗
docker run -it nginx nginx -g “daemon off;” 成功 docker run -d nginx nginx -g “daemon off;” 成功 docker run -itd nginx nginx -g “daemon off;” 成功
互動式的程序啟動要使用 it , 非互動式的使用 d ,互動式的放後臺使用 itd 啟動 bash 的正確姿勢 docker run -itd centos 啟動 nginx 的正確姿勢 docker run -d -p 80:80 nginx
小練習: 啟動一個 nginx 的容器,修改預設首頁為 “hello world”
設定IP偽裝訪問網路
[[email protected] docker]# ifconfig
enp2s0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 172.40.50.119 netmask 255.255.255.0 broadcast 172.40.50.255
ether 94:de:80:81:e3:53 txqueuelen 1000 (Ethernet)
RX packets 5947707 bytes 593709850 (566.2 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 12611909 bytes 18788418441 (17.4 GiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
物理機上查詢上網用的網絡卡 開啟路由轉發
sysctl -w net.ipv4.ip_forward=1
設定偽裝上網
[[email protected] docker]# iptables -t nat -I POSTROUTING -s 192.168.4.0/24 -o enp2s0 -j MASQUERADE
在虛擬機器裡面設定預設路由
ip route replace default via 192.168.4.254
模擬 docker 埠繫結轉發
iptables -t nat -I PREROUTING -d 192.168.4.10 -p tcp --dport 8080 -i eth0 -j DNAT --to 172.17.0.3:80
docker run -d -p 8080:80 nginx