1. 程式人生 > >Centos 7 安裝 docker

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