Docker筆記二:Docker拷貝,提交,進入容器和阿里雲加速


前言

筆記一介紹了Docker的安裝,以及鏡像,容器的啟動,刪除,下載等,本章節記錄一些操作

筆記二之后的Docker內容都參考嗶哩嗶哩的up主:狂神說Java的Docker視頻,在此貼出他的主頁,推薦去看看,講的是真的好

狂神說Java

常用

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

區別

  1. exec 進入容器后開啟了一個新的終端,可以操作
  2. attach進入容器正在執行的終端

如果我這個容器在做些什么事,例如不停的在打印日志,exec進去之后由於是新終端不受影響,attach就慘了,一直看到在打印日志,想干點啥都不行

所以,推薦使用exec的方式

退出容器回到主機有2種方式

  1. exit : 退出容器,回到主機,此時容器也停止了
  2. 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或者阿里雲的,后面講


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM