6.27筆記(docker)
docker 安裝
停止禁用防火墻
systemctl stop firewalld
systemctl mask firewalld
禁用 selinux
配置 yum 源,安裝 docker
yum install docker-engine
啟動測試
systemctl start docker
ifconfig 啟動後可以看見 docker0
docker version
搜索 docker search
下載 docker pull busybox
查看幫助 docker help pull
查看鏡像 docker images
導入鏡像
[root@localhost ~]# docker images
[root@localhost ~]# docker load <busybox.tar
c5183829c43c: Loading layer 1.36 MB/1.36 MB
Loaded image: busybox:latest32.77 kB/1.36 MB
[root@localhost ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
導出鏡像
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 -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偽裝訪問網絡
[root@room9pc19 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
設置偽裝上網
[root@room9pc19 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
6.27筆記(docker)