Docker學習
-
執行 hello-world 映象
docker run hello-world
-
檢視映象
docker images
-
docker預設路徑
/var/lib/docker/
常用命令
幫助命令
docker version // 顯示docker版本資訊
docker info // 顯示docker的系統資訊,包括映象和容器的數量
docker (具體某個命令) --help // 幫助命令
// 幫助文件地址
url = "https://docs.docker.com/reference/"
映象命令
docker images // 檢視所有本地主機上的映象
REPOSITORY TAG IMAGE ID CREATED SIZE
hello-world latest feb5d9fea6a5 14 months ago 13.3kB
REPOSITORY // 映象的倉庫源
TAG // 映象的標籤
IMAGE ID // 映象的id
CREATED //映象的建立時間
SIZE // 映象的大小
//////////////////////////////////////////////////////////////
docker search xxx // 搜尋
////////////////////////////////////////////////////////
docker pull xxx //下載映象-:指定版本
/////////////////////////////////////////////
docker rmi xxx // 刪除映象
docker rmi -f 映象id // 刪除指定的映象
docker rmi -f 映象id 映象id 映象id // 刪除多個映象
docker rmi -f $(docker images -aq) // 刪除所有映象
容器命令
宣告:有映象才能建立容器,Linux,下載一個centos映象來測試學習
// 宣告,有映象才能建立容器,Linux,下載一個centos映象來測試學習
docker pull centos
// 新建容器並啟動
docker run [可選引數] image
// 引數說明
--name="Name" 容器名字,用來區分容器
-d 後臺方式執行
-it 使用互動方式執行,進入容器檢視內容
-p 指定容器的埠 -p 8080:8080
-p ip:主機埠:容器埠
-p 主機埠:容器埠(常用)
-p 容器埠
容器埠
-P 隨即指定埠
# 測試,啟動並進入容器
[root@VM-16-6-centos ~]# docker run -it centos /bin/bash
[root@7b5b69815ee2 /]# ls
bin dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var
# 從容器中退回主機
exit
列出所有執行的容器
# docker ps 命令
# 列出當前正在執行的容器
-a # 列出當前正在執行的容器+帶出歷史執行過的容器
-n=? # 顯示最近建立的容器
-q # 只顯示容器的編號
退出容器
exit # 直接容器停止並退出
Ctrl + P + Q # 容器不停止退出
刪除容器
docker rm 容器id #刪除指定容器,不能刪除正在執行的
docker rm -f $(docker ps -aq) # 刪除所有容器
docker ps -a -q|xargs docker rm # 刪除所有容器
啟動和停止容器的操作
docker start 容器id # 啟動容器
docker restart 容器id # 重啟容器
docker stop 容器id # 停止當前正在執行的容器
docker kill容器id # 強制停止當前容器
常用其它命令
後臺啟動容器
# 命令 docker run -d 映象名!
# 問題docker ps,發現centos停止了
# 常見的坑:docker容器使用後臺執行,就必須要有要一個前臺程序,docker發現沒有應用,就會自動停止
# nginx,容器啟動後,發現自己沒有提供服務,就會立刻停止,就是沒有程式了
檢視日誌
docker logs
-tf # 顯示日誌
--tail number # 要顯示日誌條數
檢視容器中的程序資訊
docker top 容器id
產看映象的原資料
docker inspect 容器id
進入當前正在執行的容器
# 我們通常容器都是使用後臺方式執行的,需要進入容器,修改一些配置
# 命令
docker exec -it 容器id bashShell
# 方式二
docker attach 容器id
# docker exec # 進入容器後開啟一個新的終端,可以在裡面操作(常用)
# docker attach # 進入正在執行的終端,不會啟動新的程序
從容器內複製檔案到主機上
docker cp 容器id:容器內路徑 目的的主機路徑
# 複製是一個手動過程,未來我們使用 -v 卷的技術,可以實現自動同步
docker 作業練習
安裝nginx
-
搜尋映象 search 建議大家去docker搜尋,可以看到幫助文件
-
下載映象 pull
-
執行測試
[root@VM-16-6-centos ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE nginx latest 1403e55ab369 4 days ago 142MB centos latest 5d0da3dc9764 15 months ago 231MB # -d 後臺執行 # --name 給容器命名 # -p 伺服器埠:容器內部埠 [root@VM-16-6-centos ~]# docker run -d --name nginx01 -p 3344:80 nginx 6a05a85bcaa58fb236b4aa93f3e9ed3e9ccd660361e0af50ac8f2dcadea5b185 [root@VM-16-6-centos ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 6a05a85bcaa5 nginx "/docker-entrypoint.…" 11 seconds ago Up 11 seconds 0.0.0.0:3344->80/tcp nginx01 [root@VM-16-6-centos ~]# curl localhost:3344 # 進入容器 [root@VM-16-6-centos ~]# docker exec -it nginx01 /bin/bash root@6a05a85bcaa5:/# whereis nginx nginx: /usr/sbin/nginx /usr/lib/nginx /etc/nginx /usr/share/nginx root@6a05a85bcaa5:/# cd /etc/nginx/ root@6a05a85bcaa5:/etc/nginx# ls conf.d fastcgi_params mime.types modules nginx.conf scgi_params uwsgi_params
docker裝tomcat
# 官方的使用
docker run -it --rm tomcat:9.0
# 我們之前的啟動都是後臺,停止了容器之後,容器還是可以查到 docker run -it --rm,一般用來測試,用完即刪
# 下載再啟動
docker pull tomcat:9.0
# 啟動執行
docker run -d --name tomcat01 -p 3355:8080 tomcat
# 測試訪問沒問題
# 進入容器
# 發現問題 1、linux命令少了。 2、沒有webapps。 阿里雲映象原因,預設是最小的映象,所有不必要的都剔除掉。保證最小可執行環境。
思考問題:我們以後要部署專案,如果每次都要進入容器是不是十分麻煩?我要是可以在容器外部提供一個對映路徑,webapps,我們在外部放置專案,就自動同步到內部就好了!
部署es + kibana
# es 暴露的埠很多!
# es十分耗記憶體
# es的資料一般需要放置到安全目錄!掛載
# --net somenetwork 網路配置
# 啟動elasticsearch
docker run -d --name elasticsearch --net somenetwork -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" elasticsearch:tag
# 啟動了linux就卡住了 docker stats 檢視cpu的狀態