本文使用的Docker是社區版,版本是19.03.2,這個版本是本文寫時的最新版。
首先總結下容器和鏡像的概念:
容器是用鏡像創建的,一個鏡像可以創建多個容器。沒有鏡像就沒有容器,但是沒有容器還是可以有鏡像。
一般來說,一個容器就是一個應用,把應用在容器中運行稱之為應用容器化。
刪除鏡像的時候,如果由這個鏡像創建的容器還存在則會刪除失敗。
容器和鏡像的關系就是:容器是鏡像的實例化的可運行實體。
以下是我的練習內容:
1. 拉取鏡像
docker pull centos:latest
或者按照版本拉取:docker pull centos:7.6
2. 查看所有已經拉取的鏡像
docker images
3. 通過鏡像啟動容器並且進入其中
docker container run -it 0f3e07c0138f /bin/bash
0f3e07c0138f是你鏡像的ID,通過"docker images"命令查看獲得
4. 退出容器返回到主機
使用Ctrl-PQ組合鍵(這只是退出命令界面而已,不會殺死容器進程。)
5. 查詢下當前運行中的容器情況
docker container ls
6. 連接到運行中的容器
docker container exec -it dreamy_cartwright bash
dreamy_cartwright是容器的名字,通過"docker container ls"命令查看獲得
7. 銷毀容器
停止容器運行:docker container stop dreamy_cartwright
刪除容器:docker container rm dreamy_cartwright
查看所有狀態的容器(包括停止狀態的容器):docker container ls -a
沒有查到說明已經被刪除了
7.1 刪除鏡像
刪除剛剛拉取的鏡像:docker image rm 0f3e07c0138f
0f3e07c0138f是你鏡像的ID,通過"docker images"命令查看獲得
注意:
只有沒有被容器使用的鏡像才能被刪除
也可直接刪除所有沒被容器使用的鏡像:docker image prune -a
8. 上傳並運行一個nodejs工程
上傳文件首先需要安裝:yum install lrzsz
如果出現是否需要安裝請鍵盤輸入Y然后回車
創建目錄:mkdir -p /home/demo/nodejs-docker
下載安裝SecureCRT,在SecureCRT中連接后輸入:cd /home/demo/nodejs-docker
上傳文件輸入命令:rz
然后雙擊這個文件夾再點擊確定,上傳成功后可以使用命令查看:ls -a
安裝zip解壓縮軟件:yum install unzip zip
執行解壓命令:unzip psweb-master.zip
刪除掉之前的zip文件:rm -f psweb-master.zip
備注:
nodejs工程文件及SecureCRT下載地址:https://pan.baidu.com/s/1NprxpW5LIHySWTijMByx6g 提取碼:ju8e
雙擊SecureCRTPortable.exe可運行SecureCRT。
這個部分其實只有rz這個命令需要用到SecureCRT,其他部分我都用騰訊雲自帶的WebShell了。
9. 在Docker的容器中運行nodejs-demo
切換到Dockerfile所在的目錄:cd /home/demo/nodejs-docker/psweb-master
打包成Docker鏡像:docker image build -t test:latest .
然后使用docker image ls命令查看到有test代表就是成功了
運行鏡像:docker container run -d --name web1 --publish 8080:8080 test:latest
命令行回到根目錄:cd ~
10. 運行一個容器,后台運行,不進入其中
docker container run -d --name webserver -p 80:8080 \
然后再輸入:nigelpoulton/pluralsight-docker-ci
-d代表后台運行
11. 刪除所有容器和鏡像
容器:docker container rm$(docker container ls -aq) -f
鏡像:docker image rm $(docker image ls -q) -f
12. 查看容器的配置信息
docker container inspect 容器ID
13. 關於Dockerfile
這個文件包含了對這個應用的描述,並且指導Docker完成構建。
直接看Dockerfile文件里面的英文注釋,那個里面寫的比較清楚了。
總結下這些關鍵字代表的含義
FROM:應用運行在什么鏡像上
LABEL:這個容器的負責人
RUN:在鏡像中執行的命令
COPY:將代碼復制到鏡像的某個位置中
EXPOSE:記錄應用使用的端口號
ENTRYPOINT:容器啟動后默認運行的程序
14. docker服務操作
顯示服務狀態:systemctl status docker.service
列出服務層級和依賴關系:systemctl list-dependencies docker.service
啟動服務:systemctl start docker.service
關閉服務:systemctl stop docker.service
重啟服務:systemctl restart docker.service
設置服務自啟動:systemctl enable docker.service
禁止服務自啟動:systemctl disable docker.service
查看服務是否自啟動:systemctl is-enabled docker.service
列出系統所有服務的啟動情況:systemctl list-units --type=service
列出所有自啟動服務:systemctl list-unit-files|grep enabled
一般安裝好了默認就是自啟動的,然后這個“.service”字符是可以省略的。
15. docker自啟動
因為重啟系統后docker默認是不會自己啟動的,所以需要自己設置。
手動重啟docker:systemctl restart docker.service
手動重啟容器:docker start 95d869369f92 f6d275d686ed
docker設置為自動啟動:systemctl enable docker.service
docker內的容器設置為自啟動:docker update --restart=always 95d869369f92 f6d275d686ed
其中95d869369f92 f6d275d686ed是代表兩個容器的id,如果只有一個就只需要寫一個,多個就繼續寫多個。
設置完成之后可以測試一下:
重啟:reboot
這個時候如果用的WebShell會斷開連接,等待一會然后按任意鍵如果重啟完成就可以連上了。
查看容器:docker container ls
這個時候命令運行成功並且能看到你的鏡像代表設置自啟動成功了。
如果這個命令執行失敗代表docker沒有設置自動,如果執行成功了但是容器是空的代表容器沒有設置自啟動(命令后面加-a可以看到所有包括停止運行的容器)。
