概念還沒搞的特別明白尘颓,但是得先會用...拿來主義
舉個例子方便理解
創(chuàng)建docker類似于創(chuàng)建虛擬機
鏡像相當于裝系統(tǒng)用的鏡像
容器相當于裝好的系統(tǒng)
dockerfile和docker-compose
系統(tǒng)裝好了,但是要配置成服務(wù)器,還需要安裝語言缔逛,中間件婚度,和寫好的代碼
dockerfile就是將:
尋找鏡像
安裝鏡像(創(chuàng)建容器)
在容器上執(zhí)行命令秸仙,安裝各種工具(配置數(shù)據(jù)庫等)飞蚓。然后把寫好的代碼放到web目錄下踱稍。
上述步驟都在文件中寫好弟跑,你只要讓docker運行這個文件就好了(有時候dockerfile為了方便也會去調(diào)用bash腳本)
docker-compose.yml就是比dockerfile更好用的東西灾前,但功能是更全面,而且更加方便
有些師傅的dockerfile寫的更加貼心孟辑,將所有的運行步驟都寫到bash腳本(先執(zhí)行一些命令哎甲,然后調(diào)用dockerfile)中,我們只要直接運行bash腳本就萬事大吉了
啟動鏡像成容器
docker images 查看鏡像
docker run -p 8080:80 -itd ID(一般前四位就可以了) //-p參數(shù)一定要放在最前面饲嗽,不然可能報錯
訪問本地的0.0.0.0:8080可以訪問到服務(wù)
也可以訪問docker地址的80端口
不同:
8080可以讓同網(wǎng)段下的ip訪問炭玫,相當于自己開了個服務(wù)一樣
容器管理
doker build ./ //使用dockerfile創(chuàng)建鏡像
docker-compose -d //有docker-compose.yml文件時使用
上面兩個搞得不是很明白,但是只有dockerfile用第一個就完事了
docker ps //查看開著的docker容器
docker inspect id 查看容器信息
docker exec -it ID(ps 看到的) /bin/bash //進入docker的shell
進入shell后apt可能找不到網(wǎng)址貌虾,所以run的時候加入--dns參數(shù)吞加,添加dns服務(wù)器
docker ps -a (關(guān)著的容器和開著的都能看到)
docker start 啟動容器
docker stop 停止容器
docker kill 停止不了就kill
docker rmi 刪除鏡像
docker rm 刪除容器,終止運行的容器文件,依然會占據(jù)硬盤空間
docker logs 容器id 當容器報錯的時候可以康康是什么原因
docker cp ./source.txt id:/dest/xxx/target.txt 將source.txt賦值到容器中的指定地址(容器內(nèi)不好改文件的時候可以這樣將文件在外面改好然后復(fù)制進去)
將正在啟動的容器導出
docker export -o test.tar container_name
docker import test.tar aaaa:last
docker import將container導入后會成為一個image尽狠,而不是恢復(fù)為一個container
docker run -itd image_id /bin/bash /start.sh
通過Import導入的鏡像一定要帶command,不然會報錯
看command可以在docker中ps -ef,1就是執(zhí)行的command,或者在外面docker ps看command參數(shù)
刪除所有容器docker rm $(docker ps -aq)同理刪除鏡像為docker rmi $(docker images -aq)
docker network ls查看docker的虛擬網(wǎng)卡
docker network 可以查看docker network的幫助
docker中的referer
踩到的坑點
查看容器中系統(tǒng)的版本(進入容器后):
cat /etc/issue
ps:
cat /proc/version 或 uname -a 衔憨,這樣查到的是宿主機的系統(tǒng)。
執(zhí)行service mysql status的時候袄膏,報什么dbus錯誤的
docker run -p 1:2 --privileged=true -itd 1234 /usr/sbin/init
加上 --privileged=true和/usr/sbin/init
docker常用命令詳細
固定docker ip
docker-compose up -d
$ docker images
REPOSITORY TAG IMAGE ID
duckll/lnmp latest 6615486e0480
lnmp latest 6615486e0480
thinkphp latest 7293a5aa7fb3
vulhub/thinkphp 5.0.20 7293a5aa7fb3
#docker-compose.yml
version: '2'
services:
lnmp:
container_name: lnmp
image: lnmp:latest
restart: always
ports:
- "8888:80"
networks:
vpcbr:
ipv4_address: 10.5.0.5
thinkphp:
container_name: thinkphp
image: thinkphp:latest
ports:
- "8899:80"
networks:
vpcbr:
ipv4_address: 10.5.0.6
networks:
vpcbr:
driver: bridge
ipam:
config:
- subnet: 10.5.0.0/16
gateway: 10.5.0.1
學一手別人是怎么配docker的
安洵杯題目
這個很多ssrf的題目践图,當初是復(fù)現(xiàn)題目用的,這次拿過來學一手docker
也可以參考一下郁離歌師傅的入群題
yulige
這個dockerfile中哩陕,修改apt源和pip源的操作不是太精準平项,更新的有點慢(狗頭保命),可以利用解決問題的過程來學習docker(但這個docoker-compose.yml寫的是真的好)