前言
筆記一介紹了Docker的安裝,以及鏡像,容器的啟動,刪除,下載等,本章節記錄一些操作
筆記二之后的Docker內容都參考嗶哩嗶哩的up主:狂神說Java的Docker視頻,在此貼出他的主頁,推薦去看看,講的是真的好
常用
Docker阿里雲加速
默認的國外鏡像死慢,用了阿里雲速度飛起,強烈建議使用阿里雲
直接執行
vim /etc/docker/daemon.json
第一次應該是沒有的,是空的,復制下面的粘貼進去
{
"registry-mirrors": ["https://f1z25q5p.mirror.aliyuncs.com"]
}
然后按下ESC,輸入冒號,wq保存退出,這是vim的基本操作
最后重啟一下Docker即可
sudo systemctl daemon-reload
sudo systemctl restart docker
刪除全部的鏡像或容器
docker images -q是查看所有的鏡像Id,使用$()作為變量傳進去,即可刪除所有的鏡像
docker rmi -f $(docker images -aq)
同樣刪除所有的容器也是
docker rmi -f $(docker ps -aq)
進入容器內的2種方式及區別
第一種方式是exec
docker exec -it 容器id bash
第二種方式是attach
docker attach 容器id
區別
- exec 進入容器后開啟了一個新的終端,可以操作
- attach進入容器正在執行的終端
如果我這個容器在做些什么事,例如不停的在打印日志,exec進去之后由於是新終端不受影響,attach就慘了,一直看到在打印日志,想干點啥都不行
所以,推薦使用exec的方式
退出容器回到主機有2種方式
- exit : 退出容器,回到主機,此時容器也停止了
- ctrl + p + q : 退出容器,回到主機,此時容器還在運行
Docker日志
后面跟着容器Id即可,如果不指定tail數量的話,會顯示所有的日志,太多了
docker logs -tf --tail 10 f82267cbb532
查看容器中的進程信息
docker top mysql
查看容器信息
docker inspect mysql
容器和主機之間拷貝數據
經常有這種情況,開發的時候,一張圖片啥的忘了發布到容器里了,你說我為了一張圖片就重新打包發布容器,還不如之間拷貝近容器呢
關於拷貝有兩種情況
容器內拷貝到主機
容器內的test.java文件拷貝到主機的home目錄下
docker cp 容器id:/home/test.java /home
主機拷貝到容器內
各種啟動
測試啟動是否成功,可以用瀏覽器訪問,也可以使用
curl localhost:9200
Docker啟動Mysql
docker run --restart=always --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=test123 -d mysql mysql
如果遇到了啟動mysql就退出的情況,使用 --restart即可alway是始終重啟
但是這樣我的mysql狀態一直是restart,而不是run,我主機上連不上Mysql
剛開始我以為是防火牆的問題
##Centos7 防火牆打開端口號
firewall-cmd --zone=public --add-port=3306/tcp --permanent
#下面3行是參數說明
#–zone #作用域
#–add-port=80/tcp #添加端口,格式為:端口/通訊協議
#–permanent #永久生效,沒有此參數重啟后失效
#重啟防火牆后看看是否生效
firewall-cmd --reload #重啟firewall
firewall-cmd --list-ports #查看已經開放的端口
#如果想永久停止防火牆,執行下面操作
systemctl stop firewalld.service #停止firewall
systemctl disable firewalld.service #禁止firewall開機啟動
#查看防火牆狀態
firewall-cmd --state
然后我開啟了3306,但是還是連不上,這個時候查出來的說可能是root默認本地連接,需要開啟遠程連接
但是進不去mysql容器,說不是在run,一直在restart,所以進不去容器
我只好刪了這個mysql容器,然后重新啟動
docker run --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=test123 mysql
我刪除了一直restart,也刪除了-d后台運行,這才可以了
Docker啟動nginx
docker pull nginx
docker run --name nginx -p 80:80 -d nginx
Docker啟動Tomcat
docker pull tomcat
docker run --name tomcat -p 8080:8080 -d tomcat
然后直接訪問8080端口發現,404未找到,這個是因為我們已經配置了阿里雲的鏡像,阿里雲默認下載的Tomcat是最精簡的,webapps目錄下啥都沒有
docker exec -it tomcat bash
進入之后,ll都用不了,使用ls -a發現webapps下面是空的
webapps下面是空的,webapps.dist下面卻是有內容的,直接把dist下的東西拷貝到webapps下即可
cp -r webapps.dist/* webapps
然后再訪問8080,成功了
Docker啟動ElasticSearch
ElasticSearch默認是1個G的內存,所以啟動的時候最好限制一下內存大小
docker pull elasticsearch
docker run --name elasticsearch -p 9200:9200 -e "discovery.type=single-node" -e ES_JAVA_OPTS="-Xms64m -Xmx512m" -d elasticsearch
使用-e來限制最小,最大內存
Docker可視化
介紹幾個Docker的可視化工具,其實敲命令挺好的
portainer
直接docker pull 安裝運行,然后瀏覽器訪問,我這不寫了,反正我喜歡敲命令,可以網上找文章參考
Docker Commit
就是提交鏡像,還是拿Tomcat為例吧,我阿里雲下載的Tomcat,webapps里面沒有東西
我從dist復制到webapps文件夾下面了,然后我把這個改過的Tomcat重新commit了一次,成為了一個新的鏡像,這個時候我docker images可以看到兩個Tomcat,我commit的命名是tomcat1,版本1.0
#把我改過的tomcat commit一下
docker commit -a "vae" -m "tomcat is run ok" 50a7091b7fcf tomcat1:1.0
#我把原來的tomcat刪了,啟動我commit的這個新的tomcat1
docker run --name tomcat -p 8080:8080 -d tomcat1:1.0
其實這個commit就是提交的意思,提交到了鏡像,我也可以push到DockerHub或者阿里雲的,后面講